Scripts/skilled-npcs.js |
"use strict";
this.author = "cim";
this.copyright = "© 2011-2014 cim.";
this.license = "CC-BY-SA 3.0";
this.name = "Skilled NPCs";
this.description = "OXP to enable high-skill combat routines on most standard NPCs";
this.$baseline = 0;
this.$baselinePirate = this.$baseline;
this.$baselineAssassin = this.$baseline;
this.$baselineHunter = this.$baseline;
this.$baselineTrader = this.$baseline;
this.$baselineAliens = this.$baseline;
this.$baselineOthers = this.$baseline;
this.$boostPirate = true;
this.$boostAssassin = true;
this.$boostHunter = true;
this.$boostTrader = true;
this.$boostAliens = true;
this.$boostOthers = false;
this.$defaultReaction = 1.5;
this.$reactionPirate = this.$defaultReaction;
this.$reactionAssassin = this.$defaultReaction;
this.$reactionHunter = this.$defaultReaction;
this.$reactionTrader = this.$defaultReaction;
this.$reactionAliens = this.$defaultReaction;
this.$reactionOthers = this.$defaultReaction;
this.oxpcSettings = {
Info: {
Name: this.name,
Display: expandDescription("[skilled_config_alias]"),
InfoS: expandDescription("[skilled_config_sint_info]"),
InfoB: expandDescription("[skilled_config_bool_info]")
},
SInt0: { Name: "$baseline", Def: 0, Max: 10, Desc: expandDescription("[skilled_oxpc_difficulty_level]") },
Bool0: { Name: "$boostPirate", Def: true, Desc: expandDescription("[skilled_oxpc_pirates_assassins]") },
Bool1: { Name: "$boostHunter", Def: true, Desc: expandDescription("[skilled_oxpc_police_hunter]") },
Bool2: { Name: "$boostTrader", Def: true, Desc: expandDescription("[skilled_oxpc_trader]") },
Bool3: { Name: "$boostAliens", Def: true, Desc: expandDescription("[skilled_oxpc_thargoid]") },
Bool4: { Name: "$boostOthers", Def: false, Desc: expandDescription("[skilled_oxpc_other]") }
};
this.libSettings = {
Name: this.name,
Display: expandDescription("[skilled_config_display]"),
Alias: expandDescription("[skilled_config_alias]"),
Alive: "libSettings",
Bool: {
B0: { Name: "$boostPirate", Def: true, Desc: expandDescription("[skilled_boost_pirates]") },
B1: { Name: "$boostAssassin", Def: true, Desc: expandDescription("[skilled_boost_assassins]") },
B2: { Name: "$boostHunter", Def: true, Desc: expandDescription("[skilled_boost_hunters_police]") },
B3: { Name: "$boostTrader", Def: true, Desc: expandDescription("[skilled_boost_traders]") },
B4: { Name: "$boostAliens", Def: true, Desc: expandDescription("[skilled_boost_thargoids]") },
B5: { Name: "$boostOthers", Def: false, Desc: expandDescription("[skilled_boost_others]") },
Info: expandDescription("[skilled_config_bool_info]")
},
SInt: {
S0: { Name: "$baselinePirate", Def: 0, Min: 0, Max: 10, Desc: expandDescription("[skilled_baseline_pirates]") },
S1: { Name: "$baselineAssassin", Def: 0, Min: 0, Max: 10, Desc: expandDescription("[skilled_baseline_assassins]") },
S2: { Name: "$baselineHunter", Def: 0, Min: 0, Max: 10, Desc: expandDescription("[skilled_baseline_hunters]") },
S3: { Name: "$baselineTrader", Def: 0, Min: 0, Max: 10, Desc: expandDescription("[skilled_baseline_traders]") },
S4: { Name: "$baselineAliens", Def: 0, Min: 0, Max: 10, Desc: expandDescription("[skilled_baseline_aliens]") },
S5: { Name: "$baselineOthers", Def: 0, Min: 0, Max: 10, Desc: expandDescription("[skilled_baseline_others]") },
Info: expandDescription("[skilled_config_sint_info]")
},
};
this.libSettings2 = {
Name: this.name,
Display: expandDescription("[skilled_config_display2]"),
Alias: expandDescription("[skilled_config_alias]"),
Alive: "libSettings2",
SInt: {
S0: { Name: "$reactionPirate", Def: 1.5, Float: 1, Min: 0.1, Max: 3, Desc: expandDescription("[skilled_reaction_pirates]") },
S1: { Name: "$reactionAssassin", Def: 1.5, Float: 1, Min: 0.1, Max: 3, Desc: expandDescription("[skilled_reaction_assassins]") },
S2: { Name: "$reactionHunter", Def: 1.5, Float: 1, Min: 0.1, Max: 3, Desc: expandDescription("[skilled_reaction_hunters]") },
S3: { Name: "$reactionTrader", Def: 1.5, Float: 1, Min: 0.1, Max: 3, Desc: expandDescription("[skilled_reaction_traders]") },
S4: { Name: "$reactionAliens", Def: 1.5, Float: 1, Min: 0.1, Max: 3, Desc: expandDescription("[skilled_reaction_aliens]") },
S5: { Name: "$reactionOthers", Def: 1.5, Float: 1, Min: 0.1, Max: 3, Desc: expandDescription("[skilled_reaction_others]") },
Info: expandDescription("[skilled_config2_sint_info]")
},
};
this._trueValues = ["yes", "1", 1, "true", true];
this.startUp = function () {
if (worldScripts.Lib_Config) {
if (missionVariables.SkilledNPC_Baseline) this.$baseline = parseInt(missionVariables.SkilledNPC_Baseline);
if (missionVariables.SkilledNPC_BaselinePirate) this.$baselinePirate = parseInt(missionVariables.SkilledNPC_BaselinePirate);
else this.$baselinePirate = this.$baseline;
if (missionVariables.SkilledNPC_BaselineAssassin) this.$baselineAssassin = parseInt(missionVariables.SkilledNPC_BaselineAssassin);
else this.$baselineAssassin = this.$baselinePirate;
if (missionVariables.SkilledNPC_BaselineHunter) this.$baselineHunter = parseInt(missionVariables.SkilledNPC_BaselineHunter);
else this.$baselineHunter = this.$baseline;
if (missionVariables.SkilledNPC_BaselineTrader) this.$baselineTrader = parseInt(missionVariables.SkilledNPC_BaselineTrader);
else this.$baselineTrader = this.$baseline;
if (missionVariables.SkilledNPC_BaselineAliens) this.$baselineAliens = parseInt(missionVariables.SkilledNPC_BaselineAliens);
else this.$baselineAliens = this.$baseline;
if (missionVariables.SkilledNPC_BaselineOthers) this.$baselineOthers = parseInt(missionVariables.SkilledNPC_BaselineOthers);
else this.$baselineOthers = this.$baseline;
if (missionVariables.SkilledNPC_DefaultReaction) this.$defaultReaction = parseFloat(missionVariables.SkilledNPC_DefaultReaction);
if (missionVariables.SkilledNPC_ReactionPirate) this.$reactionPirate = parseFloat(missionVariables.SkilledNPC_ReactionPirate);
else this.$reactionPirate = this.$defaultReaction;
if (missionVariables.SkilledNPC_ReactionAssassin) this.$reactionAssassin = parseFloat(missionVariables.SkilledNPC_ReactionAssassin);
else this.$reactionAssassin = this.$defaultReaction;
if (missionVariables.SkilledNPC_ReactionHunter) this.$reactionHunter = parseFloat(missionVariables.SkilledNPC_ReactionHunter);
else this.$reactionHunter = this.$defaultReaction;
if (missionVariables.SkilledNPC_ReactionTrader) this.$reactionTrader = parseFloat(missionVariables.SkilledNPC_ReactionTrader);
else this.$reactionTrader = this.$defaultReaction;
if (missionVariables.SkilledNPC_ReactionAliens) this.$reactionAliens = parseFloat(missionVariables.SkilledNPC_ReactionAliens);
else this.$reactionAliens = this.$defaultReaction;
if (missionVariables.SkilledNPC_ReactionOthers) this.$reactionOthers = parseFloat(missionVariables.SkilledNPC_ReactionOthers);
else this.$reactionOthers = this.$defaultReaction;
if (missionVariables.SkilledNPC_BoostPirate) this.$boostPirate = (this._trueValues.indexOf(missionVariables.SkilledNPC_BoostPirate) >= 0 ? true : false);
if (missionVariables.SkilledNPC_BoostAssassin) this.$boostAssassin = (this._trueValues.indexOf(missionVariables.SkilledNPC_BoostAssassin) >= 0 ? true : false);
if (missionVariables.SkilledNPC_BoostHunter) this.$boostHunter = (this._trueValues.indexOf(missionVariables.SkilledNPC_BoostHunter) >= 0 ? true : false);
if (missionVariables.SkilledNPC_BoostTrader) this.$boostTrader = (this._trueValues.indexOf(missionVariables.SkilledNPC_BoostTrader) >= 0 ? true : false);
if (missionVariables.SkilledNPC_BoostAliens) this.$boostAliens = (this._trueValues.indexOf(missionVariables.SkilledNPC_BoostAliens) >= 0 ? true : false);
if (missionVariables.SkilledNPC_BoostOthers) this.$boostOthers = (this._trueValues.indexOf(missionVariables.SkilledNPC_BoostOthers) >= 0 ? true : false);
// disable OXP config, in preference to Library
if (worldScripts.OXPConfig) {
}
}
}
this.startUpComplete = function () {
// register our settings, if Lib_Config is present
if (worldScripts.Lib_Config) {
worldScripts.Lib_Config._registerSet(this.libSettings);
worldScripts.Lib_Config._registerSet(this.libSettings2);
} else if (worldScripts.OXPConfig) {
this.$baselinePirate = this.$baseline;
this.$baselineAssassin = this.$baseline;
this.$baselineHunter = this.$baseline;
this.$baselineTrader = this.$baseline;
this.$baselineAliens = this.$baseline;
this.$baselineOthers = this.$baseline;
}
}
this.missionScreenOpportunity = function () {
// we need to monitor the baseline setting, in case it gets updated by OXP config
this.$backup = this.$baseline;
}
this.missionScreenEnded = function () {
// check for OXP config changing the baseline
if (worldScripts.OXPConfig) {
if (this.$baseline != this.$backup) {
this.$baselinePirate = this.$baseline;
this.$baselineAssassin = this.$baseline;
this.$baselineHunter = this.$baseline;
this.$baselineTrader = this.$baseline;
this.$baselineAliens = this.$baseline;
this.$baselineOthers = this.$baseline;
}
// if library isn't installed, make sure the assassin flag mirrors the pirate one
if (!worldScripts.Lib_Config) this.$boostAssassin = this.$boostPirate;
}
}
this.playerWillSaveGame = function () {
if (worldScripts.Lib_Config) {
missionVariables.SkilledNPC_Baseline = this.$baseline;
missionVariables.SkilledNPC_BaselinePirate = this.$baselinePirate;
missionVariables.SkilledNPC_BaselineAssassin = this.$baselineAssassin;
missionVariables.SkilledNPC_BaselineHunter = this.$baselineHunter;
missionVariables.SkilledNPC_BaselineTrader = this.$baselineTrader;
missionVariables.SkilledNPC_BaselineAliens = this.$baselineAliens;
missionVariables.SkilledNPC_BaselineOthers = this.$baselineOthers;
missionVariables.SkilledNPC_BoostPirate = this.$boostPirate;
missionVariables.SkilledNPC_BoostAssassin = this.$boostAssassin;
missionVariables.SkilledNPC_BoostHunter = this.$boostHunter;
missionVariables.SkilledNPC_BoostTrader = this.$boostTrader;
missionVariables.SkilledNPC_BoostAliens = this.$boostAliens;
missionVariables.SkilledNPC_BoostOthers = this.$boostOthers;
missionVariables.SkilledNPC_ReactionPirate = this.$reactionPirate;
missionVariables.SkilledNPC_ReactionAssassin = this.$reactionAssassin;
missionVariables.SkilledNPC_ReactionHunter = this.$reactionHunter;
missionVariables.SkilledNPC_ReactionTrader = this.$reactionTrader;
missionVariables.SkilledNPC_ReactionAliens = this.$reactionAliens;
missionVariables.SkilledNPC_ReactionOthers = this.$reactionOthers;
}
}
this.shipSpawned = function (ship) {
if (ship.accuracy >= 5) {
return; // already been custom-set, so don't adjust it
}
if (!ship.autoWeapons) {
return; // ship does not agree to 3rd-party adjustments
}
var role = ship.primaryRole;
if (ship.scriptInfo.skilled_npc_role) {
role = ship.scriptInfo.skilled_npc_role;
}
var gov = System.infoForSystem(galaxyNumber, ship.homeSystem).government;
switch (role) {
case "off":
break; // never boosted, ever, even if has auto_weapons for other purposes
case "assassin-light":
case "assassin-medium":
case "assassin-heavy":
if (!this.$boostAssassin) break;
if (ship.accuracy < 0) {
ship.accuracy = -ship.accuracy;
}
ship.accuracy += this.$baselineAssassin;
ship.accuracy += Math.random() * (7 - gov);
if (ship.accuracy < (7 - gov)) {
ship.accuracy += (7 - gov) * 0.75;
}
ship.reactionTime = this.$reactionAssassin;
break;
case "pirate":
case "pirate-light-fighter":
case "pirate-medium-fighter":
case "pirate-heavy-fighter":
case "pirate-light-freighter":
case "pirate-medium-freighter":
case "pirate-heavy-freighter":
case "pirate-interceptor":
case "pirate-aegis-raider":
if (!this.$boostPirate) break;
if (ship.accuracy < 0) {
ship.accuracy = -ship.accuracy;
}
ship.accuracy += this.$baselinePirate;
ship.accuracy += Math.random() * (7 - gov);
if (ship.accuracy < (7 - gov)) {
ship.accuracy += (7 - gov) * 0.75;
}
ship.reactionTime = this.$reactionPirate;
break;
case "hunter":
case "hunter-medium":
case "hunter-heavy":
if (!this.$boostHunter) break;
if (ship.accuracy < 0) {
ship.accuracy = -ship.accuracy;
}
ship.accuracy += this.$baselineHunter;
ship.accuracy += Math.random() * (gov);
if (ship.accuracy < (gov)) {
ship.accuracy += (gov) * 0.75;
}
ship.reactionTime = this.$reactionHunter;
break;
case "escort":
case "escort-medium":
case "escort-heavy":
case "defense_ship":
if (!this.$boostTrader) break;
if (ship.accuracy < 0) {
ship.accuracy = -ship.accuracy;
}
ship.accuracy += this.$baseline;
if (ship.scanClass == "CLASS_POLICE") {
ship.accuracy *= 2;
}
ship.accuracy += Math.random() * 5;
if (ship.escortGroup.leader && ship.accuracy < ship.escortGroup.leader.accuracy) {
ship.accuracy += Math.random() * ship.escortGroup.leader.accuracy;
}
ship.reactionTime = this.$reactionTrader;
break;
case "miner":
case "scavenger":
case "trader":
case "trader-courier":
case "trader-smuggler":
if (!this.$boostTrader) break;
if (ship.accuracy < 0) {
ship.accuracy = -ship.accuracy;
}
ship.accuracy += this.$baselineTrader;
ship.accuracy += Math.random() * (7 - gov) * 0.5;
ship.reactionTime = this.$reactionTrader;
break;
case "police":
case "interceptor":
case "wingman":
if (!this.$boostHunter) break;
if (ship.accuracy < 0) {
ship.accuracy = -ship.accuracy;
}
ship.accuracy += this.$baselineHunter;
ship.accuracy *= 2;
ship.accuracy += Math.random() * gov;
ship.reactionTime = this.$reactionHunter;
break;
case "thargoid":
case "thargon":
case "griff_robot_thargon":
case "griff_organic_thargon":
if (!this.$boostAliens) break;
if (ship.accuracy < 0) {
ship.accuracy = -ship.accuracy;
}
ship.accuracy += this.$baselineAliens;
ship.accuracy *= 2;
ship.reactionTime = this.$reactionAliens;
break;
default:
if (!this.$boostOthers) break;
if (ship.accuracy < 0) {
ship.accuracy = -ship.accuracy;
}
ship.accuracy += this.$baselineOthers;
ship.accuracy += Math.random() * this.$baselineOthers;
ship.reactionTime = this.$reactionOthers;
}
} |