mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-30 12:57:06 +02:00
streamline programs
This commit is contained in:
+128
-230
@@ -2,138 +2,127 @@ import {CONSTANTS} from "./Constants.js";
|
||||
import {Player} from "./Player.js";
|
||||
import {createElement} from "../utils/HelperFunctions.js";
|
||||
|
||||
// a function that returns a requirement for a program that requires only that
|
||||
// the player has at least the given skill level.
|
||||
function requireLevel(lvl) {
|
||||
return function() {
|
||||
return Player.hacking_skill >= lvl;
|
||||
}
|
||||
}
|
||||
|
||||
function Program(name, create) {
|
||||
this.name = name;
|
||||
this.create = create;
|
||||
}
|
||||
|
||||
Program.prototype.htmlID = function() {
|
||||
const name = this.name.endsWith('.exe') ? this.name.slice(0, -('.exe'.length)) : this.name;
|
||||
return "create-program-"+name;
|
||||
}
|
||||
|
||||
/* Create programs */
|
||||
let Programs = {
|
||||
NukeProgram: "NUKE.exe",
|
||||
BruteSSHProgram: "BruteSSH.exe",
|
||||
FTPCrackProgram: "FTPCrack.exe",
|
||||
RelaySMTPProgram: "relaySMTP.exe",
|
||||
HTTPWormProgram: "HTTPWorm.exe",
|
||||
SQLInjectProgram: "SQLInject.exe",
|
||||
DeepscanV1: "DeepscanV1.exe",
|
||||
DeepscanV2: "DeepscanV2.exe",
|
||||
ServerProfiler: "ServerProfiler.exe",
|
||||
AutoLink: "AutoLink.exe",
|
||||
Flight: "fl1ght.exe",
|
||||
BitFlume: "b1t_flum3.exe"
|
||||
const Programs = {
|
||||
NukeProgram: new Program("NUKE.exe", {
|
||||
level: 1,
|
||||
tooltip:"This virus is used to gain root access to a machine if enough ports are opened.",
|
||||
req: requireLevel(1),
|
||||
time: CONSTANTS.MillisecondsPerFiveMinutes,
|
||||
}),
|
||||
BruteSSHProgram: new Program("BruteSSH.exe", {
|
||||
level: 50,
|
||||
tooltip:"This program executes a brute force attack that opens SSH ports",
|
||||
req: requireLevel(50),
|
||||
time: CONSTANTS.MillisecondsPerFiveMinutes * 2,
|
||||
}),
|
||||
FTPCrackProgram: new Program("FTPCrack.exe", {
|
||||
level: 100,
|
||||
tooltip:"This program cracks open FTP ports",
|
||||
req: requireLevel(100),
|
||||
time: CONSTANTS.MillisecondsPerHalfHour,
|
||||
}),
|
||||
RelaySMTPProgram: new Program("relaySMTP.exe", {
|
||||
level: 250,
|
||||
tooltip:"This program opens SMTP ports by redirecting data",
|
||||
req: requireLevel(250),
|
||||
time: CONSTANTS.MillisecondsPer2Hours,
|
||||
}),
|
||||
HTTPWormProgram: new Program("HTTPWorm.exe", {
|
||||
level: 500,
|
||||
tooltip:"This virus opens up HTTP ports",
|
||||
req: requireLevel(500),
|
||||
time: CONSTANTS.MillisecondsPer4Hours,
|
||||
}),
|
||||
SQLInjectProgram: new Program("SQLInject.exe", {
|
||||
level: 750,
|
||||
tooltip:"This virus opens SQL ports",
|
||||
req: requireLevel(750),
|
||||
time: CONSTANTS.MillisecondsPer8Hours,
|
||||
}),
|
||||
DeepscanV1: new Program("DeepscanV1.exe", {
|
||||
level: 75,
|
||||
tooltip:"This program allows you to use the scan-analyze command with a depth up to 5",
|
||||
req: requireLevel(75),
|
||||
time: CONSTANTS.MillisecondsPerQuarterHour,
|
||||
}),
|
||||
DeepscanV2: new Program("DeepscanV2.exe", {
|
||||
level: 400,
|
||||
tooltip:"This program allows you to use the scan-analyze command with a depth up to 10",
|
||||
req: requireLevel(400),
|
||||
time: CONSTANTS.MillisecondsPer2Hours,
|
||||
}),
|
||||
ServerProfiler: new Program("ServerProfiler.exe", {
|
||||
level: 75,
|
||||
tooltip:"This program is used to display hacking and Netscript-related information about servers",
|
||||
req: requireLevel(75),
|
||||
time: CONSTANTS.MillisecondsPerHalfHour,
|
||||
}),
|
||||
AutoLink: new Program("AutoLink.exe", {
|
||||
level: 25,
|
||||
tooltip:"This program allows you to directly connect to other servers through the 'scan-analyze' command",
|
||||
req: requireLevel(25),
|
||||
time: CONSTANTS.MillisecondsPerQuarterHour,
|
||||
}),
|
||||
BitFlume: new Program("b1t_flum3.exe", {
|
||||
level: 5,
|
||||
tooltip:"This program creates a portal to the BitNode Nexus (allows you to restart and switch BitNodes)",
|
||||
req: function() {return Player.sourceFiles.length > 0 && Player.hacking_skill >= 5},
|
||||
time: CONSTANTS.MillisecondsPerFiveMinutes / 5,
|
||||
}),
|
||||
// special because you can't create it.
|
||||
Flight: new Program("fl1ght.exe"),
|
||||
};
|
||||
|
||||
var nukeALink, bruteSshALink, ftpCrackALink, relaySmtpALink, httpWormALink, sqlInjectALink,
|
||||
deepscanv1ALink, deepscanv2ALink, servProfilerALink, autolinkALink, bitFlumeALink;
|
||||
function displayCreateProgramContent() {
|
||||
nukeALink.style.display = "none";
|
||||
bruteSshALink.style.display = "none";
|
||||
ftpCrackALink.style.display = "none";
|
||||
relaySmtpALink.style.display = "none";
|
||||
httpWormALink.style.display = "none";
|
||||
sqlInjectALink.style.display = "none";
|
||||
deepscanv1ALink.style.display = "none";
|
||||
deepscanv2ALink.style.display = "none";
|
||||
servProfilerALink.style.display = "none";
|
||||
autolinkALink.style.display = "none";
|
||||
bitFlumeALink.style.display = "none";
|
||||
// this has the same key as 'Programs', not program names
|
||||
const aLinks = {};
|
||||
|
||||
//NUKE.exe (in case you delete it lol)
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.NukeProgram) == -1) {
|
||||
nukeALink.style.display = "inline-block";
|
||||
}
|
||||
//BruteSSH
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.BruteSSHProgram) == -1 &&
|
||||
Player.hacking_skill >= 50) {
|
||||
bruteSshALink.style.display = "inline-block";
|
||||
}
|
||||
//FTPCrack
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.FTPCrackProgram) == -1 &&
|
||||
Player.hacking_skill >= 100) {
|
||||
ftpCrackALink.style.display = "inline-block";
|
||||
}
|
||||
//relaySMTP
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.RelaySMTPProgram) == -1 &&
|
||||
Player.hacking_skill >= 250) {
|
||||
relaySmtpALink.style.display = "inline-block";
|
||||
}
|
||||
//HTTPWorm
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.HTTPWormProgram) == -1 &&
|
||||
Player.hacking_skill >= 500) {
|
||||
httpWormALink.style.display = "inline-block";
|
||||
}
|
||||
//SQLInject
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.SQLInjectProgram) == -1 &&
|
||||
Player.hacking_skill >= 750) {
|
||||
sqlInjectALink.style.display = "inline-block";
|
||||
}
|
||||
//Deepscan V1 and V2
|
||||
if (!Player.hasProgram(Programs.DeepscanV1) && Player.hacking_skill >= 75) {
|
||||
deepscanv1ALink.style.display = "inline-block";
|
||||
}
|
||||
if (!Player.hasProgram(Programs.DeepscanV2) && Player.hacking_skill >= 400) {
|
||||
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";
|
||||
}
|
||||
//Bit Flume
|
||||
if (!Player.hasProgram(Programs.BitFlume) && Player.sourceFiles.length > 0 && Player.hacking_skill >= 5) {
|
||||
bitFlumeALink.style.display = "inline-block";
|
||||
function displayCreateProgramContent() {
|
||||
for(const key in aLinks) {
|
||||
const p = Programs[key]
|
||||
aLinks[key].style.display = "none";
|
||||
if(!Player.hasProgram(p.name) && p.create.req()){
|
||||
aLinks[key].style.display = "inline-block";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Returns the number of programs that are currently available to be created
|
||||
function getNumAvailableCreateProgram() {
|
||||
var count = 0;
|
||||
//PortHack.exe (in case you delete it lol)
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.NukeProgram) == -1) {
|
||||
++count;
|
||||
}
|
||||
//BruteSSH
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.BruteSSHProgram) == -1 &&
|
||||
Player.hacking_skill >= 50) {
|
||||
++count;
|
||||
}
|
||||
//FTPCrack
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.FTPCrackProgram) == -1 &&
|
||||
Player.hacking_skill >= 100) {
|
||||
++count;
|
||||
}
|
||||
//relaySMTP
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.RelaySMTPProgram) == -1 &&
|
||||
Player.hacking_skill >= 250) {
|
||||
++count;
|
||||
}
|
||||
//HTTPWorm
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.HTTPWormProgram) == -1 &&
|
||||
Player.hacking_skill >= 500) {
|
||||
++count;
|
||||
}
|
||||
//SQLInject
|
||||
if (Player.getHomeComputer().programs.indexOf(Programs.SQLInjectProgram) == -1 &&
|
||||
Player.hacking_skill >= 750) {
|
||||
++count;
|
||||
}
|
||||
//Deepscan V1 and V2
|
||||
if (!Player.hasProgram(Programs.DeepscanV1) && Player.hacking_skill >= 75) {
|
||||
++count;
|
||||
}
|
||||
if (!Player.hasProgram(Programs.DeepscanV2) && Player.hacking_skill >= 400) {
|
||||
++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;
|
||||
}
|
||||
//Bit Flume
|
||||
if (!Player.hasProgram(Programs.BitFlume) && Player.sourceFiles.length > 0 && Player.hacking_skill >= 5) {
|
||||
++count;
|
||||
for(const key in Programs) {
|
||||
if(Programs[key].create === undefined) { // a program we can't create
|
||||
continue
|
||||
}
|
||||
if(Player.hasProgram(Programs[key].name)) { // can't create it twice
|
||||
continue
|
||||
}
|
||||
|
||||
if(!Programs[key].create.req()) { // if you don't fullfill the creation requirement
|
||||
continue
|
||||
}
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
if (Player.firstProgramAvailable === false && count > 0) {
|
||||
Player.firstProgramAvailable = true;
|
||||
document.getElementById("create-program-tab").style.display = "list-item";
|
||||
@@ -145,116 +134,25 @@ function getNumAvailableCreateProgram() {
|
||||
|
||||
function initCreateProgramButtons() {
|
||||
var createProgramList = document.getElementById("create-program-list");
|
||||
nukeALink = createElement("a", {
|
||||
class:"a-link-button", id:"create-program-nuke", innerText:Programs.NukeProgram,
|
||||
tooltip:"This virus is used to gain root access to a machine if enough ports are opened.",
|
||||
});
|
||||
createProgramList.appendChild(nukeALink);
|
||||
for(const key in Programs) {
|
||||
if(Programs[key].create === undefined) {
|
||||
continue
|
||||
}
|
||||
const elem = createElement("a", {
|
||||
class: "a-link-button", id: Programs[key].htmlID(), innerText: Programs[key].name,
|
||||
tooltip: Programs[key].create.tooltip,
|
||||
});
|
||||
aLinks[key] = elem;
|
||||
createProgramList.appendChild(elem);
|
||||
}
|
||||
|
||||
bruteSshALink = createElement("a", {
|
||||
class:"a-link-button", id:"create-program-brutessh", innerText:Programs.BruteSSHProgram,
|
||||
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() {
|
||||
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;
|
||||
});
|
||||
bitFlumeALink.addEventListener("click", function() {
|
||||
Player.startCreateProgramWork(Programs.BitFlume, CONSTANTS.MillisecondsPerFiveMinutes / 5, 5);
|
||||
return false;
|
||||
});
|
||||
for(const key in aLinks) {
|
||||
const p = Programs[key]
|
||||
aLinks[key].addEventListener("click", function() {
|
||||
Player.startCreateProgramWork(p.name, p.create.time, p.create.level);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export {Programs, displayCreateProgramContent, getNumAvailableCreateProgram,
|
||||
|
||||
Reference in New Issue
Block a user