From 5dee4980e0c0f48991af796954be6af879001fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Hoekstra?= Date: Wed, 4 May 2022 17:11:08 +0200 Subject: [PATCH] Add safeguard toggle to ns.killall() --- src/NetscriptFunctions.ts | 13 +++++++++---- src/ScriptEditor/NetscriptDefinitions.d.ts | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts index 923d837a5..14d953f1f 100644 --- a/src/NetscriptFunctions.ts +++ b/src/NetscriptFunctions.ts @@ -1233,16 +1233,21 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { return false; } }, - killall: function (_hostname: unknown = workerScript.hostname): boolean { + killall: function (_hostname: unknown = workerScript.hostname, _safetyguard: unknown = true): boolean { updateDynamicRam("killall", getRamCost(Player, "killall")); const hostname = helper.string("killall", "hostname", _hostname); + const safetyguard = helper.boolean(_safetyguard); if (hostname === undefined) { - throw makeRuntimeErrorMsg("killall", "Takes 1 argument"); + throw makeRuntimeErrorMsg("killall", "Usage: killall(hostname, [safetyguard boolean])"); } const server = safeGetServer(hostname, "killall"); - const scriptsRunning = server.runningScripts.length > 0; + + let scriptsKilled = 0; + for (let i = server.runningScripts.length - 1; i >= 0; --i) { + if (safetyguard === true && server.runningScripts[i].pid == workerScript.pid) continue; killWorkerScript(server.runningScripts[i], server.hostname, false); + ++scriptsKilled; } WorkerScriptStartStopEventEmitter.emit(); workerScript.log( @@ -1250,7 +1255,7 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS { () => `Killing all scripts on '${server.hostname}'. May take a few minutes for the scripts to die.`, ); - return scriptsRunning; + return scriptsKilled > 0; }, exit: function (): void { updateDynamicRam("exit", getRamCost(Player, "exit")); diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index e98b03557..083b0327f 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -5311,9 +5311,10 @@ export interface NS { * If no host is defined, it will kill all scripts, where the script is running. * * @param host - IP or hostname of the server on which to kill all scripts. + * @param safetyguard - Skips the script that calls this function * @returns True if any scripts were killed, and false otherwise. */ - killall(host?: string): boolean; + killall(host?: string, safetyguard?: boolean): boolean; /** * Terminates the current script immediately.