From 460724033232e35c23f2379263322a0c311593e4 Mon Sep 17 00:00:00 2001 From: Jakob Millen <66464271+JMillen@users.noreply.github.com> Date: Tue, 29 Aug 2023 18:13:55 +1200 Subject: [PATCH 1/3] Bug Fixing Commit: Fixed bug with threads returning floating point numbers, fixed "scp()" element being used incorrectly. --- ...62822812-5b3e-4c26-8fbf-33991a735a9b.vsidx | Bin 0 -> 35120 bytes .../FileContentIndex/read.lock | 0 .vs/Bitburner-Scripts/v17/.suo | Bin 0 -> 11264 bytes .vs/VSWorkspaceState.json | 7 ++++ .vs/slnx.sqlite | Bin 0 -> 90112 bytes hack-manager.js | 33 +++++++++++------- 6 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 .vs/Bitburner-Scripts/FileContentIndex/62822812-5b3e-4c26-8fbf-33991a735a9b.vsidx create mode 100644 .vs/Bitburner-Scripts/FileContentIndex/read.lock create mode 100644 .vs/Bitburner-Scripts/v17/.suo create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite diff --git a/.vs/Bitburner-Scripts/FileContentIndex/62822812-5b3e-4c26-8fbf-33991a735a9b.vsidx b/.vs/Bitburner-Scripts/FileContentIndex/62822812-5b3e-4c26-8fbf-33991a735a9b.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..2bfc3972db97d85939fdbbc8d6712a1f8c34b9e8 GIT binary patch literal 35120 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 literal 0 HcmV?d00001 diff --git a/hack-manager.js b/hack-manager.js index 2a39210..8ad451b 100644 --- a/hack-manager.js +++ b/hack-manager.js @@ -41,9 +41,13 @@ async function little_prep(ns, hack_target, wt, gt, reserved_RAM) { let host_servers = []; for (let i = 0; i < full_list.length; i++) { const server = full_list[i]; + if (!ns.hasRootAccess(server)) { + await ns.gainRootAccess(server); + } + if (ns.hasRootAccess(server)) { - await ns.scp('targeted-grow.js', 'home', server); - await ns.scp('targeted-weaken.js', 'home', server); + await ns.scp('targeted-grow.js', server); + await ns.scp('targeted-weaken.js', server); host_servers.push(server); } } @@ -66,7 +70,7 @@ async function little_prep(ns, hack_target, wt, gt, reserved_RAM) { c -= .001; await ns.sleep(1); if (Date.now() > startTime + 240000) { - throw(Error("line 65, loop longer than 2 minutes either need more RAM or change value of c decrement")); + throw (Error("line 65, loop longer than 2 minutes either need more RAM or change value of c decrement")); } } @@ -121,10 +125,13 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t let host_servers = []; for (let i = 0; i < full_list.length; i++) { const server = full_list[i]; + if (!ns.hasRootAccess(server)) { + await ns.gainRootAccess(server); + } + if (ns.hasRootAccess(server)) { - await ns.scp('targeted-hack.js', 'home', server); - await ns.scp('targeted-grow.js', 'home', server); - await ns.scp('targeted-weaken.js', 'home', server); + await ns.scp('targeted-grow.js', server); + await ns.scp('targeted-weaken.js', server); host_servers.push(server); } } @@ -143,7 +150,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t }) let sec_increase; let startTime = Date.now(); - while(grow_threads * ns.getScriptRam('targeted-grow.js', 'home') + hack_threads * ns.getScriptRam('targeted-hack.js', 'home') + weaken_threads * ns.getScriptRam('targeted-weaken.js', 'home') > usable_RAM - host_servers.length) { + while (grow_threads * ns.getScriptRam('targeted-grow.js', 'home') + hack_threads * ns.getScriptRam('targeted-hack.js', 'home') + weaken_threads * ns.getScriptRam('targeted-weaken.js', 'home') > usable_RAM - host_servers.length) { c += 1; grow_threads = Math.floor(ns.growthAnalyze(hack_target, 1 / (1 - 1 / c))); hack_threads = Math.floor(ns.hackAnalyzeThreads(hack_target, ns.getServerMoneyAvailable(hack_target) / c)) / ns.hackAnalyzeChance(hack_target); @@ -155,7 +162,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t } await ns.sleep(1); if (Date.now() > startTime + 240000) { - throw(Error("line 65, loop longer than 2 minutes either need more RAM or change value of c decrement")); + throw (Error("line 65, loop longer than 2 minutes either need more RAM or change value of c decrement")); } } @@ -181,7 +188,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = weaken_threads; } if (threads >= 1) { - ns.exec('targeted-weaken.js', server, threads, threads, hack_target, n); + ns.exec('targeted-weaken.js', server, Math.floor(threads), Math.floor(threads), hack_target, n); weaken_threads -= threads; await ns.sleep(5); } @@ -197,7 +204,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = grow_threads; } if (threads >= 1) { - ns.exec('targeted-grow.js', server, threads, threads, ns.getWeakenTime(hack_target) - ns.getGrowTime(hack_target) - 500, hack_target, n); + ns.exec('targeted-grow.js', server, Math.floor(threads), Math.floor(threads), Math.floor(ns.getWeakenTime(hack_target) - ns.getGrowTime(hack_target) - 500), hack_target, n); grow_threads -= threads; await ns.sleep(5); } @@ -213,7 +220,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = hack_threads; } if (threads >= 1) { - ns.exec('targeted-hack.js', server, threads, threads, ns.getWeakenTime(hack_target) - ns.getHackTime(hack_target) + 500, hack_target, n, threads); + ns.exec('targeted-hack.js', server, Math.floor(threads), Math.floor(threads), Math.floor(ns.getWeakenTime(hack_target) - ns.getHackTime(hack_target) + 500), hack_target, n, threads); hack_threads -= threads; await ns.sleep(5); } @@ -253,7 +260,7 @@ export async function main(ns) { const hack_threads = ns.hackAnalyzeThreads(hack_target, ns.getServerMoneyAvailable(hack_target) / 2); const sec_increase = ns.hackAnalyzeSecurity(hack_threads) + ns.growthAnalyzeSecurity(grow_threads); let weaken_threads = 1; - + while (ns.weakenAnalyze(weaken_threads) < sec_increase * 1.1) { weaken_threads += 5; await ns.sleep(1); @@ -439,4 +446,4 @@ export async function main(ns) { await ns.sleep(10); } } -} +} \ No newline at end of file From 9e240653706a7524d4f5a1de63065cba3c0e515c Mon Sep 17 00:00:00 2001 From: Jakob Millen <66464271+JMillen@users.noreply.github.com> Date: Tue, 29 Aug 2023 18:30:14 +1200 Subject: [PATCH 2/3] Revert "Bug Fixing Commit:" This reverts commit 460724033232e35c23f2379263322a0c311593e4. --- ...62822812-5b3e-4c26-8fbf-33991a735a9b.vsidx | Bin 35120 -> 0 bytes .../FileContentIndex/read.lock | 0 .vs/Bitburner-Scripts/v17/.suo | Bin 11264 -> 0 bytes .vs/VSWorkspaceState.json | 7 ---- .vs/slnx.sqlite | Bin 90112 -> 0 bytes hack-manager.js | 33 +++++++----------- 6 files changed, 13 insertions(+), 27 deletions(-) delete mode 100644 .vs/Bitburner-Scripts/FileContentIndex/62822812-5b3e-4c26-8fbf-33991a735a9b.vsidx delete mode 100644 .vs/Bitburner-Scripts/FileContentIndex/read.lock delete mode 100644 .vs/Bitburner-Scripts/v17/.suo delete mode 100644 .vs/VSWorkspaceState.json delete mode 100644 .vs/slnx.sqlite diff --git a/.vs/Bitburner-Scripts/FileContentIndex/62822812-5b3e-4c26-8fbf-33991a735a9b.vsidx b/.vs/Bitburner-Scripts/FileContentIndex/62822812-5b3e-4c26-8fbf-33991a735a9b.vsidx deleted file mode 100644 index 2bfc3972db97d85939fdbbc8d6712a1f8c34b9e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35120 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 diff --git a/hack-manager.js b/hack-manager.js index 8ad451b..2a39210 100644 --- a/hack-manager.js +++ b/hack-manager.js @@ -41,13 +41,9 @@ async function little_prep(ns, hack_target, wt, gt, reserved_RAM) { let host_servers = []; for (let i = 0; i < full_list.length; i++) { const server = full_list[i]; - if (!ns.hasRootAccess(server)) { - await ns.gainRootAccess(server); - } - if (ns.hasRootAccess(server)) { - await ns.scp('targeted-grow.js', server); - await ns.scp('targeted-weaken.js', server); + await ns.scp('targeted-grow.js', 'home', server); + await ns.scp('targeted-weaken.js', 'home', server); host_servers.push(server); } } @@ -70,7 +66,7 @@ async function little_prep(ns, hack_target, wt, gt, reserved_RAM) { c -= .001; await ns.sleep(1); if (Date.now() > startTime + 240000) { - throw (Error("line 65, loop longer than 2 minutes either need more RAM or change value of c decrement")); + throw(Error("line 65, loop longer than 2 minutes either need more RAM or change value of c decrement")); } } @@ -125,13 +121,10 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t let host_servers = []; for (let i = 0; i < full_list.length; i++) { const server = full_list[i]; - if (!ns.hasRootAccess(server)) { - await ns.gainRootAccess(server); - } - if (ns.hasRootAccess(server)) { - await ns.scp('targeted-grow.js', server); - await ns.scp('targeted-weaken.js', server); + await ns.scp('targeted-hack.js', 'home', server); + await ns.scp('targeted-grow.js', 'home', server); + await ns.scp('targeted-weaken.js', 'home', server); host_servers.push(server); } } @@ -150,7 +143,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t }) let sec_increase; let startTime = Date.now(); - while (grow_threads * ns.getScriptRam('targeted-grow.js', 'home') + hack_threads * ns.getScriptRam('targeted-hack.js', 'home') + weaken_threads * ns.getScriptRam('targeted-weaken.js', 'home') > usable_RAM - host_servers.length) { + while(grow_threads * ns.getScriptRam('targeted-grow.js', 'home') + hack_threads * ns.getScriptRam('targeted-hack.js', 'home') + weaken_threads * ns.getScriptRam('targeted-weaken.js', 'home') > usable_RAM - host_servers.length) { c += 1; grow_threads = Math.floor(ns.growthAnalyze(hack_target, 1 / (1 - 1 / c))); hack_threads = Math.floor(ns.hackAnalyzeThreads(hack_target, ns.getServerMoneyAvailable(hack_target) / c)) / ns.hackAnalyzeChance(hack_target); @@ -162,7 +155,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t } await ns.sleep(1); if (Date.now() > startTime + 240000) { - throw (Error("line 65, loop longer than 2 minutes either need more RAM or change value of c decrement")); + throw(Error("line 65, loop longer than 2 minutes either need more RAM or change value of c decrement")); } } @@ -188,7 +181,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = weaken_threads; } if (threads >= 1) { - ns.exec('targeted-weaken.js', server, Math.floor(threads), Math.floor(threads), hack_target, n); + ns.exec('targeted-weaken.js', server, threads, threads, hack_target, n); weaken_threads -= threads; await ns.sleep(5); } @@ -204,7 +197,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = grow_threads; } if (threads >= 1) { - ns.exec('targeted-grow.js', server, Math.floor(threads), Math.floor(threads), Math.floor(ns.getWeakenTime(hack_target) - ns.getGrowTime(hack_target) - 500), hack_target, n); + ns.exec('targeted-grow.js', server, threads, threads, ns.getWeakenTime(hack_target) - ns.getGrowTime(hack_target) - 500, hack_target, n); grow_threads -= threads; await ns.sleep(5); } @@ -220,7 +213,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = hack_threads; } if (threads >= 1) { - ns.exec('targeted-hack.js', server, Math.floor(threads), Math.floor(threads), Math.floor(ns.getWeakenTime(hack_target) - ns.getHackTime(hack_target) + 500), hack_target, n, threads); + ns.exec('targeted-hack.js', server, threads, threads, ns.getWeakenTime(hack_target) - ns.getHackTime(hack_target) + 500, hack_target, n, threads); hack_threads -= threads; await ns.sleep(5); } @@ -260,7 +253,7 @@ export async function main(ns) { const hack_threads = ns.hackAnalyzeThreads(hack_target, ns.getServerMoneyAvailable(hack_target) / 2); const sec_increase = ns.hackAnalyzeSecurity(hack_threads) + ns.growthAnalyzeSecurity(grow_threads); let weaken_threads = 1; - + while (ns.weakenAnalyze(weaken_threads) < sec_increase * 1.1) { weaken_threads += 5; await ns.sleep(1); @@ -446,4 +439,4 @@ export async function main(ns) { await ns.sleep(10); } } -} \ No newline at end of file +} From 553e3e0416c8c2c71197b5e7693e3c1e778db83b Mon Sep 17 00:00:00 2001 From: Jakob Millen <66464271+JMillen@users.noreply.github.com> Date: Tue, 29 Aug 2023 18:39:14 +1200 Subject: [PATCH 3/3] Bug Fixing hack-manager Commit: Fixed bug with threads returning floating point numbers, fixed "scp()" element being used incorrectly. --- hack-manager.js | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/hack-manager.js b/hack-manager.js index 2a39210..0f8be6c 100644 --- a/hack-manager.js +++ b/hack-manager.js @@ -41,9 +41,13 @@ async function little_prep(ns, hack_target, wt, gt, reserved_RAM) { let host_servers = []; for (let i = 0; i < full_list.length; i++) { const server = full_list[i]; + if (!ns.hasRootAccess(server)) { + await ns.gainRootAccess(server); + } + if (ns.hasRootAccess(server)) { - await ns.scp('targeted-grow.js', 'home', server); - await ns.scp('targeted-weaken.js', 'home', server); + await ns.scp('targeted-grow.js', server); + await ns.scp('targeted-weaken.js', server); host_servers.push(server); } } @@ -121,10 +125,13 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t let host_servers = []; for (let i = 0; i < full_list.length; i++) { const server = full_list[i]; + if (!ns.hasRootAccess(server)) { + await ns.gainRootAccess(server); + } + if (ns.hasRootAccess(server)) { - await ns.scp('targeted-hack.js', 'home', server); - await ns.scp('targeted-grow.js', 'home', server); - await ns.scp('targeted-weaken.js', 'home', server); + await ns.scp('targeted-grow.js', server); + await ns.scp('targeted-weaken.js', server); host_servers.push(server); } } @@ -181,7 +188,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = weaken_threads; } if (threads >= 1) { - ns.exec('targeted-weaken.js', server, threads, threads, hack_target, n); + ns.exec('targeted-weaken.js', server, Math.floor(threads), Math.floor(threads), hack_target, n); weaken_threads -= threads; await ns.sleep(5); } @@ -197,7 +204,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = grow_threads; } if (threads >= 1) { - ns.exec('targeted-grow.js', server, threads, threads, ns.getWeakenTime(hack_target) - ns.getGrowTime(hack_target) - 500, hack_target, n); + ns.exec('targeted-grow.js', server, Math.floor(threads), Math.floor(threads), Math.floor(ns.getWeakenTime(hack_target) - ns.getGrowTime(hack_target) - 500), hack_target, n); grow_threads -= threads; await ns.sleep(5); } @@ -213,7 +220,7 @@ async function little_hack(ns, hack_target, weaken_threads, grow_threads, hack_t threads = hack_threads; } if (threads >= 1) { - ns.exec('targeted-hack.js', server, threads, threads, ns.getWeakenTime(hack_target) - ns.getHackTime(hack_target) + 500, hack_target, n, threads); + ns.exec('targeted-hack.js', server, Math.floor(threads), Math.floor(threads), Math.floor(ns.getWeakenTime(hack_target) - ns.getHackTime(hack_target) + 500), hack_target, n, threads); hack_threads -= threads; await ns.sleep(5); } @@ -253,7 +260,7 @@ export async function main(ns) { const hack_threads = ns.hackAnalyzeThreads(hack_target, ns.getServerMoneyAvailable(hack_target) / 2); const sec_increase = ns.hackAnalyzeSecurity(hack_threads) + ns.growthAnalyzeSecurity(grow_threads); let weaken_threads = 1; - + while (ns.weakenAnalyze(weaken_threads) < sec_increase * 1.1) { weaken_threads += 5; await ns.sleep(1); @@ -439,4 +446,4 @@ export async function main(ns) { await ns.sleep(10); } } -} +} \ No newline at end of file