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?
" +