diff --git a/dist/bundle.js b/dist/bundle.js
index 4b548719f..1639162d6 100644
--- a/dist/bundle.js
+++ b/dist/bundle.js
@@ -3068,6 +3068,140 @@ let CONSTANTS = {
"The code above will use the getServerMoneyAvailable() function to check how much money there is on the 'foodnstuff' server. " +
"If there is more than $200,000, then it will try to hack that server. If there is $200,000 or less on the server, " +
"then the code will call grow('foodnstuff') instead and add more money to the server.
",
+ TutorialSingularityFunctionsText: "Singularity Functions
" +
+ "The Singularity Functions are a special set of Netscript functions that are unlocked in BitNode-4. " +
+ "These functions allow you to control many additional aspects of the game through scripts, such as " +
+ "working for factions/companies, purchasing/installing Augmentations, and creating programs.
" +
+ "If you are in BitNode-4, then you will automatically have access to all of these functions. " +
+ "You can use the Singularity Functions in other BitNodes if and only if you have the Source-File " +
+ "for BitNode-4 (aka Source-File 4). Each level of Source-File 4 will open up additional Singularity " +
+ "Functions that you can use in other BitNodes. If your Source-File 4 is upgraded all the way to level 3, " +
+ "then you will be able to access all of the Singularity Functions.
" +
+ "Note that Singularity Functions require a lot of RAM outside of BitNode-4 (their RAM costs are multiplied by " +
+ "10 if you are not in BitNode-4).
" +
+ "universityCourse(universityName, courseName)
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start taking a course at a university. If you are already " +
+ "in the middle of some 'working' action (such as working at a company, for a faction, or on a program), " +
+ "then running this function will automatically cancel that action and give you your earnings.
" +
+ "The first argument must be a string with the name of the university. The names are NOT case-sensitive. " +
+ "Note that you must be in the correct city for whatever university you specify. The three universities are:
" +
+ "Summit University
Rothman University
ZB Institute of Technology
" +
+ "The second argument must be a string with the name of the course you are taking. These names are NOT case-sensitive. " +
+ "The available courses are:
" +
+ "Study Computer Science
Data Structures
Networks
Algorithms
Management
Leadership
" +
+ "The cost and experience gains for all of these universities and classes are the same as if you were to manually " +
+ "visit and take these classes.
" +
+ "This function will return true if you successfully start taking the course, and false otherwise.
" +
+ "gymWorkout(gymName, stat)
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start working out at a gym to train a particular stat. If you are " +
+ "already in the middle of some 'working' action (such as working at a company, for a faction, or on a program), then " +
+ "running this function will automatically cancel that action and give you your earnings.
" +
+ "The first argument must be a string with the name of the gym. The names are NOT case-sensitive. Note that you must " +
+ "be in the correct city for whatever gym you specify. The available gyms are:
" +
+ "Crush Fitness Gym
Snap Fitness Gym
Iron Gym
Powerhouse Gym
Millenium Fitness Gym
" +
+ "The second argument must be a string with the stat you want to work out. These are NOT case-sensitive. " +
+ "The valid stats are:
strength OR str
defense OR def
dexterity OR dex
agility OR agi
" +
+ "The cost and experience gains for all of these gyms are the same as if you were to manually visit these gyms and train " +
+ "This function will return true if you successfully start working out at the gym, and false otherwise.
" +
+ "travelToCity(cityname)
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function allows the player to travel to any city. The cost for using this function is the same as the cost for traveling through the Travel Agency.
" +
+ "The argument passed into this must be a string with the name of the city to travel to. Note that this argument IS CASE SENSITIVE. The valid cities are:
" +
+ "Aevum
Chongqing
Sector-12
New Tokyo
Ishima
Volhaven
" +
+ "This function will return true if you successfully travel to the specified city and false otherwise.
" +
+ "purchaseTor()
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function allows you to automatically purchase a TOR router. The cost for purchasing a TOR router using this " +
+ "function is the same as if you were to manually purchase one.
" +
+ "This function will return true if it successfully purchase a TOR router and false otherwise.
" +
+ "purchaseProgram(programName)
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function allows you to automatically purchase programs. You MUST have a TOR router in order to use this function.
" +
+ "The argument passed in must be a string with the name of the program (including the '.exe' extension). This argument is " +
+ "NOT case-sensitive.
Example: " +
+ "purchaseProgram('brutessh.exe');
" +
+ "The cost of purchasing programs using this function is the same as if you were purchasing them through the Dark Web (using " +
+ "the buy Terminal command).
" +
+ "This function will return true if the specified program is purchased, and false otherwise.
" +
+ "upgradeHomeRam()
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will upgrade amount of RAM on the player's home computer. The cost is the same as if you were to do it manually.
" +
+ "This function will return true if the player's home computer RAM is successfully upgraded, and false otherwise.
" +
+ "getUpgradeHomeRamCost()
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "Returns the cost of upgrading the player's home computer RAM.
" +
+ "workForCompany()
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start working at the company at which you are employed. If you are already " +
+ "in the middle of some 'working' action (such as working for a faction, training at a gym, or creating a program), then " +
+ "running this function will automatically cancel that action and give you your earnings.
" +
+ "This function will return true if the player starts working, and false otherwise.
" +
+ "applyToCompany(companyName, field)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will automatically try to apply to the specified company for a position in the specified field. This " +
+ "function can also be used to apply for promotions by specifying the company and field you are already employed at.
" +
+ "The first argument must be a string with the name of the company. This argument IS CASE-SENSITIVE. The second argument must " +
+ "be a string representing the 'field' to which you want to apply. This second argument is NOT case-sensitive. Valid values for " +
+ "the second argument are:
" +
+ "software
software consultant
it
security engineer
network engineer
business
business consultant
" +
+ "security
agent
employee
part-time employee
waiter
part-time waiter
" +
+ "This function will return true if you successfully get a job/promotion, and false otherwise. Note " +
+ "that if you are trying to use this function to apply for a promotion and you don't get one, it will return false.
" +
+ "getCompanyRep(companyName)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will return the amount of reputation you have at the specified company. If the company passed in as " +
+ "an argument is invalid, -1 will be returned.
" +
+ "The argument passed in must be a string with the name of the company. This argument IS CASE-SENSITIVE.
" +
+ "checkFactionInvitations()
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "Returns an array with the name of all Factions you currently have oustanding invitations from.
" +
+ "joinFaction(name)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will automatically accept an invitation from a faction and join it.
" +
+ "The argument must be a string with the name of the faction. This name IS CASE-SENSITIVE.
" +
+ "workForFaction(factionName, workType)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start working for the specified Faction. Obviously, you " +
+ "must be a member of the Faction or else this function will fail. If you are already in the middle of " +
+ "some 'working' action (such as working for a company, training at a gym, or creating a program), then running " +
+ "this function will automatically cancel that action and give you your earnings.
" +
+ "The first argument must be a string with the name of the faction. This argument IS CASE-SENSITIVE. The second argument " +
+ "must be a string with the type of work you want to perform for the faction. The valid values for this argument are:
" +
+ "
hacking/hacking contracts/hackingcontracts
field/fieldwork/field work
security/securitywork/security work
" +
+ "This function will return true if you successfully start working for the specified faction, and false otherwise.
" +
+ "getFactionRep(factionName)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function returns the amount of reputation you have for the specified Faction. The argument must be a " +
+ "string with the name of the Faction. The argument IS CASE-SENSITIVE.
" +
+ "createProgram(programName)
" +
+ "If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start working on creating the specified program. If you are already in " +
+ "the middle of some 'working' action (such as working for a company, training at a gym, or taking a course), then " +
+ "running this function will automatically cancel that action and give you your earnings.
" +
+ "The argument passed in must be a string designating the name of the program. This argument is NOT case-sensitive.
" +
+ "Example:
createProgram('relaysmtp.exe');
" +
+ "Note that creating a program using this function has the same hacking level requirements as it normally would. These level requirements are:
" +
+ "BruteSSH.exe: 50
FTPCrack.exe: 100
relaySMTP.exe: 250
HTTPWorm.exe: 500
SQLInject.exe: 750
" +
+ "DeepscanV1.exe: 75
DeepscanV2.exe: 400
ServerProfiler.exe: 75
AutoLink.exe: 25
" +
+ "This function returns true if you successfully start working on the specified program, and false otherwise.
" +
+ "getAugmentationCost(augName)
" +
+ "If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
" +
+ "This function returns an array with two elements that gives the cost for the specified Augmentation" +
+ ". The first element in the returned array is the reputation requirement of the Augmentation, and the second element " +
+ "is the money cost.
" +
+ "The argument passed in must be a string with the name of the Augmentation. This argument IS CASE-SENSITIVE. " +
+ "If an invalid Augmentation name is passed in, this function will return the array [-1, -1].
" +
+ "purchaseAugmentation(factionName, augName)
" +
+ "If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
" +
+ "This function will try to purchase the specified Augmentation through the given Faction.
" +
+ "The two arguments must be strings specifying the name of the Faction and Augmentation, respectively. These arguments are both CASE-SENSITIVE.
" +
+ "This function will return true if the Augmentation is successfully purchased, and false otherwise.
" +
+ "installAugmentations()
" +
+ "If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
" +
+ "This function will automatically install your Augmentations, resetting the game as usual.
" +
+ "It will return true if successful, and false otherwise.",
TutorialTravelingText:"There are six major cities in the world that you are able to travel to:
" +
" Aevum
" +
@@ -31282,11 +31416,11 @@ function Stock(name, symbol, mv, b, otlkMag, initPrice=10000) {
}
Stock.prototype.toJSON = function() {
- return Generic_toJSON("Stock", this);
+ return Object(__WEBPACK_IMPORTED_MODULE_6__utils_JSONReviver_js__["b" /* Generic_toJSON */])("Stock", this);
}
Stock.fromJSON = function(value) {
- return Generic_fromJSON(Stock, value.data);
+ return Object(__WEBPACK_IMPORTED_MODULE_6__utils_JSONReviver_js__["a" /* Generic_fromJSON */])(Stock, value.data);
}
__WEBPACK_IMPORTED_MODULE_6__utils_JSONReviver_js__["c" /* Reviver */].constructors.Stock = Stock;
@@ -31338,7 +31472,6 @@ function initStockSymbols() {
StockSymbols["Sigma Cosmetics"] = "SGC";
StockSymbols["Joes Guns"] = "JGN";
StockSymbols["Catalyst Ventures"] = "CTYS";
- StockSymbols["Taiyang Digital"] = "TAI";
StockSymbols["Microdyne Technologies"] = "MDYN";
StockSymbols["Titan Laboratories"] = "TITN";
}
@@ -35521,7 +35654,7 @@ function NetscriptFunctions(workerScript) {
expMult = 2;
break;
case __WEBPACK_IMPORTED_MODULE_7__Location_js__["a" /* Locations */].VolhavenZBInstituteOfTechnology.toLowerCase():
- if (__WEBPACK_IMPORTED_MODULE_8__Player_js__["a" /* Player */].city != __WEBPACK_IMPORTED_MODULE_7__Location_js__["a" /* Locations */].Aevum) {
+ if (__WEBPACK_IMPORTED_MODULE_8__Player_js__["a" /* Player */].city != __WEBPACK_IMPORTED_MODULE_7__Location_js__["a" /* Locations */].Volhaven) {
workerScript.scriptRef.log("ERROR: You cannot study at ZB Institute of Technology because you are not in Volhaven. universityCourse() failed");
return false;
}
@@ -35816,7 +35949,7 @@ function NetscriptFunctions(workerScript) {
cost = cost * mult;
if (__WEBPACK_IMPORTED_MODULE_8__Player_js__["a" /* Player */].money.lt(cost)) {
- workerScript.scriptRef.log("You do not have enough money to purchase additional RAM for your home computer");
+ workerScript.scriptRef.log("ERROR: upgradeHomeRam() failed because you don't have enough money");
return false;
}
@@ -35881,7 +36014,7 @@ function NetscriptFunctions(workerScript) {
}
if (!Object(__WEBPACK_IMPORTED_MODULE_1__Company_js__["e" /* companyExists */])(companyName)) {
- workerScript.scriptRef.log("ERROR: applyToCompany failed because specified company " + companyName + " does not exist.");
+ workerScript.scriptRef.log("ERROR: applyToCompany() failed because specified company " + companyName + " does not exist.");
return false;
}
diff --git a/src/Constants.js b/src/Constants.js
index 39c720354..905903a0d 100644
--- a/src/Constants.js
+++ b/src/Constants.js
@@ -625,6 +625,140 @@ let CONSTANTS = {
"The code above will use the getServerMoneyAvailable() function to check how much money there is on the 'foodnstuff' server. " +
"If there is more than $200,000, then it will try to hack that server. If there is $200,000 or less on the server, " +
"then the code will call grow('foodnstuff') instead and add more money to the server.
",
+ TutorialSingularityFunctionsText: "Singularity Functions
" +
+ "The Singularity Functions are a special set of Netscript functions that are unlocked in BitNode-4. " +
+ "These functions allow you to control many additional aspects of the game through scripts, such as " +
+ "working for factions/companies, purchasing/installing Augmentations, and creating programs.
" +
+ "If you are in BitNode-4, then you will automatically have access to all of these functions. " +
+ "You can use the Singularity Functions in other BitNodes if and only if you have the Source-File " +
+ "for BitNode-4 (aka Source-File 4). Each level of Source-File 4 will open up additional Singularity " +
+ "Functions that you can use in other BitNodes. If your Source-File 4 is upgraded all the way to level 3, " +
+ "then you will be able to access all of the Singularity Functions.
" +
+ "Note that Singularity Functions require a lot of RAM outside of BitNode-4 (their RAM costs are multiplied by " +
+ "10 if you are not in BitNode-4).
" +
+ "universityCourse(universityName, courseName)
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start taking a course at a university. If you are already " +
+ "in the middle of some 'working' action (such as working at a company, for a faction, or on a program), " +
+ "then running this function will automatically cancel that action and give you your earnings.
" +
+ "The first argument must be a string with the name of the university. The names are NOT case-sensitive. " +
+ "Note that you must be in the correct city for whatever university you specify. The three universities are:
" +
+ "Summit University
Rothman University
ZB Institute of Technology
" +
+ "The second argument must be a string with the name of the course you are taking. These names are NOT case-sensitive. " +
+ "The available courses are:
" +
+ "Study Computer Science
Data Structures
Networks
Algorithms
Management
Leadership
" +
+ "The cost and experience gains for all of these universities and classes are the same as if you were to manually " +
+ "visit and take these classes.
" +
+ "This function will return true if you successfully start taking the course, and false otherwise.
" +
+ "gymWorkout(gymName, stat)
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start working out at a gym to train a particular stat. If you are " +
+ "already in the middle of some 'working' action (such as working at a company, for a faction, or on a program), then " +
+ "running this function will automatically cancel that action and give you your earnings.
" +
+ "The first argument must be a string with the name of the gym. The names are NOT case-sensitive. Note that you must " +
+ "be in the correct city for whatever gym you specify. The available gyms are:
" +
+ "Crush Fitness Gym
Snap Fitness Gym
Iron Gym
Powerhouse Gym
Millenium Fitness Gym
" +
+ "The second argument must be a string with the stat you want to work out. These are NOT case-sensitive. " +
+ "The valid stats are:
strength OR str
defense OR def
dexterity OR dex
agility OR agi
" +
+ "The cost and experience gains for all of these gyms are the same as if you were to manually visit these gyms and train " +
+ "This function will return true if you successfully start working out at the gym, and false otherwise.
" +
+ "travelToCity(cityname)
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function allows the player to travel to any city. The cost for using this function is the same as the cost for traveling through the Travel Agency.
" +
+ "The argument passed into this must be a string with the name of the city to travel to. Note that this argument IS CASE SENSITIVE. The valid cities are:
" +
+ "Aevum
Chongqing
Sector-12
New Tokyo
Ishima
Volhaven
" +
+ "This function will return true if you successfully travel to the specified city and false otherwise.
" +
+ "purchaseTor()
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function allows you to automatically purchase a TOR router. The cost for purchasing a TOR router using this " +
+ "function is the same as if you were to manually purchase one.
" +
+ "This function will return true if it successfully purchase a TOR router and false otherwise.
" +
+ "purchaseProgram(programName)
" +
+ "If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
" +
+ "This function allows you to automatically purchase programs. You MUST have a TOR router in order to use this function.
" +
+ "The argument passed in must be a string with the name of the program (including the '.exe' extension). This argument is " +
+ "NOT case-sensitive.
Example: " +
+ "purchaseProgram('brutessh.exe');
" +
+ "The cost of purchasing programs using this function is the same as if you were purchasing them through the Dark Web (using " +
+ "the buy Terminal command).
" +
+ "This function will return true if the specified program is purchased, and false otherwise.
" +
+ "upgradeHomeRam()
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will upgrade amount of RAM on the player's home computer. The cost is the same as if you were to do it manually.
" +
+ "This function will return true if the player's home computer RAM is successfully upgraded, and false otherwise.
" +
+ "getUpgradeHomeRamCost()
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "Returns the cost of upgrading the player's home computer RAM.
" +
+ "workForCompany()
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start working at the company at which you are employed. If you are already " +
+ "in the middle of some 'working' action (such as working for a faction, training at a gym, or creating a program), then " +
+ "running this function will automatically cancel that action and give you your earnings.
" +
+ "This function will return true if the player starts working, and false otherwise.
" +
+ "applyToCompany(companyName, field)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will automatically try to apply to the specified company for a position in the specified field. This " +
+ "function can also be used to apply for promotions by specifying the company and field you are already employed at.
" +
+ "The first argument must be a string with the name of the company. This argument IS CASE-SENSITIVE. The second argument must " +
+ "be a string representing the 'field' to which you want to apply. This second argument is NOT case-sensitive. Valid values for " +
+ "the second argument are:
" +
+ "software
software consultant
it
security engineer
network engineer
business
business consultant
" +
+ "security
agent
employee
part-time employee
waiter
part-time waiter
" +
+ "This function will return true if you successfully get a job/promotion, and false otherwise. Note " +
+ "that if you are trying to use this function to apply for a promotion and you don't get one, it will return false.
" +
+ "getCompanyRep(companyName)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will return the amount of reputation you have at the specified company. If the company passed in as " +
+ "an argument is invalid, -1 will be returned.
" +
+ "The argument passed in must be a string with the name of the company. This argument IS CASE-SENSITIVE.
" +
+ "checkFactionInvitations()
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "Returns an array with the name of all Factions you currently have oustanding invitations from.
" +
+ "joinFaction(name)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will automatically accept an invitation from a faction and join it.
" +
+ "The argument must be a string with the name of the faction. This name IS CASE-SENSITIVE.
" +
+ "workForFaction(factionName, workType)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start working for the specified Faction. Obviously, you " +
+ "must be a member of the Faction or else this function will fail. If you are already in the middle of " +
+ "some 'working' action (such as working for a company, training at a gym, or creating a program), then running " +
+ "this function will automatically cancel that action and give you your earnings.
" +
+ "The first argument must be a string with the name of the faction. This argument IS CASE-SENSITIVE. The second argument " +
+ "must be a string with the type of work you want to perform for the faction. The valid values for this argument are:
" +
+ "
hacking/hacking contracts/hackingcontracts
field/fieldwork/field work
security/securitywork/security work
" +
+ "This function will return true if you successfully start working for the specified faction, and false otherwise.
" +
+ "getFactionRep(factionName)
" +
+ "If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.
" +
+ "This function returns the amount of reputation you have for the specified Faction. The argument must be a " +
+ "string with the name of the Faction. The argument IS CASE-SENSITIVE.
" +
+ "createProgram(programName)
" +
+ "If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
" +
+ "This function will automatically set you to start working on creating the specified program. If you are already in " +
+ "the middle of some 'working' action (such as working for a company, training at a gym, or taking a course), then " +
+ "running this function will automatically cancel that action and give you your earnings.
" +
+ "The argument passed in must be a string designating the name of the program. This argument is NOT case-sensitive.
" +
+ "Example:
createProgram('relaysmtp.exe');
" +
+ "Note that creating a program using this function has the same hacking level requirements as it normally would. These level requirements are:
" +
+ "BruteSSH.exe: 50
FTPCrack.exe: 100
relaySMTP.exe: 250
HTTPWorm.exe: 500
SQLInject.exe: 750
" +
+ "DeepscanV1.exe: 75
DeepscanV2.exe: 400
ServerProfiler.exe: 75
AutoLink.exe: 25
" +
+ "This function returns true if you successfully start working on the specified program, and false otherwise.
" +
+ "getAugmentationCost(augName)
" +
+ "If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
" +
+ "This function returns an array with two elements that gives the cost for the specified Augmentation" +
+ ". The first element in the returned array is the reputation requirement of the Augmentation, and the second element " +
+ "is the money cost.
" +
+ "The argument passed in must be a string with the name of the Augmentation. This argument IS CASE-SENSITIVE. " +
+ "If an invalid Augmentation name is passed in, this function will return the array [-1, -1].
" +
+ "purchaseAugmentation(factionName, augName)
" +
+ "If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
" +
+ "This function will try to purchase the specified Augmentation through the given Faction.
" +
+ "The two arguments must be strings specifying the name of the Faction and Augmentation, respectively. These arguments are both CASE-SENSITIVE.
" +
+ "This function will return true if the Augmentation is successfully purchased, and false otherwise.
" +
+ "installAugmentations()
" +
+ "If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
" +
+ "This function will automatically install your Augmentations, resetting the game as usual.
" +
+ "It will return true if successful, and false otherwise.",
TutorialTravelingText:"There are six major cities in the world that you are able to travel to:
" +
" Aevum
" +
diff --git a/src/NetscriptFunctions.js b/src/NetscriptFunctions.js
index e9530eb84..33543a28b 100644
--- a/src/NetscriptFunctions.js
+++ b/src/NetscriptFunctions.js
@@ -949,7 +949,7 @@ function NetscriptFunctions(workerScript) {
expMult = 2;
break;
case Locations.VolhavenZBInstituteOfTechnology.toLowerCase():
- if (Player.city != Locations.Aevum) {
+ if (Player.city != Locations.Volhaven) {
workerScript.scriptRef.log("ERROR: You cannot study at ZB Institute of Technology because you are not in Volhaven. universityCourse() failed");
return false;
}
@@ -1244,7 +1244,7 @@ function NetscriptFunctions(workerScript) {
cost = cost * mult;
if (Player.money.lt(cost)) {
- workerScript.scriptRef.log("You do not have enough money to purchase additional RAM for your home computer");
+ workerScript.scriptRef.log("ERROR: upgradeHomeRam() failed because you don't have enough money");
return false;
}
@@ -1309,7 +1309,7 @@ function NetscriptFunctions(workerScript) {
}
if (!companyExists(companyName)) {
- workerScript.scriptRef.log("ERROR: applyToCompany failed because specified company " + companyName + " does not exist.");
+ workerScript.scriptRef.log("ERROR: applyToCompany() failed because specified company " + companyName + " does not exist.");
return false;
}
diff --git a/src/StockMarket.js b/src/StockMarket.js
index 1135eb98f..5fa077bbe 100644
--- a/src/StockMarket.js
+++ b/src/StockMarket.js
@@ -5,7 +5,8 @@ import {Player} from "./Player.js";
import {dialogBoxCreate} from "../utils/DialogBox.js";
import {clearEventListeners, getRandomInt} from "../utils/HelperFunctions.js";
-import {Reviver} from "../utils/JSONReviver.js";
+import {Reviver, Generic_toJSON,
+ Generic_fromJSON} from "../utils/JSONReviver.js";
import {formatNumber} from "../utils/StringHelperFunctions.js";
/* StockMarket.js */
@@ -78,7 +79,6 @@ function initStockSymbols() {
StockSymbols["Sigma Cosmetics"] = "SGC";
StockSymbols["Joes Guns"] = "JGN";
StockSymbols["Catalyst Ventures"] = "CTYS";
- StockSymbols["Taiyang Digital"] = "TAI";
StockSymbols["Microdyne Technologies"] = "MDYN";
StockSymbols["Titan Laboratories"] = "TITN";
}