import { getWeakenThreads, getGrowThreads, getHackThreads } from "Utilities/lib.js"; /** @param {NS} ns */ export async function main(ns) { //The comments will be used for examples const delay = ns.args[0]; // 200ms const target = ns.args[1]; const minimumCashReserves = ns.getServerMaxMoney(target) * 0.9; const timeWeaken = ns.getWeakenTime(target); // 30s const timeGrow = ns.getGrowTime(target); // 15s const timeHack = ns.getHackTime(target); // 5s const threadsHack = getHackThreads(ns, target, minimumCashReserves); const weakenZeroThreads = getWeakenThreads(ns, target, ns.hackAnalyzeSecurity(threadsHack)); const threadsGrow = getGrowThreads(ns, target, minimumCashReserves); const weakenOneThreads = getWeakenThreads(ns, target, ns.growthAnalyzeSecurity(threadsGrow)); //Weaken 0 ns.exec("./weaken.js", ns.getHostname(), weakenZeroThreads, target) const weakenZeroDelay = 2 * delay; // 0.4s + 30s = 30.4s so next weaken happens the 3rd tick. ns.sleep(weakenZeroDelay); // On 0.4s //Weaken 1 ns.exec("./weaken.js", ns.getHostname(), weakenOneThreads, target) const weakenOneDelay = timeWeaken - timeGrow - delay // 30 - 15 - 0.2 = 14.8s. 14.8s delay plus previous 0.4s = 15.2s + 15 = 30.2s so grow happens on 2nd tick. ns.sleep(weakenOneDelay); // On 15.2s //Grow ns.exec("./grow.js", ns.getHostname(), threadsGrow, target) const growDelay = timeWeaken + 3 * delay - timeHack - weakenZeroDelay - weakenOneDelay; /** 30 + 0.6 = 30.6s this is the 4th tick and when the hack is suppossed to happen. * 30.6 - 5s = 25.6s this is how many seconds the delay is from T0 * 25.6s - 0.4s - 14.8 = 10.4s delay from the current 15.2s so 25.6s then + 5 = 30.6 when the hack occurs */ ns.sleep(growDelay); // On 25.6 //Hack ns.exec("./hack.js", ns.getHostname(), threadsHack, target) /** Weaken Zero: 0s - 30s * Grow: 15.2s - 30.2s * Weaken One: 0.4s - 30.4s * Hack: 25.6s - 30.6s * * Exactly one delay between each step. */ }