mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-22 01:03:01 +02:00
Playtesting - Rebalancing, UI improvements, added tooltip for programs, home computer no longer reset on prestige
This commit is contained in:
@@ -201,6 +201,10 @@
|
|||||||
width: 99%;
|
width: 99%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#create-program-page-text {
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
.create-program-a-link-button {
|
.create-program-a-link-button {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
@@ -210,6 +214,7 @@
|
|||||||
border-right: 1px solid #333333;
|
border-right: 1px solid #333333;
|
||||||
border-bottom: 1px solid #333333;
|
border-bottom: 1px solid #333333;
|
||||||
border-left: 1px solid #333333;
|
border-left: 1px solid #333333;
|
||||||
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.create-program-a-link-button-inactive {
|
.create-program-a-link-button-inactive {
|
||||||
|
|||||||
@@ -141,3 +141,26 @@ tr:focus {
|
|||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tool tips (when hovering over an element */
|
||||||
|
.tooltip {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip .tooltiptext {
|
||||||
|
visibility: hidden;
|
||||||
|
width: 200px;
|
||||||
|
background-color: black;
|
||||||
|
border: 2px solid white;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
padding: 4px;
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip:hover .tooltiptext {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
+33
-6
@@ -376,13 +376,40 @@
|
|||||||
|
|
||||||
<!-- Create a program(executable) -->
|
<!-- Create a program(executable) -->
|
||||||
<div id="create-program-container">
|
<div id="create-program-container">
|
||||||
|
<p id="create-program-page-text">
|
||||||
|
This page displays any programs that you are able to create. Writing the code for a program takes time, which
|
||||||
|
can vary based on how complex the program is. Once you start working on a program you must see it all the way
|
||||||
|
through. If you cancel before the program is complete you will lose all your progress and have to start all over
|
||||||
|
if you want to code it again.
|
||||||
|
</p>
|
||||||
|
|
||||||
<ul id="create-program-list">
|
<ul id="create-program-list">
|
||||||
<a class="create-program-a-link-button" id="create-program-porthack" href="#">PortHack.exe</a>
|
<a class="create-program-a-link-button tooltip" id="create-program-nuke" href="#">
|
||||||
<a class="create-program-a-link-button" id="create-program-brutessh" href="#">BruteSSH.exe</a>
|
NUKE.exe
|
||||||
<a class="create-program-a-link-button" id="create-program-ftpcrack" href="#">FTPCrack.exe</a>
|
<span class="tooltiptext"> This virus is used to gain root access to a machine if enough ports are opened. </span>
|
||||||
<a class="create-program-a-link-button" id="create-program-relaysmtp" href="#">relaySMTP.exe</a>
|
</a>
|
||||||
<a class="create-program-a-link-button" id="create-program-httpworm" href="#">HTTPWorm.exe</a>
|
<a class="create-program-a-link-button tooltip" id="create-program-brutessh" href="#">
|
||||||
<a class="create-program-a-link-button" id="create-program-sqlinject" href="#">SQLInject.exe</a>
|
BruteSSH.exe
|
||||||
|
<span class="tooltiptext"> This program executes a brute force attack that opens SSH ports </span>
|
||||||
|
</a>
|
||||||
|
<a class="create-program-a-link-button tooltip" id="create-program-ftpcrack" href="#">
|
||||||
|
FTPCrack.exe
|
||||||
|
<span class="tooltiptext"> This program cracks open FTP ports</span>
|
||||||
|
</a>
|
||||||
|
<a class="create-program-a-link-button tooltip" id="create-program-relaysmtp" href="#">
|
||||||
|
relaySMTP.exe
|
||||||
|
<span class="tooltiptext"> This program opens SMTP ports by redirecting data </span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="create-program-a-link-button tooltip" id="create-program-httpworm" href="#">
|
||||||
|
HTTPWorm.exe
|
||||||
|
<span class="tooltiptext"> This virus opens up HTTP ports </span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="create-program-a-link-button tooltip" id="create-program-sqlinject" href="#">
|
||||||
|
SQLInject.exe
|
||||||
|
<span class="tooltiptext"> This virus opens SQL ports</span>
|
||||||
|
</a>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+12
-10
@@ -436,7 +436,7 @@ initAugmentations = function() {
|
|||||||
var SynapticEnhancement = new Augmentation(AugmentationNames.SynapticEnhancement);
|
var SynapticEnhancement = new Augmentation(AugmentationNames.SynapticEnhancement);
|
||||||
SynapticEnhancement.setRequirements(1500, 1200000);
|
SynapticEnhancement.setRequirements(1500, 1200000);
|
||||||
SynapticEnhancement.setInfo("A small cranial implant that continuously uses weak electric signals to stimulate the brain and " +
|
SynapticEnhancement.setInfo("A small cranial implant that continuously uses weak electric signals to stimulate the brain and " +
|
||||||
"induce stronger synaptic activity. This improves the the user's cognitive abilities.<br><br>" +
|
"induce stronger synaptic activity. This improves the user's cognitive abilities.<br><br>" +
|
||||||
"This augmentation increases the player's hacking speed by 1%.");
|
"This augmentation increases the player's hacking speed by 1%.");
|
||||||
SynapticEnhancement.addToFactions(["CyberSec"]);
|
SynapticEnhancement.addToFactions(["CyberSec"]);
|
||||||
if (augmentationExists(AugmentationNames.SynapticEnhancement)) {
|
if (augmentationExists(AugmentationNames.SynapticEnhancement)) {
|
||||||
@@ -684,7 +684,7 @@ initAugmentations = function() {
|
|||||||
AddToAugmentations(PCDNINeuralNetwork);
|
AddToAugmentations(PCDNINeuralNetwork);
|
||||||
|
|
||||||
var ADRPheromone1 = new Augmentation(AugmentationNames.ADRPheromone1);
|
var ADRPheromone1 = new Augmentation(AugmentationNames.ADRPheromone1);
|
||||||
ADRPheromone1.setRequirements(2000, 2000000);
|
ADRPheromone1.setRequirements(1500, 2000000);
|
||||||
ADRPheromone1.setInfo("The body is genetically re-engineered so that it produces the ADR-V1 pheromone, " +
|
ADRPheromone1.setInfo("The body is genetically re-engineered so that it produces the ADR-V1 pheromone, " +
|
||||||
"an artificial pheromone discovered by scientists. The ADR-V1 pheromone, when excreted " +
|
"an artificial pheromone discovered by scientists. The ADR-V1 pheromone, when excreted " +
|
||||||
"triggers feelings of admiration and approval in other people. <br><br>" +
|
"triggers feelings of admiration and approval in other people. <br><br>" +
|
||||||
@@ -700,7 +700,7 @@ initAugmentations = function() {
|
|||||||
|
|
||||||
//HacknetNode Augmentations
|
//HacknetNode Augmentations
|
||||||
var HacknetNodeCPUUpload = new Augmentation(AugmentationNames.HacknetNodeCPUUpload);
|
var HacknetNodeCPUUpload = new Augmentation(AugmentationNames.HacknetNodeCPUUpload);
|
||||||
HacknetNodeCPUUpload.setRequirements(4000, 5000000);
|
HacknetNodeCPUUpload.setRequirements(3000, 5000000);
|
||||||
HacknetNodeCPUUpload.setInfo("Uploads the architecture and design details of a Hacknet Node's CPU into " +
|
HacknetNodeCPUUpload.setInfo("Uploads the architecture and design details of a Hacknet Node's CPU into " +
|
||||||
"the brain. This allows the user to engineer custom hardware and software " +
|
"the brain. This allows the user to engineer custom hardware and software " +
|
||||||
"for the Hacknet Node that provides better performance.<br><br>" +
|
"for the Hacknet Node that provides better performance.<br><br>" +
|
||||||
@@ -715,7 +715,7 @@ initAugmentations = function() {
|
|||||||
AddToAugmentations(HacknetNodeCPUUpload);
|
AddToAugmentations(HacknetNodeCPUUpload);
|
||||||
|
|
||||||
var HacknetNodeCacheUpload = new Augmentation(AugmentationNames.HacknetNodeCacheUpload);
|
var HacknetNodeCacheUpload = new Augmentation(AugmentationNames.HacknetNodeCacheUpload);
|
||||||
HacknetNodeCacheUpload.setRequirements(2000, 2500000);
|
HacknetNodeCacheUpload.setRequirements(1500, 2500000);
|
||||||
HacknetNodeCacheUpload.setInfo("Uploads the architecture and design details of a Hacknet Node's main-memory cache " +
|
HacknetNodeCacheUpload.setInfo("Uploads the architecture and design details of a Hacknet Node's main-memory cache " +
|
||||||
"into the brain. This allows the user to engineer custom cache hardware for the " +
|
"into the brain. This allows the user to engineer custom cache hardware for the " +
|
||||||
"Hacknet Node that offers better performance.<br><br>" +
|
"Hacknet Node that offers better performance.<br><br>" +
|
||||||
@@ -730,7 +730,7 @@ initAugmentations = function() {
|
|||||||
AddToAugmentations(HacknetNodeCacheUpload);
|
AddToAugmentations(HacknetNodeCacheUpload);
|
||||||
|
|
||||||
var HacknetNodeNICUpload = new Augmentation(AugmentationNames.HacknetNodeNICUpload);
|
var HacknetNodeNICUpload = new Augmentation(AugmentationNames.HacknetNodeNICUpload);
|
||||||
HacknetNodeNICUpload.setRequirements(1000, 1000000);
|
HacknetNodeNICUpload.setRequirements(750, 1000000);
|
||||||
HacknetNodeNICUpload.setInfo("Uploads the architecture and design details of a Hacknet Node's Network Interface Card (NIC) " +
|
HacknetNodeNICUpload.setInfo("Uploads the architecture and design details of a Hacknet Node's Network Interface Card (NIC) " +
|
||||||
"into the brain. This allows the user to engineer a custom NIC for the Hacknet Node that " +
|
"into the brain. This allows the user to engineer a custom NIC for the Hacknet Node that " +
|
||||||
"offers better performance.<br><br>" +
|
"offers better performance.<br><br>" +
|
||||||
@@ -745,7 +745,7 @@ initAugmentations = function() {
|
|||||||
AddToAugmentations(HacknetNodeNICUpload);
|
AddToAugmentations(HacknetNodeNICUpload);
|
||||||
|
|
||||||
var HacknetNodeKernelDNI = new Augmentation(AugmentationNames.HacknetNodeKernelDNI);
|
var HacknetNodeKernelDNI = new Augmentation(AugmentationNames.HacknetNodeKernelDNI);
|
||||||
HacknetNodeKernelDNI.setRequirements(12000, 30000000);
|
HacknetNodeKernelDNI.setRequirements(8000, 30000000);
|
||||||
HacknetNodeKernelDNI.setInfo("Installs a Direct-Neural Interface jack into the arm that is capable of connecting to a " +
|
HacknetNodeKernelDNI.setInfo("Installs a Direct-Neural Interface jack into the arm that is capable of connecting to a " +
|
||||||
"Hacknet Node. This lets the user access and manipulate the Node's kernel using the mind's " +
|
"Hacknet Node. This lets the user access and manipulate the Node's kernel using the mind's " +
|
||||||
"electrochemical signals.<br><br>" +
|
"electrochemical signals.<br><br>" +
|
||||||
@@ -758,7 +758,7 @@ initAugmentations = function() {
|
|||||||
AddToAugmentations(HacknetNodeKernelDNI);
|
AddToAugmentations(HacknetNodeKernelDNI);
|
||||||
|
|
||||||
var HacknetNodeCoreDNI = new Augmentation(AugmentationNames.HacknetNodeCoreDNI);
|
var HacknetNodeCoreDNI = new Augmentation(AugmentationNames.HacknetNodeCoreDNI);
|
||||||
HacknetNodeCoreDNI.setRequirements(20000, 50000000);
|
HacknetNodeCoreDNI.setRequirements(12000, 50000000);
|
||||||
HacknetNodeCoreDNI.setInfo("Installs a Direct-Neural Interface jack into the arm that is capable of connecting " +
|
HacknetNodeCoreDNI.setInfo("Installs a Direct-Neural Interface jack into the arm that is capable of connecting " +
|
||||||
"to a Hacknet Node. This lets the user access and manipulate the Node's processing logic using " +
|
"to a Hacknet Node. This lets the user access and manipulate the Node's processing logic using " +
|
||||||
"the mind's electrochemical signals.<br><br>" +
|
"the mind's electrochemical signals.<br><br>" +
|
||||||
@@ -777,8 +777,10 @@ initAugmentations = function() {
|
|||||||
NeuroFluxGovernor.owned = oldAug.owned;
|
NeuroFluxGovernor.owned = oldAug.owned;
|
||||||
NeuroFluxGovernor.level = oldAug.level;
|
NeuroFluxGovernor.level = oldAug.level;
|
||||||
var mult = Math.pow(CONSTANTS.NeuroFluxGovernorLevelMult, NeuroFluxGovernor.level-1);
|
var mult = Math.pow(CONSTANTS.NeuroFluxGovernorLevelMult, NeuroFluxGovernor.level-1);
|
||||||
NeuroFluxGovernor.setRequirements(1500 * mult, 1500000 * mult);
|
NeuroFluxGovernor.setRequirements(1000 * mult, 1000000 * mult);
|
||||||
delete Augmentations[AugmentationNames.NeuroFluxGovernor];
|
delete Augmentations[AugmentationNames.NeuroFluxGovernor];
|
||||||
|
} else {
|
||||||
|
NeuroFluxGovernor.setRequirements(1000, 1000000);
|
||||||
}
|
}
|
||||||
NeuroFluxGovernor.setInfo("A device that is embedded in the back of the neck. The NeuroFlux Governor " +
|
NeuroFluxGovernor.setInfo("A device that is embedded in the back of the neck. The NeuroFlux Governor " +
|
||||||
"monitors and regulates nervous impulses coming to and from the spinal column, " +
|
"monitors and regulates nervous impulses coming to and from the spinal column, " +
|
||||||
@@ -790,7 +792,7 @@ initAugmentations = function() {
|
|||||||
AddToAugmentations(NeuroFluxGovernor);
|
AddToAugmentations(NeuroFluxGovernor);
|
||||||
|
|
||||||
var Neurotrainer1 = new Augmentation(AugmentationNames.Neurotrainer1);
|
var Neurotrainer1 = new Augmentation(AugmentationNames.Neurotrainer1);
|
||||||
Neurotrainer1.setRequirements(1000, 1000000);
|
Neurotrainer1.setRequirements(1000, 750000);
|
||||||
Neurotrainer1.setInfo("A decentralized cranial implant that improves the brain's ability to learn. It is " +
|
Neurotrainer1.setInfo("A decentralized cranial implant that improves the brain's ability to learn. It is " +
|
||||||
"installed by releasing millions of nanobots into the human brain, each of which " +
|
"installed by releasing millions of nanobots into the human brain, each of which " +
|
||||||
"attaches to a different neural pathway to enhance the brain's ability to retain " +
|
"attaches to a different neural pathway to enhance the brain's ability to retain " +
|
||||||
@@ -804,7 +806,7 @@ initAugmentations = function() {
|
|||||||
AddToAugmentations(Neurotrainer1);
|
AddToAugmentations(Neurotrainer1);
|
||||||
|
|
||||||
var Neurotrainer2 = new Augmentation(AugmentationNames.Neurotrainer2);
|
var Neurotrainer2 = new Augmentation(AugmentationNames.Neurotrainer2);
|
||||||
Neurotrainer2.setRequirements(5000, 10000000);
|
Neurotrainer2.setRequirements(4000, 10000000);
|
||||||
Neurotrainer2.setInfo("A decentralized cranial implant that improves the brain's ability to learn. This " +
|
Neurotrainer2.setInfo("A decentralized cranial implant that improves the brain's ability to learn. This " +
|
||||||
"is a more powerful version of the Neurotrainer I augmentation, but it does not " +
|
"is a more powerful version of the Neurotrainer I augmentation, but it does not " +
|
||||||
"require Neurotrainer I to be installed as a prerequisite.<br><br>" +
|
"require Neurotrainer I to be installed as a prerequisite.<br><br>" +
|
||||||
|
|||||||
+10
-4
@@ -18,13 +18,13 @@ CONSTANTS = {
|
|||||||
/* Hacknet Node constants */
|
/* Hacknet Node constants */
|
||||||
HacknetNodeMoneyGainPerLevel: 0.75,
|
HacknetNodeMoneyGainPerLevel: 0.75,
|
||||||
HacknetNodePurchaseNextMult: 1.35, //Multiplier when purchasing an additional hacknet node
|
HacknetNodePurchaseNextMult: 1.35, //Multiplier when purchasing an additional hacknet node
|
||||||
HacknetNodeUpgradeLevelMult: 1.07, //Multiplier for cost when upgrading level
|
HacknetNodeUpgradeLevelMult: 1.06, //Multiplier for cost when upgrading level
|
||||||
HacknetNodeUpgradeRamMult: 1.2, //Multiplier for cost when upgrading RAM
|
HacknetNodeUpgradeRamMult: 1.15, //Multiplier for cost when upgrading RAM
|
||||||
HacknetNodeUpgradeCoreMult: 1.5, //Multiplier for cost when buying another core
|
HacknetNodeUpgradeCoreMult: 1.45, //Multiplier for cost when buying another core
|
||||||
|
|
||||||
/* Augmentation */
|
/* Augmentation */
|
||||||
//NeuroFlux Governor cost multiplier as you level up
|
//NeuroFlux Governor cost multiplier as you level up
|
||||||
NeuroFluxGovernorLevelMult: 1.1,
|
NeuroFluxGovernorLevelMult: 1.08,
|
||||||
|
|
||||||
/* Script related things */
|
/* Script related things */
|
||||||
//Time (ms) it takes to run one operation in Netscript.
|
//Time (ms) it takes to run one operation in Netscript.
|
||||||
@@ -83,6 +83,12 @@ CONSTANTS = {
|
|||||||
ClassManagement: "taking a Management course",
|
ClassManagement: "taking a Management course",
|
||||||
ClassLeadership: "taking a Leadership course",
|
ClassLeadership: "taking a Leadership course",
|
||||||
|
|
||||||
|
ClassDataStructuresBaseCost: 1,
|
||||||
|
ClassNetworksBaseCost: 5,
|
||||||
|
ClassAlgorithmsBaseCost: 20,
|
||||||
|
ClassManagementBaseCost: 10,
|
||||||
|
ClassLeadershipBaseCost: 20,
|
||||||
|
|
||||||
CrimeShoplift: "shoplift",
|
CrimeShoplift: "shoplift",
|
||||||
CrimeMug: "mug someone",
|
CrimeMug: "mug someone",
|
||||||
CrimeDrugs: "deal drugs",
|
CrimeDrugs: "deal drugs",
|
||||||
|
|||||||
@@ -11,14 +11,14 @@ Programs = {
|
|||||||
//TODO Right now the times needed to complete work are hard-coded...
|
//TODO Right now the times needed to complete work are hard-coded...
|
||||||
//maybe later make this dependent on hacking level or something
|
//maybe later make this dependent on hacking level or something
|
||||||
function displayCreateProgramContent() {
|
function displayCreateProgramContent() {
|
||||||
var portHackALink = document.getElementById("create-program-porthack");
|
var nukeALink = document.getElementById("create-program-nuke");
|
||||||
var bruteSshALink = document.getElementById("create-program-brutessh");
|
var bruteSshALink = document.getElementById("create-program-brutessh");
|
||||||
var ftpCrackALink = document.getElementById("create-program-ftpcrack");
|
var ftpCrackALink = document.getElementById("create-program-ftpcrack");
|
||||||
var relaySmtpALink = document.getElementById("create-program-relaysmtp");
|
var relaySmtpALink = document.getElementById("create-program-relaysmtp");
|
||||||
var httpWormALink = document.getElementById("create-program-httpworm");
|
var httpWormALink = document.getElementById("create-program-httpworm");
|
||||||
var sqlInjectALink = document.getElementById("create-program-sqlinject");
|
var sqlInjectALink = document.getElementById("create-program-sqlinject");
|
||||||
|
|
||||||
portHackALink.style.display = "none";
|
nukeALink.style.display = "none";
|
||||||
bruteSshALink.style.display = "none";
|
bruteSshALink.style.display = "none";
|
||||||
ftpCrackALink.style.display = "none";
|
ftpCrackALink.style.display = "none";
|
||||||
relaySmtpALink.style.display = "none";
|
relaySmtpALink.style.display = "none";
|
||||||
@@ -27,7 +27,7 @@ function displayCreateProgramContent() {
|
|||||||
|
|
||||||
//PortHack.exe (in case you delete it lol)
|
//PortHack.exe (in case you delete it lol)
|
||||||
if (Player.getHomeComputer().programs.indexOf(Programs.NukeProgram) == -1) {
|
if (Player.getHomeComputer().programs.indexOf(Programs.NukeProgram) == -1) {
|
||||||
portHackALink.style.display = "block";
|
nukeALink.style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
//BruteSSH
|
//BruteSSH
|
||||||
|
|||||||
+7
-7
@@ -1,32 +1,32 @@
|
|||||||
/* Crimes.js */
|
/* Crimes.js */
|
||||||
function commitShopliftCrime() {
|
function commitShopliftCrime() {
|
||||||
Player.crimeType = CONSTANTS.CrimeShoplift;
|
Player.crimeType = CONSTANTS.CrimeShoplift;
|
||||||
Player.startCrime(0, 0.5, 0.5, 0.5, 0.5, 0, 500, 3000); //$166.66/s, .167 exp/s
|
Player.startCrime(0, 0.5, 0.5, 0.5, 0.5, 0, 1000, 2000); //$500/s, .25 exp/s
|
||||||
}
|
}
|
||||||
|
|
||||||
function commitMugCrime() {
|
function commitMugCrime() {
|
||||||
Player.crimeType = CONSTANTS.CrimeMug;
|
Player.crimeType = CONSTANTS.CrimeMug;
|
||||||
Player.startCrime(0, 1, 1, 1, 1, 0, 1000, 5000); //$200/s, .2 exp/s
|
Player.startCrime(0, 1, 1, 1, 1, 0, 3000, 4000); //$750/s, .2 exp/s
|
||||||
}
|
}
|
||||||
|
|
||||||
function commitDealDrugsCrime() {
|
function commitDealDrugsCrime() {
|
||||||
Player.crimeType = CONSTANTS.CrimeDrugs;
|
Player.crimeType = CONSTANTS.CrimeDrugs;
|
||||||
Player.startCrime(0, 2, 2, 2, 2, 2, 2500, 10000); //$250/s, .2 exp/s
|
Player.startCrime(0, 2, 2, 2, 2, 2, 10000, 10000); //$1000/s, .2 exp/s
|
||||||
}
|
}
|
||||||
|
|
||||||
function commitTraffickArmsCrime() {
|
function commitTraffickArmsCrime() {
|
||||||
Player.crimeType = CONSTANTS.CrimeTraffickArms;
|
Player.crimeType = CONSTANTS.CrimeTraffickArms;
|
||||||
Player.startCrime(0, 8, 8, 8, 8, 12, 15000, 40000); //$375/s, .2 combat exp/s, .3 cha exp/s
|
Player.startCrime(0, 8, 8, 8, 8, 12, 60000, 40000); //$1500/s, .2 combat exp/s, .3 cha exp/s
|
||||||
}
|
}
|
||||||
|
|
||||||
function commitHomicideCrime() {
|
function commitHomicideCrime() {
|
||||||
Player.crimeType = CONSTANTS.CrimeHomicide;
|
Player.crimeType = CONSTANTS.CrimeHomicide;
|
||||||
Player.startCrime(0, 2, 2, 2, 2, 0, 600, 3000); //$200/s, 0.66 combat exp/s
|
Player.startCrime(0, 2, 2, 2, 2, 0, 1000, 3000); //$333.3/s, 0.66 combat exp/s
|
||||||
}
|
}
|
||||||
|
|
||||||
function commitKidnapCrime() {
|
function commitKidnapCrime() {
|
||||||
Player.crimeType = CONSTANTS.CrimeKidnap;
|
Player.crimeType = CONSTANTS.CrimeKidnap;
|
||||||
Player.startCrime(0, 20, 20, 20, 20, 20, 50000, 120000); //$416.67/s. .167 exp/s
|
Player.startCrime(0, 20, 20, 20, 20, 20, 200000, 120000); //$1666.666/s. .167 exp/s
|
||||||
}
|
}
|
||||||
|
|
||||||
function determineCrimeSuccess(crime, moneyGained) {
|
function determineCrimeSuccess(crime, moneyGained) {
|
||||||
@@ -95,7 +95,7 @@ function determineCrimeChanceTraffickArms() {
|
|||||||
Player.strength / CONSTANTS.MaxSkillLevel +
|
Player.strength / CONSTANTS.MaxSkillLevel +
|
||||||
Player.defense / CONSTANTS.MaxSkillLevel +
|
Player.defense / CONSTANTS.MaxSkillLevel +
|
||||||
Player.dexterity / CONSTANTS.MaxSkillLevel +
|
Player.dexterity / CONSTANTS.MaxSkillLevel +
|
||||||
Player.agility / CONSTANTS.MaxSkillLevel));
|
Player.agility / CONSTANTS.MaxSkillLevel)) / 2;
|
||||||
return Math.min(chance, 1);
|
return Math.min(chance, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-11
@@ -1526,17 +1526,11 @@ displayUniversityLocationContent = function(costMult) {
|
|||||||
classLeadershipButton.style.display = "block";
|
classLeadershipButton.style.display = "block";
|
||||||
|
|
||||||
//Costs (per second)
|
//Costs (per second)
|
||||||
var baseDataStructuresCost = 1;
|
var dataStructuresCost = CONSTANTS.ClassDataStructuresBaseCost * costMult;
|
||||||
var baseNetworksCost = 5;
|
var networksCost = CONSTANTS.ClassNetworksBaseCost * costMult;
|
||||||
var baseAlgorithmsCost = 20;
|
var algorithmsCost = CONSTANTS.ClassAlgorithmsBaseCost * costMult;
|
||||||
var baseManagementCost = 10;
|
var managementCost = CONSTANTS.ClassManagementBaseCost * costMult;
|
||||||
var baseLeadershipCost = 20;
|
var leadershipCost = CONSTANTS.ClassLeadershipBaseCost * costMult;
|
||||||
|
|
||||||
var dataStructuresCost = baseDataStructuresCost * costMult;
|
|
||||||
var networksCost = baseNetworksCost * costMult;
|
|
||||||
var algorithmsCost = baseAlgorithmsCost * costMult;
|
|
||||||
var managementCost = baseManagementCost * costMult;
|
|
||||||
var leadershipCost = baseLeadershipCost * costMult;
|
|
||||||
|
|
||||||
//Update button text to show cost
|
//Update button text to show cost
|
||||||
classDataStructuresButton.innerHTML = "Take Data Structures course ($" + dataStructuresCost + " / sec)";
|
classDataStructuresButton.innerHTML = "Take Data Structures course ($" + dataStructuresCost + " / sec)";
|
||||||
|
|||||||
+18
-19
@@ -792,19 +792,13 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) {
|
|||||||
this.className = className;
|
this.className = className;
|
||||||
|
|
||||||
var gameCPS = 1000 / Engine._idleSpeed;
|
var gameCPS = 1000 / Engine._idleSpeed;
|
||||||
//Base costs/exp (per second)
|
|
||||||
var baseDataStructuresCost = 1;
|
|
||||||
var baseNetworksCost = 5;
|
|
||||||
var baseAlgorithmsCost = 20;
|
|
||||||
var baseManagementCost = 10;
|
|
||||||
var baseLeadershipCost = 20;
|
|
||||||
|
|
||||||
var baseStudyComputerScienceExp = 0.02;
|
var baseStudyComputerScienceExp = 0.05;
|
||||||
var baseDataStructuresExp = 0.1;
|
var baseDataStructuresExp = 0.2;
|
||||||
var baseNetworksExp = 0.4;
|
var baseNetworksExp = 0.8;
|
||||||
var baseAlgorithmsExp = 1.5;
|
var baseAlgorithmsExp = 2.0;
|
||||||
var baseManagementExp = 0.8;
|
var baseManagementExp = 1.0;
|
||||||
var baseLeadershipExp = 1.5;
|
var baseLeadershipExp = 2.0;
|
||||||
|
|
||||||
//Find cost and exp gain per game cycle
|
//Find cost and exp gain per game cycle
|
||||||
var cost = 0;
|
var cost = 0;
|
||||||
@@ -815,23 +809,23 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) {
|
|||||||
hackExp = baseStudyComputerScienceExp * expMult / gameCPS;
|
hackExp = baseStudyComputerScienceExp * expMult / gameCPS;
|
||||||
break;
|
break;
|
||||||
case CONSTANTS.ClassDataStructures:
|
case CONSTANTS.ClassDataStructures:
|
||||||
cost = baseDataStructuresCost * costMult / gameCPS;
|
cost = CONSTANTS.ClassDataStructuresBaseCost * costMult / gameCPS;
|
||||||
hackExp = baseDataStructuresExp * expMult / gameCPS;
|
hackExp = baseDataStructuresExp * expMult / gameCPS;
|
||||||
break;
|
break;
|
||||||
case CONSTANTS.ClassNetworks:
|
case CONSTANTS.ClassNetworks:
|
||||||
cost = baseNetworksCost * costMult / gameCPS;
|
cost = CONSTANTS.ClassNetworksBaseCost * costMult / gameCPS;
|
||||||
hackExp = baseNetworksExp * expMult / gameCPS;
|
hackExp = baseNetworksExp * expMult / gameCPS;
|
||||||
break;
|
break;
|
||||||
case CONSTANTS.ClassAlgorithms:
|
case CONSTANTS.ClassAlgorithms:
|
||||||
cost = baseAlgorithmsCost * costMult / gameCPS;
|
cost = CONSTANTS.ClassAlgorithmsBaseCost * costMult / gameCPS;
|
||||||
hackExp = baseAlgorithmsExp * expMult / gameCPS;
|
hackExp = baseAlgorithmsExp * expMult / gameCPS;
|
||||||
break;
|
break;
|
||||||
case CONSTANTS.ClassManagement:
|
case CONSTANTS.ClassManagement:
|
||||||
cost = baseManagementCost * costMult / gameCPS;
|
cost = CONSTANTS.ClassManagementBaseCost * costMult / gameCPS;
|
||||||
chaExp = baseManagementExp * expMult / gameCPS;
|
chaExp = baseManagementExp * expMult / gameCPS;
|
||||||
break;
|
break;
|
||||||
case CONSTANTS.ClassLeadership:
|
case CONSTANTS.ClassLeadership:
|
||||||
cost = baseLeadershipCost * costMult / gameCPS;
|
cost = CONSTANTS.ClassLeadershipBaseCost * costMult / gameCPS;
|
||||||
chaExp = baseLeadershipExp * expMult / gameCPS;
|
chaExp = baseLeadershipExp * expMult / gameCPS;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -951,11 +945,16 @@ PlayerObject.prototype.startCrime = function(hackExp, strExp, defExp, dexExp, ag
|
|||||||
PlayerObject.prototype.commitCrime = function (numCycles) {
|
PlayerObject.prototype.commitCrime = function (numCycles) {
|
||||||
this.timeWorked += Engine._idleSpeed * numCycles;
|
this.timeWorked += Engine._idleSpeed * numCycles;
|
||||||
|
|
||||||
if (this.timeWorked >= this.timeNeededToCompleteWork) {Player.finishCrime(false);}
|
if (this.timeWorked >= this.timeNeededToCompleteWork) {Player.finishCrime(false); return;}
|
||||||
|
|
||||||
|
var percent = Math.round(Player.timeWorked / Player.timeNeededToCompleteWork * 100);
|
||||||
|
var numBars = Math.round(percent / 5);
|
||||||
|
var progressBar = "[" + Array(numBars+1).join("|") + Array(20 - numBars + 1).join(" ") + "]";
|
||||||
|
|
||||||
var txt = document.getElementById("work-in-progress-text");
|
var txt = document.getElementById("work-in-progress-text");
|
||||||
txt.innerHTML = "You are attempting to " + Player.crimeType + ".<br>" +
|
txt.innerHTML = "You are attempting to " + Player.crimeType + ".<br>" +
|
||||||
"Time remaining: " + convertTimeMsToTimeElapsedString(this.timeNeededToCompleteWork - this.timeWorked);
|
"Time remaining: " + convertTimeMsToTimeElapsedString(this.timeNeededToCompleteWork - this.timeWorked) + "<br>" +
|
||||||
|
progressBar.replace( / /g, " " );
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerObject.prototype.finishCrime = function(cancelled) {
|
PlayerObject.prototype.finishCrime = function(cancelled) {
|
||||||
|
|||||||
+12
-5
@@ -55,8 +55,6 @@ function prestigeAugmentation() {
|
|||||||
|
|
||||||
Player.money = 1000;
|
Player.money = 1000;
|
||||||
|
|
||||||
Player.homeComputer = "";
|
|
||||||
|
|
||||||
Player.city = Locations.Sector12;
|
Player.city = Locations.Sector12;
|
||||||
Player.location = "";
|
Player.location = "";
|
||||||
|
|
||||||
@@ -101,12 +99,23 @@ function prestigeAugmentation() {
|
|||||||
|
|
||||||
Player.lastUpdate = new Date().getTime();
|
Player.lastUpdate = new Date().getTime();
|
||||||
|
|
||||||
//Delete all servers
|
var homeComp = null;
|
||||||
|
//Delete all servers except home computer
|
||||||
for (var member in AllServers) {
|
for (var member in AllServers) {
|
||||||
|
//Don't delete home computer
|
||||||
|
if (member == Player.homeComputer) {
|
||||||
|
homeComp = AllServers[member];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
delete AllServers[member];
|
delete AllServers[member];
|
||||||
}
|
}
|
||||||
AllServers = {};
|
AllServers = {};
|
||||||
|
|
||||||
|
//Reset home computer (only the programs) and add to AllServers
|
||||||
|
homeComp.programs.length = 0;
|
||||||
|
homeComp.programs.push(Programs.NukeProgram);
|
||||||
|
addToAllServers(homeComp);
|
||||||
|
|
||||||
//Delete all running scripts objects
|
//Delete all running scripts objects
|
||||||
for (var i = 0; i < workerScripts.length; ++i) {
|
for (var i = 0; i < workerScripts.length; ++i) {
|
||||||
workerScripts[i].env.stopFlag = true;
|
workerScripts[i].env.stopFlag = true;
|
||||||
@@ -143,10 +152,8 @@ function prestigeAugmentation() {
|
|||||||
|
|
||||||
//Inititialization
|
//Inititialization
|
||||||
SpecialServerIps = new SpecialServerIpsMap();
|
SpecialServerIps = new SpecialServerIpsMap();
|
||||||
Player.init();
|
|
||||||
initForeignServers();
|
initForeignServers();
|
||||||
initCompanies();
|
initCompanies();
|
||||||
//CompanyPositions.init(); Dont think this is needed
|
|
||||||
|
|
||||||
Engine.loadTerminalContent();
|
Engine.loadTerminalContent();
|
||||||
}
|
}
|
||||||
+14
-14
@@ -410,13 +410,13 @@ initForeignServers = function() {
|
|||||||
|
|
||||||
var SigmaCosmeticsServer = new Server();
|
var SigmaCosmeticsServer = new Server();
|
||||||
SigmaCosmeticsServer.init(createRandomIp(), "sigma-cosmetics", "Sigma Cosmetics", true, false, false, false, 0);
|
SigmaCosmeticsServer.init(createRandomIp(), "sigma-cosmetics", "Sigma Cosmetics", true, false, false, false, 0);
|
||||||
SigmaCosmeticsServer.setHackingParameters(5, 500000, 10, 10);
|
SigmaCosmeticsServer.setHackingParameters(5, 750000, 10, 10);
|
||||||
SigmaCosmeticsServer.setPortProperties(0);
|
SigmaCosmeticsServer.setPortProperties(0);
|
||||||
AddToAllServers(SigmaCosmeticsServer);
|
AddToAllServers(SigmaCosmeticsServer);
|
||||||
|
|
||||||
var JoesGunsServer = new Server();
|
var JoesGunsServer = new Server();
|
||||||
JoesGunsServer.init(createRandomIp(), "joesguns", "Joe's Guns", true, false, false, false, 2);
|
JoesGunsServer.init(createRandomIp(), "joesguns", "Joe's Guns", true, false, false, false, 2);
|
||||||
JoesGunsServer.setHackingParameters(10, 200000, 20, 25);
|
JoesGunsServer.setHackingParameters(10, 600000, 20, 20);
|
||||||
JoesGunsServer.setPortProperties(0);
|
JoesGunsServer.setPortProperties(0);
|
||||||
AddToAllServers(JoesGunsServer);
|
AddToAllServers(JoesGunsServer);
|
||||||
|
|
||||||
@@ -428,74 +428,74 @@ initForeignServers = function() {
|
|||||||
|
|
||||||
var NectarNightclubServer = new Server();
|
var NectarNightclubServer = new Server();
|
||||||
NectarNightclubServer.init(createRandomIp(), "nectar-net", "Nectar Nightclub Network", true, false, false, false, 2);
|
NectarNightclubServer.init(createRandomIp(), "nectar-net", "Nectar Nightclub Network", true, false, false, false, 2);
|
||||||
NectarNightclubServer.setHackingParameters(20, 400000, 20, 25);
|
NectarNightclubServer.setHackingParameters(20, 6500000, 20, 25);
|
||||||
NectarNightclubServer.setPortProperties(0);
|
NectarNightclubServer.setPortProperties(0);
|
||||||
AddToAllServers(NectarNightclubServer);
|
AddToAllServers(NectarNightclubServer);
|
||||||
|
|
||||||
var NeoNightclubServer = new Server();
|
var NeoNightclubServer = new Server();
|
||||||
NeoNightclubServer.init(createRandomIp(), "neo-net", "Neo Nightclub Network", true, false, false, false, 2);
|
NeoNightclubServer.init(createRandomIp(), "neo-net", "Neo Nightclub Network", true, false, false, false, 2);
|
||||||
NeoNightclubServer.setHackingParameters(50, 500000, 25, 25);
|
NeoNightclubServer.setHackingParameters(50, 900000, 25, 25);
|
||||||
NeoNightclubServer.setPortProperties(1);
|
NeoNightclubServer.setPortProperties(1);
|
||||||
AddToAllServers(NeoNightclubServer);
|
AddToAllServers(NeoNightclubServer);
|
||||||
|
|
||||||
var SilverHelixServer = new Server();
|
var SilverHelixServer = new Server();
|
||||||
SilverHelixServer.init(createRandomIp(), "silver-helix", "Silver Helix", true, false, false, false, 2);
|
SilverHelixServer.init(createRandomIp(), "silver-helix", "Silver Helix", true, false, false, false, 2);
|
||||||
SilverHelixServer.setHackingParameters(150, 1000000, 30, 30);
|
SilverHelixServer.setHackingParameters(150, 5000000, 30, 30);
|
||||||
SilverHelixServer.setPortProperties(2);
|
SilverHelixServer.setPortProperties(2);
|
||||||
AddToAllServers(SilverHelixServer);
|
AddToAllServers(SilverHelixServer);
|
||||||
|
|
||||||
var HongFangTeaHouseServer = new Server();
|
var HongFangTeaHouseServer = new Server();
|
||||||
HongFangTeaHouseServer.init(createRandomIp(), "hong-fang-tea", "HongFang Teahouse", true, false, false, false, 0);
|
HongFangTeaHouseServer.init(createRandomIp(), "hong-fang-tea", "HongFang Teahouse", true, false, false, false, 0);
|
||||||
HongFangTeaHouseServer.setHackingParameters(30, 250000, 15, 10);
|
HongFangTeaHouseServer.setHackingParameters(30, 800000, 15, 15);
|
||||||
HongFangTeaHouseServer.setPortProperties(0);
|
HongFangTeaHouseServer.setPortProperties(0);
|
||||||
AddToAllServers(HongFangTeaHouseServer);
|
AddToAllServers(HongFangTeaHouseServer);
|
||||||
|
|
||||||
var HaraKiriSushiBarServer = new Server();
|
var HaraKiriSushiBarServer = new Server();
|
||||||
HaraKiriSushiBarServer.setHackingParameters(40, 100000, 15, 40);
|
HaraKiriSushiBarServer.setHackingParameters(40, 800000, 15, 40);
|
||||||
HaraKiriSushiBarServer.init(createRandomIp(), "harakiri-sushi", "HaraKiri Sushi Bar Network", true, false, false, false, 0);
|
HaraKiriSushiBarServer.init(createRandomIp(), "harakiri-sushi", "HaraKiri Sushi Bar Network", true, false, false, false, 0);
|
||||||
HaraKiriSushiBarServer.setPortProperties(1);
|
HaraKiriSushiBarServer.setPortProperties(1);
|
||||||
AddToAllServers(HaraKiriSushiBarServer);
|
AddToAllServers(HaraKiriSushiBarServer);
|
||||||
|
|
||||||
var PhantasyServer = new Server();
|
var PhantasyServer = new Server();
|
||||||
PhantasyServer.init(createRandomIp(), "phantasy", "Phantasy Club", true, false, false, false, 4);
|
PhantasyServer.init(createRandomIp(), "phantasy", "Phantasy Club", true, false, false, false, 4);
|
||||||
PhantasyServer.setHackingParameters(100, 300000, 20, 35);
|
PhantasyServer.setHackingParameters(100, 1500000, 20, 35);
|
||||||
PhantasyServer.setPortProperties(2);
|
PhantasyServer.setPortProperties(2);
|
||||||
AddToAllServers(PhantasyServer);
|
AddToAllServers(PhantasyServer);
|
||||||
|
|
||||||
var MaxHardwareServer = new Server();
|
var MaxHardwareServer = new Server();
|
||||||
MaxHardwareServer.init(createRandomIp(), "max-hardware", "Max Hardware Store", true, false, false, false, 0);
|
MaxHardwareServer.init(createRandomIp(), "max-hardware", "Max Hardware Store", true, false, false, false, 0);
|
||||||
MaxHardwareServer.setHackingParameters(80, 150000, 15, 25);
|
MaxHardwareServer.setHackingParameters(80, 800000, 15, 25);
|
||||||
MaxHardwareServer.setPortProperties(1);
|
MaxHardwareServer.setPortProperties(1);
|
||||||
AddToAllServers(MaxHardwareServer);
|
AddToAllServers(MaxHardwareServer);
|
||||||
|
|
||||||
var OmegaSoftwareServer = new Server();
|
var OmegaSoftwareServer = new Server();
|
||||||
OmegaSoftwareServer.init(createRandomIp(), "omega-net", "Omega Software", true, false, false, false, 8);
|
OmegaSoftwareServer.init(createRandomIp(), "omega-net", "Omega Software", true, false, false, false, 8);
|
||||||
OmegaSoftwareServer.setHackingParameters(200, 1000000, 30, 30);
|
OmegaSoftwareServer.setHackingParameters(200, 10000000, 30, 35);
|
||||||
OmegaSoftwareServer.setPortProperties(2);
|
OmegaSoftwareServer.setPortProperties(2);
|
||||||
AddToAllServers(OmegaSoftwareServer);
|
AddToAllServers(OmegaSoftwareServer);
|
||||||
|
|
||||||
//Gyms
|
//Gyms
|
||||||
var CrushFitnessGymServer = new Server();
|
var CrushFitnessGymServer = new Server();
|
||||||
CrushFitnessGymServer.init(createRandomIp(), "crush-fitness", "Crush Fitness", true, false, false, false, 0);
|
CrushFitnessGymServer.init(createRandomIp(), "crush-fitness", "Crush Fitness", true, false, false, false, 0);
|
||||||
CrushFitnessGymServer.setHackingParameters(250, 300000, 40, 25);
|
CrushFitnessGymServer.setHackingParameters(250, 5000000, 40, 25);
|
||||||
CrushFitnessGymServer.setPortProperties(2);
|
CrushFitnessGymServer.setPortProperties(2);
|
||||||
AddToAllServers(CrushFitnessGymServer);
|
AddToAllServers(CrushFitnessGymServer);
|
||||||
|
|
||||||
var IronGymServer = new Server();
|
var IronGymServer = new Server();
|
||||||
IronGymServer.init(createRandomIp(), "iron-gym", "Iron Gym Network", true, false, false, false, 0);
|
IronGymServer.init(createRandomIp(), "iron-gym", "Iron Gym Network", true, false, false, false, 0);
|
||||||
IronGymServer.setHackingParameters(100, 150000, 30, 15);
|
IronGymServer.setHackingParameters(100, 2500000, 30, 15);
|
||||||
IronGymServer.setPortProperties(1);
|
IronGymServer.setPortProperties(1);
|
||||||
AddToAllServers(IronGymServer);
|
AddToAllServers(IronGymServer);
|
||||||
|
|
||||||
var MilleniumFitnessGymServer = new Server();
|
var MilleniumFitnessGymServer = new Server();
|
||||||
MilleniumFitnessGymServer.init(createRandomIp(), "millenium-fitness", "Millenium Fitness Network", true, false, false, false, 0);
|
MilleniumFitnessGymServer.init(createRandomIp(), "millenium-fitness", "Millenium Fitness Network", true, false, false, false, 0);
|
||||||
MilleniumFitnessGymServer.setHackingParameters(500, 400000, 50, 30);
|
MilleniumFitnessGymServer.setHackingParameters(500, 7500000, 50, 30);
|
||||||
MilleniumFitnessGymServer.setPortProperties(3);
|
MilleniumFitnessGymServer.setPortProperties(3);
|
||||||
AddToAllServers(MilleniumFitnessGymServer);
|
AddToAllServers(MilleniumFitnessGymServer);
|
||||||
|
|
||||||
var PowerhouseGymServer = new Server();
|
var PowerhouseGymServer = new Server();
|
||||||
PowerhouseGymServer.init(createRandomIp(), "powerhouse-fitness", "Powerhouse Fitness", true, false, false, false, 0);
|
PowerhouseGymServer.init(createRandomIp(), "powerhouse-fitness", "Powerhouse Fitness", true, false, false, false, 0);
|
||||||
PowerhouseGymServer.setHackingParameters(1000, 1000000, 60, 50);
|
PowerhouseGymServer.setHackingParameters(1000, 20000000, 60, 50);
|
||||||
PowerhouseGymServer.setPortProperties(5);
|
PowerhouseGymServer.setPortProperties(5);
|
||||||
AddToAllServers(PowerhouseGymServer);
|
AddToAllServers(PowerhouseGymServer);
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -932,7 +932,7 @@ var Engine = {
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Create Program buttons
|
//Create Program buttons
|
||||||
var portHackALink = document.getElementById("create-program-porthack");
|
var portHackALink = document.getElementById("create-program-nuke");
|
||||||
var bruteSshALink = document.getElementById("create-program-brutessh");
|
var bruteSshALink = document.getElementById("create-program-brutessh");
|
||||||
var ftpCrackALink = document.getElementById("create-program-ftpcrack");
|
var ftpCrackALink = document.getElementById("create-program-ftpcrack");
|
||||||
var relaySmtpALink = document.getElementById("create-program-relaysmtp");
|
var relaySmtpALink = document.getElementById("create-program-relaysmtp");
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ purchaseRamForHomeBoxCreate = function() {
|
|||||||
|
|
||||||
purchaseRamForHomeBoxSetText("Would you like to purchase additional RAM for your home computer? <br><br>" +
|
purchaseRamForHomeBoxSetText("Would you like to purchase additional RAM for your home computer? <br><br>" +
|
||||||
"This will upgrade your RAM from " + currentRam + "GB to " + newRam + "GB. <br><br>" +
|
"This will upgrade your RAM from " + currentRam + "GB to " + newRam + "GB. <br><br>" +
|
||||||
"This will cost $" + cost);
|
"This will cost $" + formatNumber(cost, 2));
|
||||||
|
|
||||||
purchaseRamForHomeBoxOpen();
|
purchaseRamForHomeBoxOpen();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user