Slight rebalancing. Added kill() and killall() commands

This commit is contained in:
Daniel Xie 2017-06-05 20:34:00 -05:00
parent f7018f082c
commit d3fa9f8c6e
5 changed files with 81 additions and 11 deletions

@ -40,7 +40,7 @@ CONSTANTS = {
ScriptWhileRamCost: 0.2, ScriptWhileRamCost: 0.2,
ScriptForRamCost: 0.2, ScriptForRamCost: 0.2,
ScriptIfRamCost: 0.1, ScriptIfRamCost: 0.1,
ScriptHackRamCost: 0.15, ScriptHackRamCost: 0.1,
ScriptGrowRamCost: 0.15, ScriptGrowRamCost: 0.15,
ScriptWeakenRamCost: 0.15, ScriptWeakenRamCost: 0.15,
ScriptNukeRamCost: 0.05, ScriptNukeRamCost: 0.05,
@ -53,7 +53,7 @@ CONSTANTS = {
ScriptExecRamCost: 1.1, ScriptExecRamCost: 1.1,
ScriptScpRamCost: 0.5, ScriptScpRamCost: 0.5,
ScriptHasRootAccessRamCost: 0.05, ScriptHasRootAccessRamCost: 0.05,
ScriptGetHostnameRamCost: 0.1, ScriptGetHostnameRamCost: 0.05,
ScriptGetHackingLevelRamCost: 0.05, ScriptGetHackingLevelRamCost: 0.05,
ScriptGetServerMoneyRamCost: 0.1, ScriptGetServerMoneyRamCost: 0.1,
ScriptGetServerSecurityRamCost: 0.1, ScriptGetServerSecurityRamCost: 0.1,
@ -335,6 +335,18 @@ CONSTANTS = {
"second argument is a string with the hostname or IP of the 'target server' on which to run the script. The specified script must exist on the target server. Returns " + "second argument is a string with the hostname or IP of the 'target server' on which to run the script. The specified script must exist on the target server. Returns " +
"true if the script is successfully started, and false otherwise. Does NOT work while offline<br> " + "true if the script is successfully started, and false otherwise. Does NOT work while offline<br> " +
"Example: exec('generic-hack.script', 'foodnstuff'); <br> The example above will try to launch the script 'generic-hack.script' on the 'foodnstuff' server.<br><br>" + "Example: exec('generic-hack.script', 'foodnstuff'); <br> The example above will try to launch the script 'generic-hack.script' on the 'foodnstuff' server.<br><br>" +
"<i>kill(script, [hostname/ip])</i><br> Kills a script on a server. The first argument must be a string with the name of the script. The name is case-sensitive. " +
"The second argument must be a string with the hostname or IP of the target server. The function will try to kill the specified script on the target server. " +
"The second argument is optional. If it is omitted, then the function will try to kill the specified script on the current server (the server running " +
"the script that calls this function). If the script is found on the specified server and is running, then it will be killed and this function " +
"will return true. Otherwise, this function will return false. <br> " +
"Example: kill('foo.script', 'foodnstuff');<br>" +
"Example: kill('foo.script');<br>" +
"The first example above will look for a script called 'foo.script' on the 'foodnstuff' server. If the script exists and is running, then it will " +
"be killed and the function will return true. Otherwise false will be returned. The second example above will do the same thing, except on the " +
"current server (the server running the script that calls the kill() function).<br><br>" +
"<i>killall(hostname/ip)</i><br> Kills all running scripts on the specified server. This function takes a single argument which " +
"must be a string containing the hostname or IP of the target server. This function will always return true. <br><br>" +
"<i>scp(script, hostname/ip)</i><br>Copies a script to another server. The first argument is a string with the filename of the script " + "<i>scp(script, hostname/ip)</i><br>Copies a script to another server. The first argument is a string with the filename of the script " +
"to be copied. The second argument is a string with the hostname or IP of the destination server. Returns true if the script is successfully " + "to be copied. The second argument is a string with the hostname or IP of the destination server. Returns true if the script is successfully " +
"copied over and false otherwise. <br> Example: scp('hack-template.script', 'foodnstuff');<br><br>" + "copied over and false otherwise. <br> Example: scp('hack-template.script', 'foodnstuff');<br><br>" +
@ -520,6 +532,7 @@ CONSTANTS = {
"such as a variable assignment, a function call, a binary operator, getting a variable's value, etc. used to take up to several seconds, " + "such as a variable assignment, a function call, a binary operator, getting a variable's value, etc. used to take up to several seconds, " +
"now each one should only take 750 milliseconds). <br> " + "now each one should only take 750 milliseconds). <br> " +
"-Percentage money stolen when hacking lowered to compensate for faster script speeds<br>" + "-Percentage money stolen when hacking lowered to compensate for faster script speeds<br>" +
"-Slightly lowered the runtime of weaken()<br>" +
"-Lowered base growth rate by 25%(which affects amount of money gained from grow())<br>" + "-Lowered base growth rate by 25%(which affects amount of money gained from grow())<br>" +
"-Hacking experience granted by grow() halved<b>" + "-Hacking experience granted by grow() halved<b>" +
"-Weaken() is now 10% faster, but only grants 3 base hacking exp upon completion instead of 5 <br>" + "-Weaken() is now 10% faster, but only grants 3 base hacking exp upon completion instead of 5 <br>" +
@ -528,6 +541,8 @@ CONSTANTS = {
"-Added getServerRequiredHackingLevel(server) Netscript command. <br>" + "-Added getServerRequiredHackingLevel(server) Netscript command. <br>" +
"-Added fileExists(file, [server]) Netscript command, which is used to check if a script/program exists on a " + "-Added fileExists(file, [server]) Netscript command, which is used to check if a script/program exists on a " +
"specified server<br>" + "specified server<br>" +
"-Added killall Terminal command. Kills all running scripts on the current machine<br> " +
"-Added kill() and killall() Netscript commands. Used to kill scripts on specified machines. See Netscript documentation<br>" +
"v0.19.7<br>" + "v0.19.7<br>" +
"-Added changelog to Options menu<br>" + "-Added changelog to Options menu<br>" +
"-Bug fix with autocompletion (wasn't working properly for capitalized filenames/programs<br><br>" + "-Bug fix with autocompletion (wasn't working properly for capitalized filenames/programs<br><br>" +

@ -257,9 +257,61 @@ function evaluate(exp, workerScript) {
reject(e); reject(e);
}); });
} else if (exp.func.value == "kill") { } else if (exp.func.value == "kill") {
if (exp.args.length != 1 && exp.args.length != 2) {
return reject(makeRuntimeRejectMsg(workerScript, "kill() call has incorrect number of arguments. Takes 1 or 2 arguments"));
}
var argPromises = exp.args.map(function(arg) {
return evaluate(arg, workerScript);
});
var filename = "";
Promise.all(argPromises).then(function(args) {
if (env.stopFlag) {return reject(workerScript);}
filename = args[0];
if (exp.args.length == 2) {
return Promise.resolve(workerScript.serverIp);
} else {
return evaluate(exp.args[1], workerScript);
}
}).then(function(ip) {
var server = getServer(ip);
if (server == null) {
workerScript.scriptRef.log("kill() failed. Invalid IP or hostname passed in: " + ip);
return reject(makeRuntimeRejectMsg(workerScript, "Invalid IP or hostname passed into kill() command"));
}
for (var i = 0; i < server.runningScripts.length; ++i) {
if (filename == server.runningScripts[i].filename) {
killWorkerScript(filename, server.ip);
workerScript.scriptRef.log("Killing " + scriptName + ". May take up to a few minutes for the scripts to die...");
return resolve(true);
}
}
workerScript.scriptRef.log("kill() failed. No such script "+ scriptName + " on " + server.hostname);
return resolve(false);
}).catch(function(e) {
reject(e);
});
} else if (exp.func.value == "killall") { } else if (exp.func.value == "killall") {
if (exp.args.length != 1) {
return reject(makeRuntimeRejectMsg(workerScript, "killall() call has incorrect number of arguments. Takes 1 argument"));
}
var ipPromise = evaluate(exp.args[0], workerScript);
ipPromise.then(function(ip) {
if (env.stopFlag) {return reject(workerScript);}
var server = getServer(ip);
if (server == null) {
workerScript.scriptRef.log("killall() failed. Invalid IP or hostname passed in: " + ip);
return reject(makeRuntimeRejectMsg(workerScript, "Invalid IP or hostname passed into killall() command"));
}
workerScript.scriptRef.log("killall(): Killing all scrips on " + server.hostname);
for (var i = server.runningScripts.length; i >= 0; --i) {
killWorkerScript(server.runningScripts[i], server.ip);
}
resolve(true);
}, function(e) {
reject(e);
});
} else if (exp.func.value == "scp") { } else if (exp.func.value == "scp") {
if (exp.args.length != 2) { if (exp.args.length != 2) {
return reject(makeRuntimeRejectMsg(workerScript, "scp() call has incorrect number of arguments. Takes 2 arguments")); return reject(makeRuntimeRejectMsg(workerScript, "scp() call has incorrect number of arguments. Takes 2 arguments"));
@ -921,7 +973,7 @@ function scriptCalculatePercentMoneyHacked(server) {
function scriptCalculateGrowTime(server) { function scriptCalculateGrowTime(server) {
var difficultyMult = server.requiredHackingSkill * server.hackDifficulty; var difficultyMult = server.requiredHackingSkill * server.hackDifficulty;
var skillFactor = (2.5 * difficultyMult + 500) / (Player.hacking_skill + 50); var skillFactor = (2.5 * difficultyMult + 500) / (Player.hacking_skill + 50);
var growTime = skillFactor * Player.hacking_speed_mult * 17; //This is in seconds var growTime = skillFactor * Player.hacking_speed_mult * 16; //This is in seconds
return growTime * 1000; return growTime * 1000;
} }
@ -929,6 +981,6 @@ function scriptCalculateGrowTime(server) {
function scriptCalculateWeakenTime(server) { function scriptCalculateWeakenTime(server) {
var difficultyMult = server.requiredHackingSkill * server.hackDifficulty; var difficultyMult = server.requiredHackingSkill * server.hackDifficulty;
var skillFactor = (2.5 * difficultyMult + 500) / (Player.hacking_skill + 50); var skillFactor = (2.5 * difficultyMult + 500) / (Player.hacking_skill + 50);
var weakenTime = skillFactor * Player.hacking_speed_mult * 45; //This is in seconds var weakenTime = skillFactor * Player.hacking_speed_mult * 40; //This is in seconds
return weakenTime * 1000; return weakenTime * 1000;
} }

@ -204,7 +204,7 @@ Script.prototype.reset = function() {
//Updates how much RAM the script uses when it is running. //Updates how much RAM the script uses when it is running.
Script.prototype.updateRamUsage = function() { Script.prototype.updateRamUsage = function() {
var baseRam = 1.5; var baseRam = 1.4;
var codeCopy = this.code.repeat(1); var codeCopy = this.code.repeat(1);
codeCopy = codeCopy.replace(/\s/g,''); //Remove all whitespace codeCopy = codeCopy.replace(/\s/g,''); //Remove all whitespace

@ -412,11 +412,14 @@ var Terminal = {
//Replace all extra whitespace in command with a single space //Replace all extra whitespace in command with a single space
command = command.replace(/\s\s+/g, ' '); command = command.replace(/\s\s+/g, ' ');
Terminal.commandHistory.push(command);
if (Terminal.commandHistory.length > 50) { if (Terminal.commandHistory[Terminal.commandHistory.length-1] != command) {
Terminal.commandHistory.splice(0, 1); Terminal.commandHistory.push(command);
if (Terminal.commandHistory.length > 50) {
Terminal.commandHistory.splice(0, 1);
}
Terminal.commandHistoryIndex = Terminal.commandHistory.length;
} }
Terminal.commandHistoryIndex = Terminal.commandHistory.length;
//Process any aliases //Process any aliases
command = substituteAliases(command); command = substituteAliases(command);

@ -1042,7 +1042,7 @@ var Engine = {
return false; return false;
}); });
relaySmtpALink.addEventListener("click", function() { relaySmtpALink.addEventListener("click", function() {
Player.startCreateProgramWork(Programs.RelaySMTPProgram. CONSTANTS.MillisecondsPer2Hours, 250); Player.startCreateProgramWork(Programs.RelaySMTPProgram, CONSTANTS.MillisecondsPer2Hours, 250);
return false; return false;
}); });
httpWormALink.addEventListener("click", function() { httpWormALink.addEventListener("click", function() {