From 01f9bf14af62ea2c8da9b69c9599a7eb0251f494 Mon Sep 17 00:00:00 2001 From: Daniel Xie Date: Thu, 4 May 2017 00:27:22 -0500 Subject: [PATCH] Rebalancing Create program times, crime exp gains --- index.html | 2 +- src/Constants.js | 6 +++++ src/CreateProgram.js | 10 ++++---- src/Crimes.js | 8 +++---- src/Location.js | 1 + src/Player.js | 55 ++++++++++++++++++++++++++------------------ src/engine.js | 8 ++++--- 7 files changed, 55 insertions(+), 35 deletions(-) diff --git a/index.html b/index.html index cb384ee6d..1da35ffad 100644 --- a/index.html +++ b/index.html @@ -557,7 +557,7 @@ In the Slums you can commit crimes to earn money and experience. Crime attempts are not always successful. Your chance at successfully committing a crime is determined by your stats.

- Shoplift + Shoplift Mug someone Deal Drugs Traffick Illegal Arms diff --git a/src/Constants.js b/src/Constants.js index f035aa5e5..d9cc9de38 100644 --- a/src/Constants.js +++ b/src/Constants.js @@ -49,12 +49,18 @@ CONSTANTS = { MillisecondsPer4Hours: 14400000, GameCyclesPer4Hours: 14400000 / 200, + MillisecondsPer2Hours: 7200000, + GameCyclesPer2Hours: 7200000 / 200, + MillisecondsPerHour: 3600000, GameCyclesPerHour: 3600000 / 200, MillisecondsPerHalfHour: 1800000, GameCyclesPerHalfHour: 1800000 / 200, + MillisecondsPerQuarterHour: 900000, + GameCyclesPerQuarterHour: 900000 / 200, + FactionWorkHacking: "Faction Hacking Work", FactionWorkField: "Faction Field Work", FactionWorkSecurity: "Faction Security Work", diff --git a/src/CreateProgram.js b/src/CreateProgram.js index 5822821f8..949286722 100644 --- a/src/CreateProgram.js +++ b/src/CreateProgram.js @@ -40,7 +40,7 @@ function displayCreateProgramContent() { Player.hacking_skill >= 50) { bruteSshALink.style.display = "block"; bruteSshALink.addEventListener("click", function() { - Player.startCreateProgramWork(Programs.BruteSSHProgram, CONSTANTS.MillisecondsPerHalfHour); + Player.startCreateProgramWork(Programs.BruteSSHProgram, CONSTANTS.MillisecondsPerQuarterHour); }); } @@ -49,7 +49,7 @@ function displayCreateProgramContent() { Player.hacking_skill >= 100) { ftpCrackALink.style.display = "block"; ftpCrackALink.addEventListener("click", function() { - Player.startCreateProgramWork(Programs.FTPCrackProgram, CONSTANTS.MillisecondsPerHour); + Player.startCreateProgramWork(Programs.FTPCrackProgram, CONSTANTS.MillisecondsHalfHour); }); } @@ -58,7 +58,7 @@ function displayCreateProgramContent() { Player.hacking_skill >= 250) { relaySmtpALink.style.display = "block"; relaySmtpAlink.addEventListener("click", function() { - Player.startCreateProgramWork(Programs.RelaySMTPProgram. CONSTANTS.MillisecondsPer4Hours); + Player.startCreateProgramWork(Programs.RelaySMTPProgram. CONSTANTS.MillisecondsPer2Hours); }); } @@ -67,7 +67,7 @@ function displayCreateProgramContent() { Player.hacking_skill >= 500) { httpWormALink.style.display = "block"; httpWormALink.addEventListener("click", function() { - Player.startCreateProgramWork(Programs.HTTPWormProgram, CONSTANTS.MillisecondsPer8Hours); + Player.startCreateProgramWork(Programs.HTTPWormProgram, CONSTANTS.MillisecondsPer4Hours); }); } @@ -76,7 +76,7 @@ function displayCreateProgramContent() { Player.hacking_skill >= 750) { sqlInjectALink.style.display = "block"; sqlInjectALink.addEventListener("click", function() { - Player.startCreateProgramWork(Programs.SQLInjectProgram, CONSTANTS.MillisecondsPer10Hours); + Player.startCreateProgramWork(Programs.SQLInjectProgram, CONSTANTS.MillisecondsPer8Hours); }); } } \ No newline at end of file diff --git a/src/Crimes.js b/src/Crimes.js index 494c77058..e01bd60cc 100644 --- a/src/Crimes.js +++ b/src/Crimes.js @@ -11,22 +11,22 @@ function commitMugCrime() { function commitDealDrugsCrime() { Player.crimeType = CONSTANTS.CrimeDrugs; - Player.startCrime(0, 2, 2, 2, 2, 5, 1000, 10000); //$100 per sec + Player.startCrime(0, 2, 2, 2, 2, 4, 1000, 10000); //$100 per sec } function commitTraffickArmsCrime() { Player.crimeType = CONSTANTS.CrimeTraffickArms; - Player.startCrime(0, 5, 5, 5, 5, 10, 2500, 20000); //$125 per sec + Player.startCrime(0, 5, 5, 5, 5, 8, 2500, 20000); //$125 per sec } function commitHomicideCrime() { Player.crimeType = CONSTANTS.CrimeHomicide; - Player.startCrime(0, 20, 20, 20, 20, 0, 300, 3000); //$100 per sec + Player.startCrime(0, 15, 15, 15, 15, 0, 300, 3000); //$100 per sec } function commitKidnapCrime() { Player.crimeType = CONSTANTS.CrimeKidnap; - Player.startCrime(0, 6, 6, 6, 6, 6, 10000, 60000); //$166.67 per sec + Player.startCrime(0, 10, 10, 10, 10, 10, 10000, 60000); //$166.67 per sec } function determineCrimeSuccess(crime, moneyGained) { diff --git a/src/Location.js b/src/Location.js index 4bc42402b..248c3ddd8 100644 --- a/src/Location.js +++ b/src/Location.js @@ -834,6 +834,7 @@ displayLocationContent = function() { slumsKidnap.style.display = "block"; slumsKidnap.innerHTML = "Kidnap and Ransom (" + (kidnapChance*100).toFixed(3) + "% chance of success)"; + break; default: console.log("ERROR: INVALID LOCATION"); diff --git a/src/Player.js b/src/Player.js index 610837d75..0323a4f0a 100644 --- a/src/Player.js +++ b/src/Player.js @@ -927,7 +927,7 @@ PlayerObject.prototype.startCrime = function(hackExp, strExp, defExp, dexExp, ag this.workHackExpGained = hackExp * this.hacking_exp_mult; this.workStrExpGained = strExp * this.strength_exp_mult; this.workDefExpGained = defExp * this.defense_exp_mult; - this.workDexExpGained = dexExp * this.dexteriy_exp_mult; + this.workDexExpGained = dexExp * this.dexterity_exp_mult; this.workAgiExpGained = agiExp * this.agility_exp_mult; this.workChaExpGained = chaExp * this.charisma_exp_mult; this.workMoneyGained = money; //TODO multiplier for this? @@ -949,9 +949,11 @@ PlayerObject.prototype.startCrime = function(hackExp, strExp, defExp, dexExp, ag Engine.loadWorkInProgressContent(); } -PlayerObject.prototype.commitCrime = function () { +PlayerObject.prototype.commitCrime = function (numCycles) { this.timeWorked += Engine._idleSpeed * numCycles; + if (this.timeWorked >= this.timeNeededToCompleteWork) {Player.finishCrime(false);} + var txt = document.getElementById("work-in-progress-text"); txt.innerHTML = "You are attempting to " + Player.crimeType + ".
" + "Time remaining: " + convertTimeMsToTimeElapsedString(this.timeNeededToCompleteWork - this.timeWorked); @@ -961,9 +963,6 @@ PlayerObject.prototype.finishCrime = function(cancelled) { if (cancelled) { //Do nothing } else { - this.gainWorkExp(); - - //Handle Karma and crime statistics switch(this.crimeType) { case CONSTANTS.CrimeShoplift: @@ -997,25 +996,37 @@ PlayerObject.prototype.finishCrime = function(cancelled) { } //Determine crime success/failure - if (determineCrimeSuccess(this.crimeType, this.workMoneyGained)) { - dialogBoxCreate("Crime successful!

" + - "You gained:
"+ - "$" + this.workMoneyGained + "
" + - this.workHackExpGained + " hacking experience
" + - this.workStrExpGained + " strength experience
" + - this.workDefExpGained + " defense experience
" + - this.workDexExpGained + " dexterity experience
" + - this.workAgiExpGained + " agility experience
"); - } else { - dialogBoxCreate("Crime failed!

" + - "You gained:
"+ - this.workHackExpGained + " hacking experience
" + - this.workStrExpGained + " strength experience
" + - this.workDefExpGained + " defense experience
" + - this.workDexExpGained + " dexterity experience
" + - this.workAgiExpGained + " agility experience
"); + if (!cancelled) { + if (determineCrimeSuccess(this.crimeType, this.workMoneyGained)) { + //On a crime success, gain 2x exp + this.workHackExpGained *= 2; + this.workStrExpGained *= 2; + this.workDefExpGained *= 2; + this.workDexExpGained *= 2; + this.workAgiExpGained *= 2; + this.workChaExpGained *= 2; + + dialogBoxCreate("Crime successful!

" + + "You gained:
"+ + "$" + this.workMoneyGained + "
" + + this.workHackExpGained + " hacking experience
" + + this.workStrExpGained + " strength experience
" + + this.workDefExpGained + " defense experience
" + + this.workDexExpGained + " dexterity experience
" + + this.workAgiExpGained + " agility experience
"); + } else { + dialogBoxCreate("Crime failed!

" + + "You gained:
"+ + this.workHackExpGained + " hacking experience
" + + this.workStrExpGained + " strength experience
" + + this.workDefExpGained + " defense experience
" + + this.workDexExpGained + " dexterity experience
" + + this.workAgiExpGained + " agility experience
"); + } } + this.gainWorkExp(); + var mainMenu = document.getElementById("mainmenu-container"); mainMenu.style.visibility = "visible"; this.isWorking = false; diff --git a/src/engine.js b/src/engine.js index 89ef3f6e7..f37261efa 100644 --- a/src/engine.js +++ b/src/engine.js @@ -581,7 +581,9 @@ var Engine = { } else if (Player.workType == CONSTANTS.WorkTypeCreateProgram) { Player.createProgramWork(numCycles); } else if (Player.workType == CONSTANTS.WorkTypeStudyClass) { - Player.takeClass(numCycles); + Player.takeClass(numCycles); + } else if (Player.workType == CONSTANTS.WorkTypeCrime) { + Player.commitCrime(numCycles); } else { Player.work(numCycles); } @@ -608,7 +610,7 @@ var Engine = { Counters: { autoSaveCounter: 300, //Autosave every minute updateSkillLevelsCounter: 10, //Only update skill levels every 2 seconds. Might improve performance - updateDisplays: 4, //Update displays such as Active Scripts display and character display + updateDisplays: 3, //Update displays such as Active Scripts display and character display serverGrowth: 450, //Process server growth every minute and a half checkFactionInvitations: 1500, //Check whether you qualify for any faction invitations every 5 minutes passiveFactionGrowth: 600, @@ -644,7 +646,7 @@ var Engine = { updateHacknetNodesContent(); } - Engine.Counters.updateDisplays = 4; + Engine.Counters.updateDisplays = 3; } if (Engine.Counters.serverGrowth <= 0) {