mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-18 12:15:44 +01:00
v0.34.1
This commit is contained in:
parent
281aad993f
commit
e88a3936f3
@ -121,11 +121,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-upgrade-div {
|
.cmpy-mgmt-upgrade-div {
|
||||||
|
display:inline-block;
|
||||||
border:1px solid white;
|
border:1px solid white;
|
||||||
margin:4px;
|
margin:4px;
|
||||||
padding:12px;
|
padding:12px;
|
||||||
border-radius:25px;
|
border-radius:25px;
|
||||||
width:95%;
|
width:45%;
|
||||||
color:var(--my-font-color);
|
color:var(--my-font-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
840
dist/bundle.js
vendored
840
dist/bundle.js
vendored
File diff suppressed because it is too large
Load Diff
61
index.html
61
index.html
@ -164,9 +164,7 @@
|
|||||||
|
|
||||||
<!-- Character Info page -->
|
<!-- Character Info page -->
|
||||||
<div id="character-container" class="generic-menupage-container">
|
<div id="character-container" class="generic-menupage-container">
|
||||||
<div id="character-content">
|
<div id="character-content"></div>
|
||||||
<p id="character-info"> </p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Active scripts info page -->
|
<!-- Active scripts info page -->
|
||||||
@ -441,48 +439,7 @@
|
|||||||
at any time. Your progress will be saved and you can continue later.
|
at any time. Your progress will be saved and you can continue later.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul id="create-program-list">
|
<ul id="create-program-list"></ul>
|
||||||
<a class="a-link-button tooltip" id="create-program-nuke">
|
|
||||||
NUKE.exe
|
|
||||||
<span class="tooltiptext"> This virus is used to gain root access to a machine if enough ports are opened. </span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-brutessh">
|
|
||||||
BruteSSH.exe
|
|
||||||
<span class="tooltiptext"> This program executes a brute force attack that opens SSH ports </span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-ftpcrack">
|
|
||||||
FTPCrack.exe
|
|
||||||
<span class="tooltiptext"> This program cracks open FTP ports</span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-relaysmtp">
|
|
||||||
relaySMTP.exe
|
|
||||||
<span class="tooltiptext"> This program opens SMTP ports by redirecting data </span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-httpworm">
|
|
||||||
HTTPWorm.exe
|
|
||||||
<span class="tooltiptext"> This virus opens up HTTP ports </span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-sqlinject">
|
|
||||||
SQLInject.exe
|
|
||||||
<span class="tooltiptext"> This virus opens SQL ports</span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-deepscanv1">
|
|
||||||
DeepscanV1.exe
|
|
||||||
<span class="tooltiptext"> This program allows you to use the scan-analyze command with a depth up to 5</span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-deepscanv2">
|
|
||||||
DeepscanV2.exe
|
|
||||||
<span class="tooltiptext"> This program allows you to use the scan-analyze command with a depth up to 10</span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-serverprofiler">
|
|
||||||
ServerProfiler.exe
|
|
||||||
<span class="tooltiptext">This program is used to display hacking and Netscript-related information about servers</span>
|
|
||||||
</a>
|
|
||||||
<a class="a-link-button tooltip" id="create-program-autolink">
|
|
||||||
AutoLink.exe
|
|
||||||
<span class="tooltiptext">This program allows you to directly connect to other servers through the 'scan-analyze' command</span>
|
|
||||||
</a>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Factions -->
|
<!-- Factions -->
|
||||||
@ -947,6 +904,20 @@
|
|||||||
<em id="settingsNSPortRangeValLabel" style="font-style: normal;"></em>
|
<em id="settingsNSPortRangeValLabel" style="font-style: normal;"></em>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
|
<!-- Autosave Interval -->
|
||||||
|
<fieldset>
|
||||||
|
<label for="settingsAutosaveIntervalVal" class="tooltip">Autosave Interval
|
||||||
|
<span class="tooltiptext">
|
||||||
|
The time (in seconds) between each autosave. Set to 0 to disable autosave.
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="range" max="600" min="0"
|
||||||
|
step="1" name="settingsAutosaveIntervalVal" id="settingsAutosaveIntervalVal" value="60">
|
||||||
|
</input>
|
||||||
|
<em id="settingsAutosaveIntervalValLabel" style="font-style: normal;"></em>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
<!-- Suppress messages -->
|
<!-- Suppress messages -->
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<label for="settingsSuppressMessages" class="tooltip">Suppress Messages:
|
<label for="settingsSuppressMessages" class="tooltip">Suppress Messages:
|
||||||
|
@ -78,7 +78,7 @@ function initBitNodes() {
|
|||||||
"by 1's and 0's. They were wrong.<br><br>" +
|
"by 1's and 0's. They were wrong.<br><br>" +
|
||||||
"In this BitNode:<br><br>" +
|
"In this BitNode:<br><br>" +
|
||||||
"The base security level of servers is doubled<br>" +
|
"The base security level of servers is doubled<br>" +
|
||||||
"The starting money on servers is halved, but the maximum money is doubled<br>" +
|
"The starting money on servers is halved, but the maximum money remains the same<br>" +
|
||||||
"Most methods of earning money now give significantly less<br>" +
|
"Most methods of earning money now give significantly less<br>" +
|
||||||
"Infiltration gives 50% more reputation and money<br>" +
|
"Infiltration gives 50% more reputation and money<br>" +
|
||||||
"Augmentations are more expensive<br>" +
|
"Augmentations are more expensive<br>" +
|
||||||
|
@ -101,68 +101,70 @@ Material.prototype.init = function(mats={}) {
|
|||||||
case "Water":
|
case "Water":
|
||||||
this.dmd = 75; this.dmdR = [65, 85];
|
this.dmd = 75; this.dmdR = [65, 85];
|
||||||
this.cmp = 50; this.cmpR = [40, 60];
|
this.cmp = 50; this.cmpR = [40, 60];
|
||||||
this.bCost = 750; this.mv = 0.2;
|
this.bCost = 1000; this.mv = 0.2;
|
||||||
this.mku = 15;
|
this.mku = 12;
|
||||||
break;
|
break;
|
||||||
case "Energy":
|
case "Energy":
|
||||||
this.dmd = 90; this.dmdR = [80, 100];
|
this.dmd = 90; this.dmdR = [80, 100];
|
||||||
this.cmp = 80; this.cmpR = [65, 95];
|
this.cmp = 80; this.cmpR = [65, 95];
|
||||||
this.bCost = 1125; this.mv = 0.2;
|
this.bCost = 1500; this.mv = 0.2;
|
||||||
this.mku = 15;
|
this.mku = 12;
|
||||||
break;
|
break;
|
||||||
case "Food":
|
case "Food":
|
||||||
this.dmd = 80; this.dmdR = [70, 90];
|
this.dmd = 80; this.dmdR = [70, 90];
|
||||||
this.cmp = 60; this.cmpR = [35, 85];
|
this.cmp = 60; this.cmpR = [35, 85];
|
||||||
this.bCost = 3750; this.mv = 1;
|
this.bCost = 5000; this.mv = 1;
|
||||||
this.mku = 9;
|
this.mku = 7.5;
|
||||||
break;
|
break;
|
||||||
case "Plants":
|
case "Plants":
|
||||||
this.dmd = 70; this.dmdR = [20, 90];
|
this.dmd = 70; this.dmdR = [20, 90];
|
||||||
this.cmp = 50; this.cmpR = [30, 70];
|
this.cmp = 50; this.cmpR = [30, 70];
|
||||||
this.bCost = 2250; this.mv = 0.6;
|
this.bCost = 3000; this.mv = 0.6;
|
||||||
this.mku = 12;
|
this.mku = 10;
|
||||||
break;
|
break;
|
||||||
case "Metal":
|
case "Metal":
|
||||||
this.dmd = 80; this.dmdR = [75, 85];
|
this.dmd = 80; this.dmdR = [75, 85];
|
||||||
this.cmp = 70; this.cmpR = [60, 80];
|
this.cmp = 70; this.cmpR = [60, 80];
|
||||||
this.bCost = 2000; this.mv = 1;
|
this.bCost = 2650; this.mv = 1;
|
||||||
this.mku = 15;
|
this.mku = 12;
|
||||||
break;
|
break;
|
||||||
case "Hardware":
|
case "Hardware":
|
||||||
this.dmd = 85; this.dmdR = [80, 90];
|
this.dmd = 85; this.dmdR = [80, 90];
|
||||||
this.cmp = 80; this.cmpR = [65, 95];
|
this.cmp = 80; this.cmpR = [65, 95];
|
||||||
this.bCost = 3000; this.mv = 0.5; //Less mv bc its processed twice
|
this.bCost = 4000; this.mv = 0.5; //Less mv bc its processed twice
|
||||||
this.mku = 7;
|
this.mku = 5.5;
|
||||||
break;
|
break;
|
||||||
case "Chemicals":
|
case "Chemicals":
|
||||||
this.dmd = 55; this.dmdR = [40, 70];
|
this.dmd = 55; this.dmdR = [40, 70];
|
||||||
this.cmp = 60; this.cmpR = [40, 80];
|
this.cmp = 60; this.cmpR = [40, 80];
|
||||||
this.bCost = 5000; this.mv = 1.2;
|
this.bCost = 6750; this.mv = 1.2;
|
||||||
this.mku = 8;
|
this.mku = 6.5;
|
||||||
break;
|
break;
|
||||||
case "Real Estate":
|
case "Real Estate":
|
||||||
this.dmd = 50; this.dmdR = [5, 100];
|
this.dmd = 50; this.dmdR = [5, 100];
|
||||||
this.cmp = 50; this.cmpR = [25, 75];
|
this.cmp = 50; this.cmpR = [25, 75];
|
||||||
this.bCost = 12000; this.mv = 1.5; //Less mv bc its processed twice
|
this.bCost = 16e3; this.mv = 1.5; //Less mv bc its processed twice
|
||||||
this.mku = 6;
|
this.mku = 5;
|
||||||
break;
|
break;
|
||||||
case "Drugs":
|
case "Drugs":
|
||||||
this.dmd = 60; this.dmdR = [45, 75];
|
this.dmd = 60; this.dmdR = [45, 75];
|
||||||
this.cmp = 70; this.cmpR = [40, 100];
|
this.cmp = 70; this.cmpR = [40, 100];
|
||||||
this.bCost = 6000; this.mv = 1.6;
|
this.bCost = 8e3; this.mv = 1.6;
|
||||||
this.mku = 5;
|
this.mku = 4;
|
||||||
break;
|
break;
|
||||||
case "Robots":
|
case "Robots":
|
||||||
this.dmd = 90; this.dmdR = [80, 100];
|
this.dmd = 90; this.dmdR = [80, 100];
|
||||||
this.cmp = 90; this.cmpR = [80, 100];
|
this.cmp = 90; this.cmpR = [80, 100];
|
||||||
this.bCost = 15000; this.mv = 0.5; //Less mv bc its processed twice
|
this.bCost = 20e3; this.mv = 0.5; //Less mv bc its processed twice
|
||||||
this.mku = 3;
|
this.mku = 2.5;
|
||||||
break;
|
break;
|
||||||
case "AI Cores":
|
case "AI Cores":
|
||||||
this.dmd = 90; this.dmdR = [80, 100];
|
this.dmd = 90; this.dmdR = [80, 100];
|
||||||
this.cmp = 90; this.cmpR = [80, 100];
|
this.cmp = 90; this.cmpR = [80, 100];
|
||||||
this.bCost = 20000; this.mv = 0.8; //Less mv bc its processed twice
|
this.bCost = 27e3; this.mv = 0.8; //Less mv bc its processed twice
|
||||||
this.mku = 2;
|
this.mku = 1.8;
|
||||||
|
break;
|
||||||
|
case "Scientific Research":
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
console.log("Invalid material type in init(): " + this.name);
|
console.log("Invalid material type in init(): " + this.name);
|
||||||
@ -175,7 +177,7 @@ Material.prototype.processMarket = function() {
|
|||||||
//This 1st random check determines whether competition increases or decreases
|
//This 1st random check determines whether competition increases or decreases
|
||||||
//More competition = lower market price
|
//More competition = lower market price
|
||||||
var v = (Math.random() * this.mv) / 100;
|
var v = (Math.random() * this.mv) / 100;
|
||||||
var pv = (Math.random() * this.mv) / 100;
|
var pv = (Math.random() * this.mv) / 300;
|
||||||
if (Math.random() < 0.42) {
|
if (Math.random() < 0.42) {
|
||||||
this.cmp *= (1+v);
|
this.cmp *= (1+v);
|
||||||
if (this.cmp > this.cmpR[1]) {this.cmp = this.cmpR[1]};
|
if (this.cmp > this.cmpR[1]) {this.cmp = this.cmpR[1]};
|
||||||
@ -189,7 +191,7 @@ Material.prototype.processMarket = function() {
|
|||||||
//This 2nd random check determines whether demand increases or decreases
|
//This 2nd random check determines whether demand increases or decreases
|
||||||
//More demand = higher market price
|
//More demand = higher market price
|
||||||
v = (Math.random() * this.mv) / 100;
|
v = (Math.random() * this.mv) / 100;
|
||||||
pv = (Math.random() * this.mv) / 100;
|
pv = (Math.random() * this.mv) / 300;
|
||||||
if (Math.random() < 0.45) {
|
if (Math.random() < 0.45) {
|
||||||
this.dmd *= (1+v);
|
this.dmd *= (1+v);
|
||||||
if (this.dmd > this.dmdR[1]) {this.dmd = this.dmdR[1];}
|
if (this.dmd > this.dmdR[1]) {this.dmd = this.dmdR[1];}
|
||||||
@ -591,7 +593,7 @@ function Industry(params={}) {
|
|||||||
this.thisCycleRevenue = new Decimal(0);
|
this.thisCycleRevenue = new Decimal(0);
|
||||||
this.thisCycleExpenses = new Decimal(0);
|
this.thisCycleExpenses = new Decimal(0);
|
||||||
|
|
||||||
this.state = 0;
|
this.state = "START";
|
||||||
|
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
@ -613,6 +615,7 @@ Industry.prototype.init = function() {
|
|||||||
this.prodMats = ["Energy"];
|
this.prodMats = ["Energy"];
|
||||||
break;
|
break;
|
||||||
case Industries.Utilities:
|
case Industries.Utilities:
|
||||||
|
case "Utilities":
|
||||||
this.reFac = 0.4;
|
this.reFac = 0.4;
|
||||||
this.sciFac = 0.6;
|
this.sciFac = 0.6;
|
||||||
this.robFac = 0.3;
|
this.robFac = 0.3;
|
||||||
@ -718,6 +721,7 @@ Industry.prototype.init = function() {
|
|||||||
this.makesProducts = true;
|
this.makesProducts = true;
|
||||||
break;
|
break;
|
||||||
case Industries.Computer:
|
case Industries.Computer:
|
||||||
|
case "Computer":
|
||||||
this.reFac = 0.2;
|
this.reFac = 0.2;
|
||||||
this.sciFac = 0.65;
|
this.sciFac = 0.65;
|
||||||
this.robFac = 0.4;
|
this.robFac = 0.4;
|
||||||
@ -796,6 +800,7 @@ Industry.prototype.getProductDescriptionText = function() {
|
|||||||
return "develop new pharmaceutical drugs";
|
return "develop new pharmaceutical drugs";
|
||||||
break;
|
break;
|
||||||
case Industries.Computer:
|
case Industries.Computer:
|
||||||
|
case "Computer":
|
||||||
return "create new computer hardware and networking infrastructures";
|
return "create new computer hardware and networking infrastructures";
|
||||||
break;
|
break;
|
||||||
case Industries.Robotics:
|
case Industries.Robotics:
|
||||||
@ -864,7 +869,7 @@ Industry.prototype.process = function(marketCycles=1, state, company) {
|
|||||||
for (var officeLoc in this.offices) {
|
for (var officeLoc in this.offices) {
|
||||||
if (this.offices.hasOwnProperty(officeLoc) &&
|
if (this.offices.hasOwnProperty(officeLoc) &&
|
||||||
this.offices[officeLoc] instanceof OfficeSpace) {
|
this.offices[officeLoc] instanceof OfficeSpace) {
|
||||||
employeeSalary += this.offices[officeLoc].process(marketCycles, this);
|
employeeSalary += this.offices[officeLoc].process(marketCycles, {industry:this, corporation:company});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.thisCycleExpenses = this.thisCycleExpenses.plus(employeeSalary);
|
this.thisCycleExpenses = this.thisCycleExpenses.plus(employeeSalary);
|
||||||
@ -881,7 +886,7 @@ Industry.prototype.process = function(marketCycles=1, state, company) {
|
|||||||
this.thisCycleExpenses = this.thisCycleExpenses.plus(res[1]);
|
this.thisCycleExpenses = this.thisCycleExpenses.plus(res[1]);
|
||||||
|
|
||||||
//Process creation, production & sale of products
|
//Process creation, production & sale of products
|
||||||
res = this.processProducts(marketCycles);
|
res = this.processProducts(marketCycles, company);
|
||||||
this.thisCycleRevenue = this.thisCycleRevenue.plus(res[0]);
|
this.thisCycleRevenue = this.thisCycleRevenue.plus(res[0]);
|
||||||
this.thisCycleExpenses = this.thisCycleExpenses.plus(res[1]);
|
this.thisCycleExpenses = this.thisCycleExpenses.plus(res[1]);
|
||||||
}
|
}
|
||||||
@ -995,7 +1000,7 @@ Industry.prototype.processMaterials = function(marketCycles=1, company) {
|
|||||||
} else {
|
} else {
|
||||||
prod = maxProd;
|
prod = maxProd;
|
||||||
}
|
}
|
||||||
prod *= (SecsPerMarketCycle * marketCycles * this.prodMult); //Convert production from per second to per market cycle
|
prod *= (SecsPerMarketCycle * marketCycles * this.prodMult * company.getProductionMultiplier()); //Convert production from per second to per market cycle
|
||||||
//Calculate net change in warehouse storage making
|
//Calculate net change in warehouse storage making
|
||||||
//the produced materials will cost
|
//the produced materials will cost
|
||||||
var totalMatSize = 0;
|
var totalMatSize = 0;
|
||||||
@ -1095,7 +1100,7 @@ Industry.prototype.processMaterials = function(marketCycles=1, company) {
|
|||||||
} else {
|
} else {
|
||||||
sellAmt = maxSell;
|
sellAmt = maxSell;
|
||||||
}
|
}
|
||||||
sellAmt = (sellAmt * SecsPerMarketCycle * marketCycles);
|
sellAmt = (sellAmt * company.getSalesMultiplier() * SecsPerMarketCycle * marketCycles);
|
||||||
sellAmt = Math.min(mat.qty, sellAmt);
|
sellAmt = Math.min(mat.qty, sellAmt);
|
||||||
if (sellAmt < 0) {
|
if (sellAmt < 0) {
|
||||||
console.log("ERROR: sellAmt is negative");
|
console.log("ERROR: sellAmt is negative");
|
||||||
@ -1112,7 +1117,6 @@ Industry.prototype.processMaterials = function(marketCycles=1, company) {
|
|||||||
} //End processing of sale of materials
|
} //End processing of sale of materials
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* TODO Process Export of materials */
|
|
||||||
case "EXPORT":
|
case "EXPORT":
|
||||||
for (var matName in warehouse.materials) {
|
for (var matName in warehouse.materials) {
|
||||||
if (warehouse.materials.hasOwnProperty(matName)) {
|
if (warehouse.materials.hasOwnProperty(matName)) {
|
||||||
@ -1158,14 +1162,15 @@ Industry.prototype.processMaterials = function(marketCycles=1, company) {
|
|||||||
//Produce Scientific Research based on R&D employees
|
//Produce Scientific Research based on R&D employees
|
||||||
//Scientific Research can be produced without a warehouse
|
//Scientific Research can be produced without a warehouse
|
||||||
if (office instanceof OfficeSpace) {
|
if (office instanceof OfficeSpace) {
|
||||||
this.sciResearch.qty += .01 * Math.pow(office.employeeProd[EmployeePositions.RandD], 0.5);
|
this.sciResearch.qty += (.01 * Math.pow(office.employeeProd[EmployeePositions.RandD], 0.5)
|
||||||
|
* company.getScientificResearchMultiplier());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [revenue, expenses];
|
return [revenue, expenses];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Process production & sale of this industry's FINISHED products (including all of their stats)
|
//Process production & sale of this industry's FINISHED products (including all of their stats)
|
||||||
Industry.prototype.processProducts = function(marketCycles=1) {
|
Industry.prototype.processProducts = function(marketCycles=1, corporation) {
|
||||||
var revenue = 0, expenses = 0;
|
var revenue = 0, expenses = 0;
|
||||||
|
|
||||||
//Create products
|
//Create products
|
||||||
@ -1198,7 +1203,7 @@ Industry.prototype.processProducts = function(marketCycles=1) {
|
|||||||
if (this.products.hasOwnProperty(prodName)) {
|
if (this.products.hasOwnProperty(prodName)) {
|
||||||
var prod = this.products[prodName];
|
var prod = this.products[prodName];
|
||||||
if (prod instanceof Product && prod.fin) {
|
if (prod instanceof Product && prod.fin) {
|
||||||
revenue += this.processProduct(marketCycles, prod);
|
revenue += this.processProduct(marketCycles, prod, corporation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1206,7 +1211,7 @@ Industry.prototype.processProducts = function(marketCycles=1) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Processes FINISHED products
|
//Processes FINISHED products
|
||||||
Industry.prototype.processProduct = function(marketCycles=1, product) {
|
Industry.prototype.processProduct = function(marketCycles=1, product, corporation) {
|
||||||
var totalProfit = 0;
|
var totalProfit = 0;
|
||||||
for (var i = 0; i < Cities.length; ++i) {
|
for (var i = 0; i < Cities.length; ++i) {
|
||||||
var city = Cities[i], office = this.offices[city], warehouse = this.warehouses[city];
|
var city = Cities[i], office = this.offices[city], warehouse = this.warehouses[city];
|
||||||
@ -1230,7 +1235,7 @@ Industry.prototype.processProduct = function(marketCycles=1, product) {
|
|||||||
} else {
|
} else {
|
||||||
prod = maxProd;
|
prod = maxProd;
|
||||||
}
|
}
|
||||||
prod *= (this.prodMult * SecsPerMarketCycle * marketCycles);
|
prod *= (this.prodMult * corporation.getProductionMultiplier() * SecsPerMarketCycle * marketCycles);
|
||||||
|
|
||||||
|
|
||||||
//Calculate net change in warehouse storage making the Products will cost
|
//Calculate net change in warehouse storage making the Products will cost
|
||||||
@ -1303,7 +1308,7 @@ Industry.prototype.processProduct = function(marketCycles=1, product) {
|
|||||||
} else {
|
} else {
|
||||||
sellAmt = maxSell;
|
sellAmt = maxSell;
|
||||||
}
|
}
|
||||||
sellAmt = sellAmt * SecsPerMarketCycle * marketCycles;
|
sellAmt = sellAmt * corporation.getSalesMultiplier() * SecsPerMarketCycle * marketCycles;
|
||||||
sellAmt = Math.min(product.data[city][0], sellAmt); //data[0] is qty
|
sellAmt = Math.min(product.data[city][0], sellAmt); //data[0] is qty
|
||||||
if (sellAmt && product.sCost) {
|
if (sellAmt && product.sCost) {
|
||||||
product.data[city][0] -= sellAmt; //data[0] is qty
|
product.data[city][0] -= sellAmt; //data[0] is qty
|
||||||
@ -1409,29 +1414,33 @@ Employee.prototype.process = function(marketCycles=1, office) {
|
|||||||
return salary;
|
return salary;
|
||||||
}
|
}
|
||||||
|
|
||||||
Employee.prototype.calculateProductivity = function() {
|
Employee.prototype.calculateProductivity = function(corporation) {
|
||||||
|
var effCre = this.cre * corporation.getEmployeeCreMultiplier(),
|
||||||
|
effCha = this.cha * corporation.getEmployeeChaMultiplier(),
|
||||||
|
effInt = this.int * corporation.getEmployeeIntMultiplier(),
|
||||||
|
effEff = this.eff * corporation.getEmployeeEffMultiplier();
|
||||||
var prodBase = this.mor * this.hap * this.ene * 1e-6, prodMult;
|
var prodBase = this.mor * this.hap * this.ene * 1e-6, prodMult;
|
||||||
switch(this.pos) {
|
switch(this.pos) {
|
||||||
//Calculate productivity based on position. This is multipled by prodBase
|
//Calculate productivity based on position. This is multipled by prodBase
|
||||||
//to get final value
|
//to get final value
|
||||||
case EmployeePositions.Operations:
|
case EmployeePositions.Operations:
|
||||||
prodMult = (0.6 * this.int) + (0.1 * this.cha) + (this.exp) +
|
prodMult = (0.6 * effInt) + (0.1 * effCha) + (this.exp) +
|
||||||
(0.5 * this.cre) + (this.eff);
|
(0.5 * effCre) + (effEff);
|
||||||
break;
|
break;
|
||||||
case EmployeePositions.Engineer:
|
case EmployeePositions.Engineer:
|
||||||
prodMult = (this.int) + (0.1 * this.cha) + (1.5 * this.exp) +
|
prodMult = (effInt) + (0.1 * effCha) + (1.5 * this.exp) +
|
||||||
(this.eff);
|
(effEff);
|
||||||
break;
|
break;
|
||||||
case EmployeePositions.Business:
|
case EmployeePositions.Business:
|
||||||
prodMult = (0.4 * this.int) + (this.cha) + (0.5 * this.exp);
|
prodMult = (0.4 * effInt) + (effCha) + (0.5 * this.exp);
|
||||||
break;
|
break;
|
||||||
case EmployeePositions.Management:
|
case EmployeePositions.Management:
|
||||||
prodMult = (2 * this.cha) + (this.exp) + (0.2 * this.cre) +
|
prodMult = (2 * effCha) + (this.exp) + (0.2 * effCre) +
|
||||||
(0.7 * this.eff);
|
(0.7 * effEff);
|
||||||
break;
|
break;
|
||||||
case EmployeePositions.RandD:
|
case EmployeePositions.RandD:
|
||||||
prodMult = (1.5 * this.int) + (0.8 * this.exp) + (this.cre) +
|
prodMult = (1.5 * effInt) + (0.8 * this.exp) + (effCre) +
|
||||||
(0.5 * this.eff);
|
(0.5 * effEff);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
console.log("Invalid employee position: " + this.pos);
|
console.log("Invalid employee position: " + this.pos);
|
||||||
@ -1451,7 +1460,11 @@ Employee.prototype.throwParty = function(money) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//'panel' is the DOM element on which to create the UI
|
//'panel' is the DOM element on which to create the UI
|
||||||
Employee.prototype.createUI = function(panel) {
|
Employee.prototype.createUI = function(panel, corporation) {
|
||||||
|
var effCre = this.cre * corporation.getEmployeeCreMultiplier(),
|
||||||
|
effCha = this.cha * corporation.getEmployeeChaMultiplier(),
|
||||||
|
effInt = this.int * corporation.getEmployeeIntMultiplier(),
|
||||||
|
effEff = this.eff * corporation.getEmployeeEffMultiplier();
|
||||||
panel.style.color = "white";
|
panel.style.color = "white";
|
||||||
panel.appendChild(createElement("p", {
|
panel.appendChild(createElement("p", {
|
||||||
id:"cmpy-mgmt-employee-" + this.name + "-panel-text",
|
id:"cmpy-mgmt-employee-" + this.name + "-panel-text",
|
||||||
@ -1459,11 +1472,11 @@ Employee.prototype.createUI = function(panel) {
|
|||||||
"Happiness: " + formatNumber(this.hap, 3) + "<br>" +
|
"Happiness: " + formatNumber(this.hap, 3) + "<br>" +
|
||||||
"Energy: " + formatNumber(this.ene, 3) + "<br>" +
|
"Energy: " + formatNumber(this.ene, 3) + "<br>" +
|
||||||
"Age: " + formatNumber(this.age, 3) + "<br>" +
|
"Age: " + formatNumber(this.age, 3) + "<br>" +
|
||||||
"Intelligence: " + formatNumber(this.int, 3) + "<br>" +
|
"Intelligence: " + formatNumber(effInt, 3) + "<br>" +
|
||||||
"Charisma: " + formatNumber(this.cha, 3) + "<br>" +
|
"Charisma: " + formatNumber(effCha, 3) + "<br>" +
|
||||||
"Experience: " + formatNumber(this.exp, 3) + "<br>" +
|
"Experience: " + formatNumber(this.exp, 3) + "<br>" +
|
||||||
"Creativity: " + formatNumber(this.cre, 3) + "<br>" +
|
"Creativity: " + formatNumber(effCre, 3) + "<br>" +
|
||||||
"Efficiency: " + formatNumber(this.eff, 3) + "<br>" +
|
"Efficiency: " + formatNumber(effEff, 3) + "<br>" +
|
||||||
"Salary: " + numeral(this.sal).format("$0.000a") + "/ s<br>",
|
"Salary: " + numeral(this.sal).format("$0.000a") + "/ s<br>",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@ -1492,7 +1505,11 @@ Employee.prototype.createUI = function(panel) {
|
|||||||
panel.appendChild(selector);
|
panel.appendChild(selector);
|
||||||
}
|
}
|
||||||
|
|
||||||
Employee.prototype.updateUI = function(panel) {
|
Employee.prototype.updateUI = function(panel, corporation) {
|
||||||
|
var effCre = this.cre * corporation.getEmployeeCreMultiplier(),
|
||||||
|
effCha = this.cha * corporation.getEmployeeChaMultiplier(),
|
||||||
|
effInt = this.int * corporation.getEmployeeIntMultiplier(),
|
||||||
|
effEff = this.eff * corporation.getEmployeeEffMultiplier();
|
||||||
if (panel == null) {
|
if (panel == null) {
|
||||||
console.log("ERROR: Employee.updateUI() called with null panel");
|
console.log("ERROR: Employee.updateUI() called with null panel");
|
||||||
return;
|
return;
|
||||||
@ -1505,11 +1522,11 @@ Employee.prototype.updateUI = function(panel) {
|
|||||||
"Happiness: " + formatNumber(this.hap, 3) + "<br>" +
|
"Happiness: " + formatNumber(this.hap, 3) + "<br>" +
|
||||||
"Energy: " + formatNumber(this.ene, 3) + "<br>" +
|
"Energy: " + formatNumber(this.ene, 3) + "<br>" +
|
||||||
"Age: " + formatNumber(this.age, 3) + "<br>" +
|
"Age: " + formatNumber(this.age, 3) + "<br>" +
|
||||||
"Intelligence: " + formatNumber(this.int, 3) + "<br>" +
|
"Intelligence: " + formatNumber(effInt, 3) + "<br>" +
|
||||||
"Charisma: " + formatNumber(this.cha, 3) + "<br>" +
|
"Charisma: " + formatNumber(effCha, 3) + "<br>" +
|
||||||
"Experience: " + formatNumber(this.exp, 3) + "<br>" +
|
"Experience: " + formatNumber(this.exp, 3) + "<br>" +
|
||||||
"Creativity: " + formatNumber(this.cre, 3) + "<br>" +
|
"Creativity: " + formatNumber(effCre, 3) + "<br>" +
|
||||||
"Efficiency: " + formatNumber(this.eff, 3) + "<br>" +
|
"Efficiency: " + formatNumber(effEff, 3) + "<br>" +
|
||||||
"Salary: " + numeral(this.sal).format("$0.000a") + "/ s<br>";
|
"Salary: " + numeral(this.sal).format("$0.000a") + "/ s<br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1552,7 +1569,8 @@ function OfficeSpace(params={}) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
OfficeSpace.prototype.process = function(marketCycles=1, industry) {
|
OfficeSpace.prototype.process = function(marketCycles=1, parentRefs) {
|
||||||
|
var corporation = parentRefs.corporation, industry = parentRefs.industry;
|
||||||
var perfMult=1; //Multiplier for employee morale/happiness/energy based on company performance
|
var perfMult=1; //Multiplier for employee morale/happiness/energy based on company performance
|
||||||
if (industry.funds < 0 && industry.lastCycleRevenue < 0) {
|
if (industry.funds < 0 && industry.lastCycleRevenue < 0) {
|
||||||
perfMult = Math.pow(0.99, marketCycles);
|
perfMult = Math.pow(0.99, marketCycles);
|
||||||
@ -1569,11 +1587,11 @@ OfficeSpace.prototype.process = function(marketCycles=1, industry) {
|
|||||||
var salary = emp.process(marketCycles, this);
|
var salary = emp.process(marketCycles, this);
|
||||||
salaryPaid += salary;
|
salaryPaid += salary;
|
||||||
}
|
}
|
||||||
this.calculateEmployeeProductivity(marketCycles);
|
this.calculateEmployeeProductivity(marketCycles, corporation);
|
||||||
return salaryPaid;
|
return salaryPaid;
|
||||||
}
|
}
|
||||||
|
|
||||||
OfficeSpace.prototype.calculateEmployeeProductivity = function(marketCycles=1) {
|
OfficeSpace.prototype.calculateEmployeeProductivity = function(marketCycles=1, corporation) {
|
||||||
//Reset
|
//Reset
|
||||||
for (var name in this.employeeProd) {
|
for (var name in this.employeeProd) {
|
||||||
if (this.employeeProd.hasOwnProperty(name)) {
|
if (this.employeeProd.hasOwnProperty(name)) {
|
||||||
@ -1584,7 +1602,7 @@ OfficeSpace.prototype.calculateEmployeeProductivity = function(marketCycles=1) {
|
|||||||
var total = 0;
|
var total = 0;
|
||||||
for (var i = 0; i < this.employees.length; ++i) {
|
for (var i = 0; i < this.employees.length; ++i) {
|
||||||
var employee = this.employees[i];
|
var employee = this.employees[i];
|
||||||
var prod = employee.calculateProductivity();
|
var prod = employee.calculateProductivity(corporation);
|
||||||
this.employeeProd[employee.pos] += prod;
|
this.employeeProd[employee.pos] += prod;
|
||||||
total += prod;
|
total += prod;
|
||||||
}
|
}
|
||||||
@ -1711,6 +1729,8 @@ Reviver.constructors.OfficeSpace = OfficeSpace;
|
|||||||
function Warehouse(params={}) {
|
function Warehouse(params={}) {
|
||||||
this.loc = params.loc ? params.loc : "";
|
this.loc = params.loc ? params.loc : "";
|
||||||
this.size = params.size ? params.size : 0;
|
this.size = params.size ? params.size : 0;
|
||||||
|
this.level = 0;
|
||||||
|
|
||||||
this.sizeUsed = 0;
|
this.sizeUsed = 0;
|
||||||
|
|
||||||
this.materials = {
|
this.materials = {
|
||||||
@ -1743,6 +1763,15 @@ Warehouse.prototype.updateMaterialSizeUsed = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Warehouse.prototype.updateSize = function(corporation) {
|
||||||
|
//Backwards compatibility
|
||||||
|
if (this.level == null || this.level === 0) {
|
||||||
|
this.level = Math.round(this.size / 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.size = (this.level * 100) * corporation.getStorageMultiplier();
|
||||||
|
}
|
||||||
|
|
||||||
Warehouse.prototype.createUI = function(parentRefs) {
|
Warehouse.prototype.createUI = function(parentRefs) {
|
||||||
if (parentRefs.company == null || parentRefs.industry == null) {
|
if (parentRefs.company == null || parentRefs.industry == null) {
|
||||||
console.log("ERROR: Warehouse.createUI called without parentRefs.company or parentRefs.industry");
|
console.log("ERROR: Warehouse.createUI called without parentRefs.company or parentRefs.industry");
|
||||||
@ -1766,7 +1795,13 @@ Warehouse.prototype.createUI = function(parentRefs) {
|
|||||||
display:"inline-block",
|
display:"inline-block",
|
||||||
class: company.funds.lt(upgradeCost) ? "a-link-button-inactive" : "a-link-button",
|
class: company.funds.lt(upgradeCost) ? "a-link-button-inactive" : "a-link-button",
|
||||||
clickListener:()=>{
|
clickListener:()=>{
|
||||||
this.size += 100;
|
//Backwards compatibility
|
||||||
|
if (this.level == null || this.level === 0) {
|
||||||
|
this.level = Math.round(this.size / 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
++this.level;
|
||||||
|
this.updateSize(company);
|
||||||
company.funds = company.funds.minus(upgradeCost);
|
company.funds = company.funds.minus(upgradeCost);
|
||||||
this.createUI(parentRefs);
|
this.createUI(parentRefs);
|
||||||
return;
|
return;
|
||||||
@ -2390,48 +2425,60 @@ var CorporationUnlockUpgrades = {
|
|||||||
// name, desc]
|
// name, desc]
|
||||||
var CorporationUpgrades = {
|
var CorporationUpgrades = {
|
||||||
//Smart factories, increases production
|
//Smart factories, increases production
|
||||||
"0": [0, 10e9, 1.07, 0.02,
|
"0": [0, 4e9, 1.07, 0.02,
|
||||||
"Smart Factories", "Advanced AI automatically optimizes the operation and productivity " +
|
"Smart Factories", "Advanced AI automatically optimizes the operation and productivity " +
|
||||||
"of factories. Each level of this upgrade increases your global production by 2% (additive)."],
|
"of factories. Each level of this upgrade increases your global production by 2% (additive)."],
|
||||||
|
|
||||||
//Smart warehouses, increases storage size
|
//Smart warehouses, increases storage size
|
||||||
"1": [1, 20e9, 1.07, .1,
|
"1": [1, 4e9, 1.07, .1,
|
||||||
"Smart Storage", "Advanced AI automatically optimizes your warehouse storage methods. " +
|
"Smart Storage", "Advanced AI automatically optimizes your warehouse storage methods. " +
|
||||||
"Each level of this upgrade increases your global warehouse storage size by 10% (additive)."],
|
"Each level of this upgrade increases your global warehouse storage size by 10% (additive)."],
|
||||||
|
|
||||||
//Advertise through dreams, passive popularity/ awareness gain
|
//Advertise through dreams, passive popularity/ awareness gain
|
||||||
"2": [2, 100e9, 1.08, .001,
|
"2": [2, 999999e9, 1.08, .001,
|
||||||
"DreamSense", "Use DreamSense LCC Technologies to advertise your corporation " +
|
"DreamSense", "NOT YET IMPLEMENTED! - Use DreamSense LCC Technologies to advertise your corporation " +
|
||||||
"to consumers through their dreams. Each level of this upgrade provides a passive " +
|
"to consumers through their dreams. Each level of this upgrade provides a passive " +
|
||||||
"increase in awareness of your company by 0.001 / second."],
|
"increase in awareness of your company by 0.001 / second."],
|
||||||
|
|
||||||
//Makes advertising more effective
|
//Makes advertising more effective
|
||||||
"3": [3, 5e9, 1.11, 0.1,
|
"3": [3, 999999e9, 1.11, 0.1,
|
||||||
"Wilson Analytics", "Purchase data and analysis from Wilson, a marketing research " +
|
"Wilson Analytics", "NOT YET IMPLEMENTED - Purchase data and analysis from Wilson, a marketing research " +
|
||||||
"firm. Each level of this upgrades increases the effectiveness of your " +
|
"firm. Each level of this upgrades increases the effectiveness of your " +
|
||||||
"advertising by 10% (additive)."],
|
"advertising by 10% (additive)."],
|
||||||
|
|
||||||
//Augmentation for employees, increases cre
|
//Augmentation for employees, increases cre
|
||||||
"4": [4, 10e9, 1.05, 0.1,
|
"4": [4, 2e9, 1.06, 0.1,
|
||||||
"Nuoptimal Nootropic Injector Implants", "Purchase the Nuoptimal Nootropic " +
|
"Nuoptimal Nootropic Injector Implants", "Purchase the Nuoptimal Nootropic " +
|
||||||
"Injector augmentation for your employees. Each level of this upgrade " +
|
"Injector augmentation for your employees. Each level of this upgrade " +
|
||||||
"globally increases the creativity of your employees by 10% (additive)."],
|
"globally increases the creativity of your employees by 10% (additive)."],
|
||||||
|
|
||||||
//Augmentation for employees, increases cha
|
//Augmentation for employees, increases cha
|
||||||
"5": [5, 10e9, 1.05, 0.1,
|
"5": [5, 2e9, 1.06, 0.1,
|
||||||
"Speech Processor Implants", "Purchase the Speech Processor augmentation for your employees. " +
|
"Speech Processor Implants", "Purchase the Speech Processor augmentation for your employees. " +
|
||||||
"Each level of this upgrade globally increases the charisma of your employees by 10% (additive)."],
|
"Each level of this upgrade globally increases the charisma of your employees by 10% (additive)."],
|
||||||
|
|
||||||
//Augmentation for employees, increases int
|
//Augmentation for employees, increases int
|
||||||
"6": [6, 10e9, 1.05, 0.1,
|
"6": [6, 2e9, 1.06, 0.1,
|
||||||
"Neural Acelerators", "Purchase the Neural Accelerator augmentation for your employees. " +
|
"Neural Accelerators", "Purchase the Neural Accelerator augmentation for your employees. " +
|
||||||
"Each level of this upgrade globally increases the intelligence of your employees " +
|
"Each level of this upgrade globally increases the intelligence of your employees " +
|
||||||
"by 10% (additive)."],
|
"by 10% (additive)."],
|
||||||
|
|
||||||
//Augmentation for employees, increases eff
|
//Augmentation for employees, increases eff
|
||||||
"7": [7, 10e9, 1.05, 0.1,
|
"7": [7, 2e9, 1.06, 0.1,
|
||||||
"FocusWires", "Purchase the FocusWire augmentation for your employees. Each level " +
|
"FocusWires", "Purchase the FocusWire augmentation for your employees. Each level " +
|
||||||
"of this upgrade globally increases the efficiency of your employees by 10% (additive)."],
|
"of this upgrade globally increases the efficiency of your employees by 10% (additive)."],
|
||||||
|
|
||||||
|
//Improves sales of materials/products
|
||||||
|
"8": [8, 1e9, 1.09, 0.01,
|
||||||
|
"ABC SalesBots", "Always Be Closing. Purchase these robotic salesmen to increase the amount of " +
|
||||||
|
"materials and products you sell. Each level of this upgrade globally increases your sales " +
|
||||||
|
"by 1% (additive)."],
|
||||||
|
|
||||||
|
//Improves scientific research rate
|
||||||
|
"9": [9, 5e9, 1.08, 0.05,
|
||||||
|
"Project Insight", "Purchase 'Project Insight', a R&D service provided by the secretive " +
|
||||||
|
"Fulcrum Technologies. Each level of this upgrade globally increases the amount of " +
|
||||||
|
"Scientific Research you produce by 5% (additive)."],
|
||||||
}
|
}
|
||||||
|
|
||||||
function Corporation(params={}) {
|
function Corporation(params={}) {
|
||||||
@ -2495,13 +2542,13 @@ Corporation.prototype.process = function(numCycles=1) {
|
|||||||
Corporation.prototype.determineValuation = function() {
|
Corporation.prototype.determineValuation = function() {
|
||||||
var val, profit = (this.revenue.minus(this.expenses)).toNumber();
|
var val, profit = (this.revenue.minus(this.expenses)).toNumber();
|
||||||
if (this.public) {
|
if (this.public) {
|
||||||
val = 25e9 + this.funds.toNumber() + (profit * getRandomInt(7000, 8500));
|
val = 25e9 + this.funds.toNumber() + (profit * 25e3);
|
||||||
val *= (Math.pow(1.1, this.divisions.length));
|
val *= (Math.pow(1.1, this.divisions.length));
|
||||||
val = Math.max(val, 0);
|
val = Math.max(val, 0);
|
||||||
} else {
|
} else {
|
||||||
val = 10e9 + Math.max(this.funds.toNumber(), 0); //Base valuation
|
val = 10e9 + Math.max(this.funds.toNumber(), 0) / 3; //Base valuation
|
||||||
if (profit > 0) {
|
if (profit > 0) {
|
||||||
val += (profit * getRandomInt(12e3, 14e3));
|
val += (profit * 400e3);
|
||||||
val *= (Math.pow(1.1, this.divisions.length));
|
val *= (Math.pow(1.1, this.divisions.length));
|
||||||
} else {
|
} else {
|
||||||
val = 10e9 * Math.pow(1.1, this.divisions.length);
|
val = 10e9 * Math.pow(1.1, this.divisions.length);
|
||||||
@ -2630,7 +2677,7 @@ Corporation.prototype.upgrade = function(upgrade) {
|
|||||||
upgradeAmt = upgrade[3]; //Amount by which the upgrade multiplier gets increased (additive)
|
upgradeAmt = upgrade[3]; //Amount by which the upgrade multiplier gets increased (additive)
|
||||||
while (this.upgrades.length <= upgN) {this.upgrades.push(0);}
|
while (this.upgrades.length <= upgN) {this.upgrades.push(0);}
|
||||||
while (this.upgradeMultipliers.length <= upgN) {this.upgradeMultipliers.push(1);}
|
while (this.upgradeMultipliers.length <= upgN) {this.upgradeMultipliers.push(1);}
|
||||||
var totalCost = basePrice * Math.pow(this.upgrades[upgN], priceMult);
|
var totalCost = basePrice * Math.pow(priceMult, this.upgrades[upgN]);
|
||||||
if (this.funds.lt(totalCost)) {
|
if (this.funds.lt(totalCost)) {
|
||||||
dialogBoxCreate("You don't have enough funds to purchase this!");
|
dialogBoxCreate("You don't have enough funds to purchase this!");
|
||||||
return;
|
return;
|
||||||
@ -2640,8 +2687,68 @@ Corporation.prototype.upgrade = function(upgrade) {
|
|||||||
|
|
||||||
//Increase upgrade multiplier
|
//Increase upgrade multiplier
|
||||||
this.upgradeMultipliers[upgN] = 1 + (this.upgrades[upgN] * upgradeAmt);
|
this.upgradeMultipliers[upgN] = 1 + (this.upgrades[upgN] * upgradeAmt);
|
||||||
|
|
||||||
|
//If storage size is being updated, update values in Warehouse objects
|
||||||
|
if (upgN === 1) {
|
||||||
|
for (var i = 0; i < this.divisions.length; ++i) {
|
||||||
|
var industry = this.divisions[i];
|
||||||
|
for (var city in industry.warehouses) {
|
||||||
|
if (industry.warehouses.hasOwnProperty(city) && industry.warehouses[city] instanceof Warehouse) {
|
||||||
|
industry.warehouses[city].updateSize(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updateCorporationOverviewContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getProductionMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[0];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getStorageMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[1];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getAdvertisingMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[3];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getEmployeeCreMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[4];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getEmployeeChaMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[5];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getEmployeeIntMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[6];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getEmployeeEffMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[7];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getSalesMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[8];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Corporation.prototype.getScientificResearchMultiplier = function() {
|
||||||
|
var mult = this.upgradeMultipliers[9];
|
||||||
|
if (isNaN(mult) || mult < 1) {return 1;} else {return mult;}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Keep 'global' variables for DOM elements so we don't have to search
|
//Keep 'global' variables for DOM elements so we don't have to search
|
||||||
//through the DOM tree repeatedly when updating UI
|
//through the DOM tree repeatedly when updating UI
|
||||||
var companyManagementDiv, companyManagementHeaderTabs, companyManagementPanel,
|
var companyManagementDiv, companyManagementHeaderTabs, companyManagementPanel,
|
||||||
@ -3062,19 +3169,22 @@ Corporation.prototype.displayCorporationOverviewContent = function() {
|
|||||||
class:"cmpy-mgmt-upgrade-container",
|
class:"cmpy-mgmt-upgrade-container",
|
||||||
});
|
});
|
||||||
upgradeContainer.appendChild(createElement("h1", {
|
upgradeContainer.appendChild(createElement("h1", {
|
||||||
innerText:"Upgrades", margin:"6px", padding:"6px",
|
innerText:"Unlocks", margin:"6px", padding:"6px",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
//Unlock upgrades
|
//Unlock upgrades
|
||||||
var corp = this;
|
var corp = this;
|
||||||
if (this.unlockUpgrades == null || this.upgrades == null) { //Backwards compatibility
|
|
||||||
var numUnlockUpgrades = Object.keys(CorporationUnlockUpgrades).length,
|
var numUnlockUpgrades = Object.keys(CorporationUnlockUpgrades).length,
|
||||||
numUpgrades = Object.keys(CorporationUpgrades).length;
|
numUpgrades = Object.keys(CorporationUpgrades).length;
|
||||||
|
if (this.unlockUpgrades == null || this.upgrades == null) { //Backwards compatibility
|
||||||
this.unlockUpgrades = Array(numUnlockUpgrades).fill(0);
|
this.unlockUpgrades = Array(numUnlockUpgrades).fill(0);
|
||||||
this.upgrades = Array(numUpgrades).fill(0);
|
this.upgrades = Array(numUpgrades).fill(0);
|
||||||
}
|
}
|
||||||
for (var i = 0; i < this.unlockUpgrades.length; ++i) {
|
while (this.unlockUpgrades.length < numUnlockUpgrades) {this.unlockUpgrades.push(0);}
|
||||||
|
while (this.upgrades.length < numUpgrades) {this.upgrades.push(0);}
|
||||||
|
while (this.upgradeMultipliers < numUpgrades) {this.upgradeMultipliers.push(1);}
|
||||||
|
|
||||||
|
for (var i = 0; i < numUnlockUpgrades; ++i) {
|
||||||
(function(i, corp) {
|
(function(i, corp) {
|
||||||
if (corp.unlockUpgrades[i] === 0) {
|
if (corp.unlockUpgrades[i] === 0) {
|
||||||
var upgrade = CorporationUnlockUpgrades[i.toString()];
|
var upgrade = CorporationUnlockUpgrades[i.toString()];
|
||||||
@ -3085,7 +3195,8 @@ Corporation.prototype.displayCorporationOverviewContent = function() {
|
|||||||
|
|
||||||
upgradeContainer.appendChild(createElement("div", {
|
upgradeContainer.appendChild(createElement("div", {
|
||||||
class:"cmpy-mgmt-upgrade-div",
|
class:"cmpy-mgmt-upgrade-div",
|
||||||
innerHTML:upgrade[2] + " - " + numeral(upgrade[1]).format("$0.000a") + "<br><br>" + upgrade[3],
|
innerHTML:upgrade[2] + " - " + numeral(upgrade[1]).format("$0.000a"),
|
||||||
|
tooltip: upgrade[3],
|
||||||
clickListener:()=>{
|
clickListener:()=>{
|
||||||
if (corp.funds.lt(upgrade[1])) {
|
if (corp.funds.lt(upgrade[1])) {
|
||||||
dialogBoxCreate("Insufficient funds");
|
dialogBoxCreate("Insufficient funds");
|
||||||
@ -3100,8 +3211,11 @@ Corporation.prototype.displayCorporationOverviewContent = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Levelable upgrades
|
//Levelable upgrades
|
||||||
/*
|
upgradeContainer.appendChild(createElement("h1", {
|
||||||
for (var i = 0; i < this.upgrades.length; ++i) {
|
innerText:"Upgrades", margin:"6px", padding:"6px",
|
||||||
|
}));
|
||||||
|
|
||||||
|
for (var i = 0; i < numUpgrades; ++i) {
|
||||||
(function(i, corp) {
|
(function(i, corp) {
|
||||||
var upgrade = CorporationUpgrades[i.toString()];
|
var upgrade = CorporationUpgrades[i.toString()];
|
||||||
if (upgrade == null) {
|
if (upgrade == null) {
|
||||||
@ -3110,10 +3224,11 @@ Corporation.prototype.displayCorporationOverviewContent = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var baseCost = upgrade[1], priceMult = upgrade[2];
|
var baseCost = upgrade[1], priceMult = upgrade[2];
|
||||||
var cost = baseCost * Math.pow(corp.upgrades[i], priceMult);
|
var cost = baseCost * Math.pow(priceMult, corp.upgrades[i]);
|
||||||
upgradeContainer.appendChild(createElement("div", {
|
upgradeContainer.appendChild(createElement("div", {
|
||||||
class:"cmpy-mgmt-upgrade-div",
|
class:"cmpy-mgmt-upgrade-div",
|
||||||
innerHTML:upgrade[4] + " - " + numeral(cost).format("$0.000a") + "<br><br>" + upgrade[5],
|
innerHTML:upgrade[4] + " - " + numeral(cost).format("$0.000a"),
|
||||||
|
tooltip:upgrade[5],
|
||||||
clickListener:()=>{
|
clickListener:()=>{
|
||||||
if (corp.funds.lt(cost)) {
|
if (corp.funds.lt(cost)) {
|
||||||
dialogBoxCreate("Insufficient funds");
|
dialogBoxCreate("Insufficient funds");
|
||||||
@ -3124,7 +3239,7 @@ Corporation.prototype.displayCorporationOverviewContent = function() {
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
})(i, corp);
|
})(i, corp);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
companyManagementPanel.appendChild(upgradeContainer);
|
companyManagementPanel.appendChild(upgradeContainer);
|
||||||
}
|
}
|
||||||
@ -3148,9 +3263,27 @@ Corporation.prototype.updateCorporationOverviewContent = function() {
|
|||||||
"Total Profits: " + profitStr + " / s<br>" +
|
"Total Profits: " + profitStr + " / s<br>" +
|
||||||
"Publicly Traded: " + (this.public ? "Yes" : "No") + "<br>" +
|
"Publicly Traded: " + (this.public ? "Yes" : "No") + "<br>" +
|
||||||
"Owned Stock Shares: " + numeral(this.numShares).format('0.000a') + "<br>" +
|
"Owned Stock Shares: " + numeral(this.numShares).format('0.000a') + "<br>" +
|
||||||
"Stock Price: " + (this.public ? "$" + formatNumber(this.sharePrice, 2) : "N/A") + "<br>";
|
"Stock Price: " + (this.public ? "$" + formatNumber(this.sharePrice, 2) : "N/A") + "<br><br>";
|
||||||
p.innerHTML = txt;
|
|
||||||
|
|
||||||
|
var prodMult = this.getProductionMultiplier(),
|
||||||
|
storageMult = this.getStorageMultiplier(),
|
||||||
|
advMult = this.getAdvertisingMultiplier(),
|
||||||
|
empCreMult = this.getEmployeeCreMultiplier(),
|
||||||
|
empChaMult = this.getEmployeeChaMultiplier(),
|
||||||
|
empIntMult = this.getEmployeeIntMultiplier(),
|
||||||
|
empEffMult = this.getEmployeeEffMultiplier(),
|
||||||
|
salesMult = this.getSalesMultiplier(),
|
||||||
|
sciResMult = this.getScientificResearchMultiplier();
|
||||||
|
if (prodMult > 1) {txt += "Production Multiplier: " + formatNumber(prodMult, 3) + "<br>";}
|
||||||
|
if (storageMult > 1) {txt += "Storage Multiplier: " + formatNumber(storageMult, 3) + "<br>";}
|
||||||
|
if (advMult > 1) {txt += "Advertising Multiplier: " + formatNumber(advMult, 3) + "<br>";}
|
||||||
|
if (empCreMult > 1) {txt += "Empl. Creativity Multiplier: " + formatNumber(empCreMult, 3) + "<br>";}
|
||||||
|
if (empChaMult > 1) {txt += "Empl. Charisma Multiplier: " + formatNumber(empChaMult, 3) + "<br>";}
|
||||||
|
if (empIntMult > 1) {txt += "Empl. Intelligence Multiplier: " + formatNumber(empIntMult, 3) + "<br>";}
|
||||||
|
if (empEffMult > 1) {txt += "Empl. Efficiency Multiplier: " + formatNumber(empEffMult, 3) + "<br>";}
|
||||||
|
if (salesMult > 1) {txt += "Sales Multiplier: " + formatNumber(salesMult, 3) + "<br>";}
|
||||||
|
if (sciResMult > 1) {txt += "Scientific Research Multiplier: " + formatNumber(sciResMult, 3) + "<br>";}
|
||||||
|
p.innerHTML = txt;
|
||||||
}
|
}
|
||||||
|
|
||||||
Corporation.prototype.displayDivisionContent = function(division, city) {
|
Corporation.prototype.displayDivisionContent = function(division, city) {
|
||||||
@ -3272,6 +3405,7 @@ Corporation.prototype.displayDivisionContent = function(division, city) {
|
|||||||
createProductPopupText = "Design and develop a new pharmaceutical drug!";
|
createProductPopupText = "Design and develop a new pharmaceutical drug!";
|
||||||
break;
|
break;
|
||||||
case Industries.Computer:
|
case Industries.Computer:
|
||||||
|
case "Computer":
|
||||||
createProductButtonText = "Create Product";
|
createProductButtonText = "Create Product";
|
||||||
createProductPopupText = "Design and manufacture a new computer hardware product!";
|
createProductPopupText = "Design and manufacture a new computer hardware product!";
|
||||||
break;
|
break;
|
||||||
@ -3528,7 +3662,7 @@ Corporation.prototype.displayDivisionContent = function(division, city) {
|
|||||||
});
|
});
|
||||||
industryEmployeePanel.appendChild(industryEmployeeList);
|
industryEmployeePanel.appendChild(industryEmployeeList);
|
||||||
for (var i = 0; i < office.employees.length; ++i) {
|
for (var i = 0; i < office.employees.length; ++i) {
|
||||||
(function() {
|
(function(corp) {
|
||||||
var emp = office.employees[i];
|
var emp = office.employees[i];
|
||||||
var li = createAccordionElement({
|
var li = createAccordionElement({
|
||||||
id:"cmpy-mgmt-employee-" + emp.name,
|
id:"cmpy-mgmt-employee-" + emp.name,
|
||||||
@ -3539,9 +3673,9 @@ Corporation.prototype.displayDivisionContent = function(division, city) {
|
|||||||
console.log("ERROR: Could not find employee accordion panel");
|
console.log("ERROR: Could not find employee accordion panel");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emp.createUI(panel);
|
emp.createUI(panel, corp);
|
||||||
industryEmployeeList.appendChild(li);
|
industryEmployeeList.appendChild(li);
|
||||||
})();
|
})(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Warehouse Panel
|
//Warehouse Panel
|
||||||
@ -3615,11 +3749,11 @@ Corporation.prototype.updateDivisionContent = function(division) {
|
|||||||
hdrText:emp.name,
|
hdrText:emp.name,
|
||||||
});
|
});
|
||||||
panel = li.children[1];
|
panel = li.children[1];
|
||||||
emp.createUI(panel);
|
emp.createUI(panel, company);
|
||||||
employeeList.appendChild(li);
|
employeeList.appendChild(li);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emp.updateUI(panel);
|
emp.updateUI(panel, company);
|
||||||
})(this);
|
})(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
let CONSTANTS = {
|
let CONSTANTS = {
|
||||||
Version: "0.34.0",
|
Version: "0.34.1",
|
||||||
|
|
||||||
//Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience
|
//Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience
|
||||||
//and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then
|
//and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then
|
||||||
@ -1118,29 +1118,19 @@ let CONSTANTS = {
|
|||||||
|
|
||||||
LatestUpdate:
|
LatestUpdate:
|
||||||
"v0.34.1<br>" +
|
"v0.34.1<br>" +
|
||||||
"-Added new 'secret' Terminal command. Try: run musicplayer<br>" +
|
"-Updates to Corporation Management:<br>" +
|
||||||
|
"---Added a number of upgrades to various aspects of your Corporation<br>" +
|
||||||
"v0.34.0<br>" +
|
"---Rebalanced the properties of Materials and the formula for determining the valuation of the Corporation<br>" +
|
||||||
"-Added clear() and exit() Netscript functions<br>" +
|
"---Fixed a number of bugs<br>" +
|
||||||
"-When starting out or prestiging, you will now receive a 'Hacking Starter Guide'. It provides tips/pointers for new players<br>" +
|
"-'Stats' page now shows information about current BitNode<br>" +
|
||||||
"-Doubled the amount of RAM on low-level servers (up to required hacking level 150)<br>" +
|
"-You should now be able to create Corporations in other BitNodes if you have Source-File 3<br>" +
|
||||||
"-Slightly increased experience gain from Infiltration<br>" +
|
"-Added a new create-able program called b1t_flum3.exe. This program can be used to reset and switch BitNodes<br>" +
|
||||||
"-buyStock(), sellStock(), shortStock(), and sellShort() Netscript function now return the stock price at which the transaction occurred, rather than a boolean. " +
|
"-Added an option to adjust autosave interval<br>" +
|
||||||
"If the function fails for some reason, 0 will be returned.<br>" +
|
"-Line feeds, newlines, and tabs will now work with the tprint() Netscript function<br>" +
|
||||||
"-Hacking Mission Changes:<br>" +
|
"-Bug fix: 'check' Terminal command was broken<br>" +
|
||||||
"---You can now select multiple Nodes of the same type by double clicking. This allows you to set the " +
|
"-Bug fix: 'theme' Terminal command was broken when manually specifying hex codes<br>" +
|
||||||
"action of all of selected nodes at once (e.g. set all Transfer Nodes to Fortify). Creating connections " +
|
"-Bug fix: Incorrect promotion requirement for 'Business'-type jobs<br>" +
|
||||||
"does not work with this multi-select functionality yet<br>" +
|
"-Bug fix: Settings input bars were incorrectly formatted when loading game<br>"
|
||||||
"---Shield and Firewall Nodes can now fortify<br>" +
|
|
||||||
"---The effects of Fortifying are now ~5% lower<br>" +
|
|
||||||
"---Conquering a Spam Node now increases your time limit by 25 seconds instead of 15<br>" +
|
|
||||||
"---Damage dealt by Attacking was slightly reduced<br>" +
|
|
||||||
"---The effect of Scanning was slightly reduced<br>" +
|
|
||||||
"---Enemy CPU Core Nodes start with slightly more attack. Misc Nodes start with slightly less defense<br>" +
|
|
||||||
"-Corporation Management changes:<br>" +
|
|
||||||
"---Added several upgrades that unlock new features<br>" +
|
|
||||||
"---Implemented Exporting mechanic<br>" +
|
|
||||||
"---Fixed many bugs<br>"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export {CONSTANTS};
|
export {CONSTANTS};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import {CONSTANTS} from "./Constants.js";
|
import {CONSTANTS} from "./Constants.js";
|
||||||
import {Player} from "./Player.js";
|
import {Player} from "./Player.js";
|
||||||
|
import {createElement} from "../utils/HelperFunctions.js";
|
||||||
|
|
||||||
/* Create programs */
|
/* Create programs */
|
||||||
let Programs = {
|
let Programs = {
|
||||||
@ -14,22 +15,12 @@ let Programs = {
|
|||||||
ServerProfiler: "ServerProfiler.exe",
|
ServerProfiler: "ServerProfiler.exe",
|
||||||
AutoLink: "AutoLink.exe",
|
AutoLink: "AutoLink.exe",
|
||||||
Flight: "fl1ght.exe",
|
Flight: "fl1ght.exe",
|
||||||
|
BitFlume: "b1t_flum3.exe"
|
||||||
};
|
};
|
||||||
|
|
||||||
//TODO Right now the times needed to complete work are hard-coded...
|
var nukeALink, bruteSshALink, ftpCrackALink, relaySmtpALink, httpWormALink, sqlInjectALink,
|
||||||
//maybe later make this dependent on hacking level or something
|
deepscanv1ALink, deepscanv2ALink, servProfilerALink, autolinkALink, bitFlumeALink;
|
||||||
function displayCreateProgramContent() {
|
function displayCreateProgramContent() {
|
||||||
var nukeALink = document.getElementById("create-program-nuke");
|
|
||||||
var bruteSshALink = document.getElementById("create-program-brutessh");
|
|
||||||
var ftpCrackALink = document.getElementById("create-program-ftpcrack");
|
|
||||||
var relaySmtpALink = document.getElementById("create-program-relaysmtp");
|
|
||||||
var httpWormALink = document.getElementById("create-program-httpworm");
|
|
||||||
var sqlInjectALink = document.getElementById("create-program-sqlinject");
|
|
||||||
var deepscanv1ALink = document.getElementById("create-program-deepscanv1");
|
|
||||||
var deepscanv2ALink = document.getElementById("create-program-deepscanv2");
|
|
||||||
var servProfilerALink = document.getElementById("create-program-serverprofiler");
|
|
||||||
var autolinkALink = document.getElementById("create-program-autolink");
|
|
||||||
|
|
||||||
nukeALink.style.display = "none";
|
nukeALink.style.display = "none";
|
||||||
bruteSshALink.style.display = "none";
|
bruteSshALink.style.display = "none";
|
||||||
ftpCrackALink.style.display = "none";
|
ftpCrackALink.style.display = "none";
|
||||||
@ -40,6 +31,7 @@ function displayCreateProgramContent() {
|
|||||||
deepscanv2ALink.style.display = "none";
|
deepscanv2ALink.style.display = "none";
|
||||||
servProfilerALink.style.display = "none";
|
servProfilerALink.style.display = "none";
|
||||||
autolinkALink.style.display = "none";
|
autolinkALink.style.display = "none";
|
||||||
|
bitFlumeALink.style.display = "none";
|
||||||
|
|
||||||
//NUKE.exe (in case you delete it lol)
|
//NUKE.exe (in case you delete it lol)
|
||||||
if (Player.getHomeComputer().programs.indexOf(Programs.NukeProgram) == -1) {
|
if (Player.getHomeComputer().programs.indexOf(Programs.NukeProgram) == -1) {
|
||||||
@ -85,6 +77,10 @@ function displayCreateProgramContent() {
|
|||||||
if (!Player.hasProgram(Programs.AutoLink) && Player.hacking_skill >= 25) {
|
if (!Player.hasProgram(Programs.AutoLink) && Player.hacking_skill >= 25) {
|
||||||
autolinkALink.style.display = "inline-block";
|
autolinkALink.style.display = "inline-block";
|
||||||
}
|
}
|
||||||
|
//Bit Flume
|
||||||
|
if (!Player.hasProgram(Programs.BitFlume) && Player.sourceFiles.length > 0 && Player.hacking_skill >= 5) {
|
||||||
|
bitFlumeALink.style.display = "inline-block";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Returns the number of programs that are currently available to be created
|
//Returns the number of programs that are currently available to be created
|
||||||
@ -134,6 +130,10 @@ function getNumAvailableCreateProgram() {
|
|||||||
if (!Player.hasProgram(Programs.AutoLink) && Player.hacking_skill >= 25) {
|
if (!Player.hasProgram(Programs.AutoLink) && Player.hacking_skill >= 25) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
//Bit Flume
|
||||||
|
if (!Player.hasProgram(Programs.BitFlume) && Player.sourceFiles.length > 0 && Player.hacking_skill >= 5) {
|
||||||
|
++count;
|
||||||
|
}
|
||||||
if (Player.firstProgramAvailable === false && count > 0) {
|
if (Player.firstProgramAvailable === false && count > 0) {
|
||||||
Player.firstProgramAvailable = true;
|
Player.firstProgramAvailable = true;
|
||||||
document.getElementById("create-program-tab").style.display = "list-item";
|
document.getElementById("create-program-tab").style.display = "list-item";
|
||||||
@ -144,16 +144,72 @@ function getNumAvailableCreateProgram() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function initCreateProgramButtons() {
|
function initCreateProgramButtons() {
|
||||||
var nukeALink = document.getElementById("create-program-nuke");
|
var createProgramList = document.getElementById("create-program-list");
|
||||||
var bruteSshALink = document.getElementById("create-program-brutessh");
|
nukeALink = createElement("a", {
|
||||||
var ftpCrackALink = document.getElementById("create-program-ftpcrack");
|
class:"a-link-button", id:"create-program-nuke", innerText:Programs.NukeProgram,
|
||||||
var relaySmtpALink = document.getElementById("create-program-relaysmtp");
|
tooltip:"This virus is used to gain root access to a machine if enough ports are opened.",
|
||||||
var httpWormALink = document.getElementById("create-program-httpworm");
|
});
|
||||||
var sqlInjectALink = document.getElementById("create-program-sqlinject");
|
createProgramList.appendChild(nukeALink);
|
||||||
var deepscanv1ALink = document.getElementById("create-program-deepscanv1");
|
|
||||||
var deepscanv2ALink = document.getElementById("create-program-deepscanv2");
|
bruteSshALink = createElement("a", {
|
||||||
var servProfilerALink = document.getElementById("create-program-serverprofiler");
|
class:"a-link-button", id:"create-program-brutessh", innerText:Programs.BruteSSHProgram,
|
||||||
var autolinkALink = document.getElementById("create-program-autolink");
|
tooltip:"This program executes a brute force attack that opens SSH ports"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(bruteSshALink);
|
||||||
|
|
||||||
|
ftpCrackALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-ftpcrack", innerText:Programs.FTPCrackProgram,
|
||||||
|
tooltip:"This program cracks open FTP ports"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(ftpCrackALink);
|
||||||
|
|
||||||
|
relaySmtpALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-relaysmtp", innerText:Programs.RelaySMTPProgram,
|
||||||
|
tooltip:"This program opens SMTP ports by redirecting data"
|
||||||
|
}) ;
|
||||||
|
createProgramList.appendChild(relaySmtpALink);
|
||||||
|
|
||||||
|
httpWormALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-httpworm", innerText:Programs.HTTPWormProgram,
|
||||||
|
tooltip:"This virus opens up HTTP ports"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(httpWormALink);
|
||||||
|
|
||||||
|
sqlInjectALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-sqlinject", innerText:Programs.SQLInjectProgram,
|
||||||
|
tooltip:"This virus opens SQL ports"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(sqlInjectALink);
|
||||||
|
|
||||||
|
deepscanv1ALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-deepscanv1", innerText:Programs.DeepscanV1,
|
||||||
|
tooltip:"This program allows you to use the scan-analyze command with a depth up to 5"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(deepscanv1ALink);
|
||||||
|
|
||||||
|
deepscanv2ALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-deepscanv2", innerText:Programs.DeepscanV2,
|
||||||
|
tooltip:"This program allows you to use the scan-analyze command with a depth up to 10"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(deepscanv2ALink);
|
||||||
|
|
||||||
|
servProfilerALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-serverprofiler", innerText:Programs.ServerProfiler,
|
||||||
|
tooltip:"This program is used to display hacking and Netscript-related information about servers"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(servProfilerALink);
|
||||||
|
|
||||||
|
bitFlumeALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-bitflume", innerText:Programs.BitFlume,
|
||||||
|
tooltip:"This program creates a portal to the BitNode Nexus (allows you to restart and switch BitNodes)"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(bitFlumeALink);
|
||||||
|
|
||||||
|
autolinkALink = createElement("a", {
|
||||||
|
class:"a-link-button", id:"create-program-autolink", innerText:"AutoLink.exe",
|
||||||
|
tooltip:"This program allows you to directly connect to other servers through the 'scan-analyze' command"
|
||||||
|
});
|
||||||
|
createProgramList.appendChild(autolinkALink);
|
||||||
|
|
||||||
nukeALink.addEventListener("click", function() {
|
nukeALink.addEventListener("click", function() {
|
||||||
Player.startCreateProgramWork(Programs.NukeProgram, CONSTANTS.MillisecondsPerFiveMinutes, 1);
|
Player.startCreateProgramWork(Programs.NukeProgram, CONSTANTS.MillisecondsPerFiveMinutes, 1);
|
||||||
@ -195,6 +251,10 @@ function initCreateProgramButtons() {
|
|||||||
Player.startCreateProgramWork(Programs.AutoLink, CONSTANTS.MillisecondsPerQuarterHour, 25);
|
Player.startCreateProgramWork(Programs.AutoLink, CONSTANTS.MillisecondsPerQuarterHour, 25);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
bitFlumeALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.BitFlume, CONSTANTS.MillisecondsPerFiveMinutes / 5, 5);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export {Programs, displayCreateProgramContent, getNumAvailableCreateProgram,
|
export {Programs, displayCreateProgramContent, getNumAvailableCreateProgram,
|
||||||
|
@ -261,7 +261,7 @@ function iTutorialEvaluateStep() {
|
|||||||
//next step triggered by terminal commmand
|
//next step triggered by terminal commmand
|
||||||
break;
|
break;
|
||||||
case iTutorialSteps.TerminalRunScript:
|
case iTutorialSteps.TerminalRunScript:
|
||||||
iTutorialSetText("We have 8GB of free RAM on this machine, which is enough to run our " +
|
iTutorialSetText("We have 16GB of free RAM on this machine, which is enough to run our " +
|
||||||
"script. Let's run our script using 'run foodnstuff.script'.");
|
"script. Let's run our script using 'run foodnstuff.script'.");
|
||||||
//next step triggered by terminal commmand
|
//next step triggered by terminal commmand
|
||||||
break;
|
break;
|
||||||
|
@ -64,12 +64,20 @@ import {yesNoBoxClose, yesNoBoxGetYesButton,
|
|||||||
yesNoBoxGetNoButton, yesNoBoxCreate,
|
yesNoBoxGetNoButton, yesNoBoxCreate,
|
||||||
yesNoBoxOpen} from "../utils/YesNoBox.js";
|
yesNoBoxOpen} from "../utils/YesNoBox.js";
|
||||||
|
|
||||||
var hasSingularitySF=false, hasAISF=false, hasBn11SF=false, hasWallStreetSF=false;
|
var hasSingularitySF=false, //Source-File 4
|
||||||
|
hasAISF=false, //Source-File 5
|
||||||
|
hasBn11SF=false,
|
||||||
|
hasWallStreetSF=false, //Source-File 8
|
||||||
|
hasCorporationSF=false; //Source-File 3
|
||||||
|
|
||||||
var singularitySFLvl=1, wallStreetSFLvl=1;
|
var singularitySFLvl=1, wallStreetSFLvl=1;
|
||||||
|
|
||||||
//Used to check and set flags for every Source File, despite the name of the function
|
//Used to check and set flags for every Source File, despite the name of the function
|
||||||
function initSingularitySFFlags() {
|
function initSingularitySFFlags() {
|
||||||
for (var i = 0; i < Player.sourceFiles.length; ++i) {
|
for (var i = 0; i < Player.sourceFiles.length; ++i) {
|
||||||
|
if (Player.sourceFiles[i].n === 3) {
|
||||||
|
hasCorporationSF = true;
|
||||||
|
}
|
||||||
if (Player.sourceFiles[i].n === 4) {
|
if (Player.sourceFiles[i].n === 4) {
|
||||||
hasSingularitySF = true;
|
hasSingularitySF = true;
|
||||||
singularitySFLvl = Player.sourceFiles[i].lvl;
|
singularitySFLvl = Player.sourceFiles[i].lvl;
|
||||||
@ -2421,5 +2429,5 @@ function NetscriptFunctions(workerScript) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {NetscriptFunctions, initSingularitySFFlags, hasSingularitySF, hasBn11SF, hasWallStreetSF,
|
export {NetscriptFunctions, initSingularitySFFlags, hasSingularitySF, hasBn11SF, hasWallStreetSF, hasCorporationSF,
|
||||||
wallStreetSFLvl};
|
wallStreetSFLvl};
|
||||||
|
@ -1768,6 +1768,7 @@ PlayerObject.prototype.getNextCompanyPosition = function(company, entryPosType)
|
|||||||
//Employed at this company, so just return the next position if it exists.
|
//Employed at this company, so just return the next position if it exists.
|
||||||
if ((this.companyPosition.isSoftwareJob() && entryPosType.isSoftwareJob()) ||
|
if ((this.companyPosition.isSoftwareJob() && entryPosType.isSoftwareJob()) ||
|
||||||
(this.companyPosition.isITJob() && entryPosType.isITJob()) ||
|
(this.companyPosition.isITJob() && entryPosType.isITJob()) ||
|
||||||
|
(this.companyPosition.isBusinessJob() && entryPosType.isBusinessJob()) ||
|
||||||
(this.companyPosition.isSecurityEngineerJob() && entryPosType.isSecurityEngineerJob()) ||
|
(this.companyPosition.isSecurityEngineerJob() && entryPosType.isSecurityEngineerJob()) ||
|
||||||
(this.companyPosition.isNetworkEngineerJob() && entryPosType.isNetworkEngineerJob()) ||
|
(this.companyPosition.isNetworkEngineerJob() && entryPosType.isNetworkEngineerJob()) ||
|
||||||
(this.companyPosition.isSecurityJob() && entryPosType.isSecurityJob()) ||
|
(this.companyPosition.isSecurityJob() && entryPosType.isSecurityJob()) ||
|
||||||
|
@ -7,7 +7,8 @@ import {SourceFiles, SourceFile,
|
|||||||
import {Terminal} from "./Terminal.js";
|
import {Terminal} from "./Terminal.js";
|
||||||
|
|
||||||
import {dialogBoxCreate} from "../utils/DialogBox.js";
|
import {dialogBoxCreate} from "../utils/DialogBox.js";
|
||||||
import {clearEventListeners} from "../utils/HelperFunctions.js";
|
import {clearEventListeners,
|
||||||
|
removeChildrenFromElement} from "../utils/HelperFunctions.js";
|
||||||
import {yesNoBoxCreate, yesNoBoxGetYesButton,
|
import {yesNoBoxCreate, yesNoBoxGetYesButton,
|
||||||
yesNoBoxGetNoButton, yesNoBoxClose} from "../utils/YesNoBox.js";
|
yesNoBoxGetNoButton, yesNoBoxClose} from "../utils/YesNoBox.js";
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ function writeRedPillLetter(pElem, line, i=0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let redPillFlag = false;
|
let redPillFlag = false;
|
||||||
function hackWorldDaemon(currentNodeNumber) {
|
function hackWorldDaemon(currentNodeNumber, flume=false) {
|
||||||
redPillFlag = true;
|
redPillFlag = true;
|
||||||
Engine.loadRedPillContent();
|
Engine.loadRedPillContent();
|
||||||
return writeRedPillLine("[ERROR] SEMPOOL INVALID").then(function() {
|
return writeRedPillLine("[ERROR] SEMPOOL INVALID").then(function() {
|
||||||
@ -84,7 +85,7 @@ function hackWorldDaemon(currentNodeNumber) {
|
|||||||
}).then(function() {
|
}).then(function() {
|
||||||
return writeRedPillLine("..............................................")
|
return writeRedPillLine("..............................................")
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
return loadBitVerse(currentNodeNumber);
|
return loadBitVerse(currentNodeNumber, flume);
|
||||||
}).catch(function(e){
|
}).catch(function(e){
|
||||||
console.log("ERROR: " + e.toString());
|
console.log("ERROR: " + e.toString());
|
||||||
});
|
});
|
||||||
@ -131,12 +132,10 @@ function giveSourceFile(bitNodeNumber) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadBitVerse(destroyedBitNodeNum) {
|
function loadBitVerse(destroyedBitNodeNum, flume=false) {
|
||||||
//Clear the screen
|
//Clear the screen
|
||||||
var container = document.getElementById("red-pill-container");
|
var container = document.getElementById("red-pill-container");
|
||||||
while (container.firstChild) {
|
removeChildrenFromElement(container);
|
||||||
container.removeChild(container.firstChild);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Create the Bit Verse
|
//Create the Bit Verse
|
||||||
var bitVerseImage = document.createElement("pre");
|
var bitVerseImage = document.createElement("pre");
|
||||||
@ -218,7 +217,7 @@ function loadBitVerse(destroyedBitNodeNum) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
yesNoBoxCreate("BitNode-" + i + ": " + bitNode.name + "<br><br>" + bitNode.info);
|
yesNoBoxCreate("BitNode-" + i + ": " + bitNode.name + "<br><br>" + bitNode.info);
|
||||||
createBitNodeYesNoEventListeners(i, destroyedBitNodeNum);
|
createBitNodeYesNoEventListeners(i, destroyedBitNodeNum, flume);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
elem.addEventListener("click", function() {
|
elem.addEventListener("click", function() {
|
||||||
@ -289,16 +288,14 @@ function createBitNode(n) {
|
|||||||
"</span></a>";
|
"</span></a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
function createBitNodeYesNoEventListeners(newBitNode, destroyedBitNode) {
|
function createBitNodeYesNoEventListeners(newBitNode, destroyedBitNode, flume=false) {
|
||||||
var yesBtn = yesNoBoxGetYesButton();
|
var yesBtn = yesNoBoxGetYesButton();
|
||||||
yesBtn.innerHTML = "Enter BitNode-" + newBitNode;
|
yesBtn.innerHTML = "Enter BitNode-" + newBitNode;
|
||||||
yesBtn.addEventListener("click", function() {
|
yesBtn.addEventListener("click", function() {
|
||||||
giveSourceFile(destroyedBitNode);
|
if (!flume) {giveSourceFile(destroyedBitNode);}
|
||||||
redPillFlag = false;
|
redPillFlag = false;
|
||||||
var container = document.getElementById("red-pill-container");
|
var container = document.getElementById("red-pill-container");
|
||||||
while (container.firstChild) {
|
removeChildrenFromElement(container);
|
||||||
container.removeChild(container.firstChild);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Set new Bit Node
|
//Set new Bit Node
|
||||||
Player.bitNodeN = newBitNode;
|
Player.bitNodeN = newBitNode;
|
||||||
|
@ -22,6 +22,7 @@ import {addWorkerScript, killWorkerScript} from "./NetscriptWorker.js";
|
|||||||
import {Player} from "./Player.js";
|
import {Player} from "./Player.js";
|
||||||
import {AllServers, processSingleServerGrowth} from "./Server.js";
|
import {AllServers, processSingleServerGrowth} from "./Server.js";
|
||||||
import {Settings} from "./Settings.js";
|
import {Settings} from "./Settings.js";
|
||||||
|
import {post} from "./Terminal.js";
|
||||||
|
|
||||||
import {dialogBoxCreate} from "../utils/DialogBox.js";
|
import {dialogBoxCreate} from "../utils/DialogBox.js";
|
||||||
import {Reviver, Generic_toJSON,
|
import {Reviver, Generic_toJSON,
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import {Engine} from "./engine.js";
|
||||||
|
|
||||||
/* Settings.js */
|
/* Settings.js */
|
||||||
let Settings = {
|
let Settings = {
|
||||||
CodeInstructionRunTime: 50,
|
CodeInstructionRunTime: 50,
|
||||||
@ -5,6 +7,7 @@ let Settings = {
|
|||||||
MaxPortCapacity: 50,
|
MaxPortCapacity: 50,
|
||||||
SuppressMessages: false,
|
SuppressMessages: false,
|
||||||
SuppressFactionInvites: false,
|
SuppressFactionInvites: false,
|
||||||
|
AutosaveInterval: 60,
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadSettings(saveString) {
|
function loadSettings(saveString) {
|
||||||
@ -17,6 +20,7 @@ function initSettings() {
|
|||||||
Settings.MaxPortCapacity = 50;
|
Settings.MaxPortCapacity = 50;
|
||||||
Settings.SuppressMessages = false;
|
Settings.SuppressMessages = false;
|
||||||
Settings.SuppressFactionInvites = false;
|
Settings.SuppressFactionInvites = false;
|
||||||
|
Settings.AutosaveInterval = 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setSettingsLabels() {
|
function setSettingsLabels() {
|
||||||
@ -25,6 +29,7 @@ function setSettingsLabels() {
|
|||||||
var nsPortLimit = document.getElementById("settingsNSPortRangeValLabel");
|
var nsPortLimit = document.getElementById("settingsNSPortRangeValLabel");
|
||||||
var suppressMsgs = document.getElementById("settingsSuppressMessages");
|
var suppressMsgs = document.getElementById("settingsSuppressMessages");
|
||||||
var suppressFactionInv = document.getElementById("settingsSuppressFactionInvites")
|
var suppressFactionInv = document.getElementById("settingsSuppressFactionInvites")
|
||||||
|
var autosaveInterval = document.getElementById("settingsAutosaveIntervalValLabel");
|
||||||
|
|
||||||
//Initialize values on labels
|
//Initialize values on labels
|
||||||
nsExecTime.innerHTML = Settings.CodeInstructionRunTime + "ms";
|
nsExecTime.innerHTML = Settings.CodeInstructionRunTime + "ms";
|
||||||
@ -32,23 +37,43 @@ function setSettingsLabels() {
|
|||||||
nsPortLimit.innerHTML = Settings.MaxPortCapacity;
|
nsPortLimit.innerHTML = Settings.MaxPortCapacity;
|
||||||
suppressMsgs.checked = Settings.SuppressMessages;
|
suppressMsgs.checked = Settings.SuppressMessages;
|
||||||
suppressFactionInv.checked = Settings.SuppressFactionInvites;
|
suppressFactionInv.checked = Settings.SuppressFactionInvites;
|
||||||
|
autosaveInterval.innerHTML = Settings.AutosaveInterval;
|
||||||
|
|
||||||
//Set handlers for when input changes
|
//Set handlers for when input changes
|
||||||
document.getElementById("settingsNSExecTimeRangeVal").oninput = function() {
|
var nsExecTimeInput = document.getElementById("settingsNSExecTimeRangeVal");
|
||||||
|
var nsLogRangeInput = document.getElementById("settingsNSLogRangeVal");
|
||||||
|
var nsPortRangeInput = document.getElementById("settingsNSPortRangeVal");
|
||||||
|
var nsAutosaveIntervalInput = document.getElementById("settingsAutosaveIntervalVal");
|
||||||
|
nsExecTimeInput.value = Settings.CodeInstructionRunTime;
|
||||||
|
nsLogRangeInput.value = Settings.MaxLogCapacity;
|
||||||
|
nsPortRangeInput.value = Settings.MaxPortCapacity;
|
||||||
|
nsAutosaveIntervalInput.value = Settings.AutosaveInterval;
|
||||||
|
|
||||||
|
nsExecTimeInput.oninput = function() {
|
||||||
nsExecTime.innerHTML = this.value + 'ms';
|
nsExecTime.innerHTML = this.value + 'ms';
|
||||||
Settings.CodeInstructionRunTime = this.value;
|
Settings.CodeInstructionRunTime = this.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
document.getElementById("settingsNSLogRangeVal").oninput = function() {
|
nsLogRangeInput.oninput = function() {
|
||||||
nsLogLimit.innerHTML = this.value;
|
nsLogLimit.innerHTML = this.value;
|
||||||
Settings.MaxLogCapacity = this.value;
|
Settings.MaxLogCapacity = this.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
document.getElementById("settingsNSPortRangeVal").oninput = function() {
|
nsPortRangeInput.oninput = function() {
|
||||||
nsPortLimit.innerHTML = this.value;
|
nsPortLimit.innerHTML = this.value;
|
||||||
Settings.MaxPortCapacity = this.value;
|
Settings.MaxPortCapacity = this.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nsAutosaveIntervalInput.oninput = function() {
|
||||||
|
autosaveInterval.innerHTML = this.value;
|
||||||
|
Settings.AutosaveInterval = Number(this.value);
|
||||||
|
if (Number(this.value) === 0) {
|
||||||
|
Engine.Counters.autoSaveCounter = Infinity;
|
||||||
|
} else {
|
||||||
|
Engine.Counters.autoSaveCounter = Number(this.value) * 5;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
document.getElementById("settingsSuppressMessages").onclick = function() {
|
document.getElementById("settingsSuppressMessages").onclick = function() {
|
||||||
Settings.SuppressMessages = this.checked;
|
Settings.SuppressMessages = this.checked;
|
||||||
};
|
};
|
||||||
|
@ -37,7 +37,7 @@ import {logBoxCreate} from "../utils/LogBox.js";
|
|||||||
//If replace is true then spaces are replaced with " "
|
//If replace is true then spaces are replaced with " "
|
||||||
function post(input, replace=true) {
|
function post(input, replace=true) {
|
||||||
if (replace) {
|
if (replace) {
|
||||||
$("#terminal-input").before('<tr class="posted"><td class="terminal-line" style="color: var(--my-font-color); background-color: var(--my-background-color);">' + input.replace( / /g, " " ) + '</td></tr>');
|
$("#terminal-input").before('<tr class="posted"><td class="terminal-line" style="color: var(--my-font-color); background-color: var(--my-background-color); white-space:pre;">' + input.replace( / /g, " " ) + '</td></tr>');
|
||||||
} else {
|
} else {
|
||||||
$("#terminal-input").before('<tr class="posted"><td class="terminal-line" style="color: var(--my-font-color); background-color: var(--my-background-color);">' + input + '</td></tr>');
|
$("#terminal-input").before('<tr class="posted"><td class="terminal-line" style="color: var(--my-font-color); background-color: var(--my-background-color);">' + input + '</td></tr>');
|
||||||
}
|
}
|
||||||
@ -1634,6 +1634,9 @@ let Terminal = {
|
|||||||
post("Defense: " + Player.defense + " / 1500");
|
post("Defense: " + Player.defense + " / 1500");
|
||||||
post("Dexterity: " + Player.dexterity + " / 1500");
|
post("Dexterity: " + Player.dexterity + " / 1500");
|
||||||
post("Agility: " + Player.agility + " / 1500");
|
post("Agility: " + Player.agility + " / 1500");
|
||||||
|
break;
|
||||||
|
case Programs.BitFlume:
|
||||||
|
hackWorldDaemon(Player.bitNodeN, true);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
post("Invalid executable. Cannot be run");
|
post("Invalid executable. Cannot be run");
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import {dialogBoxCreate} from "../utils/DialogBox.js";
|
import {dialogBoxCreate} from "../utils/DialogBox.js";
|
||||||
import {gameOptionsBoxOpen, gameOptionsBoxClose}from "../utils/GameOptions.js";
|
import {gameOptionsBoxOpen, gameOptionsBoxClose}from "../utils/GameOptions.js";
|
||||||
import {clearEventListeners, createElement} from "../utils/HelperFunctions.js";
|
import {clearEventListeners, createElement,
|
||||||
|
removeChildrenFromElement} from "../utils/HelperFunctions.js";
|
||||||
import numeral from "../utils/numeral.min.js";
|
import numeral from "../utils/numeral.min.js";
|
||||||
import {formatNumber,
|
import {formatNumber,
|
||||||
convertTimeMsToTimeElapsedString} from "../utils/StringHelperFunctions.js";
|
convertTimeMsToTimeElapsedString} from "../utils/StringHelperFunctions.js";
|
||||||
@ -33,7 +34,7 @@ import {initLiterature} from "./Literature.js";
|
|||||||
import {checkForMessagesToSend, initMessages} from "./Message.js";
|
import {checkForMessagesToSend, initMessages} from "./Message.js";
|
||||||
import {inMission, currMission} from "./Missions.js";
|
import {inMission, currMission} from "./Missions.js";
|
||||||
import {initSingularitySFFlags,
|
import {initSingularitySFFlags,
|
||||||
hasSingularitySF} from "./NetscriptFunctions.js";
|
hasSingularitySF, hasCorporationSF} from "./NetscriptFunctions.js";
|
||||||
import {updateOnlineScriptTimes,
|
import {updateOnlineScriptTimes,
|
||||||
runScriptsLoop} from "./NetscriptWorker.js";
|
runScriptsLoop} from "./NetscriptWorker.js";
|
||||||
import {Player} from "./Player.js";
|
import {Player} from "./Player.js";
|
||||||
@ -491,22 +492,21 @@ let Engine = {
|
|||||||
|
|
||||||
/* Display character info */
|
/* Display character info */
|
||||||
displayCharacterInfo: function() {
|
displayCharacterInfo: function() {
|
||||||
|
removeChildrenFromElement(Engine.Display.characterInfo);
|
||||||
|
|
||||||
var companyPosition = "";
|
var companyPosition = "";
|
||||||
if (Player.companyPosition != "") {
|
if (Player.companyPosition != "") {
|
||||||
companyPosition = Player.companyPosition.positionName;
|
companyPosition = Player.companyPosition.positionName;
|
||||||
}
|
}
|
||||||
|
|
||||||
var bnText = "";
|
|
||||||
if (Player.sourceFiles.length !== 0) {
|
|
||||||
bnText = "<br>Current BitNode: " + Player.bitNodeN;
|
|
||||||
}
|
|
||||||
|
|
||||||
var intText = "";
|
var intText = "";
|
||||||
if (Player.intelligence > 0) {
|
if (Player.intelligence > 0) {
|
||||||
intText = 'Intelligence: ' + (Player.intelligence).toLocaleString() + "<br><br><br>";
|
intText = 'Intelligence: ' + (Player.intelligence).toLocaleString() + "<br><br><br>";
|
||||||
}
|
}
|
||||||
Engine.Display.characterInfo.innerHTML =
|
|
||||||
('<b>General</b><br><br>' +
|
Engine.Display.characterInfo.appendChild(createElement("pre", {
|
||||||
|
innerHTML:
|
||||||
|
'<b>General</b><br><br>' +
|
||||||
'Current City: ' + Player.city + '<br><br>' +
|
'Current City: ' + Player.city + '<br><br>' +
|
||||||
'Employer: ' + Player.companyName + '<br>' +
|
'Employer: ' + Player.companyName + '<br>' +
|
||||||
'Job Title: ' + companyPosition + '<br><br>' +
|
'Job Title: ' + companyPosition + '<br><br>' +
|
||||||
@ -557,8 +557,23 @@ let Engine = {
|
|||||||
'Hacknet Nodes owned: ' + Player.hacknetNodes.length + '<br>' +
|
'Hacknet Nodes owned: ' + Player.hacknetNodes.length + '<br>' +
|
||||||
'Augmentations installed: ' + Player.augmentations.length + '<br>' +
|
'Augmentations installed: ' + Player.augmentations.length + '<br>' +
|
||||||
'Time played since last Augmentation: ' + convertTimeMsToTimeElapsedString(Player.playtimeSinceLastAug) + '<br>' +
|
'Time played since last Augmentation: ' + convertTimeMsToTimeElapsedString(Player.playtimeSinceLastAug) + '<br>' +
|
||||||
'Time played: ' + convertTimeMsToTimeElapsedString(Player.totalPlaytime) +
|
'Time played: ' + convertTimeMsToTimeElapsedString(Player.totalPlaytime),
|
||||||
bnText + '<br><br><br>').replace( / /g, " " );
|
}));
|
||||||
|
|
||||||
|
if (Player.sourceFiles.length !== 0) {
|
||||||
|
var index = "BitNode" + Player.bitNodeN;
|
||||||
|
|
||||||
|
Engine.Display.characterInfo.appendChild(createElement("p", {
|
||||||
|
width:"60%",
|
||||||
|
innerHTML:
|
||||||
|
"<br>Current BitNode: " + Player.bitNodeN + " (" + BitNodes[index].name + ")<br><br>",
|
||||||
|
}));
|
||||||
|
|
||||||
|
Engine.Display.characterInfo.appendChild(createElement("p", {
|
||||||
|
width:"60%", fontSize: "13px", marginLeft:"4%",
|
||||||
|
innerHTML:BitNodes[index].info,
|
||||||
|
}))
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Display locations in the world*/
|
/* Display locations in the world*/
|
||||||
@ -589,8 +604,8 @@ let Engine = {
|
|||||||
case Locations.Sector12:
|
case Locations.Sector12:
|
||||||
Engine.sector12LocationsList.style.display = "inline";
|
Engine.sector12LocationsList.style.display = "inline";
|
||||||
|
|
||||||
//City hall only in BitNode-3
|
//City hall only in BitNode-3/with Source-File 3
|
||||||
if (Player.bitNodeN === 3) {
|
if (Player.bitNodeN === 3 || hasCorporationSF) {
|
||||||
document.getElementById("sector12-cityhall-li").style.display = "block";
|
document.getElementById("sector12-cityhall-li").style.display = "block";
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("sector12-cityhall-li").style.display = "none";
|
document.getElementById("sector12-cityhall-li").style.display = "none";
|
||||||
@ -938,7 +953,14 @@ let Engine = {
|
|||||||
checkCounters: function() {
|
checkCounters: function() {
|
||||||
if (Engine.Counters.autoSaveCounter <= 0) {
|
if (Engine.Counters.autoSaveCounter <= 0) {
|
||||||
saveObject.saveGame(indexedDb);
|
saveObject.saveGame(indexedDb);
|
||||||
Engine.Counters.autoSaveCounter = 300;
|
if (Settings.AutosaveInterval == null) {
|
||||||
|
Settings.AutosaveInterval = 60;
|
||||||
|
}
|
||||||
|
if (Settings.AutosaveInterval === 0) {
|
||||||
|
Engine.Counters.autoSaveCounter = Infinity;
|
||||||
|
} else {
|
||||||
|
Engine.Counters.autoSaveCounter = Settings.AutosaveInterval * 5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Engine.Counters.updateSkillLevelsCounter <= 0) {
|
if (Engine.Counters.updateSkillLevelsCounter <= 0) {
|
||||||
@ -1370,7 +1392,7 @@ let Engine = {
|
|||||||
Engine.Display.missionContent.style.display = "none";
|
Engine.Display.missionContent.style.display = "none";
|
||||||
|
|
||||||
//Character info
|
//Character info
|
||||||
Engine.Display.characterInfo = document.getElementById("character-info");
|
Engine.Display.characterInfo = document.getElementById("character-content");
|
||||||
|
|
||||||
//Location lists
|
//Location lists
|
||||||
Engine.aevumLocationsList = document.getElementById("aevum-locations-list");
|
Engine.aevumLocationsList = document.getElementById("aevum-locations-list");
|
||||||
|
@ -70,10 +70,13 @@ function createElement(type, params) {
|
|||||||
if (params.display) {el.style.display = params.display;}
|
if (params.display) {el.style.display = params.display;}
|
||||||
if (params.visibility) {el.style.visibility = params.visibility;}
|
if (params.visibility) {el.style.visibility = params.visibility;}
|
||||||
if (params.margin) {el.style.margin = params.margin;}
|
if (params.margin) {el.style.margin = params.margin;}
|
||||||
|
if (params.marginLeft) {el.style.marginLeft = params.marginLeft;}
|
||||||
if (params.padding) {el.style.padding = params.padding;}
|
if (params.padding) {el.style.padding = params.padding;}
|
||||||
if (params.color) {el.style.color = params.color;}
|
if (params.color) {el.style.color = params.color;}
|
||||||
if (params.border) {el.style.border = params.border;}
|
if (params.border) {el.style.border = params.border;}
|
||||||
if (params.float) {el.style.cssFloat = params.float;}
|
if (params.float) {el.style.cssFloat = params.float;}
|
||||||
|
if (params.fontSize) {el.style.fontSize = params.fontSize;}
|
||||||
|
if (params.width) {el.style.width = params.width;}
|
||||||
if (params.backgroundColor) {
|
if (params.backgroundColor) {
|
||||||
el.style.backgroundColor = params.backgroundColor
|
el.style.backgroundColor = params.backgroundColor
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user