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) {