From 1eddddd14f29413cfb11b4efa3eb7170bbd4bbc2 Mon Sep 17 00:00:00 2001 From: Olivier Gagnon Date: Tue, 23 Mar 2021 16:02:34 -0400 Subject: [PATCH] Added executeCommand netscript function --- .../singularityfunctions/executeCommand.rst | 21 +++++++++++++++++++ src/Netscript/RamCostGenerator.ts | 1 + src/NetscriptFunctions.js | 18 ++++++++++------ 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 doc/source/netscript/singularityfunctions/executeCommand.rst diff --git a/doc/source/netscript/singularityfunctions/executeCommand.rst b/doc/source/netscript/singularityfunctions/executeCommand.rst new file mode 100644 index 000000000..8b083009a --- /dev/null +++ b/doc/source/netscript/singularityfunctions/executeCommand.rst @@ -0,0 +1,21 @@ +executeCommand() Netscript Function +======================================== + +.. js:function:: executeCommand(command) + + :RAM cost: 4 GB + :param string commands: The full string of the command. + + If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function. + + This function writes the command to the terminal and executes it. This + can be used to perform manual hacks. Only one command can be sent at a time. + + Examples: + + .. code-block:: javascript + + await ns.executeCommand('connect CSEC'); + await ns.executeCommand('hack'); + await ns.executeCommand('home'); + // a manual hack will be performed and CSEC will invite you. \ No newline at end of file diff --git a/src/Netscript/RamCostGenerator.ts b/src/Netscript/RamCostGenerator.ts index e40c06186..da1d79c64 100644 --- a/src/Netscript/RamCostGenerator.ts +++ b/src/Netscript/RamCostGenerator.ts @@ -176,6 +176,7 @@ export const RamCosts: IMap = { travelToCity: () => RamCostConstants.ScriptSingularityFn1RamCost, purchaseTor: () => RamCostConstants.ScriptSingularityFn1RamCost, purchaseProgram: () => RamCostConstants.ScriptSingularityFn1RamCost, + executeCommand: () => RamCostConstants.ScriptSingularityFn1RamCost * 2, getStats: () => RamCostConstants.ScriptSingularityFn1RamCost / 4, getCharacterInformation: () => RamCostConstants.ScriptSingularityFn1RamCost / 4, isBusy: () => RamCostConstants.ScriptSingularityFn1RamCost / 4, diff --git a/src/NetscriptFunctions.js b/src/NetscriptFunctions.js index d0651cb1b..3e413e1ef 100644 --- a/src/NetscriptFunctions.js +++ b/src/NetscriptFunctions.js @@ -59,6 +59,7 @@ import { import { HacknetServer, MaxNumberHacknetServers } from "./Hacknet/HacknetServer"; import { CityName } from "./Locations/data/CityNames"; import { LocationName } from "./Locations/data/LocationNames"; +import { Terminal } from "./Terminal"; import { Message } from "./Message/Message"; import { Messages } from "./Message/MessageHelpers"; @@ -537,23 +538,17 @@ function NetscriptFunctions(workerScript) { const runAfterReset = function(cbScript=null) { //Run a script after reset - console.log(cbScript); if (cbScript && isString(cbScript)) { - console.log('here'); const home = Player.getHomeComputer(); for (const script of home.scripts) { - console.log('here 2'+script); if (script.filename === cbScript) { - console.log('here 3'); const ramUsage = script.ramUsage; const ramAvailable = home.maxRam - home.ramUsed; if (ramUsage > ramAvailable) { - console.log('here 4'); return; // Not enough RAM } const runningScriptObj = new RunningScript(script, []); // No args runningScriptObj.threads = 1; // Only 1 thread - console.log('running!'); startWorkerScript(runningScriptObj, home); } } @@ -2684,6 +2679,17 @@ function NetscriptFunctions(workerScript) { workerScript.log("purchaseProgram", `You have purchased the '${item.program}' program. The new program can be found on your home computer.`); return true; }, + executeCommand: function(command) { + updateDynamicRam("executeCommand", getRamCost("executeCommand")); + checkSingularityAccess("executeCommand", 1); + Terminal.executeCommand(command); + return new Promise(function (resolve, reject) { + (function wait(){ + if (!Terminal.hackFlag && !Terminal.analyzeFlag) return resolve(); + setTimeout(wait, 30); + })(); + }); + }, getStats: function() { updateDynamicRam("getStats", getRamCost("getStats")); checkSingularityAccess("getStats", 1);