mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-31 00:15:54 -04:00
1392 lines
59 KiB
Plaintext
1392 lines
59 KiB
Plaintext
include library.utils;
|
|
include library.sui;
|
|
include library.temp_schematic;
|
|
include library.space_crafting;
|
|
include library.create;
|
|
include library.xp;
|
|
|
|
const string_id LOOT_LIST = new string_id("sui", "analyze_loot");
|
|
|
|
const string LOOT = "datatables/space_loot/reverse_engineering/reverse_loot.iff";
|
|
const string LOOT_LOOKUP = "datatables/space_loot/reverse_engineering/reverse_loot_lookup.iff";
|
|
|
|
const string SCRIPTVAR_ANALYZE_SUI = "analyzer.sui";
|
|
const string SCRIPTVAR_ANALYZE_IDS = "analyzer.ids";
|
|
|
|
const string STF = "component_analyzer";
|
|
|
|
const string ANALYZE_TITLE = "@" + STF + ":analyze_title";
|
|
const string ANALYZE_PROMPT = "@" + STF + ":analyze_prompt";
|
|
const string NO_ITEMS_PROMPT = "@" + STF + ":no_items";
|
|
|
|
const string BTN_ANALYZE = "@" + STF + ":analyze";
|
|
|
|
trigger OnAttach()
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnInitialize()
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnAboutToReceiveItem(obj_id srcContainer, obj_id transferer, obj_id item)
|
|
{
|
|
// for CTS, allow all contained item(s) to be unpacked
|
|
if (utils.hasLocalVar(self, "ctsBeingUnpacked"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//is it a valid ship component or firespray schematic?
|
|
if (!hasObjVar(item, "firespray_schematic.part"))
|
|
{
|
|
if (space_crafting.isValidShipComponent(item) == false)
|
|
{
|
|
string_id errormessage2 = new string_id(space_crafting.STF_COMPONENT_TOOL, "wrong_component_type");
|
|
sendSystemMessage(transferer, errormessage2);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
}
|
|
|
|
// does it have a flag saying it can't be re'd?
|
|
if (hasObjVar(item, "ship_comp.flags"))
|
|
{
|
|
int flags = getIntObjVar(item, "ship_comp.flags");
|
|
boolean isBitSet = (flags & ship_component_flags.SCF_reverse_engineered) != 0;
|
|
|
|
if (isBitSet == true)
|
|
{
|
|
string_id errormessage = new string_id(space_crafting.STF_COMPONENT_TOOL, "already_engineered");
|
|
sendSystemMessage(transferer, errormessage);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
}
|
|
|
|
// check existing contents of tool, if any, and verify you're loading like types with like types - script re-arranged to fix a Firespray schematic exploit - 7/21/05 RcT
|
|
obj_id[] toolContents = getContents(self);
|
|
|
|
if (toolContents != null && toolContents.length > 0)
|
|
{
|
|
if (isIdValid(toolContents[0]))
|
|
{
|
|
if (hasObjVar(toolContents[0], "firespray_schematic.part"))
|
|
{
|
|
if (hasObjVar(item, "firespray_schematic.part"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
string_id errormessage = new string_id(space_crafting.STF_COMPONENT_TOOL, "invalid");
|
|
sendSystemMessage(transferer, errormessage);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
}
|
|
|
|
|
|
string componentType = space_crafting.getShipComponentStringType(toolContents[0]);
|
|
int level = space_crafting.getReverseEngineeringLevel(toolContents[0]);
|
|
|
|
if (hasObjVar(item, "firespray_schematic.part") || space_crafting.getShipComponentStringType(item) != componentType
|
|
|| space_crafting.getReverseEngineeringLevel(item) != level)
|
|
{
|
|
string_id errormessage = new string_id(space_crafting.STF_COMPONENT_TOOL, "invalid");
|
|
sendSystemMessage(transferer, errormessage);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
}
|
|
|
|
// is it a valid ship component
|
|
|
|
|
|
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
|
|
trigger OnGetAttributes( obj_id player, string[] names, string[] attribs )
|
|
{
|
|
|
|
int idx = utils.getValidAttributeIndex(names);
|
|
if (idx == -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(self, "reverse_engineering.charges"))
|
|
{
|
|
|
|
int value = getIntObjVar(self, "reverse_engineering.charges");
|
|
names[idx] = "charges";
|
|
attribs[idx] = Integer.toString(value);
|
|
idx++;
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
|
|
trigger OnObjectMenuRequest(obj_id player, menu_info mi)
|
|
{
|
|
if ( !utils.isNestedWithin(self, player) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int lootList = mi.addRootMenu(menu_info_types.SERVER_MENU1, LOOT_LIST);
|
|
if ( lootList > -1 && (( getContainedBy(self) != getOwner(self) ) || isGod(player)) )
|
|
{
|
|
string template = utils.getTemplateFilenameNoPath(self);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnObjectMenuSelect(obj_id player, int item)
|
|
{
|
|
if ( !utils.isNestedWithin(self, player) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
string template = utils.getTemplateFilenameNoPath(self);
|
|
boolean giveFiresprayPiece = false;
|
|
obj_id newComponent = null;
|
|
if ( item == menu_info_types.SERVER_MENU1 )
|
|
{
|
|
int charges = getIntObjVar(self, "reverse_engineering.charges");
|
|
|
|
obj_id[] toolContents = getContents(self);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
string temp = "";
|
|
if (toolContents == null || toolContents.length <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else {
|
|
if (toolContents[0] != null)
|
|
{
|
|
int level = space_crafting.getReverseEngineeringLevel(toolContents[0]);
|
|
|
|
if (hasObjVar(toolContents[0], "firespray_schematic.part"))
|
|
level = 8;
|
|
// warn player if too few components used
|
|
|
|
if (level > toolContents.length)
|
|
{
|
|
string_id errortoomany = new string_id(space_crafting.STF_COMPONENT_TOOL, "too_few");
|
|
sendSystemMessage(player, errortoomany);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
|
|
// warn player if too many components used
|
|
|
|
if (level < toolContents.length)
|
|
{
|
|
string_id errortoomany = new string_id(space_crafting.STF_COMPONENT_TOOL, "too_many");
|
|
sendSystemMessage(player, errortoomany);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
|
|
string componentType = space_crafting.getShipComponentStringType(toolContents[0]);
|
|
|
|
giveFiresprayPiece = calculateFiresprayGrant(toolContents, player);
|
|
|
|
if (hasObjVar(toolContents[0], "firespray_schematic.part"))
|
|
componentType = "firespray_schematic";
|
|
|
|
if (componentType == "armor")
|
|
{
|
|
newComponent = reverseEngineerArmor(toolContents, player, level);
|
|
if (newComponent != null)
|
|
{
|
|
charges--;
|
|
setObjVar(self, "reverse_engineering.charges" ,charges);
|
|
|
|
int flags = getIntObjVar(newComponent, "ship_comp.flags");
|
|
flags |= ship_component_flags.SCF_reverse_engineered;
|
|
setObjVar(newComponent, "ship_comp.flags", flags);
|
|
}
|
|
}
|
|
else if (componentType == "booster")
|
|
{
|
|
newComponent = reverseEngineerBooster(toolContents, player, level);
|
|
if (newComponent != null)
|
|
{
|
|
charges--;
|
|
setObjVar(self, "reverse_engineering.charges" ,charges);
|
|
|
|
int flags = getIntObjVar(newComponent, "ship_comp.flags");
|
|
flags |= ship_component_flags.SCF_reverse_engineered;
|
|
setObjVar(newComponent, "ship_comp.flags", flags);
|
|
}
|
|
}
|
|
else if (componentType == "capacitor")
|
|
{
|
|
newComponent = reverseEngineerCapacitor(toolContents, player, level);
|
|
if (newComponent != null)
|
|
{
|
|
charges--;
|
|
setObjVar(self, "reverse_engineering.charges" ,charges);
|
|
|
|
int flags = getIntObjVar(newComponent, "ship_comp.flags");
|
|
flags |= ship_component_flags.SCF_reverse_engineered;
|
|
setObjVar(newComponent, "ship_comp.flags", flags);
|
|
}
|
|
}
|
|
else if (componentType == "droid_interface")
|
|
{
|
|
newComponent = reverseEngineerDroidInterface(toolContents, player, level);
|
|
if (newComponent != null)
|
|
{
|
|
charges--;
|
|
setObjVar(self, "reverse_engineering.charges" ,charges);
|
|
|
|
int flags = getIntObjVar(newComponent, "ship_comp.flags");
|
|
flags |= ship_component_flags.SCF_reverse_engineered;
|
|
setObjVar(newComponent, "ship_comp.flags", flags);
|
|
}
|
|
}
|
|
else if (componentType == "engine")
|
|
{
|
|
newComponent = reverseEngineerEngine(toolContents, player, level);
|
|
if (newComponent != null)
|
|
{
|
|
charges--;
|
|
setObjVar(self, "reverse_engineering.charges" ,charges);
|
|
|
|
int flags = getIntObjVar(newComponent, "ship_comp.flags");
|
|
flags |= ship_component_flags.SCF_reverse_engineered;
|
|
setObjVar(newComponent, "ship_comp.flags", flags);
|
|
}
|
|
}
|
|
else if (componentType == "reactor")
|
|
{
|
|
newComponent = reverseEngineerReactor(toolContents, player, level);
|
|
if (newComponent != null)
|
|
{
|
|
charges--;
|
|
setObjVar(self, "reverse_engineering.charges" ,charges);
|
|
|
|
int flags = getIntObjVar(newComponent, "ship_comp.flags");
|
|
flags |= ship_component_flags.SCF_reverse_engineered;
|
|
setObjVar(newComponent, "ship_comp.flags", flags);
|
|
}
|
|
}
|
|
else if (componentType == "shield")
|
|
{
|
|
newComponent = reverseEngineerShield(toolContents, player, level);
|
|
if (newComponent != null)
|
|
{
|
|
charges--;
|
|
setObjVar(self, "reverse_engineering.charges" ,charges);
|
|
|
|
int flags = getIntObjVar(newComponent, "ship_comp.flags");
|
|
flags |= ship_component_flags.SCF_reverse_engineered;
|
|
setObjVar(newComponent, "ship_comp.flags", flags);
|
|
}
|
|
}
|
|
else if (componentType == "weapon")
|
|
{
|
|
newComponent = reverseEngineerWeapon(toolContents, player, level);
|
|
if (newComponent != null)
|
|
{
|
|
charges--;
|
|
setObjVar(self, "reverse_engineering.charges" ,charges);
|
|
|
|
int flags = getIntObjVar(newComponent, "ship_comp.flags");
|
|
flags |= ship_component_flags.SCF_reverse_engineered;
|
|
setObjVar(newComponent, "ship_comp.flags", flags);
|
|
}
|
|
|
|
}
|
|
else if (componentType == "firespray_schematic")
|
|
{
|
|
if (toolContents.length != 8)
|
|
{
|
|
string_id notEnough = new string_id(space_crafting.STF_COMPONENT_TOOL, "not_enough");
|
|
sendSystemMessage(player, notEnough);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
boolean[] allPieces = new boolean[8];
|
|
allPieces[0] = false;
|
|
allPieces[1] = false;
|
|
allPieces[2] = false;
|
|
allPieces[3] = false;
|
|
allPieces[4] = false;
|
|
allPieces[5] = false;
|
|
allPieces[6] = false;
|
|
allPieces[7] = false;
|
|
|
|
|
|
for (int i = 0; i < toolContents.length; i++)
|
|
{
|
|
int piece = utils.getIntObjVar(toolContents[i], "firespray_schematic.part");
|
|
allPieces[piece-1] = true;
|
|
}
|
|
|
|
if (allPieces[0] == true && allPieces[1] == true && allPieces[2] == true && allPieces[3] == true &&
|
|
allPieces[4] == true && allPieces[5] == true && allPieces[6] == true && allPieces[7] == true)
|
|
{
|
|
obj_id schematic= create.object("object/tangible/space/special_loot/firespray_schematic.iff", playerInv, false, false);
|
|
string_id gotSchematic = new string_id(space_crafting.STF_COMPONENT_TOOL, "gotschematic");
|
|
sendSystemMessage(player, gotSchematic);
|
|
for (int i = 0; i < toolContents.length; i++)
|
|
{
|
|
destroyObject(toolContents[i]);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
else
|
|
{
|
|
string_id notUniquePieces = new string_id(space_crafting.STF_COMPONENT_TOOL, "notunique");
|
|
sendSystemMessage(player, notUniquePieces);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string_id sysmessage = new string_id(space_crafting.STF_COMPONENT_TOOL, "not_a_component");
|
|
sendSystemMessage(player, sysmessage);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (giveFiresprayPiece == true)
|
|
{
|
|
if (isIdValid(newComponent))
|
|
{
|
|
int pieceNum = rand(1, 8);
|
|
//obj_id schematicPiece= create.object("object/tangible/space/special_loot/firespray_schematic_part"+pieceNum+".iff", playerInv, false, false);
|
|
obj_id schematicPiece = createObjectOverloaded("object/tangible/space/special_loot/firespray_schematic_part"+pieceNum+".iff", playerInv);
|
|
string_id gotPiece = new string_id(space_crafting.STF_COMPONENT_TOOL, "gotpiece");
|
|
sendSystemMessage(player, gotPiece);
|
|
}
|
|
}
|
|
if (charges <=0)
|
|
{
|
|
string_id outofcharges = new string_id(space_crafting.STF_COMPONENT_TOOL, "out_of_charges");
|
|
sendSystemMessage(player, outofcharges);
|
|
destroyObject(self);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
boolean calculateFiresprayGrant(obj_id[] contents, obj_id player)
|
|
{
|
|
int numKuat = 0;
|
|
for (int i = 0; i < contents.length; i++)
|
|
{
|
|
string template = utils.getTemplateName(contents[i]);
|
|
int isKuat = dataTableGetInt(LOOT, template, "isKuat");
|
|
if (isKuat == 1)
|
|
numKuat++;
|
|
}
|
|
|
|
int pctChance = 0;
|
|
|
|
if (numKuat == 1 || numKuat == 2)
|
|
pctChance = 1;
|
|
if (numKuat == 3 || numKuat == 4)
|
|
pctChance = 2;
|
|
if (numKuat == 5 || numKuat == 6)
|
|
pctChance = 3;
|
|
if (numKuat == 7 || numKuat == 8 || numKuat == 9)
|
|
pctChance = 4;
|
|
if (numKuat == 10)
|
|
pctChance = 5;
|
|
|
|
int roll = rand(0, 100);
|
|
|
|
if (roll <= pctChance)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
|
|
float getReverseEngineeringExpertiseBonus(obj_id player)
|
|
{
|
|
float skillMod = getEnhancedSkillStatisticModifier(player, "expertise_reverse_engineering_bonus");
|
|
|
|
if(skillMod > 10)
|
|
{
|
|
skillMod = 10.0f;
|
|
}
|
|
|
|
return skillMod;
|
|
}
|
|
|
|
float getLevelBonus(obj_id player, int level)
|
|
{
|
|
float fltBonus = 0;
|
|
|
|
if (level == 1)
|
|
{
|
|
fltBonus = .01f;
|
|
}
|
|
else if (level == 2 || level == 3)
|
|
{
|
|
fltBonus = .02f;
|
|
}
|
|
else if (level == 4 || level == 5)
|
|
{
|
|
fltBonus = .03f;
|
|
}
|
|
else if (level == 6 || level == 7)
|
|
{
|
|
fltBonus = .04f;
|
|
}
|
|
else if (level == 8 || level == 9)
|
|
{
|
|
fltBonus = .05f;
|
|
}
|
|
else if (level == 10)
|
|
{
|
|
fltBonus = .06f;
|
|
}
|
|
|
|
fltBonus += Math.round(getReverseEngineeringExpertiseBonus(player)) * 0.001;
|
|
|
|
return fltBonus;
|
|
}
|
|
|
|
obj_id createLegendaryLoot(obj_id player, obj_id tool, string category)
|
|
{
|
|
|
|
|
|
string[] items = dataTableGetStringColumn(LOOT_LOOKUP, category);
|
|
int pick = rand(0, items.length-1);
|
|
string rare = dataTableGetString(LOOT_LOOKUP, pick, category);
|
|
string msg = dataTableGetString(LOOT_LOOKUP, pick, (category+"_strings"));
|
|
//obj_id newLoot = createSpecialLoot(player, rare);
|
|
string_id sysmessage = new string_id(space_crafting.STF_COMPONENT_TOOL, msg);
|
|
sendSystemMessage(player, sysmessage);
|
|
destroyObject(tool);
|
|
return null ;
|
|
}
|
|
|
|
obj_id reverseEngineerArmor(obj_id[] objComponents, obj_id player, int level)
|
|
{
|
|
int revSkill = getSkillStatisticModifier(player, "engineering_reverse");
|
|
|
|
if (level > revSkill)
|
|
{
|
|
string_id insufficientLevel = new string_id (space_crafting.STF_COMPONENT_TOOL, "level");
|
|
sendSystemMessage(player, insufficientLevel);
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
float fltArmorHpAverage = space_crafting.getComponentMaximumArmorHitpoints(objComponents[0]);
|
|
float fltHpAverage = space_crafting.getComponentMaximumHitpoints(objComponents[0]);
|
|
float fltMassAverage = space_crafting.getComponentMass(objComponents[0]);
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
float armor = space_crafting.getComponentMaximumArmorHitpoints(objComponents[i]);
|
|
if (armor > fltArmorHpAverage)
|
|
fltArmorHpAverage = armor;
|
|
|
|
float hp = space_crafting.getComponentMaximumHitpoints(objComponents[i]);
|
|
|
|
if (hp > fltHpAverage)
|
|
fltHpAverage = hp;
|
|
|
|
float mass = space_crafting.getComponentMass(objComponents[i]);
|
|
|
|
if (mass < fltMassAverage && mass > 0)
|
|
fltMassAverage = mass;
|
|
|
|
}
|
|
|
|
float fltBonus = getLevelBonus(player, level);
|
|
|
|
|
|
float fltMass = fltMassAverage - (fltMassAverage*fltBonus);
|
|
float fltArmorHp = fltArmorHpAverage + (fltArmorHpAverage*fltBonus);
|
|
float fltHp = fltHpAverage + (fltHpAverage*fltBonus);
|
|
|
|
string template = utils.getTemplateFilenameNoPath(objComponents[0]);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
|
|
obj_id newComponent = create.object("object/tangible/ship/components/armor/"+template, playerInv, false, false);
|
|
|
|
if (isIdValid(newComponent))
|
|
{
|
|
|
|
space_crafting.setComponentMaximumArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentCurrentArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentMaximumHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentCurrentHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentMass(newComponent, fltMass);
|
|
|
|
string entries[] = new string[3];
|
|
string strMassAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "massavg"));
|
|
string strHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "hpavg"));
|
|
string strArmorHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "armorhpavg"));
|
|
string strFinalOutput = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "finaloutput"));
|
|
string strBonusApplied = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "bonusapplied"));
|
|
|
|
entries[0] = strMassAvg + " " + fltMassAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " +fltMass;
|
|
entries[1] = strHpAvg + " " + fltHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltHp;
|
|
entries[2] = strArmorHpAvg + " " + fltArmorHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltArmorHp;
|
|
|
|
finishReverseEngineering(newComponent, player, objComponents, entries);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "invfull");
|
|
sendSystemMessage(player, error);
|
|
return null;
|
|
}
|
|
|
|
|
|
return newComponent;
|
|
}
|
|
|
|
obj_id reverseEngineerBooster(obj_id[] objComponents, obj_id player, int level)
|
|
{
|
|
int revSkill = getSkillStatisticModifier(player, "propulsion_reverse");
|
|
|
|
if (level > revSkill)
|
|
{
|
|
string_id insufficientLevel = new string_id (space_crafting.STF_COMPONENT_TOOL, "level");
|
|
sendSystemMessage(player, insufficientLevel);
|
|
return null;
|
|
}
|
|
|
|
float fltMassAverage = space_crafting.getComponentMass(objComponents[0]);
|
|
float fltArmorHpAverage = space_crafting.getComponentMaximumArmorHitpoints(objComponents[0]);
|
|
float fltHpAverage = space_crafting.getComponentMaximumHitpoints(objComponents[0]);
|
|
float fltBoosterEnergyAverage = space_crafting.getBoosterMaximumEnergy(objComponents[0]);
|
|
float fltBoosterRechargeAverage = space_crafting.getBoosterEnergyRechargeRate(objComponents[0]);
|
|
float fltBoosterConsumptionAverage = space_crafting.getboosterEnergyConsumptionRate(objComponents[0]);
|
|
float fltBoosterAccelAverage = space_crafting.getBoosterAcceleration(objComponents[0]);
|
|
float fltBoosterSpeedAverage = space_crafting.getBoosterMaximumSpeed(objComponents[0]);
|
|
float fltEnergyMaintenance = space_crafting.getComponentEnergyMaintenance(objComponents[0]);
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
float armor = space_crafting.getComponentMaximumArmorHitpoints(objComponents[i]);
|
|
if (armor > fltArmorHpAverage)
|
|
fltArmorHpAverage = armor;
|
|
|
|
float hp = space_crafting.getComponentMaximumHitpoints(objComponents[i]);
|
|
|
|
if (hp > fltHpAverage)
|
|
fltHpAverage = hp;
|
|
|
|
float mass = space_crafting.getComponentMass(objComponents[i]);
|
|
|
|
if (mass < fltMassAverage)
|
|
fltMassAverage = mass;
|
|
|
|
float energy = space_crafting.getBoosterMaximumEnergy(objComponents[i]);
|
|
if (energy > fltBoosterEnergyAverage)
|
|
fltBoosterEnergyAverage = energy;
|
|
|
|
float recharge = space_crafting.getBoosterEnergyRechargeRate(objComponents[i]);
|
|
if (recharge > fltBoosterRechargeAverage)
|
|
fltBoosterRechargeAverage = recharge;
|
|
|
|
float consumption = space_crafting.getboosterEnergyConsumptionRate(objComponents[i]);
|
|
if (consumption < fltBoosterConsumptionAverage)
|
|
fltBoosterConsumptionAverage = consumption;
|
|
|
|
float accel = space_crafting.getBoosterAcceleration(objComponents[i]);
|
|
|
|
if (accel > fltBoosterAccelAverage)
|
|
fltBoosterAccelAverage = accel;
|
|
|
|
float speed = space_crafting.getBoosterMaximumSpeed(objComponents[i]);
|
|
if (speed > fltBoosterSpeedAverage)
|
|
fltBoosterSpeedAverage = speed;
|
|
|
|
float maintenance = space_crafting.getComponentEnergyMaintenance(objComponents[i]);
|
|
if (maintenance < fltEnergyMaintenance)
|
|
fltEnergyMaintenance = maintenance;
|
|
|
|
}
|
|
|
|
float fltBonus = getLevelBonus(player, level);
|
|
|
|
float fltMass = fltMassAverage - (fltMassAverage*fltBonus);
|
|
float fltArmorHp = fltArmorHpAverage + (fltArmorHpAverage*fltBonus);
|
|
float fltHp = fltHpAverage + (fltHpAverage*fltBonus);
|
|
float fltBoosterEnergy = fltBoosterEnergyAverage + (fltBoosterEnergyAverage*fltBonus);
|
|
float fltBoosterRecharge = fltBoosterRechargeAverage + (fltBoosterRechargeAverage*fltBonus);
|
|
float fltBoosterConsumption = fltBoosterConsumptionAverage - (fltBoosterConsumptionAverage*fltBonus);
|
|
float fltBoosterAccel = fltBoosterAccelAverage + (fltBoosterAccelAverage*fltBonus);
|
|
float fltBoosterSpeed = fltBoosterSpeedAverage + (fltBoosterSpeedAverage*fltBonus);
|
|
float fltEnergyMaintenanceFinal = fltEnergyMaintenance - (fltEnergyMaintenance*fltBonus);
|
|
|
|
string template = utils.getTemplateFilenameNoPath(objComponents[0]);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
|
|
obj_id newComponent = create.object("object/tangible/ship/components/booster/"+template, playerInv, false, false);
|
|
|
|
if (isIdValid(newComponent))
|
|
{
|
|
|
|
space_crafting.setComponentMaximumArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentCurrentArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentMaximumHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentCurrentHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentMass(newComponent, fltMass);
|
|
space_crafting.setComponentEnergyMaintenance(newComponent, fltEnergyMaintenanceFinal);
|
|
space_crafting.setBoosterCurrentEnergy(newComponent, fltBoosterEnergy);
|
|
space_crafting.setBoosterMaximumEnergy(newComponent, fltBoosterEnergy);
|
|
space_crafting.setBoosterEnergyRechargeRate(newComponent, fltBoosterRecharge);
|
|
space_crafting.setBoosterEnergyConsumptionRate(newComponent, fltBoosterConsumption);
|
|
space_crafting.setBoosterAcceleration(newComponent, fltBoosterAccel);
|
|
space_crafting.setBoosterMaximumSpeed(newComponent, fltBoosterSpeed);
|
|
|
|
string entries[] = new string[9];
|
|
string strMassAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "massavg"));
|
|
string strHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "hpavg"));
|
|
string strArmorHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "armorhpavg"));
|
|
string strEnergyMaintenance = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "energymaintenance"));
|
|
string strFinalOutput = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "finaloutput"));
|
|
string strBonusApplied = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "bonusapplied"));
|
|
|
|
string strBoosterEnergy = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "boosterenergy"));
|
|
string strBoosterRecharge = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "boosterrecharge"));
|
|
string strBoosterConsumption= utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "boosterconsumption"));
|
|
string strBoosterAccel = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "boosteraccel"));
|
|
string strBoosterSpeed = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "boosterspeed"));
|
|
|
|
entries[0] = strMassAvg + " " + fltMassAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " +fltMass;
|
|
entries[1] = strHpAvg + " " + fltHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltHp;
|
|
entries[2] = strArmorHpAvg + " " + fltArmorHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltArmorHp;
|
|
entries[3] = strEnergyMaintenance + " " + fltEnergyMaintenance + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEnergyMaintenanceFinal;
|
|
entries[4] = strBoosterEnergy + " " + fltBoosterEnergyAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltBoosterEnergy;
|
|
entries[5] = strBoosterRecharge + " " + fltBoosterRechargeAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltBoosterRecharge;
|
|
entries[6] = strBoosterConsumption + " " + fltBoosterConsumptionAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltBoosterConsumption;
|
|
entries[7] = strBoosterAccel + " " + fltBoosterAccelAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltBoosterAccel;
|
|
entries[8] = strBoosterSpeed + " " + fltBoosterSpeedAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltBoosterSpeed;
|
|
|
|
finishReverseEngineering(newComponent, player, objComponents, entries);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "invfull");
|
|
sendSystemMessage(player, error);
|
|
return null;
|
|
}
|
|
|
|
return newComponent;
|
|
}
|
|
|
|
obj_id reverseEngineerCapacitor(obj_id[] objComponents, obj_id player, int level)
|
|
{
|
|
int revSkill = getSkillStatisticModifier(player, "systems_reverse");
|
|
|
|
if (level > revSkill)
|
|
{
|
|
string_id insufficientLevel = new string_id (space_crafting.STF_COMPONENT_TOOL, "level");
|
|
sendSystemMessage(player, insufficientLevel);
|
|
return null;
|
|
}
|
|
|
|
float fltMassAverage = space_crafting.getComponentMass(objComponents[0]);
|
|
float fltArmorHpAverage = space_crafting.getComponentMaximumArmorHitpoints(objComponents[0]);
|
|
float fltHpAverage = space_crafting.getComponentMaximumHitpoints(objComponents[0]);
|
|
float fltEnergyMaintenance = space_crafting.getComponentEnergyMaintenance(objComponents[0]);
|
|
float fltCapEnergyAverage = space_crafting.getWeaponCapacitorMaximumEnergy(objComponents[0]);
|
|
float fltCapRechargeAverage = space_crafting.getWeaponCapacitorRechargeRate(objComponents[0]);
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
float armor = space_crafting.getComponentMaximumArmorHitpoints(objComponents[i]);
|
|
if (armor > fltArmorHpAverage)
|
|
fltArmorHpAverage = armor;
|
|
|
|
float hp = space_crafting.getComponentMaximumHitpoints(objComponents[i]);
|
|
|
|
if (hp > fltHpAverage)
|
|
fltHpAverage = hp;
|
|
|
|
float mass = space_crafting.getComponentMass(objComponents[i]);
|
|
|
|
if (mass < fltMassAverage)
|
|
fltMassAverage = mass;
|
|
|
|
float maintenance = space_crafting.getComponentEnergyMaintenance(objComponents[i]);
|
|
if (maintenance < fltEnergyMaintenance)
|
|
fltEnergyMaintenance = maintenance;
|
|
|
|
float energy = space_crafting.getWeaponCapacitorMaximumEnergy(objComponents[i]);
|
|
if (energy > fltCapEnergyAverage)
|
|
fltCapEnergyAverage = energy;
|
|
|
|
float recharge = space_crafting.getWeaponCapacitorRechargeRate(objComponents[i]);
|
|
if (recharge > fltCapRechargeAverage)
|
|
fltCapRechargeAverage = recharge;
|
|
|
|
}
|
|
|
|
float fltBonus = getLevelBonus(player, level);
|
|
|
|
float fltMass = fltMassAverage - (fltMassAverage*fltBonus);
|
|
float fltArmorHp = fltArmorHpAverage + (fltArmorHpAverage*fltBonus);
|
|
float fltHp = fltHpAverage + (fltHpAverage*fltBonus);
|
|
float fltEnergyMaintenanceFinal = fltEnergyMaintenance - (fltEnergyMaintenance*fltBonus);
|
|
float fltCapEnergy = fltCapEnergyAverage + (fltCapEnergyAverage*fltBonus);
|
|
float fltCapRecharge = fltCapRechargeAverage + (fltCapRechargeAverage*fltBonus);
|
|
|
|
string template = utils.getTemplateFilenameNoPath(objComponents[0]);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
|
|
obj_id newComponent = create.object("object/tangible/ship/components/weapon_capacitor/"+template, playerInv, false, false);
|
|
|
|
if (isIdValid(newComponent))
|
|
{
|
|
space_crafting.setComponentMaximumArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentCurrentArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentMaximumHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentCurrentHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentMass(newComponent, fltMass);
|
|
space_crafting.setComponentEnergyMaintenance(newComponent, fltEnergyMaintenanceFinal);
|
|
space_crafting.setWeaponCapacitorRechargeRate(newComponent, fltCapRecharge);
|
|
space_crafting.setWeaponCapacitorMaximumEnergy(newComponent, fltCapEnergy);
|
|
space_crafting.setWeaponCapacitorCurrentEnergy(newComponent, fltCapEnergy);
|
|
|
|
string entries[] = new string[6];
|
|
string strMassAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "massavg"));
|
|
string strHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "hpavg"));
|
|
string strArmorHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "armorhpavg"));
|
|
string strEnergyMaintenance = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "energymaintenance"));
|
|
string strFinalOutput = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "finaloutput"));
|
|
string strBonusApplied = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "bonusapplied"));
|
|
|
|
string strCapEnergy = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "capenergy"));
|
|
string strCapRecharge = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "caprecharge"));
|
|
|
|
entries[0] = strMassAvg + " " + fltMassAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " +fltMass;
|
|
entries[1] = strHpAvg + " " + fltHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltHp;
|
|
entries[2] = strArmorHpAvg + " " + fltArmorHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltArmorHp;
|
|
entries[3] = strEnergyMaintenance + " " + fltEnergyMaintenance + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEnergyMaintenanceFinal;
|
|
entries[4] = strCapEnergy + " " + fltCapEnergyAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltCapEnergy;
|
|
entries[5] = strCapRecharge + " " + fltCapRechargeAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltCapRecharge;
|
|
|
|
finishReverseEngineering(newComponent, player, objComponents, entries);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "invfull");
|
|
sendSystemMessage(player, error);
|
|
return null;
|
|
}
|
|
|
|
return newComponent;
|
|
}
|
|
|
|
obj_id reverseEngineerDroidInterface(obj_id[] objComponents, obj_id player, int level)
|
|
{
|
|
int revSkill = getSkillStatisticModifier(player, "systems_reverse");
|
|
|
|
if (level > revSkill)
|
|
{
|
|
string_id insufficientLevel = new string_id (space_crafting.STF_COMPONENT_TOOL, "level");
|
|
sendSystemMessage(player, insufficientLevel);
|
|
return null;
|
|
}
|
|
|
|
float fltMassAverage = space_crafting.getComponentMass(objComponents[0]);
|
|
float fltArmorHpAverage = space_crafting.getComponentMaximumArmorHitpoints(objComponents[0]);
|
|
float fltHpAverage = space_crafting.getComponentMaximumHitpoints(objComponents[0]);
|
|
float fltEnergyMaintenance = space_crafting.getComponentEnergyMaintenance(objComponents[0]);
|
|
float fltDroidInterfaceSpeedAverage = space_crafting.getDroidInterfaceCommandSpeed(objComponents[0]);
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
float armor = space_crafting.getComponentMaximumArmorHitpoints(objComponents[i]);
|
|
if (armor > fltArmorHpAverage)
|
|
fltArmorHpAverage = armor;
|
|
|
|
float hp = space_crafting.getComponentMaximumHitpoints(objComponents[i]);
|
|
if (hp > fltHpAverage)
|
|
fltHpAverage = hp;
|
|
|
|
float mass = space_crafting.getComponentMass(objComponents[i]);
|
|
if (mass < fltMassAverage)
|
|
fltMassAverage = mass;
|
|
|
|
float maintenance = space_crafting.getComponentEnergyMaintenance(objComponents[i]);
|
|
if (maintenance < fltEnergyMaintenance)
|
|
fltEnergyMaintenance = maintenance;
|
|
|
|
float speed = space_crafting.getDroidInterfaceCommandSpeed(objComponents[i]);
|
|
if (speed < fltDroidInterfaceSpeedAverage)
|
|
fltDroidInterfaceSpeedAverage = speed;
|
|
}
|
|
|
|
float fltBonus = getLevelBonus(player, level);
|
|
|
|
float fltMass = fltMassAverage - (fltMassAverage*fltBonus);
|
|
float fltArmorHp = fltArmorHpAverage + (fltArmorHpAverage*fltBonus);
|
|
float fltHp = fltHpAverage + (fltHpAverage*fltBonus);
|
|
float fltEnergyMaintenanceFinal = fltEnergyMaintenance - (fltEnergyMaintenance*fltBonus);
|
|
float fltDroidInterfaceSpeed = fltDroidInterfaceSpeedAverage - (fltDroidInterfaceSpeedAverage*fltBonus);
|
|
|
|
string template = utils.getTemplateFilenameNoPath(objComponents[0]);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
|
|
obj_id newComponent = create.object("object/tangible/ship/components/droid_interface/"+template, playerInv, false, false);
|
|
|
|
if (isIdValid(newComponent))
|
|
{
|
|
|
|
space_crafting.setComponentMaximumArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentCurrentArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentMaximumHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentCurrentHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentMass(newComponent, fltMass);
|
|
space_crafting.setComponentEnergyMaintenance(newComponent, fltEnergyMaintenanceFinal);
|
|
space_crafting.setDroidInterfaceCommandSpeed(newComponent, fltDroidInterfaceSpeed);
|
|
|
|
string entries[] = new string[5];
|
|
string strMassAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "massavg"));
|
|
string strHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "hpavg"));
|
|
string strArmorHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "armorhpavg"));
|
|
string strEnergyMaintenance = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "energymaintenance"));
|
|
string strFinalOutput = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "finaloutput"));
|
|
string strBonusApplied = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "bonusapplied"));
|
|
|
|
string strDroidInterfaceSpeed = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "commandspeed"));
|
|
|
|
entries[0] = strMassAvg + " " + fltMassAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " +fltMass;
|
|
entries[1] = strHpAvg + " " + fltHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltHp;
|
|
entries[2] = strArmorHpAvg + " " + fltArmorHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltArmorHp;
|
|
entries[3] = strEnergyMaintenance + " " + fltEnergyMaintenance + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEnergyMaintenanceFinal;
|
|
entries[4] = strDroidInterfaceSpeed + " " + fltDroidInterfaceSpeedAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltDroidInterfaceSpeed;
|
|
|
|
finishReverseEngineering(newComponent, player, objComponents, entries);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "invfull");
|
|
sendSystemMessage(player, error);
|
|
return null;
|
|
}
|
|
return newComponent;
|
|
}
|
|
|
|
obj_id reverseEngineerEngine(obj_id[] objComponents, obj_id player, int level)
|
|
{
|
|
int revSkill = getSkillStatisticModifier(player, "propulsion_reverse");
|
|
|
|
if (level > revSkill)
|
|
{
|
|
string_id insufficientLevel = new string_id (space_crafting.STF_COMPONENT_TOOL, "level");
|
|
sendSystemMessage(player, insufficientLevel);
|
|
return null;
|
|
}
|
|
|
|
float fltMassAverage = space_crafting.getComponentMass(objComponents[0]);
|
|
float fltArmorHpAverage = space_crafting.getComponentMaximumArmorHitpoints(objComponents[0]);
|
|
float fltHpAverage = space_crafting.getComponentMaximumHitpoints(objComponents[0]);
|
|
float fltEnergyMaintenance = space_crafting.getComponentEnergyMaintenance(objComponents[0]);
|
|
float fltEngineAccelAvg = space_crafting.getEngineAcceleration(objComponents[0]);
|
|
float fltEngineDecelAvg = space_crafting.getEngineDeceleration(objComponents[0]);
|
|
float fltEnginePitchAvg = space_crafting.getEngineMaximumPitch(objComponents[0]);
|
|
float fltEngineYawAvg = space_crafting.getEngineMaximumYaw(objComponents[0]);
|
|
float fltEngineRollAvg = space_crafting.getEngineMaximumRoll(objComponents[0]);
|
|
float fltEngineSpeedAvg = space_crafting.getEngineMaximumSpeed(objComponents[0]);
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
float armor = space_crafting.getComponentMaximumArmorHitpoints(objComponents[i]);
|
|
if (armor > fltArmorHpAverage)
|
|
fltArmorHpAverage = armor;
|
|
|
|
float hp = space_crafting.getComponentMaximumHitpoints(objComponents[i]);
|
|
if (hp > fltHpAverage)
|
|
fltHpAverage = hp;
|
|
|
|
float mass = space_crafting.getComponentMass(objComponents[i]);
|
|
if (mass < fltMassAverage)
|
|
fltMassAverage = mass;
|
|
|
|
float maintenance = space_crafting.getComponentEnergyMaintenance(objComponents[i]);
|
|
if (maintenance < fltEnergyMaintenance)
|
|
fltEnergyMaintenance = maintenance;
|
|
|
|
float accel = space_crafting.getEngineAcceleration(objComponents[i]);
|
|
if (accel > fltEngineAccelAvg)
|
|
fltEngineAccelAvg = accel;
|
|
|
|
float decel = space_crafting.getEngineDeceleration(objComponents[i]);
|
|
if (decel > fltEngineDecelAvg)
|
|
fltEngineDecelAvg = decel;
|
|
|
|
float pitch = space_crafting.getEngineMaximumPitch(objComponents[i]);
|
|
if (pitch > fltEnginePitchAvg)
|
|
fltEnginePitchAvg = pitch;
|
|
|
|
float yaw = space_crafting.getEngineMaximumYaw(objComponents[i]);
|
|
if (yaw > fltEngineYawAvg)
|
|
fltEngineYawAvg = yaw;
|
|
|
|
float roll = space_crafting.getEngineMaximumRoll(objComponents[i]);
|
|
if (roll > fltEngineRollAvg)
|
|
fltEngineRollAvg = roll;
|
|
|
|
float speed = space_crafting.getEngineMaximumSpeed(objComponents[i]);
|
|
if (speed > fltEngineSpeedAvg)
|
|
fltEngineSpeedAvg = speed;
|
|
}
|
|
|
|
float fltBonus = getLevelBonus(player, level);
|
|
|
|
float fltMass = fltMassAverage - (fltMassAverage*fltBonus);
|
|
float fltArmorHp = fltArmorHpAverage + (fltArmorHpAverage*fltBonus);
|
|
float fltHp = fltHpAverage + (fltHpAverage*fltBonus);
|
|
float fltEngineAccel = fltEngineAccelAvg + (fltEngineAccelAvg*fltBonus);
|
|
float fltEngineDecel = fltEngineDecelAvg + (fltEngineDecelAvg*fltBonus);
|
|
float fltEnginePitch = fltEnginePitchAvg + (fltEnginePitchAvg*fltBonus);
|
|
float fltEngineYaw = fltEngineYawAvg + (fltEngineYawAvg*fltBonus);
|
|
float fltEngineRoll = fltEngineRollAvg + (fltEngineRollAvg*fltBonus);
|
|
float fltEngineSpeed = fltEngineSpeedAvg + (fltEngineSpeedAvg*fltBonus);
|
|
float fltEnergyMaintenanceFinal = fltEnergyMaintenance - (fltEnergyMaintenance*fltBonus);
|
|
|
|
string template = utils.getTemplateFilenameNoPath(objComponents[0]);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
|
|
obj_id newComponent = create.object("object/tangible/ship/components/engine/"+template, playerInv, false, false);
|
|
|
|
if (isIdValid(newComponent))
|
|
{
|
|
|
|
space_crafting.setComponentMaximumArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentCurrentArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentMaximumHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentCurrentHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentMass(newComponent, fltMass);
|
|
space_crafting.setComponentEnergyMaintenance(newComponent, fltEnergyMaintenanceFinal);
|
|
space_crafting.setEngineAcceleration(newComponent, fltEngineAccel);
|
|
space_crafting.setEngineDeceleration(newComponent, fltEngineDecel);
|
|
space_crafting.setEngineMaximumPitch(newComponent, fltEnginePitch);
|
|
space_crafting.setEngineMaximumYaw(newComponent, fltEngineYaw);
|
|
space_crafting.setEngineMaximumRoll(newComponent, fltEngineRoll);
|
|
space_crafting.setEngineMaximumSpeed(newComponent, fltEngineSpeed);
|
|
|
|
string entries[] = new string[8];
|
|
string strMassAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "massavg"));
|
|
string strHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "hpavg"));
|
|
string strArmorHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "armorhpavg"));
|
|
string strFinalOutput = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "finaloutput"));
|
|
string strBonusApplied = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "bonusapplied"));
|
|
|
|
string strEnergyMaintenance = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "energymaintenance"));
|
|
string strEnginePitch = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "engpitch"));
|
|
string strEngineYaw = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "engyaw"));
|
|
string strEngineRoll = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "engroll"));
|
|
string strEngineSpeed = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "engspeed"));
|
|
|
|
entries[0] = strMassAvg + " " + fltMassAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " +fltMass;
|
|
entries[1] = strHpAvg + " " + fltHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltHp;
|
|
entries[2] = strArmorHpAvg + " " + fltArmorHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltArmorHp;
|
|
entries[3] = strEnergyMaintenance + " " + fltEnergyMaintenance + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEnergyMaintenanceFinal;
|
|
entries[4] = strEnginePitch + " " + fltEnginePitchAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEnginePitch;
|
|
entries[5] = strEngineYaw + " " + fltEngineYawAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEngineYaw;
|
|
entries[6] = strEngineRoll + " " + fltEngineRollAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEngineRoll;
|
|
entries[7] = strEngineSpeed + " " + fltEngineSpeedAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEngineSpeed;
|
|
|
|
finishReverseEngineering(newComponent, player, objComponents, entries);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "invfull");
|
|
sendSystemMessage(player, error);
|
|
return null;
|
|
}
|
|
|
|
return newComponent;
|
|
}
|
|
|
|
obj_id reverseEngineerReactor(obj_id[] objComponents, obj_id player, int level)
|
|
{
|
|
int revSkill = getSkillStatisticModifier(player, "systems_reverse");
|
|
|
|
if (level > revSkill)
|
|
{
|
|
string_id insufficientLevel = new string_id (space_crafting.STF_COMPONENT_TOOL, "level");
|
|
sendSystemMessage(player, insufficientLevel);
|
|
return null;
|
|
}
|
|
|
|
float fltMassAverage = space_crafting.getComponentMass(objComponents[0]);
|
|
float fltArmorHpAverage = space_crafting.getComponentMaximumArmorHitpoints(objComponents[0]);
|
|
float fltHpAverage = space_crafting.getComponentMaximumHitpoints(objComponents[0]);
|
|
float fltReactorEnergyAvg = space_crafting.getReactorEnergyGeneration(objComponents[0]);
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
float armor = space_crafting.getComponentMaximumArmorHitpoints(objComponents[i]);
|
|
if (armor > fltArmorHpAverage)
|
|
fltArmorHpAverage = armor;
|
|
|
|
float hp = space_crafting.getComponentMaximumHitpoints(objComponents[i]);
|
|
if (hp > fltHpAverage)
|
|
fltHpAverage = hp;
|
|
|
|
float mass = space_crafting.getComponentMass(objComponents[i]);
|
|
if (mass < fltMassAverage)
|
|
fltMassAverage = mass;
|
|
|
|
float energy = space_crafting.getReactorEnergyGeneration(objComponents[i]);
|
|
if (energy > fltReactorEnergyAvg)
|
|
fltReactorEnergyAvg = energy;
|
|
}
|
|
|
|
float fltBonus = getLevelBonus(player, level);
|
|
|
|
float fltMass = fltMassAverage - (fltMassAverage*fltBonus);
|
|
float fltArmorHp = fltArmorHpAverage + (fltArmorHpAverage*fltBonus);
|
|
float fltHp = fltHpAverage + (fltHpAverage*fltBonus);
|
|
float fltReactorEnergy = fltReactorEnergyAvg + (fltReactorEnergyAvg*fltBonus);
|
|
|
|
string template = utils.getTemplateFilenameNoPath(objComponents[0]);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
|
|
obj_id newComponent = create.object("object/tangible/ship/components/reactor/"+template, playerInv, false, false);
|
|
|
|
if (isIdValid(newComponent))
|
|
{
|
|
|
|
space_crafting.setComponentMaximumArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentCurrentArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentMaximumHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentCurrentHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentMass(newComponent, fltMass);
|
|
|
|
space_crafting.setReactorEnergyGeneration(newComponent, fltReactorEnergy);
|
|
|
|
string entries[] = new string[4];
|
|
string strMassAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "massavg"));
|
|
string strHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "hpavg"));
|
|
string strArmorHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "armorhpavg"));
|
|
string strFinalOutput = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "finaloutput"));
|
|
string strBonusApplied = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "bonusapplied"));
|
|
|
|
string strReactorEnergy = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "reactorenergy"));
|
|
|
|
entries[0] = strMassAvg + " " + fltMassAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " +fltMass;
|
|
entries[1] = strHpAvg + " " + fltHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltHp;
|
|
entries[2] = strArmorHpAvg + " " + fltArmorHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltArmorHp;
|
|
entries[3] = strReactorEnergy + " " + fltReactorEnergyAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltReactorEnergy;
|
|
|
|
finishReverseEngineering(newComponent, player, objComponents, entries);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "invfull");
|
|
sendSystemMessage(player, error);
|
|
return null;
|
|
}
|
|
|
|
return newComponent;
|
|
}
|
|
|
|
obj_id reverseEngineerShield(obj_id[] objComponents, obj_id player, int level)
|
|
{
|
|
int revSkill = getSkillStatisticModifier(player, "defense_reverse");
|
|
|
|
if (level > revSkill)
|
|
{
|
|
string_id insufficientLevel = new string_id (space_crafting.STF_COMPONENT_TOOL, "level");
|
|
sendSystemMessage(player, insufficientLevel);
|
|
return null;
|
|
}
|
|
|
|
float fltMassAverage = space_crafting.getComponentMass(objComponents[0]);
|
|
float fltArmorHpAverage = space_crafting.getComponentMaximumArmorHitpoints(objComponents[0]);
|
|
float fltHpAverage = space_crafting.getComponentMaximumHitpoints(objComponents[0]);
|
|
float fltEnergyMaintenance = space_crafting.getComponentEnergyMaintenance(objComponents[0]);
|
|
float fltShdBackHpAvg = space_crafting.getShieldGeneratorMaximumBackHitpoints(objComponents[0]);
|
|
float fltShdFrontHpAvg = space_crafting.getShieldGeneratorMaximumFrontHitpoints(objComponents[0]);
|
|
float fltShdRechargeAvg = space_crafting.getShieldGeneratorRechargeRate(objComponents[0]);
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
float armor = space_crafting.getComponentMaximumArmorHitpoints(objComponents[i]);
|
|
if (armor > fltArmorHpAverage)
|
|
fltArmorHpAverage = armor;
|
|
|
|
float hp = space_crafting.getComponentMaximumHitpoints(objComponents[i]);
|
|
if (hp > fltHpAverage)
|
|
fltHpAverage = hp;
|
|
|
|
float mass = space_crafting.getComponentMass(objComponents[i]);
|
|
if (mass < fltMassAverage)
|
|
fltMassAverage = mass;
|
|
|
|
float maintenance = space_crafting.getComponentEnergyMaintenance(objComponents[i]);
|
|
if (maintenance < fltEnergyMaintenance)
|
|
fltEnergyMaintenance = maintenance;
|
|
|
|
|
|
float back = space_crafting.getShieldGeneratorMaximumBackHitpoints(objComponents[i]);
|
|
if (back > fltShdBackHpAvg)
|
|
fltShdBackHpAvg = back;
|
|
|
|
float front = space_crafting.getShieldGeneratorMaximumFrontHitpoints(objComponents[i]);
|
|
if (front > fltShdFrontHpAvg)
|
|
fltShdFrontHpAvg = front;
|
|
|
|
float recharge = space_crafting.getShieldGeneratorRechargeRate(objComponents[i]);
|
|
if (recharge > fltShdRechargeAvg)
|
|
fltShdRechargeAvg = recharge;
|
|
|
|
|
|
}
|
|
|
|
float fltBonus = getLevelBonus(player, level);
|
|
|
|
float fltMass = fltMassAverage - (fltMassAverage*fltBonus);
|
|
float fltArmorHp = fltArmorHpAverage + (fltArmorHpAverage*fltBonus);
|
|
float fltHp = fltHpAverage + (fltHpAverage*fltBonus);
|
|
float fltEnergyMaintenanceFinal = fltEnergyMaintenance - (fltEnergyMaintenance*fltBonus);
|
|
float fltShdBackHp = fltShdBackHpAvg + (fltShdBackHpAvg*fltBonus);
|
|
float fltShdFrontHp = fltShdFrontHpAvg + (fltShdFrontHpAvg*fltBonus);
|
|
float fltShdRecharge = fltShdRechargeAvg + (fltShdRechargeAvg*fltBonus);
|
|
|
|
string template = utils.getTemplateFilenameNoPath(objComponents[0]);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
|
|
obj_id newComponent = create.object("object/tangible/ship/components/shield_generator/"+template, playerInv, false, false);
|
|
|
|
if(isIdValid(newComponent))
|
|
{
|
|
|
|
space_crafting.setComponentMaximumArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentCurrentArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentMaximumHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentCurrentHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentMass(newComponent, fltMass);
|
|
space_crafting.setComponentEnergyMaintenance(newComponent, fltEnergyMaintenanceFinal);
|
|
space_crafting.setShieldGeneratorMaximumFrontHitpoints(newComponent, fltShdFrontHp);
|
|
space_crafting.setShieldGeneratorCurrentFrontHitpoints(newComponent, fltShdFrontHp);
|
|
space_crafting.setShieldGeneratorMaximumBackHitpoints(newComponent, fltShdBackHp);
|
|
space_crafting.setShieldGeneratorCurrentBackHitpoints(newComponent, fltShdBackHp);
|
|
space_crafting.setShieldGeneratorRechargeRate(newComponent, fltShdRecharge);
|
|
|
|
string entries[] = new string[7];
|
|
string strMassAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "massavg"));
|
|
string strHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "hpavg"));
|
|
string strArmorHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "armorhpavg"));
|
|
string strFinalOutput = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "finaloutput"));
|
|
string strBonusApplied = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "bonusapplied"));
|
|
string strEnergyMaintenance = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "energymaintenance"));
|
|
|
|
string strShdBackHp = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "shdbackhp"));
|
|
string strShdFrontHp = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "shdfronthp"));
|
|
string strShdRecharge = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "shdrecharge"));
|
|
|
|
entries[0] = strMassAvg + " " + fltMassAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " +fltMass;
|
|
entries[1] = strHpAvg + " " + fltHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltHp;
|
|
entries[2] = strArmorHpAvg + " " + fltArmorHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltArmorHp;
|
|
entries[3] = strEnergyMaintenance + " " + fltEnergyMaintenance + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEnergyMaintenanceFinal;
|
|
entries[4] = strShdBackHp + " " + fltShdBackHpAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltShdBackHp;
|
|
entries[5] = strShdFrontHp + " " + fltShdFrontHpAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltShdFrontHp;
|
|
entries[6] = strShdRecharge + " " + fltShdRechargeAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltShdRecharge;
|
|
|
|
finishReverseEngineering(newComponent, player, objComponents, entries);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "invfull");
|
|
sendSystemMessage(player, error);
|
|
return null;
|
|
}
|
|
return newComponent;
|
|
|
|
}
|
|
|
|
obj_id reverseEngineerWeapon(obj_id[] objComponents, obj_id player, int level)
|
|
{
|
|
int revSkill = getSkillStatisticModifier(player, "defense_reverse");
|
|
|
|
if (level > revSkill)
|
|
{
|
|
string_id insufficientLevel = new string_id (space_crafting.STF_COMPONENT_TOOL, "level");
|
|
sendSystemMessage(player, insufficientLevel);
|
|
return null;
|
|
}
|
|
|
|
float fltMassAverage = space_crafting.getComponentMass(objComponents[0]);
|
|
float fltArmorHpAverage = space_crafting.getComponentMaximumArmorHitpoints(objComponents[0]);
|
|
float fltHpAverage = space_crafting.getComponentMaximumHitpoints(objComponents[0]);
|
|
float fltEnergyMaintenance = space_crafting.getComponentEnergyMaintenance(objComponents[0]);
|
|
float fltWpnMaxDamageAvg = space_crafting.getWeaponMaximumDamage(objComponents[0]);
|
|
float fltWpnMinDamageAvg = space_crafting.getWeaponMinimumDamage(objComponents[0]);
|
|
float fltWpnShdEffectivenessAvg = space_crafting.getWeaponShieldEffectiveness(objComponents[0]);
|
|
float fltWpnArmEffectivenessAvg = space_crafting.getWeaponArmorEffectiveness(objComponents[0]);
|
|
float fltWpnEnergyPerShotAvg = space_crafting.getWeaponEnergyPerShot(objComponents[0]);
|
|
float fltWpnRefireRateAvg = space_crafting.getWeaponRefireRate(objComponents[0]);
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
float armor = space_crafting.getComponentMaximumArmorHitpoints(objComponents[i]);
|
|
if (armor > fltArmorHpAverage)
|
|
fltArmorHpAverage = armor;
|
|
|
|
float hp = space_crafting.getComponentMaximumHitpoints(objComponents[i]);
|
|
if (hp > fltHpAverage)
|
|
fltHpAverage = hp;
|
|
|
|
float mass = space_crafting.getComponentMass(objComponents[i]);
|
|
if (mass < fltMassAverage)
|
|
fltMassAverage = mass;
|
|
|
|
float maintenance = space_crafting.getComponentEnergyMaintenance(objComponents[i]);
|
|
if (maintenance < fltEnergyMaintenance)
|
|
fltEnergyMaintenance = maintenance;
|
|
|
|
float max = space_crafting.getWeaponMaximumDamage(objComponents[i]);
|
|
if (max > fltWpnMaxDamageAvg)
|
|
fltWpnMaxDamageAvg = max;
|
|
|
|
float min = space_crafting.getWeaponMinimumDamage(objComponents[i]);
|
|
if (min > fltWpnMinDamageAvg)
|
|
fltWpnMinDamageAvg = min;
|
|
|
|
float shd = space_crafting.getWeaponShieldEffectiveness(objComponents[i]);
|
|
if (shd > fltWpnShdEffectivenessAvg)
|
|
fltWpnShdEffectivenessAvg = shd;
|
|
|
|
float arm = space_crafting.getWeaponArmorEffectiveness(objComponents[i]);
|
|
if (arm > fltWpnArmEffectivenessAvg)
|
|
fltWpnArmEffectivenessAvg = arm;
|
|
|
|
float energy = space_crafting.getWeaponEnergyPerShot(objComponents[i]);
|
|
if (energy < fltWpnEnergyPerShotAvg)
|
|
fltWpnEnergyPerShotAvg = energy;
|
|
|
|
float refire = space_crafting.getWeaponRefireRate(objComponents[i]);
|
|
if (refire < fltWpnRefireRateAvg)
|
|
fltWpnRefireRateAvg = refire;
|
|
|
|
}
|
|
|
|
float fltBonus = getLevelBonus(player, level);
|
|
|
|
float fltMass = fltMassAverage - (fltMassAverage*fltBonus);
|
|
float fltArmorHp = fltArmorHpAverage + (fltArmorHpAverage*fltBonus);
|
|
float fltHp = fltHpAverage + (fltHpAverage*fltBonus);
|
|
float fltEnergyMaintenanceFinal = fltEnergyMaintenance - (fltEnergyMaintenance*fltBonus);
|
|
float fltWpnMaxDamage = fltWpnMaxDamageAvg + (fltWpnMaxDamageAvg*fltBonus);
|
|
float fltWpnMinDamage = fltWpnMinDamageAvg + (fltWpnMinDamageAvg*fltBonus);
|
|
float fltWpnShdEffectiveness = fltWpnShdEffectivenessAvg + (fltWpnShdEffectivenessAvg*fltBonus);
|
|
float fltWpnArmEffectiveness = fltWpnArmEffectivenessAvg + (fltWpnArmEffectivenessAvg*fltBonus);
|
|
float fltWpnEnergyPerShot = fltWpnEnergyPerShotAvg - (fltWpnEnergyPerShotAvg*fltBonus);
|
|
float fltWpnRefireRate = fltWpnRefireRateAvg - (fltWpnRefireRateAvg*fltBonus);
|
|
|
|
|
|
|
|
string template = utils.getTemplateFilenameNoPath(objComponents[0]);
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
|
|
obj_id newComponent = create.object("object/tangible/ship/components/weapon/"+template, playerInv, false, false);
|
|
|
|
if (isIdValid(newComponent))
|
|
{
|
|
|
|
space_crafting.setComponentMaximumArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentCurrentArmorHitpoints(newComponent, fltArmorHp);
|
|
space_crafting.setComponentMaximumHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentCurrentHitpoints(newComponent, fltHp);
|
|
space_crafting.setComponentMass(newComponent, fltMass);
|
|
space_crafting.setComponentEnergyMaintenance(newComponent, fltEnergyMaintenanceFinal);
|
|
space_crafting.setWeaponMaximumDamage(newComponent, fltWpnMaxDamage);
|
|
space_crafting.setWeaponMinimumDamage(newComponent, fltWpnMinDamage);
|
|
space_crafting.setWeaponShieldEffectiveness(newComponent, fltWpnShdEffectiveness);
|
|
space_crafting.setWeaponArmorEffectiveness(newComponent, fltWpnArmEffectiveness);
|
|
space_crafting.setWeaponEnergyPerShot(newComponent, fltWpnEnergyPerShot);
|
|
space_crafting.setWeaponRefireRate(newComponent, fltWpnRefireRate);
|
|
|
|
|
|
string entries[] = new string[10];
|
|
string strMassAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "massavg"));
|
|
string strHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "hpavg"));
|
|
string strArmorHpAvg = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "armorhpavg"));
|
|
string strFinalOutput = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "finaloutput"));
|
|
string strBonusApplied = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "bonusapplied"));
|
|
string strEnergyMaintenance = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "energymaintenance"));
|
|
string strWpnMaxDamage = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "wpnmaxdmg"));
|
|
string strWpnMinDamage = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "wpnmindmg"));
|
|
string strWpnShdEffectiveness = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "wpnshdeff"));
|
|
string strWpnArmEffectiveness = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "wpnarmeff"));
|
|
string strWpnEnergyPerShot= utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "wpnenergypershot"));
|
|
string strWpnRefireRate = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "wpnrate"));
|
|
|
|
entries[0] = strMassAvg + " " + fltMassAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " +fltMass;
|
|
entries[1] = strHpAvg + " " + fltHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltHp;
|
|
entries[2] = strArmorHpAvg + " " + fltArmorHpAverage + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltArmorHp;
|
|
entries[3] = strEnergyMaintenance + " " + fltEnergyMaintenance + " --- " + strBonusApplied + " " + (int)(fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltEnergyMaintenanceFinal;
|
|
entries[4] = strWpnMaxDamage + " " + fltWpnMaxDamageAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltWpnMaxDamage;
|
|
entries[5] = strWpnMinDamage + " " + fltWpnMinDamageAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltWpnMinDamage;;
|
|
entries[6] = strWpnShdEffectiveness + " " + fltWpnShdEffectivenessAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltWpnShdEffectiveness;
|
|
entries[7] = strWpnArmEffectiveness + " " + fltWpnArmEffectivenessAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltWpnArmEffectiveness;
|
|
entries[8] = strWpnEnergyPerShot + " " + fltWpnEnergyPerShotAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltWpnEnergyPerShot;
|
|
entries[9] = strWpnRefireRate + " " + fltWpnRefireRateAvg + " --- " + strBonusApplied + " " + (fltBonus*100)+"%" + " --- " + strFinalOutput + " " + fltWpnRefireRate;
|
|
|
|
finishReverseEngineering(newComponent, player, objComponents, entries);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "invfull");
|
|
sendSystemMessage(player, error);
|
|
return null;
|
|
}
|
|
|
|
return newComponent;
|
|
}
|
|
|
|
void finishReverseEngineering (obj_id newComponent, obj_id player, obj_id[] objComponents, string[] entries)
|
|
{
|
|
string prompt = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "prompt"));
|
|
string title = utils.packStringId(new string_id(space_crafting.STF_COMPONENT_TOOL, "title"));
|
|
|
|
if (!hasScript(newComponent, space_crafting.SCRIPT_COMPONENT_NAME_HANDLER))
|
|
{
|
|
attachScript(newComponent, space_crafting.SCRIPT_COMPONENT_NAME_HANDLER);
|
|
}
|
|
|
|
int pid = sui.listbox(newComponent, player, prompt, sui.OK_ONLY, title, entries, "handleComponentNameSui", false, false);
|
|
|
|
if (pid > -1)
|
|
{
|
|
showSUIPage(pid);
|
|
}
|
|
else
|
|
{
|
|
string_id error = new string_id(space_crafting.STF_COMPONENT_TOOL, "bad_data");
|
|
sendSystemMessage(player, error);
|
|
}
|
|
|
|
for (int i = 0; i < objComponents.length; i++)
|
|
{
|
|
destroyObject(objComponents[i]);
|
|
}
|
|
}
|