mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-21 21:52:30 +01:00
Merge pull request #407 from kopelli/refactor-programs-from-terminal
Refactor - Determine program execution from terminal via hashmap instead switch statement
This commit is contained in:
commit
b5e8d61ad6
290
src/Terminal.js
290
src/Terminal.js
@ -1827,142 +1827,164 @@ let Terminal = {
|
|||||||
if (splitArgs.length > 1) {
|
if (splitArgs.length > 1) {
|
||||||
programName = splitArgs[0];
|
programName = splitArgs[0];
|
||||||
}
|
}
|
||||||
switch (programName) {
|
|
||||||
case Programs.NukeProgram.name:
|
|
||||||
if (s.hasAdminRights) {
|
|
||||||
post("You already have root access to this computer. There is no reason to run NUKE.exe");
|
|
||||||
} else {
|
|
||||||
if (s.openPortCount >= Player.getCurrentServer().numOpenPortsRequired) {
|
|
||||||
s.hasAdminRights = true;
|
|
||||||
post("NUKE successful! Gained root access to " + Player.getCurrentServer().hostname);
|
|
||||||
//TODO Make this take time rather than be instant
|
|
||||||
} else {
|
|
||||||
post("NUKE unsuccessful. Not enough ports have been opened");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Programs.BruteSSHProgram.name:
|
|
||||||
if (s.sshPortOpen) {
|
|
||||||
post("SSH Port (22) is already open!");
|
|
||||||
} else {
|
|
||||||
s.sshPortOpen = true;
|
|
||||||
post("Opened SSH Port(22)!")
|
|
||||||
++s.openPortCount;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Programs.FTPCrackProgram.name:
|
|
||||||
if (s.ftpPortOpen) {
|
|
||||||
post("FTP Port (21) is already open!");
|
|
||||||
} else {
|
|
||||||
s.ftpPortOpen = true;
|
|
||||||
post("Opened FTP Port (21)!");
|
|
||||||
++s.openPortCount;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Programs.RelaySMTPProgram.name:
|
|
||||||
if (s.smtpPortOpen) {
|
|
||||||
post("SMTP Port (25) is already open!");
|
|
||||||
} else {
|
|
||||||
s.smtpPortOpen = true;
|
|
||||||
post("Opened SMTP Port (25)!");
|
|
||||||
++s.openPortCount;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Programs.HTTPWormProgram.name:
|
|
||||||
if (s.httpPortOpen) {
|
|
||||||
post("HTTP Port (80) is already open!");
|
|
||||||
} else {
|
|
||||||
s.httpPortOpen = true;
|
|
||||||
post("Opened HTTP Port (80)!");
|
|
||||||
++s.openPortCount;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Programs.SQLInjectProgram.name:
|
|
||||||
if (s.sqlPortOpen) {
|
|
||||||
post("SQL Port (1433) is already open!");
|
|
||||||
} else {
|
|
||||||
s.sqlPortOpen = true;
|
|
||||||
post("Opened SQL Port (1433)!");
|
|
||||||
++s.openPortCount;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Programs.ServerProfiler.name:
|
|
||||||
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;
|
|
||||||
case Programs.AutoLink.name:
|
|
||||||
post("This executable cannot be run.");
|
|
||||||
post("AutoLink.exe lets you automatically connect to other servers when using 'scan-analyze'.");
|
|
||||||
post("When using scan-analyze, click on a server's hostname to connect to it.");
|
|
||||||
break;
|
|
||||||
case Programs.DeepscanV1.name:
|
|
||||||
post("This executable cannot be run.");
|
|
||||||
post("DeepscanV1.exe lets you run 'scan-analyze' with a depth up to 5.");
|
|
||||||
break;
|
|
||||||
case Programs.DeepscanV2.name:
|
|
||||||
post("This executable cannot be run.");
|
|
||||||
post("DeepscanV2.exe lets you run 'scan-analyze' with a depth up to 10.");
|
|
||||||
break;
|
|
||||||
case Programs.Flight.name:
|
|
||||||
const fulfilled = Player.augmentations.length >= 30 &&
|
|
||||||
Player.money.gt(1e11) &&
|
|
||||||
((Player.hacking_skill >= 2500)||
|
|
||||||
(Player.strength >= 1500 &&
|
|
||||||
Player.defense >= 1500 &&
|
|
||||||
Player.dexterity >= 1500 &&
|
|
||||||
Player.agility >= 1500));
|
|
||||||
if(!fulfilled) {
|
|
||||||
post("Augmentations: " + Player.augmentations.length + " / 30");
|
|
||||||
|
|
||||||
post("Money: " + numeral(Player.money.toNumber()).format('($0.000a)') + " / " + numeral(1e11).format('($0.000a)'));
|
// TODO: refactor this/these out of Terminal. This logic could reside closer to the Programs themselves.
|
||||||
post("One path below must be fulfilled...");
|
/**
|
||||||
post("----------HACKING PATH----------");
|
* @typedef {function (server=, args=)} ProgramHandler
|
||||||
post("Hacking skill: " + Player.hacking_skill + " / 2500");
|
* @param {Server} server The current server the program is being executed against
|
||||||
post("----------COMBAT PATH----------");
|
* @param {string[]} args The command line arguments passed in to the program
|
||||||
post("Strength: " + Player.strength + " / 1500");
|
* @returns {void}
|
||||||
post("Defense: " + Player.defense + " / 1500");
|
*/
|
||||||
post("Dexterity: " + Player.dexterity + " / 1500");
|
/**
|
||||||
post("Agility: " + Player.agility + " / 1500");
|
* @type {Object.<string, ProgramHandler}
|
||||||
} else {
|
*/
|
||||||
post("We will contact you.");
|
const programHandlers = {};
|
||||||
post("-- Daedalus --");
|
programHandlers[Programs.NukeProgram.name] = (server) => {
|
||||||
}
|
if (server.hasAdminRights) {
|
||||||
break;
|
post("You already have root access to this computer. There is no reason to run NUKE.exe");
|
||||||
case Programs.BitFlume.name:
|
return;
|
||||||
var yesBtn = yesNoBoxGetYesButton(),
|
}
|
||||||
noBtn = yesNoBoxGetNoButton();
|
|
||||||
yesBtn.innerHTML = "Travel to BitNode Nexus";
|
|
||||||
noBtn.innerHTML = "Cancel";
|
|
||||||
yesBtn.addEventListener("click", function() {
|
|
||||||
hackWorldDaemon(Player.bitNodeN, true);
|
|
||||||
return yesNoBoxClose();
|
|
||||||
});
|
|
||||||
noBtn.addEventListener("click", function() {
|
|
||||||
return yesNoBoxClose();
|
|
||||||
});
|
|
||||||
yesNoBoxCreate("WARNING: USING THIS PROGRAM WILL CAUSE YOU TO LOSE ALL OF YOUR PROGRESS ON THE CURRENT BITNODE.<br><br>" +
|
|
||||||
"Do you want to travel to the BitNode Nexus? This allows you to reset the current BitNode " +
|
|
||||||
"and select a new one.");
|
|
||||||
|
|
||||||
break;
|
if (server.openPortCount >= Player.getCurrentServer().numOpenPortsRequired) {
|
||||||
default:
|
server.hasAdminRights = true;
|
||||||
post("Invalid executable. Cannot be run");
|
post("NUKE successful! Gained root access to " + Player.getCurrentServer().hostname);
|
||||||
return;
|
// TODO: Make this take time rather than be instant
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
post("NUKE unsuccessful. Not enough ports have been opened");
|
||||||
|
};
|
||||||
|
programHandlers[Programs.BruteSSHProgram.name] = (server) => {
|
||||||
|
if (server.sshPortOpen) {
|
||||||
|
post("SSH Port (22) is already open!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
server.sshPortOpen = true;
|
||||||
|
post("Opened SSH Port(22)!")
|
||||||
|
server.openPortCount++;
|
||||||
|
};
|
||||||
|
programHandlers[Programs.FTPCrackProgram.name] = (server) => {
|
||||||
|
if (server.ftpPortOpen) {
|
||||||
|
post("FTP Port (21) is already open!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
server.ftpPortOpen = true;
|
||||||
|
post("Opened FTP Port (21)!");
|
||||||
|
server.openPortCount++;
|
||||||
|
};
|
||||||
|
programHandlers[Programs.RelaySMTPProgram.name] = (server) => {
|
||||||
|
if (server.smtpPortOpen) {
|
||||||
|
post("SMTP Port (25) is already open!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
server.smtpPortOpen = true;
|
||||||
|
post("Opened SMTP Port (25)!");
|
||||||
|
server.openPortCount++;
|
||||||
|
};
|
||||||
|
programHandlers[Programs.HTTPWormProgram.name] = (server) => {
|
||||||
|
if (serv.httpPortOpen) {
|
||||||
|
post("HTTP Port (80) is already open!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
server.httpPortOpen = true;
|
||||||
|
post("Opened HTTP Port (80)!");
|
||||||
|
server.openPortCount++;
|
||||||
|
};
|
||||||
|
programHandlers[Programs.SQLInjectProgram.name] = (server) => {
|
||||||
|
if (server.sqlPortOpen) {
|
||||||
|
post("SQL Port (1433) is already open!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
server.sqlPortOpen = true;
|
||||||
|
post("Opened SQL Port (1433)!");
|
||||||
|
server.openPortCount++;
|
||||||
|
};
|
||||||
|
programHandlers[Programs.ServerProfiler.name] = (server, args) => {
|
||||||
|
if (args.length !== 2) {
|
||||||
|
post("Must pass a server hostname or IP as an argument for ServerProfiler.exe");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const targetServer = getServer(args[1]);
|
||||||
|
if (targetServer == null) {
|
||||||
|
post("Invalid server IP/hostname");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
post(targetServer.hostname + ":");
|
||||||
|
post("Server base security level: " + targetServer.baseDifficulty);
|
||||||
|
post("Server current security level: " + targetServer.hackDifficulty);
|
||||||
|
post("Server growth rate: " + targetServer.serverGrowth);
|
||||||
|
post("Netscript hack() execution time: " + formatNumber(scriptCalculateHackingTime(targetServer), 1) + "s");
|
||||||
|
post("Netscript grow() execution time: " + formatNumber(scriptCalculateGrowTime(targetServer)/1000, 1) + "s");
|
||||||
|
post("Netscript weaken() execution time: " + formatNumber(scriptCalculateWeakenTime(targetServer)/1000, 1) + "s");
|
||||||
|
};
|
||||||
|
programHandlers[Programs.AutoLink.name] = () => {
|
||||||
|
post("This executable cannot be run.");
|
||||||
|
post("AutoLink.exe lets you automatically connect to other servers when using 'scan-analyze'.");
|
||||||
|
post("When using scan-analyze, click on a server's hostname to connect to it.");
|
||||||
|
};
|
||||||
|
programHandlers[Programs.DeepscanV1.name] = () => {
|
||||||
|
post("This executable cannot be run.");
|
||||||
|
post("DeepscanV1.exe lets you run 'scan-analyze' with a depth up to 5.");
|
||||||
|
};
|
||||||
|
programHandlers[Programs.DeepscanV2.name] = () => {
|
||||||
|
post("This executable cannot be run.");
|
||||||
|
post("DeepscanV2.exe lets you run 'scan-analyze' with a depth up to 10.");
|
||||||
|
};
|
||||||
|
programHandlers[Programs.Flight.name] = () => {
|
||||||
|
const fulfilled = Player.augmentations.length >= 30 &&
|
||||||
|
Player.money.gt(1e11) &&
|
||||||
|
((Player.hacking_skill >= 2500)||
|
||||||
|
(Player.strength >= 1500 &&
|
||||||
|
Player.defense >= 1500 &&
|
||||||
|
Player.dexterity >= 1500 &&
|
||||||
|
Player.agility >= 1500));
|
||||||
|
if(!fulfilled) {
|
||||||
|
post("Augmentations: " + Player.augmentations.length + " / 30");
|
||||||
|
|
||||||
|
post("Money: " + numeral(Player.money.toNumber()).format('($0.000a)') + " / " + numeral(1e11).format('($0.000a)'));
|
||||||
|
post("One path below must be fulfilled...");
|
||||||
|
post("----------HACKING PATH----------");
|
||||||
|
post("Hacking skill: " + Player.hacking_skill + " / 2500");
|
||||||
|
post("----------COMBAT PATH----------");
|
||||||
|
post("Strength: " + Player.strength + " / 1500");
|
||||||
|
post("Defense: " + Player.defense + " / 1500");
|
||||||
|
post("Dexterity: " + Player.dexterity + " / 1500");
|
||||||
|
post("Agility: " + Player.agility + " / 1500");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
post("We will contact you.");
|
||||||
|
post("-- Daedalus --");
|
||||||
|
};
|
||||||
|
programHandlers[Programs.BitFlume.name] = () => {
|
||||||
|
const yesBtn = yesNoBoxGetYesButton();
|
||||||
|
const noBtn = yesNoBoxGetNoButton();
|
||||||
|
yesBtn.innerHTML = "Travel to BitNode Nexus";
|
||||||
|
noBtn.innerHTML = "Cancel";
|
||||||
|
yesBtn.addEventListener("click", function() {
|
||||||
|
hackWorldDaemon(Player.bitNodeN, true);
|
||||||
|
return yesNoBoxClose();
|
||||||
|
});
|
||||||
|
noBtn.addEventListener("click", function() {
|
||||||
|
return yesNoBoxClose();
|
||||||
|
});
|
||||||
|
yesNoBoxCreate("WARNING: USING THIS PROGRAM WILL CAUSE YOU TO LOSE ALL OF YOUR PROGRESS ON THE CURRENT BITNODE.<br><br>" +
|
||||||
|
"Do you want to travel to the BitNode Nexus? This allows you to reset the current BitNode " +
|
||||||
|
"and select a new one.");
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!programHandlers.hasOwnProperty(programName)){
|
||||||
|
post("Invalid executable. Cannot be run");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
programHandlers[programName](s, splitArgs);
|
||||||
},
|
},
|
||||||
|
|
||||||
runScript: function(scriptName) {
|
runScript: function(scriptName) {
|
||||||
|
Loading…
Reference in New Issue
Block a user