diff --git a/src/Augmentations.js b/src/Augmentations.js index f15c457ec..1d6745913 100644 --- a/src/Augmentations.js +++ b/src/Augmentations.js @@ -50,8 +50,6 @@ AddToAugmentations = function(aug) { //TODO Set descriptions for all //TODO Something that decreases RAM usage of scripts -//TODO SOmething that increases rate at which you gain faction respect -// Similarly. something that helps you gain company reputation initAugmentations = function() { //Combat stat augmentations var Targeting1 = new Augmentation("Augmented Targeting I"); @@ -171,7 +169,7 @@ initAugmentations = function() { ArtificialSynapticPotentiation.addToFactions("The Black Hand", "NiteSec"); AddToAugmentations(ArtificialSynapticPotentiation); - var EnhancedMyelinSheathing = new Augmentation("Enhanced Myelin Sheating"); + var EnhancedMyelinSheathing = new Augmentation("Enhanced Myelin Sheathing"); EnhancedMyelinSheathing.setRequirements(900000, 850000000);) EnhancedMyelinSheating.addToFactions("Fulcrum Secret Technologies", "BitRunners", "The Black Hand"); AddToAugmentations(EnhancedMyelinSheathing); @@ -187,7 +185,7 @@ initAugmentations = function() { AddToAugmentations(NeuralRetentionEnhancement); var DataJack = new Augmentation("DataJack"); - DataJack.setRequirements(750000, 750000000); + DataJack.setRequirements(750000, 75000000); DataJack.addToFactions("BitRunners", "The Black Hand", "NiteSec", "Chongqing", "New Tokyo"); AddToAugmentations(DataJack); @@ -294,141 +292,202 @@ applyAugmentation = function(aug, faction) { switch(aug.name) { //Combat stat augmentations case "Augmented Targeting I": - //Dex 5% + Player.dexterity_mult *= 1.1; break; case "Augmented Targeting II": - //Dex 5% + Player.dexterity_mult *= 1.2; break; case "Augmented Targeting III": - //Dex 5% + Player.dexterity_mult *= 1.5; break; - case "Synthetic Heart": - //Agi and Str - HIGH LEVEL + case "Synthetic Heart": //High level + Player.agility_mult *= 2.0; + Player.strength_mult *= 2.0; break; - case "Synfibril Muscle": - //Strength and Defense - MED HIGH LEVEL + case "Synfibril Muscle": //Medium-high level + Player.strength_mult *= 1.5; + Player.defense_mult *= 1.5; break; case "Combat Rib I": //Str and Defense 5% + Player.strength_mult *= 1.1; + Player.defense_mult *= 1.1; break; case "Combat Rib II": + Player.strength_mult *= 1.2; + Player.defense_mult *= 1.2; break; case "Combat Rib III": + Player.strength_mult *= 1.3; + Player.defense_mult *= 1.3; break; - case "Nanofiber Weave": - //str + Defense - MED LEVEL + case "Nanofiber Weave": //Med level + Player.strength_mult *= 1.3; + Player.defense_mult *= 1.3; break; - case "NEMEAN Subdermal Weave": - //Defense - HIGH LEVEL + case "NEMEAN Subdermal Weave": //High level + Player.defense_mult *= 2.5; break; - case "Wired Reflexes": - //Agility - Low level + case "Wired Reflexes": //Low level + Player.agility_mult *= 1.05; break; - case "Graphene Bone Lacings": - //Strength defense - HIGH level + case "Graphene Bone Lacings": //High level + Player.strength_mult *= 2; + Player.defense_mult *= 2; break; - case "Bionic Spine": - //Everything - Medium level + case "Bionic Spine": //Med level + Player.strength_mult *= 1.2; + Player.defense_mult *= 1.2; + Player.agility_mult *= 1.2; + Player.dexterity_mult *= 1.2; break; - case "Graphene Bionic Spine Upgrade": - //Everything - high level + case "Graphene Bionic Spine Upgrade": //High level + Player.strength_mult *= 2; + Player.defense_mult *= 2; + Player.agility_mult *= 2; + Player.dexterity_mult *= 2; break; - case "Bionic Legs": - //Agi - Med level + case "Bionic Legs": //Med level + Player.agility_mult *= 1.5; break; - case "Graphene Bionic Legs Upgrade": - //Agi - HIGH level + case "Graphene Bionic Legs Upgrade": //High level + player.agility_mult *= 3.0; break; //Labor stats augmentations - case "Enhanced Social Interaction Implant": - //Charisma 10% - Med high level + case "Enhanced Social Interaction Implant": //Med-high level + Player.charisma_mult *= 1.5; + Player.charisma_exp_mult *= 1.5; break; - case "Speech Processor Implant": - //Charisma 5% - Med level + case "Speech Processor Implant": //Med level + Player.charisma_mult *= 1.2; break; //Hacking augmentations - case "Artificial Bio-neural Network Implant": - //Hacking speed and money gained - MED Level + case "Artificial Bio-neural Network Implant": //Med level + Player.hacking_speed_mult *= .98; + Player.hacking_money_mult *= 1.1; + Player.hacking_mult *= 1.1; break; - case "Artificial Synaptic Potentiation": - //Hacking speed - MED Level + case "Artificial Synaptic Potentiation": //Med level + Player.hacking_speed_mult *= .99; + Player.hacking_chance_mult *= 1.01; break; - case "Enhanced Myelin Sheating": - //Hacking speed and exp gain - MED Level + case "Enhanced Myelin Sheathing": //Med level + Player.hacking_speed_mult *= .99; + Player.hacking_exp_mult *= 1.05; + Player.hacking_mult *= 1.05; break; - case "Synaptic Enhancement Implant": - //Hacking speed - LOw level + case "Synaptic Enhancement Implant": //Low Level + Player.hacking_speed_mult *= .99; break; - case "Neural-Retention Enhancement": - //Gain 10% more hacking exp - med level + case "Neural-Retention Enhancement": //Med level + Player.hacking_exp_mult *= 1.4; break; - case "DataJack": - //5% more money from hacking - med low level + case "DataJack": //Med low level + Player.hacking_money_mult *= 1.2; break; - case "Embedded Netburner Module": - //Doesn't give anyhting itself but allows user to install - //ENM upgrades in the future, which are very powerful - //Med level + case "Embedded Netburner Module": //Medium level + Player.hacking_mult *= 1.01; break; - case "Embedded Netburner Module Core Implant": - //Hacking speed, money gained, and exp gained - Med level + case "Embedded Netburner Module Core Implant": //Medium level + Player.hacking_speed_mult *= .98; + Player.hacking_money_mult *= 1.1; + Player.hacking_chance_mult *= 1.02; + Player.hacking_exp_mult *= 1.1; + Player.hacking_mult *= 1.01; break; - case "Embedded Netburner Module Core V2 Upgrade": - //Hacking speed, money gained, and exp gained - Med High Level + case "Embedded Netburner Module Core V2 Upgrade": //Medium high level + Player.hacking_speed_mult *= .95; + Player.hacking_money_mult *= 1.5; + Player.hacking_chance_mult *= 1.05; + Player.hacking_exp_mult *= 1.5; + Player.hacking_mult *= 1.05; break; - case "Embedded Netburner Module Core V3 Upgrade": - //Hacking speed, money gained, and exp gained - High level + case "Embedded Netburner Module Core V3 Upgrade": //High level + Player.hacking_speed_mult *= .95; + Player.hacking_money_mult *= 1.5; + Player.hacking_chance_mult *= 1.1; + Player.hacking_exp_mult *= 2.0; + Player.hacking_mult *= 1.1; break; - case "Embedded Netburner Module Analyze Engine": + case "Embedded Netburner Module Analyze Engine": //High level //Hacking speed 20% - High level + Player.hacking_speed_mult *= 0.9; break; - case "Embedded Netburner Module Direct Memory Access Upgrade": + case "Embedded Netburner Module Direct Memory Access Upgrade": //High level //Money hacked 20% - High level + Player.hacking_money_mult *= 1.5; + Player.hacking_chance_mult *= 1.2; break; - case "Neuralstimulator": - //Hacking speed, money gained, and exp gained - Med level + case "Neuralstimulator": //Medium Level + Player.hacking_speed_mult *= .99; + Player.hacking_chance_mult *= 1.1; + Player.hacking_exp_mult *= 1.2; break; - case "PC Direct-Neural Interface NeuroNet Injector": - //Hacking speed increases - break; - + //Work augmentations - case "Nuoptimal Nootropic Injector Implant": - //Increase in gains for software, IT, and Business jobs - Low Med Level + case "Nuoptimal Nootropic Injector Implant": //Low medium level + Player.company_rep_mult *= 1.1; break; - case "Speech Enhancement": - //Increase in business jobs and reputation gained - Low Level + case "Speech Enhancement": //Low level + Player.company_rep_mult *= 1.05; + Player.charisma_mult *= 1.05; break; - case "FocusWire": - //Increase in all gains and reputation gained - Med Level + case "FocusWire": //Med level + Player.hacking_exp_mult *= 1.1; + Player.strength_exp_mult *= 1.1; + Player.defense_exp_mult *= 1.1; + Player.dexterity_exp_mult *= 1.1; + Player.agility_exp_mult *= 1.1; + Player.charisma_exp_mult *= 1.1; + Player.company_rep_mult *= 1.05; + Player.work_money_mult *= 1.05; break; - case "PC Direct-Neural Interface": - //Allows people to directly communicate interface with PCs..which helps with Software and IT jobs - //Med level + case "PC Direct-Neural Interface": //Med level + Player.company_rep_mult *= 1.1; + Player.hacking_mult *= 1.1; break; - case "PC Direct-Neural Interface Optimization Submodule": + case "PC Direct-Neural Interface Optimization Submodule": //High level //Allows u to better optimize code/pc when connecting with PC DNI..helps with software/IT jobs - //High level + Player.company_rep_mult *= 1.2; + Player.hacking_mult *= 1.2; break; - case "PC Direct-Neural Interface NeuroNet Injector": - //Allow you to use ur brain as aneural net on a computer lol...increases everything - //High Level + case "PC Direct-Neural Interface NeuroNet Injector": //High level + Player.company_rep_mult *= 1.1; + Player.hacking_mult *= 1.1; + Player.hacking_speed_mult *= .98; break; //Misc augmentations - case "Neurotrainer I": - //Increase all exp gains - Low level + case "Neurotrainer I": //Low Level + Player.hacking_exp_mult *= 1.05; + Player.strength_exp_mult *= 1.05; + Player.defense_exp_mult *= 1.05; + Player.dexterity_exp_mult *= 1.05; + Player.agility_exp_mult *= 1.05; + this.charisma_exp_mult *= 1.05; break; - case "Neurotrainer II": - //Increase all exp gains - Med level + case "Neurotrainer II": //Medium level + Player.hacking_exp_mult *= 1.1; + Player.strength_exp_mult *= 1.1; + Player.defense_exp_mult *= 1.1; + Player.dexterity_exp_mult *= 1.1; + Player.agility_exp_mult *= 1.1; + Player.charisma_exp_mult *= 1.1; break; - case "Neurotrainer III": - //Increase all exp gains - High Level + case "Neurotrainer III": //High Level + Player.hacking_exp_mult *= 1.2; + Player.strength_exp_mult *= 1.2; + Player.defense_exp_mult *= 1.2; + Player.dexterity_exp_mult *= 1.2; + Player.agility_exp_mult *= 1.2; + Player.charisma_exp_mult *= 1.2; break; - case "HyperSight Corneal Implant": - //Increases sight..which increases dex..hacking speed + money? - Med high level + case "HyperSight Corneal Implant": //Medium high level + Player.dexterity_mult *= 1.5; + Player.hacking_speed_mult *= .99; + Player.hacking_money_mult *= 1.1; break; default: @@ -438,4 +497,6 @@ applyAugmentation = function(aug, faction) { aug.owned = true; aug.factionInstalledBy = faction.name; + Player.augmentations.push(aug.name); + ++Player.numAugmentations; } \ No newline at end of file diff --git a/src/Netscript/Evaluator.js b/src/Netscript/Evaluator.js index ed4b77b37..f3ead7944 100644 --- a/src/Netscript/Evaluator.js +++ b/src/Netscript/Evaluator.js @@ -522,7 +522,7 @@ function apply_op(op, a, b) { //The same as Player's calculateHackingChance() function but takes in the server as an argument function scriptCalculateHackingChance(server) { var difficultyMult = (100 - server.hackDifficulty) / 100; - var skillMult = (Player.hacking_chance_multiplier * Player.hacking_skill); + var skillMult = (Player.hacking_chance_mult * Player.hacking_skill); var skillChance = (skillMult - server.requiredHackingSkill) / skillMult; return (skillChance * difficultyMult); } @@ -531,7 +531,7 @@ function scriptCalculateHackingChance(server) { function scriptCalculateHackingTime(server) { var difficultyMult = server.requiredHackingSkill * server.hackDifficulty; var skillFactor = (difficultyMult + 500) / (Player.hacking_skill + 50); - var hackingTime = skillFactor * Player.hacking_speed_multiplier; //This is in seconds + var hackingTime = skillFactor * Player.hacking_speed_mult; //This is in seconds return hackingTime; } @@ -544,7 +544,7 @@ function scriptCalculateExpGain(server) { function scriptCalculatePercentMoneyHacked(server) { var difficultyMult = (100 - server.hackDifficulty) / 100; var skillMult = (Player.hacking_skill - (server.requiredHackingSkill - 1)) / Player.hacking_skill; - var percentMoneyHacked = difficultyMult * skillMult * Player.hacking_money_multiplier; + var percentMoneyHacked = difficultyMult * skillMult * Player.hacking_money_mult; console.log("Percent money hacked calculated to be: " + percentMoneyHacked); return percentMoneyHacked; } \ No newline at end of file diff --git a/src/Player.js b/src/Player.js index 37ed1b535..a2a0f8414 100644 --- a/src/Player.js +++ b/src/Player.js @@ -14,10 +14,10 @@ function PlayerObject() { //Intelligence, perhaps? //Hacking multipliers - this.hacking_chance_multiplier = 2; //Increase through ascensions/augmentations - //this.hacking_speed_multiplier = 5; //Decrease through ascensions/augmentations - this.hacking_speed_multiplier = 1; //Make it faster for debugging - this.hacking_money_multiplier = .001; //Increase through ascensions/augmentations. Can't go above 1 + this.hacking_chance_mult = 2; //Increase through ascensions/augmentations + //this.hacking_speed_mult = 5; //Decrease through ascensions/augmentations + this.hacking_speed_mult = 1; //Make it faster for debugging + this.hacking_money_mult = .001; //Increase through ascensions/augmentations. Can't go above 1 //Note: "Lifetime" refers to current ascension, "total" refers to the entire game history //Accumulative stats and skills @@ -42,6 +42,13 @@ function PlayerObject() { this.agility_exp = 0; this.charisma_exp = 0; + this.hacking_mult = 1; + this.strength_mult = 1; + this.defense_mult = 1; + this.dexterity_mult = 1; + this.agility_mult = 1; + this.charisma_mult = 1; + this.hacking_exp_mult = 1; this.strength_exp_mult = 1; this.defense_exp_mult = 1; @@ -151,12 +158,12 @@ PlayerObject.prototype.calculateSkill = function(exp) { PlayerObject.prototype.updateSkillLevels = function() { //TODO Account for total and lifetime stats for achievements and stuff - this.hacking_skill = this.calculateSkill(this.hacking_exp); - this.strength = this.calculateSkill(this.strength_exp); - this.defense = this.calculateSkill(this.defense_exp); - this.dexterity = this.calculateSkill(this.dexterity_exp); - this.agility = this.calculateSkill(this.agility_exp); - this.charisma = this.calculateSkill(this.charisma_exp); + this.hacking_skill = Math.floor(this.calculateSkill(this.hacking_exp) * this.hacking_mult); + this.strength = Math.floor(this.calculateSkill(this.strength_exp) * this.strength_mult); + this.defense = Math.floor(this.calculateSkill(this.defense_exp) * this.defense_mult); + this.dexterity = Math.floor(this.calculateSkill(this.dexterity_exp) * this.dexterity_mult); + this.agility = Math.floor(this.calculateSkill(this.agility_exp) * this.agility_mult); + this.charisma = Math.floor(this.calculateSkill(this.charisma_exp) * this.charisma_mult); } //Calculates the chance of hacking a server @@ -166,7 +173,7 @@ PlayerObject.prototype.updateSkillLevels = function() { // (hacking_chance_multiplier * hacking_skill) 100 PlayerObject.prototype.calculateHackingChance = function() { var difficultyMult = (100 - this.getCurrentServer().hackDifficulty) / 100; - var skillMult = (this.hacking_chance_multiplier * this.hacking_skill); + var skillMult = (this.hacking_chance_mult * this.hacking_skill); var skillChance = (skillMult - this.getCurrentServer().requiredHackingSkill) / skillMult; return (skillChance * difficultyMult); } @@ -179,7 +186,7 @@ PlayerObject.prototype.calculateHackingChance = function() { PlayerObject.prototype.calculateHackingTime = function() { var difficultyMult = this.getCurrentServer().requiredHackingSkill * this.getCurrentServer().hackDifficulty; var skillFactor = (difficultyMult + 500) / (this.hacking_skill + 100); - return skillFactor * this.hacking_speed_multiplier; + return skillFactor * this.hacking_speed_mult; } //Calculates the PERCENTAGE of a server's money that the player will hack from the server if successful @@ -190,7 +197,7 @@ PlayerObject.prototype.calculateHackingTime = function() { PlayerObject.prototype.calculatePercentMoneyHacked = function() { var difficultyMult = (100 - this.getCurrentServer().hackDifficulty) / 100; var skillMult = (this.hacking_skill - (this.getCurrentServer().requiredHackingSkill - 1)) / this.hacking_skill; - var percentMoneyHacked = difficultyMult * skillMult * this.hacking_money_multiplier; + var percentMoneyHacked = difficultyMult * skillMult * this.hacking_money_mult; console.log("Percent money hacked calculated to be: " + percentMoneyHacked); return percentMoneyHacked; } @@ -384,20 +391,20 @@ PlayerObject.prototype.finishFactionWork = function(cancelled, faction) { var faction = Factions[this.currentWorkFactionName]; faction.playerReputation += (this.workRepGained); - this.gainMoney(this.workMoneyGained / cancMult); + this.gainMoney(this.workMoneyGained); this.updateSkillLevels(); var txt = "You worked for your faction " + faction.name + " for a total of " + convertTimeMsToTimeElapsedString(this.timeWorked) + "

" + "You earned a total of:
" + - "$" + (this.workMoneyGained / cancMult).toFixed(2) + "
" + - (this.workRepGained / cancMult).toFixed(3) + " reputation for the company
" + - (this.workHackExpGained / cancMult).toFixed(3) + " hacking exp
" + - (this.workStrExpGained / cancMult).toFixed(3) + " strength exp
" + - (this.workDefExpGained / cancMult).toFixed(3) + " defense exp
" + - (this.workDexExpGained / cancMult).toFixed(3) + " dexterity exp
" + - (this.workAgiExpGained / cancMult).toFixed(3) + " agility exp
" + - (this.workChaExpGained / cancMult).toFixed(3) + " charisma exp
"; + "$" + (this.workMoneyGained).toFixed(2) + "
" + + (this.workRepGained).toFixed(3) + " reputation for the company
" + + (this.workHackExpGained).toFixed(3) + " hacking exp
" + + (this.workStrExpGained).toFixed(3) + " strength exp
" + + (this.workDefExpGained).toFixed(3) + " defense exp
" + + (this.workDexExpGained).toFixed(3) + " dexterity exp
" + + (this.workAgiExpGained).toFixed(3) + " agility exp
" + + (this.workChaExpGained).toFixed(3) + " charisma exp
"; dialogBoxCreate(txt); var mainMenu = document.getElementById("mainmenu-container"); diff --git a/src/Prestige.js b/src/Prestige.js new file mode 100644 index 000000000..11fe3854f --- /dev/null +++ b/src/Prestige.js @@ -0,0 +1,110 @@ +/* Prestige functions */ + +//Prestige by purchasing augmentation +function prestigeAugmentation() { + Player.total_hacking += Player.hacking_skill; + Player.lifetime_hacking += Player.hacking_skill; + Player.total_strength += Player.strength; + Player.lifetime_strength += Player.strength; + Player.total_defense += Player.defense; + Player.lifetime_defense += Player.defense; + Player.total_dexterity += Player.dexterity; + Player.lifetime_dexterity += Player.dexterity; + Player.total_agility += Player.agility; + Player.lifetime_agility += Player.agility; + Player.total_charisma += Player.charisma; + Player.lifetime_charisma += Player.charisma; + + Player.hacking_skill = 1; + + Player.strength = 1; + Player.defense = 1; + Player.dexterity = 1; + Player.agility = 1; + + Player.charisma = 1; + + Player.hacking_exp = 0; + Player.strength_exp = 0; + Player.defense_exp = 0; + Player.dexterity_exp = 0; + Player.agility_exp = 0; + Player.charisma_exp = 0; + + Player.money = 0; + + Player.homeComputer = ""; + + Player.city = Locations.Sector12; + Player.location = ""; + + Player.companyName = ""; + Player.companyPosition = ""; + + Player.currentServer = ""; + Player.discoveredServers = []; + Player.purchasedServers = []; + + Player.factions = []; + + Player.startAction = false; + Player.actionTime = 0; + + Player.isWorking = false; + Player.currentWorkFactionName = ""; + Player.currentWorkFactionDescription = ""; + + Player.workHackExpGainRate = 0; + Player.workStrExpGainRate = 0; + Player.workDefExpGainRate = 0; + Player.workDexExpGainRate = 0; + Player.workAgiExpGainRate = 0; + Player.workChaExpGainRate = 0; + Player.workRepGainRate = 0; + Player.workMoneyGainRate = 0; + + Player.workHackExpGained = 0; + Player.workStrExpGained = 0; + Player.workDefExpGained = 0; + Player.workDexExpGained = 0; + Player.workAgiExpGained = 0; + Player.workChaExpGained = 0; + Player.workRepGained = 0; + Player.workMoneyGained = 0; + + Player.timeWorked = 0; + + Player.lastUpdate = new Date().getTime(); + + //Delete all servers + for (var member in AllServers) { + delete AllServers[member]; + } + AllServers = {}; + + //Delete Special Server IPs + for (var member in SpecialServerIps) { + delete SpecialServerIps[member]; + } + SpecialServersIps = null; + + //Delete Companies + for (var member in Companies) { + delete Companies[member]; + } + Companies = {}; + + //Delete Factions + for (var member in Factions) { + delete Factions[member]; + } + Factions = {}; + + //Inititialization + SpecialServerIps = new SpecialServerIpsMap(); + Player.init(); + initForeignServers(); + initCompanies(); + initFactions(); + CompanyPositions.init(); +} \ No newline at end of file diff --git a/src/engine.js b/src/engine.js index 9d131a5ba..82c68c45e 100644 --- a/src/engine.js +++ b/src/engine.js @@ -77,12 +77,14 @@ var Engine = { var CompaniesSave = JSON.stringify(Companies); var FactionsSave = JSON.stringify(Factions); var SpecialServerIpsSave = JSON.stringify(SpecialServerIps); + var AugmentationsSave = JSON.stringify(Augmentations); window.localStorage.setItem("netburnerPlayerSave", PlayerSave); window.localStorage.setItem("netburnerAllServersSave", AllServersSave); window.localStorage.setItem("netburnerCompaniesSave", CompaniesSave); window.localStorage.setItem("netburnerFactionsSave", FactionsSave); window.localStorage.setItem("netburnerSpecialServerIpsSave", SpecialServerIpsSave); + window.localStorage.setItem("netburnerAugmentationsSave", AugmentationsSave); console.log("Game saved to local storage"); }, @@ -105,18 +107,23 @@ var Engine = { } else if (!window.localStorage.getItem("netburnerSpecialServerIpsSave")) { console.log("No Special Server Ips save to load"); return false; + } else if (!window.localStorage.getItem("netburnerAugmentationsSave")) { + console.log("No Augmentations save to load"); + return false; } else { var PlayerSave = window.localStorage.getItem("netburnerPlayerSave"); var AllServersSave = window.localStorage.getItem("netburnerAllServersSave"); var CompaniesSave = window.localStorage.getItem("netburnerCompaniesSave"); var FactionsSave = window.localStorage.getItem("netburnerFactionsSave"); var SpecialServerIpsSave = window.localStorage.getItem("netburnerSpecialServerIpsSave"); + var AugmentationsSave = window.localStorage.getItem("netburnerAugmentationsSave"); Player = JSON.parse(PlayerSave, Reviver); AllServers = JSON.parse(AllServersSave, Reviver); Companies = JSON.parse(CompaniesSave, Reviver); Factions = JSON.parse(FactionsSave, Reviver); SpecialServerIps = JSON.parse(SpecialServerIpsSave, Reviver); + Augmentations = JSON.parse(AugmentationsSave, Reviver); return true; } }, @@ -144,6 +151,10 @@ var Engine = { if (window.localStorage.getItem("netburnerSpecialServerIpsSave")) { window.localStorage.removeItem("netburnerSpecialServerIpsSave"); } + + if (window.localStorage.getItem("netburnerAugmentationsSave")) { + window.localStorage.removeItem("netburnerAugmentationsSave"); + } }, /* Load content when a main menu button is clicked */ @@ -274,20 +285,20 @@ var Engine = { Engine.Display.characterInfo.innerHTML = 'Current City: ' + Player.city + '

' + 'Employer: ' + Player.companyName + '

' + 'Job Title: ' + companyPosition + '



' + - 'Money: $' + Player.money.toFixed(2) + '

' + - 'Hacking Level: ' + Player.hacking_skill + '

' + - 'Strength: ' + Player.strength + '

' + - 'Defense: ' + Player.defense + '

' + - 'Dexterity: ' + Player.dexterity + '

' + - 'Agility: ' + Player.agility + '

' + - 'Charisma: ' + Player.charisma + '

' + + 'Money: $' + (Player.money.toFixed(2)).toLocaleString() + '

' + + 'Hacking Level: ' + (Player.hacking_skill).toLocaleString() + '

' + + 'Strength: ' + (Player.strength.toLocaleString() + '

' + + 'Defense: ' + (Player.defense).toLocaleString() + '

' + + 'Dexterity: ' + (Player.dexterity).toLocaleString() + '

' + + 'Agility: ' + (Player.agility).toLocaleString() + '

' + + 'Charisma: ' + (Player.charisma).toLocaleString() + '

' + 'Servers owned: ' + Player.purchasedServers.length + '

' + - 'Hacking experience: ' + Player.hacking_exp.toFixed(4) + '

' + - 'Strength experience: ' + Player.strength_exp.toFixed(4) + '

' + - 'Defense experience: ' + Player.defense_exp.toFixed(4) + '

' + - 'Dexterity experience: ' + Player.dexterity_exp.toFixed(4) + '

' + - 'Agility experience: ' + Player.agility_exp.toFixed(4) + '

' + - 'Charisma experience: ' + Player.charisma_exp.toFixed(4) + '

'; + 'Hacking experience: ' + (Player.hacking_exp.toFixed(4)).toLocaleString() + '

' + + 'Strength experience: ' + (Player.strength_exp.toFixed(4)).toLocaleString() + '

' + + 'Defense experience: ' + (Player.defense_exp.toFixed(4)).toLocaleString() + '

' + + 'Dexterity experience: ' + (Player.dexterity_exp.toFixed(4)).toLocaleString() + '

' + + 'Agility experience: ' + (Player.agility_exp.toFixed(4)).toLocaleString() + '

' + + 'Charisma experience: ' + (Player.charisma_exp.toFixed(4)).toLocaleString() + '

'; }, /* Display locations in the world*/ @@ -709,7 +720,7 @@ var Engine = { initCompanies(); initFactions(); CompanyPositions.init(); - + initAugmentations(); } //Message at the top of terminal diff --git a/utils/PurchaseAugmentationBox.js b/utils/PurchaseAugmentationBox.js index e09659182..4e81d337d 100644 --- a/utils/PurchaseAugmentationBox.js +++ b/utils/PurchaseAugmentationBox.js @@ -40,7 +40,75 @@ purchaseAugmentationBoxCreate = function(aug, fac) { confirmButton.parentNode.replaceChild(newConfirmButton, confirmButton); newConfirmButton.addEventListener("click", function() { - if (Player.money >= (aug.baseCost * fac.augmentationPriceMult)) { + + //TODO Requirements for specific augmentations (e.g Embedded Netburner Module b4 its upgrades) + if (aug.name == "Augmented Targeting II") { + var targeting1 = Augmentations["Augmented Targeting I"]; + if (targeting1 == null) { + console.log("ERROR: Could not find Augmented Targeting I"); + return; + } + if (targeting1.owned == false) { + dialogBoxCreate("You must first install Augmented Targeting I before you can upgrade it to Augmented Targeting II"); + } + } else if (aug.name == "Augmented Targeting III") { + var targeting2 = Augmentations["Augmented Targeting II"]; + if (targeting2 == null) { + console.log("ERROR: Could not find Augmented Targeting II"); + return; + } + if (targeting2.owned == false) { + dialogBoxCreate("You must first install Augmented Targeting II before you can upgrade it to Augmented Targeting III"); + } + } else if (aug.name == "Combat Rib II") { + var combatRib1 = Augmentations["Combat Rib I"]; + if (combatRib1 == null) { + console.log("ERROR: Could not find Combat Rib I"); + return; + } + if (combatRib1.owned == false) { + dialogBoxCreate("You must first install Combat Rib I before you can upgrade it to Combat Rib II"); + } + } else if (aug.name == "Combat Rib III") { + var combatRib2 = Augmentations["Combat Rib II"]; + if (combatRib2 == null) { + console.log("ERROR: Could not find Combat Rib II"); + return; + } + if (combatRib2.owned == false) { + dialogBoxCreate("You must first install Combat Rib II before you can upgrade it to Combat Rib III"); + } + } else if (aug.name == "Embedded Netburner Module Core V2 Upgrade") { + var coreImplant = Augmentations["Embedded Netburner Module Core Implant"]; + if (coreImplant == null) { + console.log("ERROR: Could not find ENM Core Implant"); + return; + } + if (coreImplant.owned == false) { + dialogBoxCreate("You must first install Embedded Netburner Module Core Implant before you can upgrade it to V2"); + } + } else if (aug.name == "Embedded Netburner Module Core V3 Upgrade") { + var v2Upgrade = Augmentations["Embedded Netburner Module Core V2 Upgrade"]; + if (v2Upgrade == null) { + console.log("ERROR: Could not find ENM Core V2 upgrade"); + return; + } + if (v2Upgrade.owned == false) { + dialogBoxCreate("you must first install Embedded Netburner Module Core V2 Upgrade before you can upgrade it to V3"); + } + } else if (aug.name == "Embedded Netburner Module Core Implant" || + aug.name == "Embedded Netburner Module Analyze Engine" || + aug.name == "Embedded Netburner Module Direct Memory Access Upgrade") { + var enm = Augmentations["Embedded Netburner Module"]; + if (enm == null) { + console.log("ERROR: Could not find ENM"); + return; + } + if (enm.owned == false) { + dialogBoxCreate("You must first install the Embedded Netburner Module before installing any upgrades to it"); + } + + } else if (Player.money >= (aug.baseCost * fac.augmentationPriceMult)) { applyAugmentation(aug, fac); //TODO Make this text better dialogBoxCreate("You slowly drift to sleep as " + fac.name + "'s scientists put you under
" +