diff --git a/index.html b/index.html index bb0c59e07..6b5708cec 100644 --- a/index.html +++ b/index.html @@ -468,9 +468,11 @@ Study Computer Science (free) - Take Data Structures Class - Take Networks Class - Take Algorithms Class + Take Data Structures course + Take Networks course + Take Algorithms course + Take Management course + Take Leadership course Purchase 1GB Server - $50,000 diff --git a/src/Constants.js b/src/Constants.js index 231b4adb6..4758512fb 100644 --- a/src/Constants.js +++ b/src/Constants.js @@ -52,6 +52,8 @@ CONSTANTS = { ClassDataStructures: "taking a Data Structures course", ClassNetworks: "taking a Networks course", ClassAlgorithms: "taking an Algorithms course", + ClassManagement: "taking a Management course", + ClassLeadership: "taking a Leadership course", //Text that is displayed when the 'help' command is ran in Terminal HelpText: "analyze Get statistics and information about current machine
" + diff --git a/src/Location.js b/src/Location.js index 95b001ea0..45a6d0ff5 100644 --- a/src/Location.js +++ b/src/Location.js @@ -111,6 +111,8 @@ displayLocationContent = function() { var classDataStructures = document.getElementById("location-data-structures-class"); var classNetworks = document.getElementById("location-networks-class"); var classAlgorithms = document.getElementById("location-algorithms-class"); + var classManagement = document.getElementById("location-management-class"); + var classLeadership = document.getElementById("location-leadership-class"); var purchase1gb = document.getElementById("location-purchase-1gb"); var purchase2gb = document.getElementById("location-purchase-2gb"); @@ -175,6 +177,8 @@ displayLocationContent = function() { classDataStructures.style.display = "none"; classNetworks.style.display = "none"; classAlgorithms.style.display = "none"; + classManagement.style.display = "none"; + classLeadership.style.display = "none"; purchase1gb.style.display = "none"; purchase2gb.style.display = "none"; @@ -250,35 +254,7 @@ displayLocationContent = function() { var costMult = 3; var expMult = 2; displayUniversityLocationContent(costMult); - - var newStudyCS = studyComputerScience.cloneNode(true); - studyComputerScience.parentNode.replaceChild(newStudyCS, studyComputerScience) - newStudyCS.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassStudyComputerScience); - return false; - }); - - var newClassDataStructures = classDataStructures.cloneNode(true); - classDataStructures.parentNode.replaceChild(newClassDataStructures, classDataStructures); - newClassDataStructures.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassDataStructures); - return false; - }); - - var newClassNetworks = classNetworks.cloneNode(true); - classNetworks.parentNode.replaceChild(newClassNetworks, classNetworks); - newClassNetworks.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassNetworks); - return false; - }); - - var newClassAlgorithms = classAlgorithms.cloneNode(true); - classAlgorithms.parentNode.replaceChild(newClassAlgorithms, classAlgorithms); - newClassAlgorithms.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassAlgorithms); - return false; - }); - + setUniversityLocationButtons(costMult, expMult); break; case Locations.AevumECorp: @@ -455,35 +431,8 @@ displayLocationContent = function() { case Locations.Sector12RothmanUniversity: var costMult = 2; var expMult = 1; - displayUniversityLocationContent(costMult); - - var newStudyCS = studyComputerScience.cloneNode(true); - studyComputerScience.parentNode.replaceChild(newStudyCS, studyComputerScience) - newStudyCS.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassStudyComputerScience); - return false; - }); - - var newClassDataStructures = classDataStructures.cloneNode(true); - classDataStructures.parentNode.replaceChild(newClassDataStructures, classDataStructures); - newClassDataStructures.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassDataStructures); - return false; - }); - - var newClassNetworks = classNetworks.cloneNode(true); - classNetworks.parentNode.replaceChild(newClassNetworks, classNetworks); - newClassNetworks.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassNetworks); - return false; - }); - - var newClassAlgorithms = classAlgorithms.cloneNode(true); - classAlgorithms.parentNode.replaceChild(newClassAlgorithms, classAlgorithms); - newClassAlgorithms.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassAlgorithms); - return false; - }); + displayUniversityLocationContent(costMult); + setUniversityLocationButtons(costMult, expMult); break; case Locations.Sector12MegaCorp: @@ -731,35 +680,8 @@ displayLocationContent = function() { case Locations.VolhavenZBInstituteOfTechnology: var costMult = 4; var expMult = 3; - displayUniversityLocationContent(costMult); - - var newStudyCS = studyComputerScience.cloneNode(true); - studyComputerScience.parentNode.replaceChild(newStudyCS, studyComputerScience) - newStudyCS.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassStudyComputerScience); - return false; - }); - - var newClassDataStructures = classDataStructures.cloneNode(true); - classDataStructures.parentNode.replaceChild(newClassDataStructures, classDataStructures); - newClassDataStructures.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassDataStructures); - return false; - }); - - var newClassNetworks = classNetworks.cloneNode(true); - classNetworks.parentNode.replaceChild(newClassNetworks, classNetworks); - newClassNetworks.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassNetworks); - return false; - }); - - var newClassAlgorithms = classAlgorithms.cloneNode(true); - classAlgorithms.parentNode.replaceChild(newClassAlgorithms, classAlgorithms); - newClassAlgorithms.addEventListener("click", function() { - Player.startClass(costMult, expMult, CONSTANTS.ClassAlgorithms); - return false; - }); + displayUniversityLocationContent(costMult); + setUniversityLocationButtons(costMult, expMult); break; case Locations.VolhavenOmniTekIncorporated: @@ -1446,24 +1368,84 @@ displayUniversityLocationContent = function(costMult) { var classDataStructuresButton = document.getElementById("location-data-structures-class"); var classNetworksButton = document.getElementById("location-networks-class"); var classAlgorithmsButton = document.getElementById("location-algorithms-class"); + var classManagementButton = document.getElementById("location-management-class"); + var classLeadershipButton = document.getElementById("location-leadership-class"); studyComputerScienceButton.style.display = "block"; classDataStructuresButton.style.display = "block"; classNetworksButton.style.display = "block"; classAlgorithmsButton.style.display = "block"; - - var gameCPS = 1 / Engine._idleSpeed; + classManagementButton.style.display = "block"; + classLeadershipButton.style.display = "block"; //Costs (per second) - var baseDataStructuresCost = 1; - var baseNetworksCost = 5; - var baseAlgorithmsCost = 20; + var baseDataStructuresCost = 1; + var baseNetworksCost = 5; + var baseAlgorithmsCost = 20; + var baseManagementCost = 10; + var baseLeadershipCost = 20; - var dataStructuresCost = baseDataStructuresCost * costMult; - var networksCost = baseNetworksCost * costMult; - var algorithmsCost = baseAlgorithmsCost * 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 - classDataStructuresButton.innerHTML = "Take Data Structures Class ($" + dataStructuresCost + " / sec)"; - classNetworksButton.innerHTML = "Take Networks Class ($" + networksCost + " / second)"; - classAlgorithmsButton.innerHTML = "Take Algorithms Class ($" + algorithmsCost + " / second)"; -} \ No newline at end of file + classDataStructuresButton.innerHTML = "Take Data Structures course ($" + dataStructuresCost + " / sec)"; + classNetworksButton.innerHTML = "Take Networks course ($" + networksCost + " / second)"; + classAlgorithmsButton.innerHTML = "Take Algorithms course ($" + algorithmsCost + " / second)"; + classManagementButton.innerHTML = "Take Management course ($" + managementCost + " / second)"; + classLeadershipButton.innerHTML = "Take Leadership course ($" + leadershipCost + " / second)"; +} + +setUniversityLocationButtons = function(costMult, expMult) { + var studyComputerScience= document.getElementById("location-study-computer-science"); + var classDataStructures = document.getElementById("location-data-structures-class"); + var classNetworks = document.getElementById("location-networks-class"); + var classAlgorithms = document.getElementById("location-algorithms-class"); + var classManagement = document.getElementById("location-management-class"); + var classLeadership = document.getElementById("location-leadership-class"); + + var newStudyCS = studyComputerScience.cloneNode(true); + studyComputerScience.parentNode.replaceChild(newStudyCS, studyComputerScience) + newStudyCS.addEventListener("click", function() { + Player.startClass(costMult, expMult, CONSTANTS.ClassStudyComputerScience); + return false; + }); + + var newClassDataStructures = classDataStructures.cloneNode(true); + classDataStructures.parentNode.replaceChild(newClassDataStructures, classDataStructures); + newClassDataStructures.addEventListener("click", function() { + Player.startClass(costMult, expMult, CONSTANTS.ClassDataStructures); + return false; + }); + + var newClassNetworks = classNetworks.cloneNode(true); + classNetworks.parentNode.replaceChild(newClassNetworks, classNetworks); + newClassNetworks.addEventListener("click", function() { + Player.startClass(costMult, expMult, CONSTANTS.ClassNetworks); + return false; + }); + + var newClassAlgorithms = classAlgorithms.cloneNode(true); + classAlgorithms.parentNode.replaceChild(newClassAlgorithms, classAlgorithms); + newClassAlgorithms.addEventListener("click", function() { + Player.startClass(costMult, expMult, CONSTANTS.ClassAlgorithms); + return false; + }); + + var newClassManagement = classManagement.cloneNode(true); + classManagement.parentNode.replaceChild(newClassManagement, classManagement); + newClassManagement.addEventListener("click", function() { + Player.startClass(costMult, expMult, CONSTANTS.ClassManagement); + return false; + }); + + var newClassLeadership = classLeadership.cloneNode(true); + classLeadership.parentNode.replaceChild(newClassLeadership, classLeadership); + newClassLeadership.addEventListener("click", function() { + Player.startClass(costMult, expMult, CONSTANTS.ClassLeadership); + return false; + }); +} + diff --git a/src/Player.js b/src/Player.js index 2fe80aceb..879347e0f 100644 --- a/src/Player.js +++ b/src/Player.js @@ -769,7 +769,6 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) { this.workDefExpGainRate = 0; this.workDexExpGainRate = 0; this.workAgiExpGainRate = 0; - this.workChaExpGainRate = 0; this.workRepGainRate = 0; this.workMoneyGainRate = 0; @@ -787,15 +786,20 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) { var baseDataStructuresCost = 1; var baseNetworksCost = 5; var baseAlgorithmsCost = 20; + var baseManagementCost = 10; + var baseLeadershipCost = 20; var baseStudyComputerScienceExp = 0.02; var baseDataStructuresExp = 0.1; - var baseNetworksExp = 0.5; - var baseAlgorithmsExp = 2.0; + var baseNetworksExp = 0.4; + var baseAlgorithmsExp = 1.5; + var baseManagementExp = 0.8; + var baseLeadershipExp = 1.5; //Find cost and exp gain per game cycle var cost = 0; var hackExp = 0; + var chaExp = 0; switch (className) { case CONSTANTS.ClassStudyComputerScience: hackExp = baseStudyComputerScienceExp * expMult / gameCPS; @@ -812,13 +816,22 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) { cost = baseAlgorithmsCost * costMult / gameCPS; hackExp = baseAlgorithmsExp * expMult / gameCPS; break; + case CONSTANTS.ClassManagement: + cost = baseManagementCost * costMult / gameCPS; + chaExp = baseManagementExp * expMult / gameCPS; + break; + case CONSTANTS.ClassLeadership: + cost = baseLeadershipCost * costMult / gameCPS; + chaExp = baseLeadershipExp * expMult / gameCPS; + break; default: throw new Error("ERR: Invalid/unregocnized class name"); return; } - this.workMoneyLossRate = cost; - this.workHackExpGainRate = hackExp; + this.workMoneyLossRate = cost; + this.workHackExpGainRate = hackExp; + this.workChaExpGainRate = chaExp; var cancelButton = document.getElementById("work-in-progress-cancel-button"); @@ -883,7 +896,7 @@ PlayerObject.prototype.finishClass = function() { this.updateSkillLevels(); var txt = "After " + this.className + " for " + convertTimeMsToTimeElapsedString(this.timeWorked) + ",
" + - "you spent a total of " + this.workMoneyGained * -1 + ".

" + + "you spent a total of $" + this.workMoneyGained * -1 + ".

" + "You earned a total of:
" + (this.workHackExpGained).toFixed(3) + " hacking exp
" + (this.workStrExpGained).toFixed(3) + " strength exp
" +