From de0f891d5272e7802b701a9509af276cc6a28941 Mon Sep 17 00:00:00 2001 From: Daniel Xie Date: Sat, 11 Aug 2018 20:05:32 -0500 Subject: [PATCH] Various rebalances to Bladeburner: Buffed Augmentations. Simulacrum costs less rep but more money. Slightly more money gained from contracts. Operations give more rank. More Synthoid communities. Added getBonusTime() and getSkillUpgradeCost() to Bladeburner API. Operation count increases faster and is more randomized. Decreased rate at which contracts/ops level up --- doc/source/netscriptbladeburnerapi.rst | 31 ++++++++++- doc/source/netscriptfunctions.rst | 6 +-- doc/source/netscripthacknetnodeapi.rst | 2 + netscript.js | 5 +- src/Augmentations.js | 64 +++++++++++----------- src/Bladeburner.js | 73 +++++++++++++++++--------- src/Constants.js | 14 ++++- src/NetscriptFunctions.js | 25 ++++++++- src/engine.js | 1 + 9 files changed, 155 insertions(+), 66 deletions(-) diff --git a/doc/source/netscriptbladeburnerapi.rst b/doc/source/netscriptbladeburnerapi.rst index 4313d6aee..68cbebeee 100644 --- a/doc/source/netscriptbladeburnerapi.rst +++ b/doc/source/netscriptbladeburnerapi.rst @@ -235,18 +235,30 @@ getSkillLevel .. js:function:: getSkillLevel(skillName="") - :param string skillName: Name of skill + :param string skillName: Name of skill. Case-sensitive and must be an exact match This function returns your level in the specified skill. The function returns -1 if an invalid skill name is passed in + +getSkillUpgradeCost +------------------- + +.. js:function:: getSkillUpgradeCost(skillName="") + + :param string skillName: Name of skill. Case-sensitive and must be an exact match + + This function returns the number of skill points needed to upgrade the + specified skill. + + The function returns -1 if an invalid skill name is passed in. upgradeSkill ------------ .. js:function:: upgradeSkill(skillName) - :param string skillName: Name of Skill to be upgraded. Must be an exact match + :param string skillName: Name of Skill to be upgraded. Case-sensitive and must be an exact match Attempts to upgrade the specified Bladeburner skill. Returns true if the skill is successfully upgraded, and false otherwise @@ -357,6 +369,21 @@ joinBladeburnerDivision are already a member. Returns false otherwise + +getBonusTime +------------ + +.. js:function:: getBonusTime() + + Returns the amount of accumulated "bonus time" (seconds) for the Bladeburner mechanic. + + "Bonus time" is accumulated when the game is offline or if the game is + inactive in the browser. + + "Bonus time" makes the game progress faster, up to 5x the normal speed. + For example, if an action takes 30 seconds to complete but you've accumulated + over 30 seconds in bonus time, then the action will only take 6 seconds + in real life to complete. Examples -------- diff --git a/doc/source/netscriptfunctions.rst b/doc/source/netscriptfunctions.rst index e7af06a6a..514a3d484 100644 --- a/doc/source/netscriptfunctions.rst +++ b/doc/source/netscriptfunctions.rst @@ -659,16 +659,14 @@ getNextHacknetNodeCost .. js:function:: getNextHacknetNodeCost() - Returns the cost of purchasing a new Hacknet Node + Deprecated (no longer usable). See :doc:`netscripthacknetnodeapi` purchaseHacknetNode ^^^^^^^^^^^^^^^^^^^ .. js:function:: purchaseHacknetNode() - Purchases a new Hacknet Node. Returns a number with the index of the Hacknet Node. This index is equivalent to the number at the - end of the Hacknet Node's name (e.g The Hacknet Node named 'hacknet-node-4' will have an index of 4). If the player cannot afford - to purchase a new Hacknet Node then the function will return false. + Deprecated (no longer usable). See :doc:`netscripthacknetnodeapi` getPurchasedServerCost ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/source/netscripthacknetnodeapi.rst b/doc/source/netscripthacknetnodeapi.rst index 701203a0a..f506d37a1 100644 --- a/doc/source/netscripthacknetnodeapi.rst +++ b/doc/source/netscripthacknetnodeapi.rst @@ -1,3 +1,5 @@ +.. _netscripthacknetnodeapi: + Netscript Hacknet Node API ========================== diff --git a/netscript.js b/netscript.js index 8089c1779..b632dfdaa 100644 --- a/netscript.js +++ b/netscript.js @@ -100,9 +100,10 @@ let NetscriptFunctions = "getActionTime|getActionEstimatedSuccessChance|getActionCountRemaining|" + "getActionMaxLevel|getActionCurrentLevel|getActionAutolevel|" + "setActionAutolevel|setActionLevel|" + - "getRank|getSkillPoints|getSkillLevel|upgradeSkill|getTeamSize|" + + "getRank|getSkillPoints|getSkillLevel|getSkillUpgradeCost|" + + "upgradeSkill|getTeamSize|" + "setTeamSize|getCityEstimatedPopulation|getCityEstimatedCommunities|" + - "getCityChaos|switchCity|getStamina|joinBladeburnerFaction"; + "getCityChaos|switchCity|getStamina|joinBladeburnerFaction|getBonusTime"; var NetscriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ diff --git a/src/Augmentations.js b/src/Augmentations.js index eb74714a0..66c7d1a4f 100644 --- a/src/Augmentations.js +++ b/src/Augmentations.js @@ -1575,7 +1575,7 @@ function initAugmentations() { "AR HUD and assist the user in field missions.

" + "This augmentation:
" + "Increases the player's success chance in Bladeburner contracts/operations by 3%.
" + - "Increases the player's dexterity by 3%." + "Increases the player's dexterity by 5%." }); EsperEyewear.addToFactions([BladeburnersFactionName]); resetAugmentation(EsperEyewear); @@ -1589,7 +1589,7 @@ function initAugmentations() { "This augmentation:
" + "Increases the player's sucess chance in Bladeburner contracts/operations by 3%.
" + "Increases the player's effectiveness in Bladeburner Field Analysis by 5%.
" + - "Increases the player's Bladeburner stamina gain rate by 1%." + "Increases the player's Bladeburner stamina gain rate by 2%." }); EMS4Recombination.addToFactions([BladeburnersFactionName]); resetAugmentation(EMS4Recombination); @@ -1602,7 +1602,7 @@ function initAugmentations() { "crystallized graphene plating.

" + "This augmentation:
" + "Increases the player's defense by 5%.
" + - "Increases the player's strength and dexterity by 3%.
" + + "Increases the player's strength and dexterity by 5%.
" + "Increases the player's success chance in Bladeburner contracts/operations by 4%." }); OrionShoulder.addToFactions([BladeburnersFactionName]); @@ -1617,7 +1617,7 @@ function initAugmentations() { "it can also be effective against non-augmented enemies due to its high temperature " + "and concussive force.

" + "This augmentation:
" + - "Increases the player's success chance in Bladeburner contracts/operations by 5%." + "Increases the player's success chance in Bladeburner contracts/operations by 6%." }); HyperionV1.addToFactions([BladeburnersFactionName]); resetAugmentation(HyperionV1); @@ -1629,7 +1629,7 @@ function initAugmentations() { "more power-efficiency, more accurate, and can fire plasma bolts at a much " + "higher velocity than the V1 model.

" + "This augmentation:
" + - "Increases the player's success chance in Bladeburner contracts/operations by 7%.", + "Increases the player's success chance in Bladeburner contracts/operations by 8%.", prereqs:[AugmentationNames.HyperionV1] }); HyperionV2.addToFactions([BladeburnersFactionName]); @@ -1642,7 +1642,7 @@ function initAugmentations() { "serum was originally developed by the Chinese military in an attempt to " + "create super soldiers.

" + "This augmentation:
" + - "Increases all of the player's combat stats by 5%.
" + + "Increases all of the player's combat stats by 7%.
" + "Increases the player's Bladeburner stamina gain rate by 5%.
" }); GolemSerum.addToFactions([BladeburnersFactionName]); @@ -1655,7 +1655,7 @@ function initAugmentations() { "This augmentation:
" + "Increases the player's effectiveness in Bladeburner Field Analysis by 10%.
" + "Increases the player's success chance in Bladeburner contracts/operations by 4%.
" + - "Increases the player's dexterity experience gain rate by 5%." + "Increases the player's dexterity experience gain rate by 10%." }); VangelisVirus.addToFactions([BladeburnersFactionName]); resetAugmentation(VangelisVirus); @@ -1668,7 +1668,7 @@ function initAugmentations() { "agility/reflexes.

" + "This augmentation:
" + "Increases the player's effectiveness in Bladeburner Field Analysis by 15%.
" + - "Increases the player's defense and dexterity experience gain rate by 5%.
" + + "Increases the player's defense and dexterity experience gain rate by 10%.
" + "Increases the player's success chance in Bladeburner contracts/operations by 5%.", prereqs:[AugmentationNames.VangelisVirus] }); @@ -1682,7 +1682,7 @@ function initAugmentations() { "structurally support the body and grants heightened strength and " + "durability.

" + "This augmentation:
" + - "Increases the player's experience gain rate for all combat stats by 4%.
" + + "Increases the player's experience gain rate for all combat stats by 5%.
" + "Increases the player's Bladeburner max stamina by 10%." }); INTERLINKED.addToFactions([BladeburnersFactionName]); @@ -1709,7 +1709,7 @@ function initAugmentations() { "concussive, thermal, chemical, and electric trauma. It also enhances the user's " + "strength and agility.

" + "This augmentation:
" + - "Increases all of the player's combat stats by 2%.
" + + "Increases all of the player's combat stats by 4%.
" + "Increases the player's Bladeburner stamina gain rate by 2%.
" + "Increases the player's success chance in Bladeburner contracts/operations by 3%.", }); @@ -1780,7 +1780,7 @@ function initAugmentations() { resetAugmentation(BladeArmorIPU); var BladesSimulacrum = new Augmentation({ - name:AugmentationNames.BladesSimulacrum, repCost:6e3, moneyCost:75e9, + name:AugmentationNames.BladesSimulacrum, repCost:3e3, moneyCost:80e9, info:"A highly-advanced matter phase-shifter module that is embedded " + "in the brainstem and cerebellum. This augmentation allows " + "the user to project and control a holographic simulacrum within an " + @@ -2297,48 +2297,48 @@ function applyAugmentation(aug, reapply=false) { //Bladeburner augmentations case AugmentationNames.EsperEyewear: Player.bladeburner_success_chance_mult *= 1.03; - Player.dexterity_mult *= 1.03; + Player.dexterity_mult *= 1.05; break; case AugmentationNames.EMS4Recombination: Player.bladeburner_success_chance_mult *= 1.03; Player.bladeburner_analysis_mult *= 1.05; - Player.bladeburner_stamina_gain_mult *= 1.01; + Player.bladeburner_stamina_gain_mult *= 1.02; break; case AugmentationNames.OrionShoulder: Player.defense_mult *= 1.05; - Player.strength_mult *= 1.03; - Player.dexterity_mult *= 1.03; + Player.strength_mult *= 1.05; + Player.dexterity_mult *= 1.05; Player.bladeburner_success_chance_mult *= 1.04; break; case AugmentationNames.HyperionV1: - Player.bladeburner_success_chance_mult *= 1.05; + Player.bladeburner_success_chance_mult *= 1.06; break; case AugmentationNames.HyperionV2: - Player.bladeburner_success_chance_mult *= 1.07; + Player.bladeburner_success_chance_mult *= 1.08; break; case AugmentationNames.GolemSerum: - Player.strength_mult *= 1.05; - Player.defense_mult *= 1.05; - Player.dexterity_mult *= 1.05; - Player.agility_mult *= 1.05; + Player.strength_mult *= 1.07; + Player.defense_mult *= 1.07; + Player.dexterity_mult *= 1.07; + Player.agility_mult *= 1.07; Player.bladeburner_stamina_gain_mult *= 1.05; break; case AugmentationNames.VangelisVirus: - Player.dexterity_exp_mult *= 1.05; + Player.dexterity_exp_mult *= 1.1; Player.bladeburner_analysis_mult *= 1.1; Player.bladeburner_success_chance_mult *= 1.04; break; case AugmentationNames.VangelisVirus3: - Player.defense_exp_mult *= 1.05; - Player.dexterity_exp_mult *= 1.05; + Player.defense_exp_mult *= 1.1; + Player.dexterity_exp_mult *= 1.1; Player.bladeburner_analysis_mult *= 1.15; Player.bladeburner_success_chance_mult *= 1.05; break; case AugmentationNames.INTERLINKED: - Player.strength_exp_mult *= 1.04; - Player.defense_exp_mult *= 1.04; - Player.dexterity_exp_mult *= 1.04; - Player.agility_exp_mult *= 1.04; + Player.strength_exp_mult *= 1.05; + Player.defense_exp_mult *= 1.05; + Player.dexterity_exp_mult *= 1.05; + Player.agility_exp_mult *= 1.05; Player.bladeburner_max_stamina_mult *= 1.1; break; case AugmentationNames.BladeRunner: @@ -2347,10 +2347,10 @@ function applyAugmentation(aug, reapply=false) { Player.bladeburner_stamina_gain_mult *= 1.05; break; case AugmentationNames.BladeArmor: - Player.strength_mult *= 1.02; - Player.defense_mult *= 1.02; - Player.dexterity_mult *= 1.02; - Player.agility_mult *= 1.02; + Player.strength_mult *= 1.04; + Player.defense_mult *= 1.04; + Player.dexterity_mult *= 1.04; + Player.agility_mult *= 1.04; Player.bladeburner_stamina_gain_mult *= 1.02; Player.bladeburner_success_chance_mult *= 1.03; break; diff --git a/src/Bladeburner.js b/src/Bladeburner.js index 9bee0aa0c..dd5bd7d7e 100644 --- a/src/Bladeburner.js +++ b/src/Bladeburner.js @@ -62,12 +62,12 @@ var ActionCountGrowthPeriod = 300; //Time (s) it takes for action count to g var RankToFactionRepFactor = 2; //Delta Faction Rep = this * Delta Rank var RankNeededForFaction = 25; -var ContractSuccessesPerLevel = 3; //How many successes you need to level up a contract -var OperationSuccessesPerLevel = 2.5; //How many successes you need to level up an op +var ContractSuccessesPerLevel = 3.5; //How many successes you need to level up a contract +var OperationSuccessesPerLevel = 3; //How many successes you need to level up an op var RanksPerSkillPoint = 4; //How many ranks needed to get 1 Skill Point -var ContractBaseMoneyGain = 40e3; //Base Money Gained per contract +var ContractBaseMoneyGain = 50e3; //Base Money Gained per contract //DOM related variables var ActiveActionCssClass = "bladeburner-active-action"; @@ -214,8 +214,8 @@ function City(params={}) { this.popEst = this.pop * (Math.random() + 0.5); //Number of Synthoid communities population and estimate - this.comms = params.comms ? params.comms : getRandomInt(1, 40); - this.commsEst = this.comms + getRandomInt(-2, 2); + this.comms = params.comms ? params.comms : getRandomInt(5, 100); + this.commsEst = this.comms + getRandomInt(-5, 5); if (this.commsEst < 0) {this.commsEst = 0;} this.chaos = 0; } @@ -734,7 +734,7 @@ Bladeburner.prototype.create = function() { "whatever city you are currently in.", baseDifficulty:125,difficultyFac:1.02,rewardFac:1.041, rankGain:0.3, hpLoss:0.5, - count:getRandomInt(300, 800), countGrowth:getRandomInt(1, 5), + count:getRandomInt(100, 500), countGrowth:getRandomInt(5, 75)/10, weights:{hack:0,str:0.05,def:0.05,dex:0.35,agi:0.35,cha:0.1, int:0.05}, decays:{hack:0,str:0.91,def:0.91,dex:0.91,agi:0.91,cha:0.9, int:1}, isStealth:true @@ -746,7 +746,7 @@ Bladeburner.prototype.create = function() { "current city, and will also increase its chaos level.", baseDifficulty:250, difficultyFac:1.04,rewardFac:1.085, rankGain:0.9, hpLoss:1, - count:getRandomInt(200, 750), countGrowth:getRandomInt(1, 3), + count:getRandomInt(25, 750), countGrowth:getRandomInt(5, 75)/10, weights:{hack:0,str:0.15,def:0.15,dex:0.25,agi:0.25,cha:0.1, int:0.1}, decays:{hack:0,str:0.91,def:0.91,dex:0.91,agi:0.91,cha:0.8, int:0.9}, isKill:true @@ -758,7 +758,7 @@ Bladeburner.prototype.create = function() { "city, and will also increase its chaos level.", baseDifficulty:200, difficultyFac:1.03, rewardFac:1.065, rankGain:0.6, hpLoss:1, - count:getRandomInt(300, 900), countGrowth:getRandomInt(1,4), + count:getRandomInt(50, 1000), countGrowth:getRandomInt(5,75)/10, weights:{hack:0,str:0.2,def:0.2,dex:0.2,agi:0.2,cha:0.1, int:0.1}, decays:{hack:0,str:0.91,def:0.91,dex:0.91,agi:0.91,cha:0.8, int:0.9}, isKill:true @@ -772,8 +772,8 @@ Bladeburner.prototype.create = function() { "synthoid data.

" + "You will NOT lose HP from failed Investigation ops.", baseDifficulty:400, difficultyFac:1.03,rewardFac:1.07,reqdRank:25, - rankGain:2, rankLoss:0.2, - count:getRandomInt(50, 400), countGrowth:1, + rankGain:2.2, rankLoss:0.2, + count:getRandomInt(50, 200), countGrowth:getRandomInt(10, 40)/10, weights:{hack:0.25,str:0.05,def:0.05,dex:0.2,agi:0.1,cha:0.25, int:0.1}, decays:{hack:0.85,str:0.9,def:0.9,dex:0.9,agi:0.9,cha:0.7, int:0.9}, isStealth:true @@ -785,8 +785,8 @@ Bladeburner.prototype.create = function() { "Successful Undercover ops will increase the accuracy of your synthoid " + "data.", baseDifficulty:500, difficultyFac:1.04, rewardFac:1.09, reqdRank:100, - rankGain:4, rankLoss:0.4, hpLoss:2, - count:getRandomInt(50, 300), countGrowth:1, + rankGain:4.4, rankLoss:0.4, hpLoss:2, + count:getRandomInt(25, 300), countGrowth:getRandomInt(10, 40)/10, weights:{hack:0.2,str:0.05,def:0.05,dex:0.2,agi:0.2,cha:0.2, int:0.1}, decays:{hack:0.8,str:0.9,def:0.9,dex:0.9,agi:0.9,cha:0.7, int:0.9}, isStealth:true @@ -796,8 +796,8 @@ Bladeburner.prototype.create = function() { desc:"Conduct a sting operation to bait and capture particularly " + "notorious Synthoid criminals.", baseDifficulty:650, difficultyFac:1.04, rewardFac:1.095, reqdRank:500, - rankGain:5, rankLoss:0.5, hpLoss:2.5, - count:getRandomInt(25,400), countGrowth:0.75, + rankGain:5.5, rankLoss:0.5, hpLoss:2.5, + count:getRandomInt(25,400), countGrowth:getRandomInt(3, 40)/10, weights:{hack:0.25,str:0.05,def:0.05,dex:0.25,agi:0.1,cha:0.2, int:0.1}, decays:{hack:0.8,str:0.85,def:0.85,dex:0.85,agi:0.85,cha:0.7, int:0.9}, isStealth:true @@ -808,8 +808,8 @@ Bladeburner.prototype.create = function() { "there must be an existing Synthoid community in your current city " + "in order for this Operation to be successful", baseDifficulty:800, difficultyFac:1.045, rewardFac:1.1, reqdRank:3000, - rankGain:50,rankLoss:2.5,hpLoss:50, - count:getRandomInt(25, 150), countGrowth:0.2, + rankGain:55,rankLoss:2.5,hpLoss:50, + count:getRandomInt(25, 150), countGrowth:getRandomInt(2, 40)/10, weights:{hack:0.1,str:0.2,def:0.2,dex:0.2,agi:0.2,cha:0, int:0.1}, decays:{hack:0.7,str:0.8,def:0.8,dex:0.8,agi:0.8,cha:0, int:0.9}, isKill:true @@ -820,8 +820,8 @@ Bladeburner.prototype.create = function() { "objective is to complete the task without " + "drawing any attention. Stealth and discretion are key.", baseDifficulty:1000, difficultyFac:1.05, rewardFac:1.11, reqdRank:20e3, - rankGain:20, rankLoss:2, hpLoss:10, - count:getRandomInt(25, 250), countGrowth:0.1, + rankGain:22, rankLoss:2, hpLoss:10, + count:getRandomInt(25, 250), countGrowth:getRandomInt(1, 20)/10, weights:{hack:0.1,str:0.1,def:0.1,dex:0.3,agi:0.3,cha:0, int:0.1}, decays:{hack:0.7,str:0.8,def:0.8,dex:0.8,agi:0.8,cha:0, int:0.9}, isStealth:true, isKill:true @@ -832,8 +832,8 @@ Bladeburner.prototype.create = function() { "important, high-profile social and political leaders " + "in the Synthoid communities.", baseDifficulty:1500, difficultyFac:1.06, rewardFac:1.14, reqdRank:50e3, - rankGain:40, rankLoss:4, hpLoss:5, - count:getRandomInt(25, 200), countGrowth:0.1, + rankGain:44, rankLoss:4, hpLoss:5, + count:getRandomInt(25, 200), countGrowth:getRandomInt(1, 20)/10, weights:{hack:0.1,str:0.1,def:0.1,dex:0.3,agi:0.3,cha:0, int:0.1}, decays:{hack:0.6,str:0.8,def:0.8,dex:0.8,agi:0.8,cha:0, int:0.8}, isStealth:true, isKill:true @@ -853,8 +853,12 @@ Bladeburner.prototype.process = function() { //If the Player starts doing some other actions, set action to idle and alert if (Augmentations[AugmentationNames.BladesSimulacrum].owned === false && Player.isWorking) { if (this.action.type !== ActionTypes["Idle"]) { - dialogBoxCreate("Your Bladeburner action was cancelled because you started " + - "doing something else"); + let msg = "Your Bladeburner action was cancelled because you started doing something else."; + if (this.automateEnabled) { + msg += `

Your automation was disabled as well. You will have to re-enable it through the Bladeburner console` + this.automateEnabled = false; + } + dialogBoxCreate(msg); } this.resetAction(); } @@ -1339,7 +1343,7 @@ Bladeburner.prototype.completeAction = function() { Player.gainHackingExp(hackingExpGain); Player.gainIntelligenceExp(BaseIntGain); Player.gainCharismaExp(charismaExpGain); - this.changeRank(0.1); + this.changeRank(0.1 * BitNodeMultipliers.BladeburnerRank); console.log("DEBUG: Field Analysis effectiveness is " + (eff * this.skillMultipliers.successChanceEstimate)); this.getCurrentCity().improvePopulationEstimateByPercentage(eff * this.skillMultipliers.successChanceEstimate); if (this.logging.general) { @@ -1528,7 +1532,7 @@ Bladeburner.prototype.randomEvent = function() { var destCity = this.cities[destCityName]; if (!(sourceCity instanceof City) || !(destCity instanceof City)) { - throw new Error("sourceCity was not a City object in Bladeburner.randomEvent()"); + throw new Error("sourceCity/destCity was not a City object in Bladeburner.randomEvent()"); } if (chance <= 0.05) { @@ -3466,6 +3470,27 @@ Bladeburner.prototype.getSkillLevelNetscriptFn = function(skillName, workerScrip } } +Bladeburner.prototype.getSkillUpgradeCostNetscriptFn = function(skillName, workerScript) { + var errorLogText = "ERROR: bladeburner.getSkillUpgradeCostNetscriptFn() failed due to an invalid skill specified: " + + skillName + ". Note that the name of the skill is case-sensitive"; + + if (skillName === "") { + return -1; + } + + if (!Skills.hasOwnProperty(skillName)) { + workerScript.log(errorLogText); + return -1; + } + + var skill = Skills[skillName]; + if (this.skills[skillName] == null) { + return skill.calculateCost(0); + } else { + return skill.calculateCost(this.skills[skillName]); + } +} + Bladeburner.prototype.upgradeSkillNetscriptFn = function(skillName, workerScript) { var errorLogText = "ERROR: bladeburner.upgradeSkill() failed due to an invalid skill specified: " + skillName + ". Note that the name of the skill is case-sensitive"; diff --git a/src/Constants.js b/src/Constants.js index 6f6103869..1490848cd 100644 --- a/src/Constants.js +++ b/src/Constants.js @@ -492,9 +492,21 @@ let CONSTANTS = { LatestUpdate: "v0.40.2
" + + "* Bladeburner Changes:
" + + "*** Added getSkillUpgradeCost() Netscript function to the API
" + + "*** Added getBonusTime() Netscript function to the API
" + + "*** Buffed the effects of many Bladeburner Augmentations
" + + "*** The Blade's Simulacrum Augmentation requires significantly less reputation but slightly more money
" + + "*** Slightly increased the amount of successes needed for a Contract/Operation in order to increase its max level
" + + "*** Increased the amount of money gained from Contracts by ~25%
" + + "*** Increased the base amount of rank gained from Operations by 10%
" + + "*** Significantly increased the 'randomness' in determining a Contract/Operation's initial count and rate of count increase
" + + "*** The number (count) of Operations should now increase significantly faster
" + + "*** There are now, on average, more Synthoid communities in a city
" + + "*** If automation is enabled (the feature in Bladeburner console), then switching to another action such as working for a company will now disable the automation
" + "* Bug Fix: Stock market should now be correctly initialized in BitNode-8 (by Kline-)
" + "* Bug Fix: bladeburner.getCurrentAction() should now properly an 'Idle' object rather than null (by Kline-)
" + - "* Bug Fix: Bladeburner skill cost multiplier should now properly increase in BitNode-12 (by hydroflame)
"; + "* Bug Fix: Bladeburner skill cost multiplier should now properly increase in BitNode-12 (by hydroflame)
" } diff --git a/src/NetscriptFunctions.js b/src/NetscriptFunctions.js index f780f2302..f4b7d305c 100644 --- a/src/NetscriptFunctions.js +++ b/src/NetscriptFunctions.js @@ -5,7 +5,7 @@ import {updateActiveScriptsItems} from "./ActiveScriptsUI"; import {Augmentations, Augmentation, augmentationExists, installAugmentations, AugmentationNames} from "./Augmentations"; -import {BitNodeMultipliers} from "./BitNode"; +import {BitNodeMultipliers} from "./BitNodeMultipliers"; import {determineCrimeSuccess, findCrime} from "./Crimes"; import {Bladeburner} from "./Bladeburner"; import {Companies, Company, CompanyPosition, @@ -3639,6 +3639,21 @@ function NetscriptFunctions(workerScript) { throw makeRuntimeRejectMsg(workerScript, "getSkillLevel() failed because you do not currently have access to the Bladeburner API. This is either because you are not currently employed " + "at the Bladeburner division or because you do not have Source-File 7"); }, + getSkillUpgradeCost : function(skillName="") { + if (workerScript.checkingRam) { + return updateStaticRam("getSkillUpgradeCost", CONSTANTS.ScriptBladeburnerApiBaseRamCost); + } + updateDynamicRam("getSkillUpgradeCost", CONSTANTS.ScriptBladeburnerApiBaseRamCost); + if (Player.bladeburner instanceof Bladeburner && (Player.bitNodeN === 7 || hasBladeburner2079SF)) { + try { + return Player.bladeburner.getSkillUpgradeCostNetscriptFn(skillName, workerScript); + } catch(e) { + throw makeRuntimeRejectMsg(workerScript, "Bladeburner.getSkillUpgradeCost() failed with exception: " + e); + } + } + throw makeRuntimeRejectMsg(workerScript, "getSkillUpgradeCost() failed because you do not currently have access to the Bladeburner API. This is either because you are not currently employed " + + "at the Bladeburner division or because you do not have Source-File 7"); + }, upgradeSkill : function(skillName) { if (workerScript.checkingRam) { return updateStaticRam("upgradeSkill", CONSTANTS.ScriptBladeburnerApiBaseRamCost); @@ -3786,6 +3801,14 @@ function NetscriptFunctions(workerScript) { } throw makeRuntimeRejectMsg(workerScript, "joinBladeburnerDivision() failed because you do not currently have access to the Bladeburner API. This is either because you are not currently employed " + "at the Bladeburner division or because you do not have Source-File 7"); + }, + getBonusTime : function() { + if (workerScript.checkingRam) {return 0;} + if ((Player.bitNodeN === 7 || hasBladeburner2079SF)) { + return Math.round(Player.bladeburner.storedCycles / 5); + } + throw makeRuntimeRejectMsg(workerScript, "getBonusTime() failed because you do not currently have access to the Bladeburner API. This is either because you are not currently employed " + + "at the Bladeburner division or because you do not have Source-File 7"); } } } //End return diff --git a/src/engine.js b/src/engine.js index 202c0ca51..8ea543dcd 100644 --- a/src/engine.js +++ b/src/engine.js @@ -153,6 +153,7 @@ $(document).keydown(function(e) { let Engine = { version: "", Debug: true, + overview: new CharacterOverview(), //Clickable objects Clickables: {