diff --git a/css/styles.css b/css/styles.css index 47419edb1..1f883b7a6 100644 --- a/css/styles.css +++ b/css/styles.css @@ -207,6 +207,43 @@ tr:focus { animation: glowing 1500ms infinite; } +/* Blinking Cursor */ +/* ----- blinking cursor animation ----- */ +.typed-cursor{ + opacity: 1; + -webkit-animation: blink 0.95s infinite; + -moz-animation: blink 0.95s infinite; + -ms-animation: blink 0.95s infinite; + -o-animation: blink 0.95s infinite; + animation: blink 0.95s infinite; +} + +@-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} +@-webkit-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} +@-moz-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} +@-ms-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} +@-o-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} + /* Status text */ @-webkit-keyframes status-text{ from{ diff --git a/css/workinprogress.css b/css/workinprogress.css index 5df2903de..40fe2f6f0 100644 --- a/css/workinprogress.css +++ b/css/workinprogress.css @@ -1,3 +1,11 @@ +#generic-fullscreen-container { + color: var(--my-font-color); + padding-top: 10px; + padding-left: 10px; + height: 100%; + width: 99%; +} + #work-in-progress-container { color: var(--my-font-color); position: fixed; diff --git a/index.html b/index.html index c73b58f79..786730514 100644 --- a/index.html +++ b/index.html @@ -86,45 +86,35 @@
  • Terminal
  • -
  • Character
  • -
  • Create Script
  • -
  • Active Scripts
  • -
  • Hacknet Nodes
  • -
  • World
  • -
  • Create Program
  • -
  • Factions
  • -
  • Augmentations
  • -
  • Tutorial
  • -
  • Options
  • @@ -140,7 +130,6 @@ onfocus="this.value = this.value;"/> - @@ -473,7 +462,6 @@ ServerProfiler.exe This program is used to display hacking and Netscript-related information about servers - AutoLink.exe This program allows you to directly connect to other servers through the 'scan-analyze' command @@ -765,8 +753,6 @@ - -
    @@ -849,6 +835,9 @@ Cancel Work
    +
    +
    +
    diff --git a/src/Alias.js b/src/Alias.js index 071b50bef..6e5974989 100644 --- a/src/Alias.js +++ b/src/Alias.js @@ -1,5 +1,6 @@ /* Alias.js */ Aliases = {}; +GlobalAliases = {}; //Print all aliases to terminal function printAliases() { @@ -8,21 +9,40 @@ function printAliases() { post("alias " + name + "=" + Aliases[name]); } } + for (var name in GlobalAliases) { + if (GlobalAliases.hasOwnProperty(name)) { + post("global alias " + name + "=" + GlobalAliases[name]); + } + } } //True if successful, false otherwise -function parseAliasDeclaration(dec) { - var re = /([^=]+)="(.+)"/; +function parseAliasDeclaration(dec,global=false) { + var re = /^([_|\w|!|%|,|@]+)="(.+)"$/; var matches = dec.match(re); if (matches == null || matches.length != 3) {return false;} - addAlias(matches[1], matches[2]); + if (global){ + addGlobalAlias(matches[1],matches[2]); + } else { + addAlias(matches[1], matches[2]); + } return true; } function addAlias(name, value) { + if (name in GlobalAliases){ + delete GlobalAliases[name]; + } Aliases[name] = value; } +function addGlobalAlias(name, value) { + if (name in Aliases){ + delete Aliases[name]; + } + GlobalAliases[name] = value; +} + function getAlias(name) { if (Aliases.hasOwnProperty(name)) { return Aliases[name]; @@ -30,11 +50,22 @@ function getAlias(name) { return null; } +function getGlobalAlias(name) { + if (GlobalAliases.hasOwnProperty(name)) { + return GlobalAliases[name]; + } + return null; +} + function removeAlias(name) { if (Aliases.hasOwnProperty(name)) { delete Aliases[name]; return true; } + if (GlobalAliases.hasOwnProperty(name)) { + delete GlobalAliases[name]; + return true; + } return false; } @@ -42,10 +73,21 @@ function removeAlias(name) { //Aliases only applied to "whole words", one level deep function substituteAliases(origCommand) { var commandArray = origCommand.split(" "); - for (var i = 0; i < commandArray.length; ++i) { - var alias = getAlias(commandArray[i]); + if (commandArray.length>0){ + var alias = getAlias(commandArray[0]); if (alias != null) { - commandArray[i] = alias; + commandArray[0] = alias; + } else { + var alias = getGlobalAlias(commandArray[0]); + if (alias != null) { + commandArray[0] = alias; + } + } + for (var i = 0; i < commandArray.length; ++i) { + var alias = getGlobalAlias(commandArray[i]); + if (alias != null) { + commandArray[i] = alias; + } } } return commandArray.join(" "); diff --git a/src/Augmentations.js b/src/Augmentations.js index ed9228d61..954c3a4b1 100644 --- a/src/Augmentations.js +++ b/src/Augmentations.js @@ -128,6 +128,7 @@ AugmentationNames = { SmartSonar: "SmartSonar Implant", PowerRecirculator: "Power Recirculation Core", QLink: "QLink", + TheRedPill: "The Red Pill", SPTN97: "SPTN-97 Gene Modification", HiveMind: "ECorp HVMind Implant", CordiARCReactor: "CordiARC Fusion Reactor", @@ -1039,7 +1040,14 @@ initAugmentations = function() { AddToAugmentations(QLink); //Daedalus - //TODO The Red Pill - Second prestige + var RedPill = new Augmentation(AugmentationNames.TheRedPill); + RedPill.setInfo("It's time to leave the cave"); + RedPill.setRequirements(1000000, 0); + RedPill.addToFactions(["Daedalus"]); + if (augmentationExists(AugmentationNames.TheRedPill)) { + delete Augmentations[AugmentationNames.TheRedPill]; + } + AddToAugmentations(RedPill); //Covenant var SPTN97 = new Augmentation(AugmentationNames.SPTN97); diff --git a/src/Company.js b/src/Company.js index bec284700..e487a5c94 100644 --- a/src/Company.js +++ b/src/Company.js @@ -231,8 +231,8 @@ CompanyPositions = { //Software SoftwareIntern: new CompanyPosition("Software Engineering Intern", 1, 0, 0, 0, 0, 0, 0, 13), JuniorDev: new CompanyPosition("Junior Software Engineer", 51, 0, 0, 0, 0, 0, 8000, 32), - SeniorDev: new CompanyPosition("Senior Software Engineer", 251, 0, 0, 0, 0, 51, 32000, 63), - LeadDev: new CompanyPosition("Lead Software Developer", 401, 0, 0, 0, 0, 151, 144000, 210), + SeniorDev: new CompanyPosition("Senior Software Engineer", 251, 0, 0, 0, 0, 51, 40000, 63), + LeadDev: new CompanyPosition("Lead Software Developer", 401, 0, 0, 0, 0, 151, 200000, 210), //TODO Through darkweb, maybe? FreelanceDeveloper: new CompanyPosition("Freelance Developer", 0, 0, 0, 0, 0, 0, 0, 0), @@ -242,26 +242,26 @@ CompanyPositions = { //IT ITIntern: new CompanyPosition("IT Intern", 1, 0, 0, 0, 0, 0, 0, 11), - ITAnalyst: new CompanyPosition("IT Analyst", 26, 0, 0, 0, 0, 0, 5000, 25), - ITManager: new CompanyPosition("IT Manager", 151, 0, 0, 0, 0, 51, 22000, 48), - SysAdmin: new CompanyPosition("Systems Administrator", 251, 0, 0, 0, 0, 76, 120000, 165), - SecurityEngineer: new CompanyPosition("Security Engineer", 151, 0, 0, 0, 0, 26, 28000, 55), - NetworkEngineer: new CompanyPosition("Network Engineer", 151, 0, 0, 0, 0, 26, 28000, 55), - NetworkAdministrator: new CompanyPosition("Network Administrator", 251, 0, 0, 0, 0, 76, 120000, 165), + ITAnalyst: new CompanyPosition("IT Analyst", 26, 0, 0, 0, 0, 0, 7000, 25), + ITManager: new CompanyPosition("IT Manager", 151, 0, 0, 0, 0, 51, 35000, 48), + SysAdmin: new CompanyPosition("Systems Administrator", 251, 0, 0, 0, 0, 76, 175000, 165), + SecurityEngineer: new CompanyPosition("Security Engineer", 151, 0, 0, 0, 0, 26, 35000, 55), + NetworkEngineer: new CompanyPosition("Network Engineer", 151, 0, 0, 0, 0, 26, 35000, 55), + NetworkAdministrator: new CompanyPosition("Network Administrator", 251, 0, 0, 0, 0, 76, 175000, 165), //Technology management - HeadOfSoftware: new CompanyPosition("Head of Software", 501, 0, 0, 0, 0, 251, 288000, 330), - HeadOfEngineering: new CompanyPosition("Head of Engineering", 501, 0, 0, 0, 0, 251, 576000, 660), - VicePresident: new CompanyPosition("Vice President of Technology", 601, 0, 0, 0, 0, 401, 1152000, 990), - CTO: new CompanyPosition("Chief Technology Officer", 751, 0, 0, 0, 0, 501, 4608000, 1100), + HeadOfSoftware: new CompanyPosition("Head of Software", 501, 0, 0, 0, 0, 251, 400000, 330), + HeadOfEngineering: new CompanyPosition("Head of Engineering", 501, 0, 0, 0, 0, 251, 800000, 660), + VicePresident: new CompanyPosition("Vice President of Technology", 601, 0, 0, 0, 0, 401, 1600000, 990), + CTO: new CompanyPosition("Chief Technology Officer", 751, 0, 0, 0, 0, 501, 3200000, 1100), //Business BusinessIntern: new CompanyPosition("Business Intern", 1, 0, 0, 0, 0, 1, 0, 18), BusinessAnalyst: new CompanyPosition("Business Analyst", 6, 0, 0, 0, 0, 51, 8000, 42), - BusinessManager: new CompanyPosition("Business Manager", 51, 0, 0, 0, 0, 101, 32000, 84), - OperationsManager: new CompanyPosition("Operations Manager", 51, 0, 0, 0, 0, 226, 144000, 275), - CFO: new CompanyPosition("Chief Financial Officer", 76, 0, 0, 0, 0, 501, 576000, 800), - CEO: new CompanyPosition("Chief Executive Officer", 101, 0, 0, 0, 0, 751, 4608000, 1500), + BusinessManager: new CompanyPosition("Business Manager", 51, 0, 0, 0, 0, 101, 40000, 84), + OperationsManager: new CompanyPosition("Operations Manager", 51, 0, 0, 0, 0, 226, 200000, 275), + CFO: new CompanyPosition("Chief Financial Officer", 76, 0, 0, 0, 0, 501, 800000, 800), + CEO: new CompanyPosition("Chief Executive Officer", 101, 0, 0, 0, 0, 751, 3200000, 1500), BusinessConsultant: new CompanyPosition("Business Consultant", 6, 0, 0, 0, 0, 51, 0, 28), SeniorBusinessConsultant: new CompanyPosition("Senior Business Consultant", 51, 0, 0, 0, 0, 226, 0, 175), @@ -273,75 +273,75 @@ CompanyPositions = { Waiter: new CompanyPosition("Waiter", 0, 0, 0, 0, 0, 0, 0, 11), Employee: new CompanyPosition("Employee", 0, 0, 0, 0, 0, 0, 0, 11), PoliceOfficer: new CompanyPosition("Police Officer", 11, 101, 101, 101, 101, 51, 8000, 36), - PoliceChief: new CompanyPosition("Police Chief", 101, 301, 301, 301, 301, 151, 32000, 175), + PoliceChief: new CompanyPosition("Police Chief", 101, 301, 301, 301, 301, 151, 36000, 175), SecurityGuard: new CompanyPosition("Security Guard", 0, 51, 51, 51, 51, 1, 0, 20), SecurityOfficer: new CompanyPosition("Security Officer", 26, 151, 151, 151, 151, 51, 8000, 75), - SecuritySupervisor: new CompanyPosition("Security Supervisor", 26, 251, 251, 251, 251, 101, 32000, 275), + SecuritySupervisor: new CompanyPosition("Security Supervisor", 26, 251, 251, 251, 251, 101, 36000, 275), HeadOfSecurity: new CompanyPosition("Head of Security", 51, 501, 501, 501, 501, 151, 144000, 550), FieldAgent: new CompanyPosition("Field Agent", 101, 101, 101, 101, 101, 101, 8000, 55), SecretAgent: new CompanyPosition("Secret Agent", 201, 251, 251, 251, 251, 201, 32000, 190), - SpecialOperative: new CompanyPosition("Special Operative", 251, 501, 501, 501, 501, 251, 144000, 425), + SpecialOperative: new CompanyPosition("Special Operative", 251, 501, 501, 501, 501, 251, 162000, 425), init: function() { //Argument order: hack, str, def, dex, agi, cha //Software - CompanyPositions.SoftwareIntern.setPerformanceParameters(90, 0, 0, 0, 0, 10, 1); - CompanyPositions.SoftwareIntern.setExperienceGains(.1, 0, 0, 0, 0, .02); + CompanyPositions.SoftwareIntern.setPerformanceParameters(85, 0, 0, 0, 0, 15, 0.9); + CompanyPositions.SoftwareIntern.setExperienceGains(.05, 0, 0, 0, 0, .02); CompanyPositions.JuniorDev.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.1); - CompanyPositions.JuniorDev.setExperienceGains(.2, 0, 0, 0, 0, .04); - CompanyPositions.SeniorDev.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.2); - CompanyPositions.SeniorDev.setExperienceGains(.4, 0, 0, 0, 0, .08); - CompanyPositions.LeadDev.setPerformanceParameters(70, 0, 0, 0, 0, 30, 1.3); + CompanyPositions.JuniorDev.setExperienceGains(.1, 0, 0, 0, 0, .05); + CompanyPositions.SeniorDev.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.3); + CompanyPositions.SeniorDev.setExperienceGains(.3, 0, 0, 0, 0, .08); + CompanyPositions.LeadDev.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.5); CompanyPositions.LeadDev.setExperienceGains(.5, 0, 0, 0, 0, .1); CompanyPositions.SoftwareConsultant.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1); - CompanyPositions.SoftwareConsultant.setExperienceGains(.175, 0, 0, 0, 0, .03); - CompanyPositions.SeniorSoftwareConsultant.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.15); - CompanyPositions.SeniorSoftwareConsultant.setExperienceGains(.35, 0, 0, 0, 0, .06); + CompanyPositions.SoftwareConsultant.setExperienceGains(.08, 0, 0, 0, 0, .03); + CompanyPositions.SeniorSoftwareConsultant.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.2); + CompanyPositions.SeniorSoftwareConsultant.setExperienceGains(.25, 0, 0, 0, 0, .06); //Security - CompanyPositions.ITIntern.setPerformanceParameters(90, 0, 0, 0, 0, 10, 1); - CompanyPositions.ITIntern.setExperienceGains(.05, 0, 0, 0, 0, .01); + CompanyPositions.ITIntern.setPerformanceParameters(90, 0, 0, 0, 0, 10, 0.9); + CompanyPositions.ITIntern.setExperienceGains(.04, 0, 0, 0, 0, .01); CompanyPositions.ITAnalyst.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.1); - CompanyPositions.ITAnalyst.setExperienceGains(.15, 0, 0, 0, 0, .02); - CompanyPositions.ITManager.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.2); - CompanyPositions.ITManager.setExperienceGains(.4, 0, 0, 0, 0, .1); - CompanyPositions.SysAdmin.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.2); + CompanyPositions.ITAnalyst.setExperienceGains(.08, 0, 0, 0, 0, .02); + CompanyPositions.ITManager.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.3); + CompanyPositions.ITManager.setExperienceGains(.3, 0, 0, 0, 0, .1); + CompanyPositions.SysAdmin.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.4); CompanyPositions.SysAdmin.setExperienceGains(.5, 0, 0, 0, 0, .05); - CompanyPositions.SecurityEngineer.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.15); + CompanyPositions.SecurityEngineer.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.2); CompanyPositions.SecurityEngineer.setExperienceGains(0.4, 0, 0, 0, 0, .05); - CompanyPositions.NetworkEngineer.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.15); + CompanyPositions.NetworkEngineer.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.2); CompanyPositions.NetworkEngineer.setExperienceGains(0.4, 0, 0, 0, 0, .05); - CompanyPositions.NetworkAdministrator.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.25); + CompanyPositions.NetworkAdministrator.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.3); CompanyPositions.NetworkAdministrator.setExperienceGains(0.5, 0, 0, 0, 0, .1); //Technology management - CompanyPositions.HeadOfSoftware.setPerformanceParameters(65, 0, 0, 0, 0, 35, 1.4); + CompanyPositions.HeadOfSoftware.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.6); CompanyPositions.HeadOfSoftware.setExperienceGains(1, 0, 0, 0, 0, .5); - CompanyPositions.HeadOfEngineering.setPerformanceParameters(60, 0, 0, 0, 0, 40, 1.4); + CompanyPositions.HeadOfEngineering.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.6); CompanyPositions.HeadOfEngineering.setExperienceGains(1.1, 0, 0, 0, 0, .5); - CompanyPositions.VicePresident.setPerformanceParameters(60, 0, 0, 0, 0, 40, 1.5); + CompanyPositions.VicePresident.setPerformanceParameters(70, 0, 0, 0, 0, 30, 1.75); CompanyPositions.VicePresident.setExperienceGains(1.2, 0, 0, 0, 0, .6); - CompanyPositions.CTO.setPerformanceParameters(50, 0, 0, 0, 0, 50, 1.5); + CompanyPositions.CTO.setPerformanceParameters(65, 0, 0, 0, 0, 35, 2); CompanyPositions.CTO.setExperienceGains(1.5, 0, 0, 0, 1); //Business - CompanyPositions.BusinessIntern.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1); - CompanyPositions.BusinessIntern.setExperienceGains(.01, 0, 0, 0, 0, .1); - CompanyPositions.BusinessAnalyst.setPerformanceParameters(20, 0, 0, 0, 0, 80, 1.1); - CompanyPositions.BusinessAnalyst.setExperienceGains(.02, 0, 0, 0, 0, .2); - CompanyPositions.BusinessManager.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.2); - CompanyPositions.BusinessManager.setExperienceGains(.02, 0, 0, 0, 0, .4); - CompanyPositions.OperationsManager.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.2); + CompanyPositions.BusinessIntern.setPerformanceParameters(10, 0, 0, 0, 0, 90, 0.9); + CompanyPositions.BusinessIntern.setExperienceGains(.01, 0, 0, 0, 0, .08); + CompanyPositions.BusinessAnalyst.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.1); + CompanyPositions.BusinessAnalyst.setExperienceGains(.02, 0, 0, 0, 0, .15); + CompanyPositions.BusinessManager.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.3); + CompanyPositions.BusinessManager.setExperienceGains(.02, 0, 0, 0, 0, .3); + CompanyPositions.OperationsManager.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.5); CompanyPositions.OperationsManager.setExperienceGains(.02, 0, 0, 0, 0, .4); - CompanyPositions.CFO.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1.3); + CompanyPositions.CFO.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1.6); CompanyPositions.CFO.setExperienceGains(.05, 0, 0, 0, 0, 1); - CompanyPositions.CEO.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1.5); + CompanyPositions.CEO.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1.75); CompanyPositions.CEO.setExperienceGains(.1, 0, 0, 0, 0, 1.5); CompanyPositions.BusinessConsultant.setPerformanceParameters(20, 0, 0, 0, 0, 80, 1); CompanyPositions.BusinessConsultant.setExperienceGains(.015, 0, 0, 0, 0, .15); - CompanyPositions.SeniorBusinessConsultant.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.15); + CompanyPositions.SeniorBusinessConsultant.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.2); CompanyPositions.SeniorBusinessConsultant.setExperienceGains(.015, 0, 0, 0, 0, .3); //Non-tech/management jobs diff --git a/src/Constants.js b/src/Constants.js index 3ee847530..c01bd9609 100644 --- a/src/Constants.js +++ b/src/Constants.js @@ -1,5 +1,5 @@ CONSTANTS = { - Version: "0.24.0", + Version: "0.24.1", //Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience //and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then @@ -10,7 +10,7 @@ CONSTANTS = { CorpFactionRepRequirement: 250000, /* Base costs */ - BaseCostFor1GBOfRamHome: 45000, + BaseCostFor1GBOfRamHome: 32000, BaseCostFor1GBOfRamServer: 55000, //1 GB of RAM BaseCostFor1GBOfRamHacknetNode: 30000, @@ -19,7 +19,7 @@ CONSTANTS = { /* Hacknet Node constants */ HacknetNodeMoneyGainPerLevel: 1.55, - HacknetNodePurchaseNextMult: 1.42, //Multiplier when purchasing an additional hacknet node + HacknetNodePurchaseNextMult: 1.75, //Multiplier when purchasing an additional hacknet node HacknetNodeUpgradeLevelMult: 1.045, //Multiplier for cost when upgrading level HacknetNodeUpgradeRamMult: 1.28, //Multiplier for cost when upgrading RAM HacknetNodeUpgradeCoreMult: 1.49, //Multiplier for cost when buying another core @@ -152,12 +152,12 @@ CONSTANTS = { ClassGymDexterity: "training your dexterity at a gym", ClassGymAgility: "training your agility at a gym", - ClassDataStructuresBaseCost: 6, - ClassNetworksBaseCost: 30, - ClassAlgorithmsBaseCost: 120, - ClassManagementBaseCost: 60, - ClassLeadershipBaseCost: 120, - ClassGymBaseCost: 100, + ClassDataStructuresBaseCost: 30, + ClassNetworksBaseCost: 60, + ClassAlgorithmsBaseCost: 240, + ClassManagementBaseCost: 120, + ClassLeadershipBaseCost: 240, + ClassGymBaseCost: 120, CrimeShoplift: "shoplift", CrimeMug: "mug someone", @@ -170,7 +170,7 @@ CONSTANTS = { CrimeHeist: "pull off the ultimate heist", //Text that is displayed when the 'help' command is ran in Terminal - HelpText: 'alias [name="value"] Create aliases for Terminal commands, or list existing aliases
    ' + + HelpText: 'alias [-g] [name="value"] Create aliases for Terminal commands, or list existing aliases
    ' + "analyze Get statistics and information about current machine
    " + "cat [message] Display a .msg file
    " + "check [script] [args...] Print logs to Terminal for the script with the specified name and arguments
    " + @@ -668,13 +668,17 @@ CONSTANTS = { "upgrade your abilities. The Augmentations that are available to unlock vary from faction to faction.", TutorialAugmentationsText: "Advances in science and medicine have lead to powerful new technologies that allow people to augment themselves " + "beyond normal human capabilities. There are many different types of Augmentations, ranging from cybernetic to " + - "genetic to biological. Acquiring these Augmentations enhances the user's physical and mental faculties.
    " + + "genetic to biological. Acquiring these Augmentations enhances the user's physical and mental faculties.

    " + "Because of how powerful these Augmentations are, the technology behind them is kept private and secret by the " + "corporations and organizations that create them. Therefore, the only way for the player to obtain Augmentations is " + "through Factions. After joining a Faction and earning enough reputation in it, you will be able to purchase " + "its Augmentations. Different Factions offer different Augmentations. Augmentations must be purchased in order to be installed, " + "and they are fairly expensive.

    " + - "Unfortunately, installing an Augmentation has side effects. You will lose most of the progress you've made, including your " + + "When you purchase an Augmentation, the price of purchasing another Augmentation increases by 90%. This multiplier stacks for " + + "each Augmentation you purchase. You will not gain the benefits of your purchased Augmentations until you install them. You can " + + "choose to install Augmentations through the 'Augmentations' menu tab. Once you install your purchased Augmentations, " + + "their costs are reset back to the original price.

    " + + "Unfortunately, installing Augmentations has side effects. You will lose most of the progress you've made, including your " + "skills, stats, and money. You will have to start over, but you will have all of the Augmentations you have installed to " + "help you progress.

    " + "To summarize, here is a list of everything you will LOSE when you install an Augmentation:

    " + @@ -686,13 +690,33 @@ CONSTANTS = { "Company/faction reputation
    " + "Jobs and Faction memberships
    " + "Programs
    " + + "Stocks
    " + "TOR router

    " + "Here is everything you will KEEP when you install an Augmentation:

    " + "Every Augmentation you have installed
    " + "Scripts on your home computer
    " + - "RAM Upgrades on your home computer", + "RAM Upgrades on your home computer
    " + + "World Stock Exchange account and TIX API Access
    ", Changelog: + "v0.24.1
    " + + "-Adjusted cost of upgrading home computer RAM. Should be a little cheaper for the first few upgrades (up to ~64GB), and " + + "then will start being more expensive than before. High RAM upgrades should now be significantly more expensive than before.
    " + + "-Slightly lowered the starting money available on most mid-game and end-game servers (servers with required hacking level " + + "greater than 200) by about 10-15%
    " + + "-Rebalanced company/company position reputation gains and requirements
    " + + "-Studying at a university now gives slightly more EXP and early jobs give slightly less EXP
    " + + "-Studying at a university is now considerably more expensive
    " + + "-Rebalanced stock market
    " + + "-Significantly increased cost multiplier for purchasing additional Hacknet Nodes
    " + + "-The rate at which facility security level increases during infiltration for each clearance level " + + "was lowered slightly for all companies
    " + + "-Updated Faction descriptions
    " + + "-Changed the way alias works. Normal aliases now only work at the start of a Terminal command (they will only " + + "replace the first word in the Terminal command). You can also create global aliases that work on any part of the " + + 'command, like before. Declare global aliases by entering the optional -g flag: alias -g name="value" - Courtesy of Github user MrNuggelz
    ' + + "-'top' Terminal command implemented courtesy of Github user LTCNugget. Currently, the formatting gets screwed up " + + "if your script names are really long.

    " + "v0.24.0
    " + "-Players now have HP, which is displayed in the top right. To regain HP, visit the hospital. Currently " + "the only way to lose HP is through infiltration
    " + @@ -901,6 +925,24 @@ CONSTANTS = { "-You can now see what an Augmentation does and its price even while its locked

    ", LatestUpdate: + "v0.24.1
    " + + "-Adjusted cost of upgrading home computer RAM. Should be a little cheaper for the first few upgrades (up to ~64GB), and " + + "then will start being more expensive than before. High RAM upgrades should now be significantly more expensive than before.
    " + + "-Slightly lowered the starting money available on most mid-game and end-game servers (servers with required hacking level " + + "greater than 200) by about 10-15%
    " + + "-Rebalanced company/company position reputation gains and requirements
    " + + "-Studying at a university now gives slightly more EXP and early jobs give slightly less EXP
    " + + "-Studying at a university is now considerably more expensive
    " + + "-Rebalanced stock market
    " + + "-Significantly increased cost multiplier for purchasing additional Hacknet Nodes
    " + + "-The rate at which facility security level increases during infiltration for each clearance level " + + "was lowered slightly for all companies
    " + + "-Updated Faction descriptions
    " + + "-Changed the way alias works. Normal aliases now only work at the start of a Terminal command (they will only " + + "replace the first word in the Terminal command). You can also create global aliases that work on any part of the " + + 'command, like before. Declare global aliases by entering the optional -g flag: alias -g name="value" - Courtesy of Github user MrNuggelz
    ' + + "-'top' Terminal command implemented courtesy of Github user LTCNugget. Currently, the formatting gets screwed up " + + "if your script names are really long.

    " + "v0.24.0
    " + "-Players now have HP, which is displayed in the top right. To regain HP, visit the hospital. Currently " + "the only way to lose HP is through infiltration
    " + diff --git a/src/FactionInfo.js b/src/FactionInfo.js index 04aa93614..a021b3bde 100644 --- a/src/FactionInfo.js +++ b/src/FactionInfo.js @@ -3,20 +3,14 @@ FactionInfo = { //Endgame IlluminatiInfo: "Humanity never changes. No matter how civilized society becomes, it will eventually fall back " + - "into chaos. And out of this chaos, we will lead them to order.

    " + - "We are the Invisible Hand. We are forever.", + "into chaos. And from this chaos, we are the Invisible hand that guides them to order. ", - DaedalusInfo: "If all of human " + - "history is but a single lesson, it is that the individual may be remembered, but the organization " + - "persists and thrives. A single artist, a single general, a single hero or a single villain may all die, " + - "but it is impossible to kill a people, a nation, an idea -- except when that idea has grown weak and is " + - "overpowered by one that is stronger. -- The Doctrine of the Mighty

    " + - "Surrender yourself. Give up your empty individuality to become part of something great, something eternal. " + + DaedalusInfo: "Yesterday we obeyed kings and bent our necks to emperors. Today we kneel only to truth.", + + CovenantInfo: "Surrender yourself. Give up your empty individuality to become part of something great, something eternal. " + "Become a slave. Submit your mind, body, and soul. Only then can you set yourself free.

    " + "Only then can you discover immortality.", - CovenantInfo: "Yesterday we obeyed kings and bent our necks to emperors. Today we kneel only to truth.", - //Megacorporations, each forms its own faction ECorpInfo: "ECorp's mission is simple: to connect the world of today with the technology of tomorrow. " + "With our wide range of Internet-related software and commercial hardware, ECorp makes the world's " + @@ -51,12 +45,12 @@ FactionInfo = { "It's all transformed into bits, stored in bits, communicated through bits. It’s impossible for any person " + "to move, to live, to operate at any level without the use of bits. " + "And when a person moves, lives, and operates, they leave behind their bits, mere traces of seemingly " + - "meaningly fragments of information. But these bits can be reconstructed. Transformed. Used.

    " + + "meaningless fragments of information. But these bits can be reconstructed. Transformed. Used.

    " + "Those who run the bits, run the world", - BlackHandInfo: "This is real freedom, freedom to own property, make a profit, make your life. " + - "The West, so afraid of strong government, now has no government. Only financial power. " + + BlackHandInfo: "The world, so afraid of strong government, now has no government. Only power - Digital power. Financial power. " + + "Technological power. " + "And those at the top rule with an invisible hand. They built a society where the rich get richer, " + "and everyone else suffers.

    " + "So much pain. So many lives. Their darkness must end.", @@ -113,7 +107,10 @@ FactionInfo = { TheSyndicateInfo: "Honor holds you back", - SilhouetteInfo: "Corporations are so big, you don't even know who you're working for. That's terror. Terror built into the system.", + SilhouetteInfo: "Corporations have filled the void of power left behind by the collapse of Western government. The issue is they've become so big " + + "that you don't know who they're working for. And if you're employed at one of these corporations, you don't even know who you're working " + + "for.

    " + + "That's terror. Terror, fear, and corruption. All born into the system, all propagated by the system.", TetradsInfo: "Following the Mandate of Heaven and Carrying out the Way", diff --git a/src/HacknetNode.js b/src/HacknetNode.js index e87cf0ae5..e4f97d581 100644 --- a/src/HacknetNode.js +++ b/src/HacknetNode.js @@ -216,6 +216,9 @@ getMaxNumberLevelUpgrades = function(nodeObj) { var min = 1; var max = CONSTANTS.HacknetNodeMaxLevel-1; var levelsToMax = CONSTANTS.HacknetNodeMaxLevel - nodeObj.level; + if (nodeObj.calculateLevelUpgradeCost(levelsToMax) < Player.money) { + return levelsToMax; + } while (min <= max) { var curr = (min + max) / 2 | 0; diff --git a/src/Location.js b/src/Location.js index dc750324a..ab4f47597 100644 --- a/src/Location.js +++ b/src/Location.js @@ -369,7 +369,7 @@ displayLocationContent = function() { purchaseTor.style.display = "block"; purchaseHomeRam.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumECorp, - 6000, 100, 150, 14); + 6000, 100, 150, 13); break; case Locations.AevumBachmanAndAssociates: @@ -382,7 +382,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumBachmanAndAssociates, - 1500, 36, 60, 10); + 1500, 36, 60, 9.5); break; case Locations.AevumClarkeIncorporated: @@ -395,7 +395,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumClarkeIncorporated, - 2400, 28, 75, 9.5); + 2400, 28, 75, 9); break; case Locations.AevumFulcrumTechnologies: @@ -414,7 +414,7 @@ displayLocationContent = function() { purchaseTor.style.display = "block"; purchaseHomeRam.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumFulcrumTechnologies, - 6000, 84, 100, 16); + 6000, 84, 100, 15); break; case Locations.AevumAeroCorp: @@ -426,7 +426,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumAeroCorp, - 2000, 26, 50, 10.5); + 2000, 26, 50, 10); break; case Locations.AevumGalacticCybersystems: @@ -439,7 +439,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; businessJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumGalacticCybersystems, - 1400, 24, 50, 10); + 1400, 24, 50, 9); break; case Locations.AevumWatchdogSecurity: @@ -453,7 +453,7 @@ displayLocationContent = function() { securityJob.style.display = "block"; agentJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumWatchdogSecurity, - 850, 12, 30, 8); + 850, 12, 30, 7.5); break; case Locations.AevumRhoConstruction: @@ -462,7 +462,7 @@ displayLocationContent = function() { softwareJob.style.display = "block"; businessJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumRhoConstruction, - 600, 8, 20, 4.5); + 600, 8, 20, 4); break; case Locations.AevumPolice: @@ -471,7 +471,7 @@ displayLocationContent = function() { softwareJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumPolice, - 700, 10, 25, 6); + 700, 10, 25, 5); break; case Locations.AevumNetLinkTechnologies: @@ -489,7 +489,7 @@ displayLocationContent = function() { purchaseTor.style.display = "block"; purchaseHomeRam.style.display = "block"; setInfiltrateButton(infiltrate, Locations.AevumNetLinkTechnologies, - 150, 5, 15, 3.5); + 150, 5, 15, 3); break; case Locations.AevumCrushFitnessGym: @@ -523,7 +523,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.ChongqingKuaiGongInternational, - 5500, 42, 100, 15); + 5500, 42, 100, 14); break; case Locations.ChongqingSolarisSpaceSystems: @@ -535,7 +535,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.ChongqingSolarisSpaceSystems, - 3600, 24, 75, 14); + 3600, 24, 75, 13); break; @@ -564,7 +564,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12MegaCorp, - 6000, 100, 125, 15.5); + 6000, 100, 125, 15); break; case Locations.Sector12BladeIndustries: @@ -577,7 +577,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12BladeIndustries, - 3000, 40, 100, 11); + 3000, 40, 100, 10); break; case Locations.Sector12FourSigma: @@ -590,7 +590,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12FourSigma, - 1500, 50, 100, 16); + 1500, 50, 100, 14.5); break; case Locations.Sector12IcarusMicrosystems: @@ -603,7 +603,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; businessJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12IcarusMicrosystems, - 900, 28, 70, 12); + 900, 28, 70, 11); break; case Locations.Sector12UniversalEnergy: @@ -616,7 +616,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; businessJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12UniversalEnergy, - 775, 20, 50, 10); + 775, 20, 50, 9.5); break; case Locations.Sector12DeltaOne: @@ -628,7 +628,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12DeltaOne, - 1200, 30, 75, 11); + 1200, 30, 75, 10); break; case Locations.Sector12CIA: @@ -641,7 +641,7 @@ displayLocationContent = function() { securityJob.style.display = "block"; agentJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12CIA, - 1450, 38, 80, 12.5); + 1450, 38, 80, 12); break; case Locations.Sector12NSA: @@ -654,7 +654,7 @@ displayLocationContent = function() { securityJob.style.display = "block"; agentJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12NSA, - 1400, 34, 80, 12); + 1400, 34, 80, 11); break; case Locations.Sector12AlphaEnterprises: @@ -668,7 +668,7 @@ displayLocationContent = function() { purchaseTor.style.display = "block"; purchaseHomeRam.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12AlphaEnterprises, - 250, 10, 40, 5); + 250, 10, 40, 4.5); break; case Locations.Sector12CarmichaelSecurity: @@ -682,7 +682,7 @@ displayLocationContent = function() { securityJob.style.display = "block"; agentJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12CarmichaelSecurity, - 500, 14, 60, 5); + 500, 14, 60, 4.5); break; case Locations.Sector12FoodNStuff: @@ -698,7 +698,7 @@ displayLocationContent = function() { employeeJob.style.display = "block"; employeePartTimeJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.Sector12JoesGuns, - 100, 4, 20, 4); + 100, 4, 20, 3.5); break; case Locations.Sector12IronGym: @@ -731,7 +731,7 @@ displayLocationContent = function() { securityEngineerJob.style.display = "block"; networkEngineerJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.NewTokyoDefComm, - 1300, 24, 70, 9.5); + 1300, 24, 70, 9); break; case Locations.NewTokyoVitaLife: @@ -744,7 +744,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; businessJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.NewTokyoVitaLife, - 750, 18, 100, 9); + 750, 18, 100, 8); break; case Locations.NewTokyoGlobalPharmaceuticals: @@ -758,7 +758,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.NewTokyoGlobalPharmaceuticals, - 900, 20, 80, 9); + 900, 20, 80, 8.5); break; case Locations.NewTokyoNoodleBar: @@ -797,7 +797,7 @@ displayLocationContent = function() { purchase256gb.style.display = "block"; purchaseHomeRam.style.display = "block"; setInfiltrateButton(infiltrate, Locations.IshimaStormTechnologies, - 700, 20, 100, 10.5); + 700, 20, 100, 10); break; case Locations.IshimaNovaMedical: @@ -810,7 +810,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; businessJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.IshimaNovaMedical, - 600, 16, 50, 8); + 600, 16, 50, 7.5); break; case Locations.IshimaOmegaSoftware: @@ -828,7 +828,7 @@ displayLocationContent = function() { purchaseTor.style.display = "block"; purchaseHomeRam.style.display = "block"; setInfiltrateButton(infiltrate, Locations.IshimaOmegaSoftware, - 200, 5, 40, 4.5); + 200, 5, 40, 4); break; case Locations.VolhavenTravelAgency: @@ -861,7 +861,7 @@ displayLocationContent = function() { purchase512gb.style.display = "block"; purchase1tb.style.display = "block"; setInfiltrateButton(infiltrate, Locations.VolhavenOmniTekIncorporated, - 1500, 38, 100, 10); + 1500, 38, 100, 9.5); break; case Locations.VolhavenNWO: @@ -874,7 +874,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.VolhavenNWO, - 1800, 48, 200, 12); + 1800, 48, 200, 11); break; case Locations.VolhavenHeliosLabs: @@ -886,7 +886,7 @@ displayLocationContent = function() { securityEngineerJob.style.display = "block"; networkEngineerJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.VolhavenHeliosLabs, - 1200, 24, 75, 9.5); + 1200, 24, 75, 9); break; case Locations.VolhavenOmniaCybersystems: @@ -898,7 +898,7 @@ displayLocationContent = function() { networkEngineerJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.VolhavenOmniaCybersystems, - 900, 24, 90, 10); + 900, 24, 90, 9.5); break; case Locations.VolhavenLexoCorp: @@ -912,7 +912,7 @@ displayLocationContent = function() { businessJob.style.display = "block"; securityJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.VolhavenLexoCorp, - 500, 10, 40, 6); + 500, 10, 40, 5.5); break; case Locations.VolhavenSysCoreSecurities: @@ -923,7 +923,7 @@ displayLocationContent = function() { securityEngineerJob.style.display = "block"; networkEngineerJob.style.display = "block"; setInfiltrateButton(infiltrate, Locations.VolhavenSysCoreSecurities, - 600, 12, 50, 7); + 600, 12, 50, 6); break; case Locations.VolhavenCompuTek: @@ -944,7 +944,7 @@ displayLocationContent = function() { purchaseTor.style.display = "block"; purchaseHomeRam.style.display = "block"; setInfiltrateButton(infiltrate, Locations.VolhavenCompuTek, - 300, 8, 35, 6); + 300, 8, 35, 5); break; case Locations.VolhavenMilleniumFitnessGym: diff --git a/src/Player.js b/src/Player.js index 26bbda47b..6423d0f3b 100644 --- a/src/Player.js +++ b/src/Player.js @@ -938,13 +938,13 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) { var gameCPS = 1000 / Engine._idleSpeed; //Base exp gains per second - var baseStudyComputerScienceExp = 0.05; - var baseDataStructuresExp = 0.2; - var baseNetworksExp = 0.8; - var baseAlgorithmsExp = 2.0; - var baseManagementExp = 1.0; - var baseLeadershipExp = 2.0; - var baseGymExp = 1.0; + var baseStudyComputerScienceExp = 0.25; + var baseDataStructuresExp = 0.5; + var baseNetworksExp = 1; + var baseAlgorithmsExp = 2; + var baseManagementExp = 1; + var baseLeadershipExp = 2; + var baseGymExp = 1; //Find cost and exp gain per game cycle var cost = 0; diff --git a/src/RedPill.js b/src/RedPill.js new file mode 100644 index 000000000..ad13336cd --- /dev/null +++ b/src/RedPill.js @@ -0,0 +1,38 @@ +/* RedPill.js + * Implements what happens when you have Red Pill augmentation and then hack the world daemon */ + +//Returns promise +function writeRedPillLine(line) { + return new Promise(function(resolve, reject) { + + var container = document.getElementById("red-pill-container"); + var pElem = document.createElement("p"); + container.appendChild(pElem); + + var promise = writeRedPillLetter(pElem, line, 0); + promise.then(function(res) { + resolve(res); + }, function(e) { + reject(e); + }); + }); +} + +function writeRedPillLetter(pElem, line, i=0) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + if (i >= line.length) { + resolve(true); + } + var textToShow = line.substring(0, i); + pElem.innerHTML = "> " + textToShow + ""; + var promise = writeRedPillLetter(pElem, line, i+1); + promise.then(function(res) { + resolve(res); + }, function(e) { + reject(e); + }); + }, 50); + }); +} + diff --git a/src/SaveObject.js b/src/SaveObject.js index 0e40f4f43..c098d9332 100644 --- a/src/SaveObject.js +++ b/src/SaveObject.js @@ -10,6 +10,7 @@ function BitburnerSaveObject() { this.FactionsSave = ""; this.SpecialServerIpsSave = ""; this.AliasesSave = ""; + this.GlobalAliasesSave = ""; this.MessagesSave = ""; this.StockMarketSave = ""; this.VersionSave = ""; @@ -36,6 +37,7 @@ BitburnerSaveObject.prototype.saveGame = function() { this.FactionsSave = JSON.stringify(Factions); this.SpecialServerIpsSave = JSON.stringify(SpecialServerIps); this.AliasesSave = JSON.stringify(Aliases); + this.GlobalAliasesSave = JSON.stringify(GlobalAliases); this.MessagesSave = JSON.stringify(Messages); this.StockMarketSave = JSON.stringify(StockMarket); this.VersionSave = JSON.stringify(CONSTANTS.Version); @@ -69,6 +71,15 @@ loadGame = function(saveObj) { } else { Aliases = {}; } + if (saveObj.hasOwnProperty("GlobalAliasesSave")) { + try { + GlobalAliases = JSON.parse(saveObj.GlobalAliasesSave, Reviver); + } catch(e) { + GlobalAliases = {}; + } + } else { + GlobalAliases = {}; + } if (saveObj.hasOwnProperty("MessagesSave")) { try { Messages = JSON.parse(saveObj.MessagesSave, Reviver); @@ -129,6 +140,7 @@ loadImportedGame = function(saveObj, saveString) { var tempSpecialServerIps = null; var tempAugmentations = null; var tempAliases = null; + var tempGlobalAliases = null; var tempMessages = null; var tempStockMarket = null; try { @@ -151,6 +163,15 @@ loadImportedGame = function(saveObj, saveString) { } else { tempAliases = {}; } + if (tempSaveObj.hasOwnProperty("GlobalAliases")) { + try { + tempGlobalAliases = JSON.parse(tempSaveObj.AliasesSave, Reviver); + } catch(e) { + tempGlobalAliases = {}; + } + } else { + tempGlobalAliases = {}; + } if (tempSaveObj.hasOwnProperty("MessagesSave")) { try { tempMessages = JSON.parse(tempSaveObj.MessagesSave, Reviver); @@ -215,6 +236,10 @@ loadImportedGame = function(saveObj, saveString) { Aliases = tempAliases; } + if (tempGlobalAliases) { + GlobalAliases = tempGlobalAliases; + } + if (tempMessages) { Messages = tempMessages; } @@ -291,6 +316,7 @@ BitburnerSaveObject.prototype.exportGame = function() { this.SpecialServerIpsSave = JSON.stringify(SpecialServerIps); this.AugmentationsSave = JSON.stringify(Augmentations); this.AliasesSave = JSON.stringify(Aliases); + this.GlobalAliasesSave = JSON.stringify(GlobalAliasesSave); this.MessagesSave = JSON.stringify(Messages); this.VersionSave = JSON.stringify(CONSTANTS.Version); diff --git a/src/Server.js b/src/Server.js index a97d10886..5073b712d 100644 --- a/src/Server.js +++ b/src/Server.js @@ -141,62 +141,62 @@ initForeignServers = function() { //MegaCorporations var ECorpServer = new Server(); ECorpServer.init(createRandomIp(), "ecorp", "ECorp", true, false, false, false, 0); - ECorpServer.setHackingParameters(getRandomInt(900, 950), 100000000000, 99, 99); + ECorpServer.setHackingParameters(getRandomInt(900, 950), 90000000000, 99, 99); ECorpServer.setPortProperties(5); AddToAllServers(ECorpServer); var MegaCorpServer = new Server(); MegaCorpServer.init(createRandomIp(), "megacorp", "MegaCorp", true, false, false, false, 0); - MegaCorpServer.setHackingParameters(getRandomInt(900, 950), 80000000000, 99, 99); + MegaCorpServer.setHackingParameters(getRandomInt(900, 950), 75000000000, 99, 99); MegaCorpServer.setPortProperties(5); AddToAllServers(MegaCorpServer); var BachmanAndAssociatesServer = new Server(); BachmanAndAssociatesServer.init(createRandomIp(), "b-and-a", "Bachman & Associates", true, false, false, false, 0); - BachmanAndAssociatesServer.setHackingParameters(getRandomInt(875, 925), 32000000000, getRandomInt(75, 85), getRandomInt(65, 75)); + BachmanAndAssociatesServer.setHackingParameters(getRandomInt(875, 925), 30000000000, getRandomInt(75, 85), getRandomInt(65, 75)); BachmanAndAssociatesServer.setPortProperties(5); AddToAllServers(BachmanAndAssociatesServer); var BladeIndustriesServer = new Server(); BladeIndustriesServer.init(createRandomIp(), "blade", "Blade Industries", true, false, false, false, 0); - BladeIndustriesServer.setHackingParameters(getRandomInt(875, 925), 20000000000, getRandomInt(90, 95), getRandomInt(60, 75)); + BladeIndustriesServer.setHackingParameters(getRandomInt(875, 925), 18000000000, getRandomInt(90, 95), getRandomInt(60, 75)); BladeIndustriesServer.setPortProperties(5); AddToAllServers(BladeIndustriesServer); var NWOServer = new Server(); NWOServer.init(createRandomIp(), "nwo", "New World Order", true, false, false, false, 0); - NWOServer.setHackingParameters(getRandomInt(900, 920), 40000000000, 99, getRandomInt(75, 85)); + NWOServer.setHackingParameters(getRandomInt(900, 920), 36000000000, 99, getRandomInt(75, 85)); NWOServer.setPortProperties(5); AddToAllServers(NWOServer); var ClarkeIncorporatedServer = new Server(); ClarkeIncorporatedServer.init(createRandomIp(), "clarkeinc", "Clarke Incorporated", true, false, false, false, 0); - ClarkeIncorporatedServer.setHackingParameters(getRandomInt(875, 950), 15000000000, getRandomInt(50, 60), getRandomInt(50, 70)); + ClarkeIncorporatedServer.setHackingParameters(getRandomInt(875, 950), 13000000000, getRandomInt(50, 60), getRandomInt(50, 70)); ClarkeIncorporatedServer.setPortProperties(5); AddToAllServers(ClarkeIncorporatedServer); var OmniTekIncorporatedServer = new Server(); OmniTekIncorporatedServer.init(createRandomIp(), "omnitek", "OmniTek Incorporated", true, false, false, false, 0); - OmniTekIncorporatedServer.setHackingParameters(getRandomInt(870, 930), 50000000000, getRandomInt(90, 99), getRandomInt(95, 99)); + OmniTekIncorporatedServer.setHackingParameters(getRandomInt(870, 930), 45000000000, getRandomInt(90, 99), getRandomInt(95, 99)); OmniTekIncorporatedServer.setPortProperties(5); AddToAllServers(OmniTekIncorporatedServer); var FourSigmaServer = new Server(); FourSigmaServer.init(createRandomIp(), "4sigma", "FourSigma", true, false, false, false, 0); - FourSigmaServer.setHackingParameters(getRandomInt(875, 925), 25000000000, getRandomInt(60, 70), getRandomInt(75, 85)); + FourSigmaServer.setHackingParameters(getRandomInt(875, 925), 24000000000, getRandomInt(60, 70), getRandomInt(75, 99)); FourSigmaServer.setPortProperties(5); AddToAllServers(FourSigmaServer); var KuaiGongInternationalServer = new Server(); KuaiGongInternationalServer.init(createRandomIp(), "kuai-gong", "KuaiGong International", true, false, false, false, 0); - KuaiGongInternationalServer.setHackingParameters(getRandomInt(900, 950), 75000000000, getRandomInt(95, 99), getRandomInt(90, 99)); + KuaiGongInternationalServer.setHackingParameters(getRandomInt(900, 950), 70000000000, getRandomInt(95, 99), getRandomInt(90, 99)); KuaiGongInternationalServer.setPortProperties(5); AddToAllServers(KuaiGongInternationalServer); //Technology and communications companies (large targets) var FulcrumTechnologiesServer = new Server(); FulcrumTechnologiesServer.init(createRandomIp(), "fulcrumtech", "Fulcrum Technologies", true, false, false, false, 64); - FulcrumTechnologiesServer.setHackingParameters(getRandomInt(900, 1000), 2000000000, getRandomInt(85, 95), getRandomInt(80, 99)); + FulcrumTechnologiesServer.setHackingParameters(getRandomInt(900, 1000), 1500000000, getRandomInt(85, 95), getRandomInt(80, 99)); FulcrumTechnologiesServer.setPortProperties(5); AddToAllServers(FulcrumTechnologiesServer); @@ -209,148 +209,148 @@ initForeignServers = function() { var StormTechnologiesServer = new Server(); StormTechnologiesServer.init(createRandomIp(), "stormtech", "Storm Technologies", true, false, false, false, 0); - StormTechnologiesServer.setHackingParameters(getRandomInt(825, 875), 1500000000, getRandomInt(80, 90), getRandomInt(70, 90)); + StormTechnologiesServer.setHackingParameters(getRandomInt(825, 875), 1300000000, getRandomInt(80, 90), getRandomInt(70, 90)); StormTechnologiesServer.setPortProperties(5); AddToAllServers(StormTechnologiesServer); var DefCommServer = new Server(); DefCommServer.init(createRandomIp(), "defcomm", "DefComm", true, false, false, false, 0); - DefCommServer.setHackingParameters(getRandomInt(800, 850), 900000000, getRandomInt(85, 95), getRandomInt(50, 70)); + DefCommServer.setHackingParameters(getRandomInt(800, 850), 850000000, getRandomInt(85, 95), getRandomInt(50, 70)); DefCommServer.setPortProperties(5); AddToAllServers(DefCommServer); var InfoCommServer = new Server(); InfoCommServer.init(createRandomIp(), "infocomm", "InfoComm", true, false, false, false, 0); - InfoCommServer.setHackingParameters(getRandomInt(800, 850), 750000000, getRandomInt(70, 90), getRandomInt(35, 75)); + InfoCommServer.setHackingParameters(getRandomInt(800, 850), 700000000, getRandomInt(70, 90), getRandomInt(35, 75)); InfoCommServer.setPortProperties(5); AddToAllServers(InfoCommServer); var HeliosLabsServer = new Server(); HeliosLabsServer.init(createRandomIp(), "helios", "Helios Labs", true, false, false, false, 0); - HeliosLabsServer.setHackingParameters(getRandomInt(775, 825), 500000000, getRandomInt(85, 95), getRandomInt(70, 80)); + HeliosLabsServer.setHackingParameters(getRandomInt(775, 825), 450000000, getRandomInt(85, 95), getRandomInt(70, 80)); HeliosLabsServer.setPortProperties(5); AddToAllServers(HeliosLabsServer); var VitaLifeServer = new Server(); VitaLifeServer.init(createRandomIp(), "vitalife", "VitaLife", true, false, false, false, 32); - VitaLifeServer.setHackingParameters(getRandomInt(750, 800), 800000000, getRandomInt(80, 90), getRandomInt(60, 80)); + VitaLifeServer.setHackingParameters(getRandomInt(750, 800), 720000000, getRandomInt(80, 90), getRandomInt(60, 80)); VitaLifeServer.setPortProperties(5); AddToAllServers(VitaLifeServer); var IcarusMicrosystemsServer = new Server(); IcarusMicrosystemsServer.init(createRandomIp(), "icarus", "Icarus Microsystems", true, false, false, false, 0); - IcarusMicrosystemsServer.setHackingParameters(getRandomInt(800, 820), 1100000000, getRandomInt(85, 95), getRandomInt(85, 95)); + IcarusMicrosystemsServer.setHackingParameters(getRandomInt(800, 820), 1000000000, getRandomInt(85, 95), getRandomInt(85, 95)); IcarusMicrosystemsServer.setPortProperties(5); AddToAllServers(IcarusMicrosystemsServer); var UniversalEnergyServer = new Server(); UniversalEnergyServer.init(createRandomIp(), "univ-energy", "Universal Energy", true, false, false, false, 32); - UniversalEnergyServer.setHackingParameters(getRandomInt(780, 800), 1500000000, getRandomInt(80, 90), getRandomInt(80, 90)); + UniversalEnergyServer.setHackingParameters(getRandomInt(780, 800), 1300000000, getRandomInt(80, 90), getRandomInt(80, 90)); UniversalEnergyServer.setPortProperties(4); AddToAllServers(UniversalEnergyServer); var TitanLabsServer = new Server(); TitanLabsServer.init(createRandomIp(), "titan-labs", "Titan Laboratories", true, false, false, false, 32); - TitanLabsServer.setHackingParameters(getRandomInt(790, 800), 1000000000, getRandomInt(70, 80), getRandomInt(60, 80)); + TitanLabsServer.setHackingParameters(getRandomInt(790, 800), 900000000, getRandomInt(70, 80), getRandomInt(60, 80)); TitanLabsServer.setPortProperties(5); AddToAllServers(TitanLabsServer); var MicrodyneTechnologiesServer = new Server(); MicrodyneTechnologiesServer.init(createRandomIp(), "microdyne", "Microdyne Technologies", true, false, false, false, 16); - MicrodyneTechnologiesServer.setHackingParameters(getRandomInt(780, 820), 900000000, getRandomInt(65, 75), getRandomInt(70, 90)); + MicrodyneTechnologiesServer.setHackingParameters(getRandomInt(780, 820), 750000000, getRandomInt(65, 75), getRandomInt(70, 90)); MicrodyneTechnologiesServer.setPortProperties(5); AddToAllServers(MicrodyneTechnologiesServer); var TaiYangDigitalServer = new Server(); TaiYangDigitalServer.init(createRandomIp(), "taiyang-digital", "Taiyang Digital", true, false, false, false, 0); - TaiYangDigitalServer.setHackingParameters(getRandomInt(800, 900), 1100000000, getRandomInt(70, 80), getRandomInt(70, 80)); + TaiYangDigitalServer.setHackingParameters(getRandomInt(800, 900), 1000000000, getRandomInt(70, 80), getRandomInt(70, 80)); TaiYangDigitalServer.setPortProperties(5); AddToAllServers(TaiYangDigitalServer); var GalacticCyberSystemsServer = new Server(); GalacticCyberSystemsServer.init(createRandomIp(), "galactic-cyber", "Galactic Cybersystems", true, false, false, false, 0); - GalacticCyberSystemsServer.setHackingParameters(getRandomInt(800, 850), 500000000, getRandomInt(55, 65), getRandomInt(70, 90)); + GalacticCyberSystemsServer.setHackingParameters(getRandomInt(800, 850), 450000000, getRandomInt(55, 65), getRandomInt(70, 90)); GalacticCyberSystemsServer.setPortProperties(5); AddToAllServers(GalacticCyberSystemsServer); //Defense Companies ("Large" Companies) var AeroCorpServer = new Server(); AeroCorpServer.init(createRandomIp(), "aerocorp", "AeroCorp", true, false, false, false, 0); - AeroCorpServer.setHackingParameters(getRandomInt(825, 875), 1500000000, getRandomInt(80, 90), getRandomInt(55, 65)); + AeroCorpServer.setHackingParameters(getRandomInt(825, 875), 1300000000, getRandomInt(80, 90), getRandomInt(55, 65)); AeroCorpServer.setPortProperties(5); AddToAllServers(AeroCorpServer); var OmniaCybersystemsServer = new Server(); OmniaCybersystemsServer.init(createRandomIp(), "omnia", "Omnia Cybersystems", true, false, false, false, 0); - OmniaCybersystemsServer.setHackingParameters(getRandomInt(800, 850), 1200000000, getRandomInt(85, 95), getRandomInt(60, 70)); + OmniaCybersystemsServer.setHackingParameters(getRandomInt(800, 850), 1100000000, getRandomInt(85, 95), getRandomInt(60, 70)); OmniaCybersystemsServer.setPortProperties(5); AddToAllServers(OmniaCybersystemsServer); var ZBDefenseServer = new Server(); ZBDefenseServer.init(createRandomIp(), "zb-def", "ZB Defense Industries", true, false, false, false, 0); - ZBDefenseServer.setHackingParameters(getRandomInt(775, 825), 1000000000, getRandomInt(55, 65), getRandomInt(65, 75)); + ZBDefenseServer.setHackingParameters(getRandomInt(775, 825), 900000000, getRandomInt(55, 65), getRandomInt(65, 75)); ZBDefenseServer.setPortProperties(4); AddToAllServers(ZBDefenseServer); var AppliedEnergeticsServer = new Server(); AppliedEnergeticsServer.init(createRandomIp(), "applied-energetics", "Applied Energetics", true, false, false, false, 0); - AppliedEnergeticsServer.setHackingParameters(getRandomInt(750, 800), 1200000000, getRandomInt(60, 80), getRandomInt(70, 75)); + AppliedEnergeticsServer.setHackingParameters(getRandomInt(750, 800), 1100000000, getRandomInt(60, 80), getRandomInt(70, 75)); AppliedEnergeticsServer.setPortProperties(4); AddToAllServers(AppliedEnergeticsServer); var SolarisSpaceSystemsServer = new Server(); SolarisSpaceSystemsServer.init(createRandomIp(), "solaris", "Solaris Space Systems", true, false, false, false, 0); - SolarisSpaceSystemsServer.setHackingParameters(getRandomInt(790, 810), 900000000, getRandomInt(70, 80), getRandomInt(70, 80)); + SolarisSpaceSystemsServer.setHackingParameters(getRandomInt(790, 810), 800000000, getRandomInt(70, 80), getRandomInt(70, 80)); SolarisSpaceSystemsServer.setPortProperties(5); AddToAllServers(SolarisSpaceSystemsServer); var DeltaOneServer = new Server(); DeltaOneServer.init(createRandomIp(), "deltaone", "Delta One", true, false, false, false, 0); - DeltaOneServer.setHackingParameters(getRandomInt(800, 820), 1500000000, getRandomInt(75, 85), getRandomInt(50, 70)); + DeltaOneServer.setHackingParameters(getRandomInt(800, 820), 1400000000, getRandomInt(75, 85), getRandomInt(50, 70)); DeltaOneServer.setPortProperties(5); AddToAllServers(DeltaOneServer); //Health, medicine, pharmaceutical companies ("Large" targets) var GlobalPharmaceuticalsServer = new Server(); GlobalPharmaceuticalsServer.init(createRandomIp(), "global-pharm", "Global Pharmaceuticals", true, false, false, false, 16); - GlobalPharmaceuticalsServer.setHackingParameters(getRandomInt(750, 800), 2000000000, getRandomInt(75, 85), getRandomInt(80, 90)); + GlobalPharmaceuticalsServer.setHackingParameters(getRandomInt(750, 800), 1800000000, getRandomInt(75, 85), getRandomInt(80, 90)); GlobalPharmaceuticalsServer.setPortProperties(4); AddToAllServers(GlobalPharmaceuticalsServer); var NovaMedicalServer = new Server(); NovaMedicalServer.init(createRandomIp(), "nova-med", "Nova Medical", true, false, false, false, 0); - NovaMedicalServer.setHackingParameters(getRandomInt(775, 825), 1500000000, getRandomInt(60, 80), getRandomInt(65, 85)); + NovaMedicalServer.setHackingParameters(getRandomInt(775, 825), 1350000000, getRandomInt(60, 80), getRandomInt(65, 85)); NovaMedicalServer.setPortProperties(4); AddToAllServers(NovaMedicalServer); var ZeusMedicalServer = new Server(); ZeusMedicalServer.init(createRandomIp(), "zeud-med", "Zeus Medical", true, false, false, false, 0); - ZeusMedicalServer.setHackingParameters(getRandomInt(800, 825), 1750000000, getRandomInt(70, 90), getRandomInt(70, 80)); + ZeusMedicalServer.setHackingParameters(getRandomInt(800, 825), 1600000000, getRandomInt(70, 90), getRandomInt(70, 80)); ZeusMedicalServer.setPortProperties(5); AddToAllServers(ZeusMedicalServer); var UnitaLifeGroupServer = new Server(); UnitaLifeGroupServer.init(createRandomIp(), "unitalife", "UnitaLife Group", true, false, false, false, 32); - UnitaLifeGroupServer.setHackingParameters(getRandomInt(780, 800), 1400000000, getRandomInt(70, 80), getRandomInt(70, 80)); + UnitaLifeGroupServer.setHackingParameters(getRandomInt(780, 800), 1200000000, getRandomInt(70, 80), getRandomInt(70, 80)); UnitaLifeGroupServer.setPortProperties(4); AddToAllServers(UnitaLifeGroupServer); //"Medium level" targets var LexoCorpServer = new Server(); LexoCorpServer.init(createRandomIp(), "lexo-corp", "Lexo Corporation", true, false, false, false, 16); - LexoCorpServer.setHackingParameters(getRandomInt(680, 720), 1000000000, getRandomInt(60, 80), getRandomInt(55, 65)); + LexoCorpServer.setHackingParameters(getRandomInt(680, 720), 800000000, getRandomInt(60, 80), getRandomInt(55, 65)); LexoCorpServer.setPortProperties(4); AddToAllServers(LexoCorpServer); var RhoConstructionServer = new Server(); RhoConstructionServer.init(createRandomIp(), "rho-construction", "Rho Construction", true, false, false, false, 0); - RhoConstructionServer.setHackingParameters(getRandomInt(480, 520), 750000000, getRandomInt(40, 60), getRandomInt(40, 60)); + RhoConstructionServer.setHackingParameters(getRandomInt(480, 520), 700000000, getRandomInt(40, 60), getRandomInt(40, 60)); RhoConstructionServer.setPortProperties(3); AddToAllServers(RhoConstructionServer); var AlphaEnterprisesServer = new Server(); AlphaEnterprisesServer.init(createRandomIp(), "alpha-ent", "Alpha Enterprises", true, false, false, false, 0); - AlphaEnterprisesServer.setHackingParameters(getRandomInt(500, 600), 800000000, getRandomInt(50, 70), getRandomInt(50, 60)); + AlphaEnterprisesServer.setHackingParameters(getRandomInt(500, 600), 750000000, getRandomInt(50, 70), getRandomInt(50, 60)); AlphaEnterprisesServer.setPortProperties(4); AddToAllServers(AlphaEnterprisesServer); @@ -363,7 +363,7 @@ initForeignServers = function() { var RothmanUniversityServer = new Server(); RothmanUniversityServer.init(createRandomIp(), "rothman-uni", "Rothman University Network", true, false, false, false, 4); - RothmanUniversityServer.setHackingParameters(getRandomInt(370, 430), 250000000, getRandomInt(45, 55), getRandomInt(35, 45)); + RothmanUniversityServer.setHackingParameters(getRandomInt(370, 430), 200000000, getRandomInt(45, 55), getRandomInt(35, 45)); RothmanUniversityServer.setPortProperties(3); AddToAllServers(RothmanUniversityServer); @@ -375,43 +375,43 @@ initForeignServers = function() { var SummitUniversityServer = new Server(); SummitUniversityServer.init(createRandomIp(), "summit-uni", "Summit University Network", true, false, false, false, 4); - SummitUniversityServer.setHackingParameters(getRandomInt(425, 475), 200000000, getRandomInt(45, 65), getRandomInt(40, 60)); + SummitUniversityServer.setHackingParameters(getRandomInt(425, 475), 160000000, getRandomInt(45, 65), getRandomInt(40, 60)); SummitUniversityServer.setPortProperties(3); AddToAllServers(SummitUniversityServer); var SysCoreSecuritiesServer = new Server(); SysCoreSecuritiesServer.init(createRandomIp(), "syscore", "SysCore Securities", true, false, false, false, 0); - SysCoreSecuritiesServer.setHackingParameters(getRandomInt(550, 650), 600000000, getRandomInt(60, 80), getRandomInt(60, 70)); + SysCoreSecuritiesServer.setHackingParameters(getRandomInt(550, 650), 500000000, getRandomInt(60, 80), getRandomInt(60, 70)); SysCoreSecuritiesServer.setPortProperties(4); AddToAllServers(SysCoreSecuritiesServer); var CatalystVenturesServer = new Server(); CatalystVenturesServer.init(createRandomIp(), "catalyst", "Catalyst Ventures", true, false, false, false, 0); - CatalystVenturesServer.setHackingParameters(getRandomInt(400, 450), 900000000, getRandomInt(60, 70), getRandomInt(25, 55)); + CatalystVenturesServer.setHackingParameters(getRandomInt(400, 450), 750000000, getRandomInt(60, 70), getRandomInt(25, 55)); CatalystVenturesServer.setPortProperties(3); AddToAllServers(CatalystVenturesServer); var TheHubServer = new Server(); TheHubServer.init(createRandomIp(), "the-hub", "The Hub", true, false, false, false, 0); - TheHubServer.setHackingParameters(getRandomInt(275, 325), 250000000, getRandomInt(35, 45), getRandomInt(45, 55)); + TheHubServer.setHackingParameters(getRandomInt(275, 325), 225000000, getRandomInt(35, 45), getRandomInt(45, 55)); TheHubServer.setPortProperties(2); AddToAllServers(TheHubServer); var CompuTekServer = new Server(); CompuTekServer.init(createRandomIp(), "comptek", "CompuTek", true, false, false, false, 8); - CompuTekServer.setHackingParameters(getRandomInt(300, 400), 300000000, getRandomInt(55, 65), getRandomInt(50, 60)); + CompuTekServer.setHackingParameters(getRandomInt(300, 400), 275000000, getRandomInt(55, 65), getRandomInt(50, 60)); CompuTekServer.setPortProperties(3); AddToAllServers(CompuTekServer); var NetLinkTechnologiesServer = new Server(); NetLinkTechnologiesServer.init(createRandomIp(), "netlink", "NetLink Technologies", true, false, false, false, 0); - NetLinkTechnologiesServer.setHackingParameters(getRandomInt(375, 425), 350000000, getRandomInt(60, 80), getRandomInt(50, 70)); + NetLinkTechnologiesServer.setHackingParameters(getRandomInt(375, 425), 320000000, getRandomInt(60, 80), getRandomInt(50, 70)); NetLinkTechnologiesServer.setPortProperties(3); AddToAllServers(NetLinkTechnologiesServer); var JohnsonOrthopedicsServer = new Server(); JohnsonOrthopedicsServer.init(createRandomIp(), "johnson-ortho", "Johnson Orthopedics", true, false, false, false, 4); - JohnsonOrthopedicsServer.setHackingParameters(getRandomInt(250, 300), 100000000, getRandomInt(40, 60), getRandomInt(40, 60)); + JohnsonOrthopedicsServer.setHackingParameters(getRandomInt(250, 300), 80000000, getRandomInt(40, 60), getRandomInt(40, 60)); JohnsonOrthopedicsServer.setPortProperties(2); AddToAllServers(JohnsonOrthopedicsServer); @@ -454,7 +454,7 @@ initForeignServers = function() { var SilverHelixServer = new Server(); SilverHelixServer.init(createRandomIp(), "silver-helix", "Silver Helix", true, false, false, false, 2); - SilverHelixServer.setHackingParameters(150, 55000000, 30, 30); + SilverHelixServer.setHackingParameters(150, 50000000, 30, 30); SilverHelixServer.setPortProperties(2); AddToAllServers(SilverHelixServer); @@ -484,7 +484,7 @@ initForeignServers = function() { var OmegaSoftwareServer = new Server(); OmegaSoftwareServer.init(createRandomIp(), "omega-net", "Omega Software", true, false, false, false, 8); - OmegaSoftwareServer.setHackingParameters(getRandomInt(180, 220), 85000000, getRandomInt(25, 35), getRandomInt(30, 40)); + OmegaSoftwareServer.setHackingParameters(getRandomInt(180, 220), 75000000, getRandomInt(25, 35), getRandomInt(30, 40)); OmegaSoftwareServer.setPortProperties(2); AddToAllServers(OmegaSoftwareServer); @@ -703,7 +703,10 @@ processSingleServerGrowth = function(server, numCycles) { } server.moneyAvailable *= serverGrowth; - if (server.moneyMax && server.moneyAvailable >= server.moneyMax) { + if (server.moneyMax && isNaN(server.moneyAvailable)) { + server.moneyAvailable = server.moneyMax; + } + if (server.moneyMax && server.moneyAvailable > server.moneyMax) { server.moneyAvailable = server.moneyMax; return 1; } diff --git a/src/StockMarket.js b/src/StockMarket.js index 674beb36f..d2b4c97c6 100644 --- a/src/StockMarket.js +++ b/src/StockMarket.js @@ -63,67 +63,67 @@ function initStockMarket() { StockMarket = {}; var ecorp = Locations.AevumECorp; - var ecorpStk = new Stock(ecorp, StockSymbols[ecorp], 0.5, true, 20, getRandomInt(20000, 25000)); + var ecorpStk = new Stock(ecorp, StockSymbols[ecorp], 0.5, true, 16, getRandomInt(20000, 25000)); StockMarket[ecorp] = ecorpStk; var megacorp = Locations.Sector12MegaCorp; - var megacorpStk = new Stock(megacorp, StockSymbols[megacorp], 0.5, true, 20, getRandomInt(25000, 33000)); + var megacorpStk = new Stock(megacorp, StockSymbols[megacorp], 0.5, true, 16, getRandomInt(25000, 33000)); StockMarket[megacorp] = megacorpStk; var blade = Locations.Sector12BladeIndustries; - var bladeStk = new Stock(blade, StockSymbols[blade], 0.75, true, 16, getRandomInt(15000, 22000)); + var bladeStk = new Stock(blade, StockSymbols[blade], 0.75, true, 13, getRandomInt(15000, 22000)); StockMarket[blade] = bladeStk; var clarke = Locations.AevumClarkeIncorporated; - var clarkeStk = new Stock(clarke, StockSymbols[clarke], 0.7, true, 15, getRandomInt(15000, 20000)); + var clarkeStk = new Stock(clarke, StockSymbols[clarke], 0.7, true, 12, getRandomInt(15000, 20000)); StockMarket[clarke] = clarkeStk; var omnitek = Locations.VolhavenOmniTekIncorporated; - var omnitekStk = new Stock(omnitek, StockSymbols[omnitek], 0.65, true, 15, getRandomInt(35000, 40000)); + var omnitekStk = new Stock(omnitek, StockSymbols[omnitek], 0.65, true, 12, getRandomInt(35000, 40000)); StockMarket[omnitek] = omnitekStk; var foursigma = Locations.Sector12FourSigma; - var foursigmaStk = new Stock(foursigma, StockSymbols[foursigma], 1.25, true, 20, getRandomInt(75000, 80000)); + var foursigmaStk = new Stock(foursigma, StockSymbols[foursigma], 1.1, true, 18, getRandomInt(60000, 70000)); StockMarket[foursigma] = foursigmaStk; var kuaigong = Locations.ChongqingKuaiGongInternational; - var kuaigongStk = new Stock(kuaigong, StockSymbols[kuaigong], 0.8, true, 12, getRandomInt(20000, 24000)); + var kuaigongStk = new Stock(kuaigong, StockSymbols[kuaigong], 0.8, true, 10, getRandomInt(20000, 24000)); StockMarket[kuaigong] = kuaigongStk; var fulcrum = Locations.AevumFulcrumTechnologies; - var fulcrumStk = new Stock(fulcrum, StockSymbols[fulcrum], 1.25, true, 21, getRandomInt(30000, 35000)); + var fulcrumStk = new Stock(fulcrum, StockSymbols[fulcrum], 1.25, true, 17, getRandomInt(30000, 35000)); StockMarket[fulcrum] = fulcrumStk; var storm = Locations.IshimaStormTechnologies; - var stormStk = new Stock(storm, StockSymbols[storm], 0.85, true, 9, getRandomInt(21000, 24000)); + var stormStk = new Stock(storm, StockSymbols[storm], 0.85, true, 7, getRandomInt(21000, 24000)); StockMarket[storm] = stormStk; var defcomm = Locations.NewTokyoDefComm; - var defcommStk = new Stock(defcomm, StockSymbols[defcomm], 0.65, true, 12, getRandomInt(10000, 15000)); + var defcommStk = new Stock(defcomm, StockSymbols[defcomm], 0.65, true, 10, getRandomInt(10000, 15000)); StockMarket[defcomm] = defcommStk; var helios = Locations.VolhavenHeliosLabs; - var heliosStk = new Stock(helios, StockSymbols[helios], 0.6, true, 11, getRandomInt(12000, 16000)); + var heliosStk = new Stock(helios, StockSymbols[helios], 0.6, true, 9, getRandomInt(12000, 16000)); StockMarket[helios] = heliosStk; var vitalife = Locations.NewTokyoVitaLife; - var vitalifeStk = new Stock(vitalife, StockSymbols[vitalife], 0.75, true, 7.5, getRandomInt(10000, 12000)); + var vitalifeStk = new Stock(vitalife, StockSymbols[vitalife], 0.75, true, 7, getRandomInt(10000, 12000)); StockMarket[vitalife] = vitalifeStk; var icarus = Locations.Sector12IcarusMicrosystems; - var icarusStk = new Stock(icarus, StockSymbols[icarus], 0.65, true, 9, getRandomInt(16000, 20000)); + var icarusStk = new Stock(icarus, StockSymbols[icarus], 0.65, true, 7.5, getRandomInt(16000, 20000)); StockMarket[icarus] = icarusStk; var universalenergy = Locations.Sector12UniversalEnergy; - var universalenergyStk = new Stock(universalenergy, StockSymbols[universalenergy], 0.55, true, 12, getRandomInt(20000, 25000)); + var universalenergyStk = new Stock(universalenergy, StockSymbols[universalenergy], 0.55, true, 10, getRandomInt(20000, 25000)); StockMarket[universalenergy] = universalenergyStk; var galactic = Locations.AevumGalacticCybersystems; - var galacticStk = new Stock(galactic, StockSymbols[galactic], 0.6, true, 6, getRandomInt(8000, 10000)); + var galacticStk = new Stock(galactic, StockSymbols[galactic], 0.6, true, 5, getRandomInt(8000, 10000)); StockMarket[galactic] = galacticStk; var aerocorp = Locations.AevumAeroCorp; - var aerocorpStk = new Stock(aerocorp, StockSymbols[aerocorp], 0.6, true, 7, getRandomInt(10000, 15000)); + var aerocorpStk = new Stock(aerocorp, StockSymbols[aerocorp], 0.6, true, 6, getRandomInt(10000, 15000)); StockMarket[aerocorp] = aerocorpStk; var omnia = Locations.VolhavenOmniaCybersystems; @@ -131,19 +131,19 @@ function initStockMarket() { StockMarket[omnia] = omniaStk; var solaris = Locations.ChongqingSolarisSpaceSystems; - var solarisStk = new Stock(solaris, StockSymbols[solaris], 0.75, true, 10, getRandomInt(18000, 24000)); + var solarisStk = new Stock(solaris, StockSymbols[solaris], 0.75, true, 8.5, getRandomInt(18000, 24000)); StockMarket[solaris] = solarisStk; var globalpharm = Locations.NewTokyoGlobalPharmaceuticals; - var globalpharmStk = new Stock(globalpharm, StockSymbols[globalpharm], 0.6, true, 12, getRandomInt(18000, 24000)); + var globalpharmStk = new Stock(globalpharm, StockSymbols[globalpharm], 0.6, true, 10.5, getRandomInt(18000, 24000)); StockMarket[globalpharm] = globalpharmStk; var nova = Locations.IshimaNovaMedical; - var novaStk = new Stock(nova, StockSymbols[nova], 0.75, true, 6, getRandomInt(18000, 24000)); + var novaStk = new Stock(nova, StockSymbols[nova], 0.75, true, 5, getRandomInt(18000, 24000)); StockMarket[nova] = novaStk; var watchdog = Locations.AevumWatchdogSecurity; - var watchdogStk = new Stock(watchdog, StockSymbols[watchdog], 1, true, 2, getRandomInt(5000, 7500)); + var watchdogStk = new Stock(watchdog, StockSymbols[watchdog], 1, true, 1.5, getRandomInt(5000, 7500)); StockMarket[watchdog] = watchdogStk; var lexocorp = Locations.VolhavenLexoCorp; @@ -356,7 +356,7 @@ function displayStockMarketContent() { if (!stockMarketContentCreated && Player.hasWseAccount) { console.log("Creating Stock Market UI"); - document.getElementById("stock-market-commission").innerText = + document.getElementById("stock-market-commission").innerHTML = "Commission Fees: Every transaction you make has a $" + formatNumber(CONSTANTS.StockMarketCommission, 2) + " commission fee.

    " + "WARNING: When you reset after installing Augmentations, the Stock Market is reset. " + @@ -491,15 +491,22 @@ function displayStockMarketContent() { li.appendChild(sharesTxt); li.appendChild(returnTxt); stockList.appendChild(li); - - updateStockTicker(stock, true); - updateStockPlayerPosition(stock); }()); //Immediate invocation }//End if } stockMarketContentCreated = true; } + + if (Player.hasWseAccount) { + for (var name in StockMarket) { + if (StockMarket.hasOwnProperty(name)) { + var stock = StockMarket[name]; + updateStockTicker(stock, true); + updateStockPlayerPosition(stock); + } + } + } } //'increase' argument is a boolean indicating whether the price increased or decreased diff --git a/src/Terminal.js b/src/Terminal.js index 0e7a45c6d..6aa6d2157 100644 --- a/src/Terminal.js +++ b/src/Terminal.js @@ -243,7 +243,7 @@ function determineAllPossibilitiesForTabCompletion(input, index=0) { return ["alias", "analyze", "cat", "check", "clear", "cls", "connect", "free", "hack", "help", "home", "hostname", "ifconfig", "kill", "killall", "ls", "mem", "nano", "ps", "rm", "run", "scan", "scan-analyze", - "scp", "sudov", "tail", "theme", "top"].concat(Object.keys(Aliases)); + "scp", "sudov", "tail", "theme", "top"].concat(Object.keys(Aliases)).concat(Object.keys(GlobalAliases)); } if (input.startsWith ("buy ")) { @@ -581,15 +581,21 @@ var Terminal = { case "alias": if (commandArray.length == 1) { printAliases(); - } else if (commandArray.length == 2) { - if (parseAliasDeclaration(commandArray[1])) { - - } else { - post('Incorrect usage of alias command. Usage: alias [aliasname="value"]'); return; - } - } else { - post('Incorrect usage of alias command. Usage: alias [aliasname="value"]'); return; + return; } + if (commandArray.length == 2) { + if (commandArray[1].startsWith("-g ")) { + var alias = commandArray[1].substring(3); + if (parseAliasDeclaration(alias, true)) { + return; + } + } else { + if (parseAliasDeclaration(commandArray[1])) { + return; + } + } + } + post('Incorrect usage of alias command. Usage: alias [-g] [aliasname="value"]'); break; case "analyze": if (commandArray.length != 1) { @@ -1036,8 +1042,32 @@ var Terminal = { } break; case "top": - //TODO List each's script RAM usage - post("Not yet implemented"); + if(commandArray.length != 1) { + post("Incorrect usage of top command. Usage: top"); return; + } + + post("Script Threads RAM Usage"); + + var currRunningScripts = Player.getCurrentServer().runningScripts; + //Iterate through scripts on current server + for(var i = 0; i < currRunningScripts.length; i++) { + var script = currRunningScripts[i]; + + //Calculate name padding + var numSpacesScript = 32 - script.filename.length; //26 -> width of name column + if (numSpacesScript < 0) {numSpacesScript = 0;} + var spacesScript = Array(numSpacesScript+1).join(" "); + + //Calculate thread padding + var numSpacesThread = 16 - (script.threads + "").length; //16 -> width of thread column + var spacesThread = Array(numSpacesThread+1).join(" "); + + //Calculate and transform RAM usage + ramUsage = formatNumber(script.scriptRef.ramUsage * script.threads, 2).toString() + "GB"; + + var entry = [script.filename, spacesScript, script.threads, spacesThread, ramUsage]; + post(entry.join("")); + } break; case "unalias": if (commandArray.length != 2) { @@ -1300,6 +1330,19 @@ var Terminal = { post("Netscript hack() execution time: " + formatNumber(scriptCalculateHackingTime(serv), 1) + "s"); post("Netscript grow() execution time: " + formatNumber(scriptCalculateGrowTime(serv)/1000, 1) + "s"); post("Netscript weaken() execution time: " + formatNumber(scriptCalculateWeakenTime(serv)/1000, 1) + "s"); + break; + case Programs.AutoLink: + post("This executable cannot be run."); + post("AutoLink.exe lets you automatically connect to other servers when using 'scan-analyze'."); + post("When using scan-analyze, click on a server's hostname to connect to it."); + break; + case Programs.DeepscanV1: + post("This executable cannot be run."); + post("DeepscanV1.exe lets you run 'scan-analyze' with a depth up to 5."); + break; + case Programs.DeepscanV2: + post("This executable cannot be run."); + post("DeepscanV2.exe lets you run 'scan-analyze' with a depth up to 10."); break; default: post("Invalid executable. Cannot be run"); diff --git a/src/engine.js b/src/engine.js index 9c27e5102..ee4592bb1 100644 --- a/src/engine.js +++ b/src/engine.js @@ -58,6 +58,7 @@ var Engine = { stockMarketContent: null, locationContent: null, workInProgressContent: null, + redPillContent: null, //Character info characterInfo: null, @@ -81,6 +82,7 @@ var Engine = { Tutorial: "Tutorial", Location: "Location", workInProgress: "WorkInProgress", + RedPill: "RedPill", Infiltration: "Infiltration", StockMarket: "StockMarket", }, @@ -187,6 +189,14 @@ var Engine = { Engine.currentPage = Engine.Page.WorkInProgress; }, + loadRedPillContent: function() { + Engine.hideAllContent(); + var mainMenu = document.getElementById("mainmenu-container"); + mainMenu.style.visibility = "hidden"; + Engine.Display.redPillContent.style.visibility = "visible"; + Engine.currentPage = Engine.Page.RedPill; + }, + loadInfiltrationContent: function() { Engine.hideAllContent(); Engine.Display.infiltrationContent.style.visibility = "visible"; @@ -216,6 +226,7 @@ var Engine = { Engine.Display.tutorialContent.style.visibility = "hidden"; Engine.Display.locationContent.style.visibility = "hidden"; Engine.Display.workInProgressContent.style.visibility = "hidden"; + Engine.Display.redPillContent.style.visibility = "hidden"; Engine.Display.infiltrationContent.style.visibility = "hidden"; Engine.Display.stockMarketContent.style.visibility = "hidden"; @@ -832,6 +843,10 @@ var Engine = { //Work In Progress Engine.Display.workInProgressContent = document.getElementById("work-in-progress-container"); Engine.Display.workInProgressContent.style.visibility = "hidden"; + + //Red Pill / Hack World Daemon + Engine.Display.redPillContent = document.getElementById("red-pill-container"); + Engine.Display.redPillContent.style.visibility = "hidden"; //Init Location buttons initLocationButtons(); diff --git a/utils/PurchaseRamForHomeBox.js b/utils/PurchaseRamForHomeBox.js index c6d0e0798..8213a70cc 100644 --- a/utils/PurchaseRamForHomeBox.js +++ b/utils/PurchaseRamForHomeBox.js @@ -36,7 +36,7 @@ purchaseRamForHomeBoxCreate = function() { //Calculate cost //Have cost increase by some percentage each time RAM has been upgraded var cost = currentRam * CONSTANTS.BaseCostFor1GBOfRamHome; - var mult = Math.pow(1.44, numUpgrades); + var mult = Math.pow(1.52, numUpgrades); cost = cost * mult; purchaseRamForHomeBoxSetText("Would you like to purchase additional RAM for your home computer?

    " +