mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-23 22:52:29 +01:00
Merge pull request #72 from danielyxie/dev
FIxed field work buff. Added AutoLink and ServerProfiler programs. PR…
This commit is contained in:
commit
502f6cf53f
@ -293,3 +293,13 @@ tr:focus {
|
|||||||
#character-overview-options-button {
|
#character-overview-options-button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Scan analyze links from AutoLink */
|
||||||
|
.scan-analyze-link {
|
||||||
|
cursor:pointer;
|
||||||
|
color:#FFFFFF;
|
||||||
|
text-decoration:underline;
|
||||||
|
}
|
||||||
|
.scan-analyze-link:hover {
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
30
index.html
30
index.html
@ -405,44 +405,52 @@
|
|||||||
<div id="create-program-container">
|
<div id="create-program-container">
|
||||||
<p id="create-program-page-text">
|
<p id="create-program-page-text">
|
||||||
This page displays any programs that you are able to create. Writing the code for a program takes time, which
|
This page displays any programs that you are able to create. Writing the code for a program takes time, which
|
||||||
can vary based on how complex the program is. Once you start working on a program you must see it all the way
|
can vary based on how complex the program is. If you are working on creating on a program you can cancel
|
||||||
through. If you cancel before the program is complete you will lose all your progress and have to start all over
|
at any time. Your progress will be saved and you can continue later.
|
||||||
if you want to code it again.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul id="create-program-list">
|
<ul id="create-program-list">
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-nuke" href="#">
|
<a class="create-program-a-link-button tooltip" id="create-program-nuke">
|
||||||
NUKE.exe
|
NUKE.exe
|
||||||
<span class="tooltiptext"> This virus is used to gain root access to a machine if enough ports are opened. </span>
|
<span class="tooltiptext"> This virus is used to gain root access to a machine if enough ports are opened. </span>
|
||||||
</a>
|
</a>
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-brutessh" href="#">
|
<a class="create-program-a-link-button tooltip" id="create-program-brutessh">
|
||||||
BruteSSH.exe
|
BruteSSH.exe
|
||||||
<span class="tooltiptext"> This program executes a brute force attack that opens SSH ports </span>
|
<span class="tooltiptext"> This program executes a brute force attack that opens SSH ports </span>
|
||||||
</a>
|
</a>
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-ftpcrack" href="#">
|
<a class="create-program-a-link-button tooltip" id="create-program-ftpcrack">
|
||||||
FTPCrack.exe
|
FTPCrack.exe
|
||||||
<span class="tooltiptext"> This program cracks open FTP ports</span>
|
<span class="tooltiptext"> This program cracks open FTP ports</span>
|
||||||
</a>
|
</a>
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-relaysmtp" href="#">
|
<a class="create-program-a-link-button tooltip" id="create-program-relaysmtp">
|
||||||
relaySMTP.exe
|
relaySMTP.exe
|
||||||
<span class="tooltiptext"> This program opens SMTP ports by redirecting data </span>
|
<span class="tooltiptext"> This program opens SMTP ports by redirecting data </span>
|
||||||
</a>
|
</a>
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-httpworm" href="#">
|
<a class="create-program-a-link-button tooltip" id="create-program-httpworm">
|
||||||
HTTPWorm.exe
|
HTTPWorm.exe
|
||||||
<span class="tooltiptext"> This virus opens up HTTP ports </span>
|
<span class="tooltiptext"> This virus opens up HTTP ports </span>
|
||||||
</a>
|
</a>
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-sqlinject" href="#">
|
<a class="create-program-a-link-button tooltip" id="create-program-sqlinject">
|
||||||
SQLInject.exe
|
SQLInject.exe
|
||||||
<span class="tooltiptext"> This virus opens SQL ports</span>
|
<span class="tooltiptext"> This virus opens SQL ports</span>
|
||||||
</a>
|
</a>
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-deepscanv1" href="#">
|
<a class="create-program-a-link-button tooltip" id="create-program-deepscanv1">
|
||||||
DeepscanV1.exe
|
DeepscanV1.exe
|
||||||
<span class="tooltiptext"> This program allows you to use the scan-analyze command with a depth up to 5</span>
|
<span class="tooltiptext"> This program allows you to use the scan-analyze command with a depth up to 5</span>
|
||||||
</a>
|
</a>
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-deepscanv2" href="#">
|
<a class="create-program-a-link-button tooltip" id="create-program-deepscanv2">
|
||||||
DeepscanV2.exe
|
DeepscanV2.exe
|
||||||
<span class="tooltiptext"> This program allows you to use the scan-analyze command with a depth up to 10</span>
|
<span class="tooltiptext"> This program allows you to use the scan-analyze command with a depth up to 10</span>
|
||||||
</a>
|
</a>
|
||||||
|
<a class="create-program-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="create-program-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>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
CONSTANTS = {
|
CONSTANTS = {
|
||||||
Version: "0.22.0",
|
Version: "0.22.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
|
||||||
@ -655,6 +655,11 @@ CONSTANTS = {
|
|||||||
"RAM Upgrades on your home computer",
|
"RAM Upgrades on your home computer",
|
||||||
|
|
||||||
Changelog:
|
Changelog:
|
||||||
|
"v0.22.1<br>" +
|
||||||
|
"-You no longer lose progress on creating programs when cancelling your work. Your progress will be saved and you will pick up " +
|
||||||
|
"where you left off when you start working on it again<br>" +
|
||||||
|
"-Added two new programs: AutoLink.exe and ServerProfiler.exe<br>" +
|
||||||
|
"-Fixed bug with Faction Field work reputation gain<br><br>" +
|
||||||
"v0.22.0 - Major rebalancing, optimization, and favor system<br>" +
|
"v0.22.0 - Major rebalancing, optimization, and favor system<br>" +
|
||||||
"-Significantly nerfed most augmentations<br>" +
|
"-Significantly nerfed most augmentations<br>" +
|
||||||
"-Almost every server with a required hacking level of 200 or more now has slightly randomized server parameters. This means that after every Augmentation " +
|
"-Almost every server with a required hacking level of 200 or more now has slightly randomized server parameters. This means that after every Augmentation " +
|
||||||
@ -673,7 +678,7 @@ CONSTANTS = {
|
|||||||
"-Added getServerBaseSecurityLevel() Netscript function<br>" +
|
"-Added getServerBaseSecurityLevel() Netscript function<br>" +
|
||||||
"-New favor system for companies and factions. Earning reputation at a company/faction will give you favor for that entity when you " +
|
"-New favor system for companies and factions. Earning reputation at a company/faction will give you favor for that entity when you " +
|
||||||
"reset after installing an Augmentation. This favor persists through the rest of the game. The more favor you have, the faster you will earn " +
|
"reset after installing an Augmentation. This favor persists through the rest of the game. The more favor you have, the faster you will earn " +
|
||||||
"reputation with that faction<br>" +
|
"reputation with that faction/company<br>" +
|
||||||
"-You can no longer donate to a faction for reputation until you have 150 favor with that faction<br>" +
|
"-You can no longer donate to a faction for reputation until you have 150 favor with that faction<br>" +
|
||||||
"-Added unalias Terminal command<br>" +
|
"-Added unalias Terminal command<br>" +
|
||||||
"-Changed requirements for endgame Factions<br><br>" +
|
"-Changed requirements for endgame Factions<br><br>" +
|
||||||
@ -829,6 +834,11 @@ CONSTANTS = {
|
|||||||
"-You can now see what an Augmentation does and its price even while its locked<br><br>",
|
"-You can now see what an Augmentation does and its price even while its locked<br><br>",
|
||||||
|
|
||||||
LatestUpdate:
|
LatestUpdate:
|
||||||
|
"v0.22.1<br>" +
|
||||||
|
"-You no longer lose progress on creating programs when cancelling your work. Your progress will be saved and you will pick up " +
|
||||||
|
"where you left off when you start working on it again<br>" +
|
||||||
|
"-Added two new programs: AutoLink.exe and ServerProfiler.exe<br>" +
|
||||||
|
"-Fixed bug with Faction Field work reputation gain<br><br>" +
|
||||||
"v0.22.0 - Major rebalancing, optimization, and favor system<br>" +
|
"v0.22.0 - Major rebalancing, optimization, and favor system<br>" +
|
||||||
"-Significantly nerfed most augmentations<br>" +
|
"-Significantly nerfed most augmentations<br>" +
|
||||||
"-Almost every server with a required hacking level of 200 or more now has slightly randomized server parameters. This means that after every Augmentation " +
|
"-Almost every server with a required hacking level of 200 or more now has slightly randomized server parameters. This means that after every Augmentation " +
|
||||||
@ -847,7 +857,7 @@ CONSTANTS = {
|
|||||||
"-Added getServerBaseSecurityLevel() Netscript function<br>" +
|
"-Added getServerBaseSecurityLevel() Netscript function<br>" +
|
||||||
"-New favor system for companies and factions. Earning reputation at a company/faction will give you favor for that entity when you " +
|
"-New favor system for companies and factions. Earning reputation at a company/faction will give you favor for that entity when you " +
|
||||||
"reset after installing an Augmentation. This favor persists through the rest of the game. The more favor you have, the faster you will earn " +
|
"reset after installing an Augmentation. This favor persists through the rest of the game. The more favor you have, the faster you will earn " +
|
||||||
"reputation with that faction<br>" +
|
"reputation with that faction/company<br>" +
|
||||||
"-You can no longer donate to a faction for reputation until you have 150 favor with that faction<br>" +
|
"-You can no longer donate to a faction for reputation until you have 150 favor with that faction<br>" +
|
||||||
"-Added unalias Terminal command<br>" +
|
"-Added unalias Terminal command<br>" +
|
||||||
"-Changed requirements for endgame Factions<br>",
|
"-Changed requirements for endgame Factions<br>",
|
||||||
|
@ -8,6 +8,8 @@ Programs = {
|
|||||||
SQLInjectProgram: "SQLInject.exe",
|
SQLInjectProgram: "SQLInject.exe",
|
||||||
DeepscanV1: "DeepscanV1.exe",
|
DeepscanV1: "DeepscanV1.exe",
|
||||||
DeepscanV2: "DeepscanV2.exe",
|
DeepscanV2: "DeepscanV2.exe",
|
||||||
|
ServerProfiler: "ServerProfiler.exe",
|
||||||
|
AutoLink: "AutoLink.exe",
|
||||||
Flight: "fl1ght.exe",
|
Flight: "fl1ght.exe",
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,6 +24,8 @@ function displayCreateProgramContent() {
|
|||||||
var sqlInjectALink = document.getElementById("create-program-sqlinject");
|
var sqlInjectALink = document.getElementById("create-program-sqlinject");
|
||||||
var deepscanv1ALink = document.getElementById("create-program-deepscanv1");
|
var deepscanv1ALink = document.getElementById("create-program-deepscanv1");
|
||||||
var deepscanv2ALink = document.getElementById("create-program-deepscanv2");
|
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";
|
||||||
@ -31,6 +35,8 @@ function displayCreateProgramContent() {
|
|||||||
sqlInjectALink.style.display = "none";
|
sqlInjectALink.style.display = "none";
|
||||||
deepscanv1ALink.style.display = "none";
|
deepscanv1ALink.style.display = "none";
|
||||||
deepscanv2ALink.style.display = "none";
|
deepscanv2ALink.style.display = "none";
|
||||||
|
servProfilerALink.style.display = "none";
|
||||||
|
autolinkALink.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) {
|
||||||
@ -68,55 +74,116 @@ function displayCreateProgramContent() {
|
|||||||
if (!Player.hasProgram(Programs.DeepscanV2) && Player.hacking_skill >= 400) {
|
if (!Player.hasProgram(Programs.DeepscanV2) && Player.hacking_skill >= 400) {
|
||||||
deepscanv2ALink.style.display = "inline-block";
|
deepscanv2ALink.style.display = "inline-block";
|
||||||
}
|
}
|
||||||
|
//Server profiler
|
||||||
|
if (!Player.hasProgram(Programs.ServerProfiler) && Player.hacking_skill >= 75) {
|
||||||
|
servProfilerALink.style.display = "inline-block";
|
||||||
|
}
|
||||||
|
//Auto Link
|
||||||
|
if (!Player.hasProgram(Programs.AutoLink) && Player.hacking_skill >= 25) {
|
||||||
|
autolinkALink.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
|
||||||
function getNumAvailableCreateProgram() {
|
function getNumAvailableCreateProgram() {
|
||||||
var count = 0;
|
var count = 0;
|
||||||
|
|
||||||
//PortHack.exe (in case you delete it lol)
|
//PortHack.exe (in case you delete it lol)
|
||||||
if (Player.getHomeComputer().programs.indexOf(Programs.NukeProgram) == -1) {
|
if (Player.getHomeComputer().programs.indexOf(Programs.NukeProgram) == -1) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//BruteSSH
|
//BruteSSH
|
||||||
if (Player.getHomeComputer().programs.indexOf(Programs.BruteSSHProgram) == -1 &&
|
if (Player.getHomeComputer().programs.indexOf(Programs.BruteSSHProgram) == -1 &&
|
||||||
Player.hacking_skill >= 50) {
|
Player.hacking_skill >= 50) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FTPCrack
|
//FTPCrack
|
||||||
if (Player.getHomeComputer().programs.indexOf(Programs.FTPCrackProgram) == -1 &&
|
if (Player.getHomeComputer().programs.indexOf(Programs.FTPCrackProgram) == -1 &&
|
||||||
Player.hacking_skill >= 100) {
|
Player.hacking_skill >= 100) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//relaySMTP
|
//relaySMTP
|
||||||
if (Player.getHomeComputer().programs.indexOf(Programs.RelaySMTPProgram) == -1 &&
|
if (Player.getHomeComputer().programs.indexOf(Programs.RelaySMTPProgram) == -1 &&
|
||||||
Player.hacking_skill >= 250) {
|
Player.hacking_skill >= 250) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//HTTPWorm
|
//HTTPWorm
|
||||||
if (Player.getHomeComputer().programs.indexOf(Programs.HTTPWormProgram) == -1 &&
|
if (Player.getHomeComputer().programs.indexOf(Programs.HTTPWormProgram) == -1 &&
|
||||||
Player.hacking_skill >= 500) {
|
Player.hacking_skill >= 500) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//SQLInject
|
//SQLInject
|
||||||
if (Player.getHomeComputer().programs.indexOf(Programs.SQLInjectProgram) == -1 &&
|
if (Player.getHomeComputer().programs.indexOf(Programs.SQLInjectProgram) == -1 &&
|
||||||
Player.hacking_skill >= 750) {
|
Player.hacking_skill >= 750) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Deepscan V1 and V2
|
//Deepscan V1 and V2
|
||||||
if (!Player.hasProgram(Programs.DeepscanV1) && Player.hacking_skill >= 75) {
|
if (!Player.hasProgram(Programs.DeepscanV1) && Player.hacking_skill >= 75) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Player.hasProgram(Programs.DeepscanV2) && Player.hacking_skill >= 400) {
|
if (!Player.hasProgram(Programs.DeepscanV2) && Player.hacking_skill >= 400) {
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
//Server profiler
|
||||||
|
if (!Player.hasProgram(Programs.ServerProfiler) && Player.hacking_skill >= 75) {
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
//Auto link
|
||||||
|
if (!Player.hasProgram(Programs.AutoLink) && Player.hacking_skill >= 25) {
|
||||||
|
++count;
|
||||||
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function initCreateProgramButtons() {
|
||||||
|
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.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.NukeProgram, CONSTANTS.MillisecondsPerFiveMinutes, 1);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
bruteSshALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.BruteSSHProgram, CONSTANTS.MillisecondsPerFiveMinutes * 2, 50);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
ftpCrackALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.FTPCrackProgram, CONSTANTS.MillisecondsPerHalfHour, 100);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
relaySmtpALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.RelaySMTPProgram, CONSTANTS.MillisecondsPer2Hours, 250);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
httpWormALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.HTTPWormProgram, CONSTANTS.MillisecondsPer4Hours, 500);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
sqlInjectALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.SQLInjectProgram, CONSTANTS.MillisecondsPer8Hours, 750);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
deepscanv1ALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.DeepscanV1, CONSTANTS.MillisecondsPerQuarterHour, 75);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
deepscanv2ALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.DeepscanV2, CONSTANTS.MillisecondsPer2Hours, 400);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
servProfilerALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.ServerProfiler, CONSTANTS.MillisecondsPerHalfHour, 75);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
autolinkALink.addEventListener("click", function() {
|
||||||
|
Player.startCreateProgramWork(Programs.AutoLink, CONSTANTS.MillisecondsPerQuarterHour, 25);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
@ -680,7 +680,7 @@ PlayerObject.prototype.startFactionFieldWork = function(faction) {
|
|||||||
this.workChaExpGainRate = .1 * this.charisma_exp_mult;
|
this.workChaExpGainRate = .1 * this.charisma_exp_mult;
|
||||||
this.workRepGainRate = this.getFactionFieldWorkRepGain();
|
this.workRepGainRate = this.getFactionFieldWorkRepGain();
|
||||||
|
|
||||||
this.factionWorkType = CONSTANTS.factionWorkField;
|
this.factionWorkType = CONSTANTS.FactionWorkField;
|
||||||
this.currentWorkFactionDescription = "carrying out field missions"
|
this.currentWorkFactionDescription = "carrying out field missions"
|
||||||
|
|
||||||
this.startFactionWork(faction);
|
this.startFactionWork(faction);
|
||||||
@ -855,7 +855,20 @@ PlayerObject.prototype.startCreateProgramWork = function(programName, time, reqL
|
|||||||
var timeMultiplier = (CONSTANTS.MaxSkillLevel - (this.hacking_skill - reqLevel)) / CONSTANTS.MaxSkillLevel;
|
var timeMultiplier = (CONSTANTS.MaxSkillLevel - (this.hacking_skill - reqLevel)) / CONSTANTS.MaxSkillLevel;
|
||||||
if (timeMultiplier > 1) {timeMultiplier = 1;}
|
if (timeMultiplier > 1) {timeMultiplier = 1;}
|
||||||
if (timeMultiplier < 0.01) {timeMultiplier = 0.01;}
|
if (timeMultiplier < 0.01) {timeMultiplier = 0.01;}
|
||||||
|
|
||||||
this.timeNeededToCompleteWork = timeMultiplier * time;
|
this.timeNeededToCompleteWork = timeMultiplier * time;
|
||||||
|
//Check for incomplete program
|
||||||
|
for (var i = 0; i < Player.getHomeComputer().programs.length; ++i) {
|
||||||
|
var programFile = Player.getHomeComputer().programs[i];
|
||||||
|
if (programFile.startsWith(programName) && programFile.endsWith("%-INC")) {
|
||||||
|
var res = programFile.split("-");
|
||||||
|
if (res.length != 3) {break;}
|
||||||
|
var percComplete = Number(res[1].slice(0, -1));
|
||||||
|
if (isNaN(percComplete) || percComplete <= 0 || percComplete >= 100) {break;}
|
||||||
|
this.timeWorked = percComplete / 100 * this.timeNeededToCompleteWork;
|
||||||
|
Player.getHomeComputer().programs.splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.createProgramName = programName;
|
this.createProgramName = programName;
|
||||||
|
|
||||||
@ -882,7 +895,7 @@ PlayerObject.prototype.createProgramWork = function(numCycles) {
|
|||||||
txt.innerHTML = "You are currently working on coding " + programName + ".<br><br> " +
|
txt.innerHTML = "You are currently working on coding " + programName + ".<br><br> " +
|
||||||
"You have been working for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br>" +
|
"You have been working for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br>" +
|
||||||
"The program is " + (this.timeWorked / this.timeNeededToCompleteWork * 100).toFixed(2) + "% complete. <br>" +
|
"The program is " + (this.timeWorked / this.timeNeededToCompleteWork * 100).toFixed(2) + "% complete. <br>" +
|
||||||
"If you cancel, you will lose all of your progress.";
|
"If you cancel, your work will be saved and you can come back to complete the program later.";
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerObject.prototype.finishCreateProgramWork = function(cancelled, programName) {
|
PlayerObject.prototype.finishCreateProgramWork = function(cancelled, programName) {
|
||||||
@ -891,6 +904,10 @@ PlayerObject.prototype.finishCreateProgramWork = function(cancelled, programName
|
|||||||
"The new program can be found on your home computer.");
|
"The new program can be found on your home computer.");
|
||||||
|
|
||||||
Player.getHomeComputer().programs.push(programName);
|
Player.getHomeComputer().programs.push(programName);
|
||||||
|
} else {
|
||||||
|
var perc = Math.floor(this.timeWorked / this.timeNeededToCompleteWork * 100).toString();
|
||||||
|
var incompleteName = programName + "-" + perc + "%-INC";
|
||||||
|
Player.getHomeComputer().programs.push(incompleteName);
|
||||||
}
|
}
|
||||||
|
|
||||||
var mainMenu = document.getElementById("mainmenu-container");
|
var mainMenu = document.getElementById("mainmenu-container");
|
||||||
|
@ -83,7 +83,8 @@ loadGame = function(saveObj) {
|
|||||||
try {
|
try {
|
||||||
var ver = JSON.parse(saveObj.VersionSave, Reviver);
|
var ver = JSON.parse(saveObj.VersionSave, Reviver);
|
||||||
if (ver != CONSTANTS.Version) {
|
if (ver != CONSTANTS.Version) {
|
||||||
if (CONSTANTS.Version == "0.21.0" || CONSTANTS.Version == "0.22.0") {
|
if (CONSTANTS.Version == "0.21.0" || CONSTANTS.Version == "0.22.0" ||
|
||||||
|
CONSTANTS.Version == "0.22.1") {
|
||||||
dialogBoxCreate("All scripts automatically killed for the sake of compatibility " +
|
dialogBoxCreate("All scripts automatically killed for the sake of compatibility " +
|
||||||
"with new version. If the game is still broken, try the following: " +
|
"with new version. If the game is still broken, try the following: " +
|
||||||
"Options -> Soft Reset -> Save Game -> Reload page. If that STILL " +
|
"Options -> Soft Reset -> Save Game -> Reload page. If that STILL " +
|
||||||
@ -155,7 +156,8 @@ loadImportedGame = function(saveObj, saveString) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ver != CONSTANTS.Version) {
|
if (ver != CONSTANTS.Version) {
|
||||||
if (CONSTANTS.Version == "0.21.0") {
|
if (CONSTANTS.Version == "0.21.0" || CONSTANTS.Version == "0.22.0" ||
|
||||||
|
CONSTANTS.Version == "0.22.1") {
|
||||||
console.log("here");
|
console.log("here");
|
||||||
//This is the big update that might break games. Kill all running scripts
|
//This is the big update that might break games. Kill all running scripts
|
||||||
for (var ip in tempAllServers) {
|
for (var ip in tempAllServers) {
|
||||||
|
@ -150,6 +150,7 @@ Script.prototype.updateRamUsage = function() {
|
|||||||
var getHackingLevelCount = numOccurrences(codeCopy, "getHackingLevel(");
|
var getHackingLevelCount = numOccurrences(codeCopy, "getHackingLevel(");
|
||||||
var getServerMoneyAvailableCount = numOccurrences(codeCopy, "getServerMoneyAvailable(");
|
var getServerMoneyAvailableCount = numOccurrences(codeCopy, "getServerMoneyAvailable(");
|
||||||
var getServerSecurityCount = numOccurrences(codeCopy, "getServerSecurityLevel(");
|
var getServerSecurityCount = numOccurrences(codeCopy, "getServerSecurityLevel(");
|
||||||
|
var getServerBaseSecurityCount = numOccurrences(codeCopy, "getServerBaseSecurityLevel(");
|
||||||
var getServerReqdHackingCount = numOccurrences(codeCopy, "getServerRequiredHackingLevel(");
|
var getServerReqdHackingCount = numOccurrences(codeCopy, "getServerRequiredHackingLevel(");
|
||||||
var fileExistsCount = numOccurrences(codeCopy, "fileExists(");
|
var fileExistsCount = numOccurrences(codeCopy, "fileExists(");
|
||||||
var isRunningCount = numOccurrences(codeCopy, "isRunning(");
|
var isRunningCount = numOccurrences(codeCopy, "isRunning(");
|
||||||
@ -181,6 +182,7 @@ Script.prototype.updateRamUsage = function() {
|
|||||||
(getHackingLevelCount * CONSTANTS.ScriptGetHackingLevelRamCost) +
|
(getHackingLevelCount * CONSTANTS.ScriptGetHackingLevelRamCost) +
|
||||||
(getServerMoneyAvailableCount * CONSTANTS.ScriptGetServerMoneyRamCost) +
|
(getServerMoneyAvailableCount * CONSTANTS.ScriptGetServerMoneyRamCost) +
|
||||||
(getServerSecurityCount * CONSTANTS.ScriptGetServerSecurityRamCost) +
|
(getServerSecurityCount * CONSTANTS.ScriptGetServerSecurityRamCost) +
|
||||||
|
(getServerBaseSecurityCount * CONSTANTS.ScriptGetServerSecurityRamCost) +
|
||||||
(getServerReqdHackingCount * CONSTANTS.ScriptGetServerReqdHackRamCost) +
|
(getServerReqdHackingCount * CONSTANTS.ScriptGetServerReqdHackRamCost) +
|
||||||
(fileExistsCount * CONSTANTS.ScriptFileExistsRamCost) +
|
(fileExistsCount * CONSTANTS.ScriptFileExistsRamCost) +
|
||||||
(isRunningCount * CONSTANTS.ScriptIsRunningRamCost) +
|
(isRunningCount * CONSTANTS.ScriptIsRunningRamCost) +
|
||||||
|
@ -1,8 +1,13 @@
|
|||||||
//Terminal
|
//Terminal
|
||||||
|
|
||||||
/* Write text to terminal */
|
/* Write text to terminal */
|
||||||
var post = function(input) {
|
var post = function(input, replace=true) {
|
||||||
|
if (replace) {
|
||||||
$("#terminal-input").before('<tr class="posted"><td style="color: var(--my-font-color); background-color: var(--my-background-color);">' + input.replace( / /g, " " ) + '</td></tr>');
|
$("#terminal-input").before('<tr class="posted"><td style="color: var(--my-font-color); background-color: var(--my-background-color);">' + input.replace( / /g, " " ) + '</td></tr>');
|
||||||
|
} else {
|
||||||
|
$("#terminal-input").before('<tr class="posted"><td style="color: var(--my-font-color); background-color: var(--my-background-color);">' + input + '</td></tr>');
|
||||||
|
}
|
||||||
|
|
||||||
updateTerminalScroll();
|
updateTerminalScroll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -669,13 +674,7 @@ var Terminal = {
|
|||||||
|
|
||||||
for (var i = 0; i < Player.getCurrentServer().serversOnNetwork.length; i++) {
|
for (var i = 0; i < Player.getCurrentServer().serversOnNetwork.length; i++) {
|
||||||
if (Player.getCurrentServer().getServerOnNetwork(i).ip == ip || Player.getCurrentServer().getServerOnNetwork(i).hostname == ip) {
|
if (Player.getCurrentServer().getServerOnNetwork(i).ip == ip || Player.getCurrentServer().getServerOnNetwork(i).hostname == ip) {
|
||||||
Player.getCurrentServer().isConnectedTo = false;
|
Terminal.connectToServer(ip);
|
||||||
Player.currentServer = Player.getCurrentServer().getServerOnNetwork(i).ip;
|
|
||||||
Player.getCurrentServer().isConnectedTo = true;
|
|
||||||
post("Connected to " + ip);
|
|
||||||
if (Player.getCurrentServer().hostname == "darkweb") {
|
|
||||||
checkIfConnectedToDarkweb(); //Posts a 'help' message if connecting to dark web
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1060,6 +1059,22 @@ var Terminal = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
connectToServer: function(ip) {
|
||||||
|
console.log("Connect to server called");
|
||||||
|
var serv = getServer(ip);
|
||||||
|
if (serv == null) {
|
||||||
|
post("Invalid server. Connection failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Player.getCurrentServer().isConnectedTo = false;
|
||||||
|
Player.currentServer = serv.ip;
|
||||||
|
Player.getCurrentServer().isConnectedTo = true;
|
||||||
|
post("Connected to " + serv.hostname);
|
||||||
|
if (Player.getCurrentServer().hostname == "darkweb") {
|
||||||
|
checkIfConnectedToDarkweb(); //Posts a 'help' message if connecting to dark web
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
executeListCommand: function(commandArray) {
|
executeListCommand: function(commandArray) {
|
||||||
if (commandArray.length != 1) {
|
if (commandArray.length != 1) {
|
||||||
post("Incorrect usage of ls command. Usage: ls"); return;
|
post("Incorrect usage of ls command. Usage: ls"); return;
|
||||||
@ -1146,7 +1161,12 @@ var Terminal = {
|
|||||||
}
|
}
|
||||||
if (d == 0) {continue;} //Don't print current server
|
if (d == 0) {continue;} //Don't print current server
|
||||||
var titleDashes = Array((d-1) * 4 + 1).join("-");
|
var titleDashes = Array((d-1) * 4 + 1).join("-");
|
||||||
|
if (Player.hasProgram(Programs.AutoLink)) {
|
||||||
|
post("<strong>" + titleDashes + "> <a class='scan-analyze-link'>" + s.hostname + "</a></strong>", false);
|
||||||
|
} else {
|
||||||
post("<strong>" + titleDashes + ">" + s.hostname + "</strong>");
|
post("<strong>" + titleDashes + ">" + s.hostname + "</strong>");
|
||||||
|
}
|
||||||
|
|
||||||
var dashes = titleDashes + "--";
|
var dashes = titleDashes + "--";
|
||||||
//var dashes = Array(d * 2 + 1).join("-");
|
//var dashes = Array(d * 2 + 1).join("-");
|
||||||
var c = "NO";
|
var c = "NO";
|
||||||
@ -1156,6 +1176,17 @@ var Terminal = {
|
|||||||
post(dashes + "RAM: " + s.maxRam);
|
post(dashes + "RAM: " + s.maxRam);
|
||||||
post(" ");
|
post(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var links = document.getElementsByClassName("scan-analyze-link");
|
||||||
|
for (var i = 0; i < links.length; ++i) {
|
||||||
|
(function() {
|
||||||
|
var hostname = links[i].innerHTML.toString();
|
||||||
|
links[i].onclick = function() {
|
||||||
|
Terminal.connectToServer(hostname);
|
||||||
|
}
|
||||||
|
}());//Immediate invocation
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
executeFreeCommand: function(commandArray) {
|
executeFreeCommand: function(commandArray) {
|
||||||
@ -1172,18 +1203,27 @@ var Terminal = {
|
|||||||
runProgram: function(programName) {
|
runProgram: function(programName) {
|
||||||
//Check if you have the program on your computer. If you do, execute it, otherwise
|
//Check if you have the program on your computer. If you do, execute it, otherwise
|
||||||
//display an error message
|
//display an error message
|
||||||
for (var i = 0; i < Player.getHomeComputer().programs.length; i++) {
|
var splitArgs = programName.split(" ");
|
||||||
if (Player.getHomeComputer().programs[i] == programName) {
|
var name = " ";
|
||||||
|
if (splitArgs.length > 1) {
|
||||||
|
name = splitArgs[0];
|
||||||
|
} else {
|
||||||
|
name = programName;
|
||||||
|
}
|
||||||
|
if (Player.hasProgram(name)) {
|
||||||
Terminal.executeProgram(programName);
|
Terminal.executeProgram(programName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
post("ERROR: No such executable on home computer (Only programs that exist on your home computer can be run)");
|
post("ERROR: No such executable on home computer (Only programs that exist on your home computer can be run)");
|
||||||
},
|
},
|
||||||
|
|
||||||
//Contains the implementations of all possible programs
|
//Contains the implementations of all possible programs
|
||||||
executeProgram: function(programName) {
|
executeProgram: function(programName) {
|
||||||
var s = Player.getCurrentServer();
|
var s = Player.getCurrentServer();
|
||||||
|
var splitArgs = programName.split(" ");
|
||||||
|
if (splitArgs.length > 1) {
|
||||||
|
programName = splitArgs[0];
|
||||||
|
}
|
||||||
switch (programName) {
|
switch (programName) {
|
||||||
case Programs.NukeProgram:
|
case Programs.NukeProgram:
|
||||||
if (s.hasAdminRights) {
|
if (s.hasAdminRights) {
|
||||||
@ -1242,9 +1282,27 @@ var Terminal = {
|
|||||||
post("Opened SQL Port (1433)!");
|
post("Opened SQL Port (1433)!");
|
||||||
++s.openPortCount;
|
++s.openPortCount;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case Programs.ServerProfiler:
|
||||||
|
if (splitArgs.length != 2) {
|
||||||
|
post("Must pass a server hostname or IP as an argument for ServerProfiler.exe");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var serv = getServer(splitArgs[1]);
|
||||||
|
if (serv == null) {
|
||||||
|
post("Invalid server IP/hostname");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
post(serv.hostname + ":");
|
||||||
|
post("Server base security level: " + serv.baseDifficulty);
|
||||||
|
post("Server current security level: " + serv.hackDifficulty);
|
||||||
|
post("Server growth rate: " + serv.serverGrowth);
|
||||||
|
post("Netscript hack() execution time: " + formatNumber(scriptCalculateHackingTime(serv), 1) + "s");
|
||||||
|
post("Netscript grow() execution time: " + formatNumber(scriptCalculateGrowTime(serv)/1000, 1) + "s");
|
||||||
|
post("Netscript weaken() execution time: " + formatNumber(scriptCalculateWeakenTime(serv)/1000, 1) + "s");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
post("Executable not found");
|
post("Invalid executable. Cannot be run");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -938,47 +938,7 @@ var Engine = {
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Create Program buttons
|
//Create Program buttons
|
||||||
var nukeALink = document.getElementById("create-program-nuke");
|
initCreateProgramButtons();
|
||||||
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");
|
|
||||||
|
|
||||||
nukeALink.addEventListener("click", function() {
|
|
||||||
Player.startCreateProgramWork(Programs.NukeProgram, CONSTANTS.MillisecondsPerFiveMinutes, 1);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
bruteSshALink.addEventListener("click", function() {
|
|
||||||
Player.startCreateProgramWork(Programs.BruteSSHProgram, CONSTANTS.MillisecondsPerFiveMinutes * 2, 50);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
ftpCrackALink.addEventListener("click", function() {
|
|
||||||
Player.startCreateProgramWork(Programs.FTPCrackProgram, CONSTANTS.MillisecondsPerHalfHour, 100);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
relaySmtpALink.addEventListener("click", function() {
|
|
||||||
Player.startCreateProgramWork(Programs.RelaySMTPProgram, CONSTANTS.MillisecondsPer2Hours, 250);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
httpWormALink.addEventListener("click", function() {
|
|
||||||
Player.startCreateProgramWork(Programs.HTTPWormProgram, CONSTANTS.MillisecondsPer4Hours, 500);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
sqlInjectALink.addEventListener("click", function() {
|
|
||||||
Player.startCreateProgramWork(Programs.SQLInjectProgram, CONSTANTS.MillisecondsPer8Hours, 750);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
deepscanv1ALink.addEventListener("click", function() {
|
|
||||||
Player.startCreateProgramWork(Programs.DeepscanV1, CONSTANTS.MillisecondsPerQuarterHour, 75);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
deepscanv2ALink.addEventListener("click", function() {
|
|
||||||
Player.startCreateProgramWork(Programs.DeepscanV2, CONSTANTS.MillisecondsPer2Hours, 400);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
//Message at the top of terminal
|
//Message at the top of terminal
|
||||||
postNetburnerText();
|
postNetburnerText();
|
||||||
|
Loading…
Reference in New Issue
Block a user