Compare commits
16 Commits
7705683965
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| d5e55b31b3 | |||
| 4945683d09 | |||
| cfdc1e0550 | |||
| 23cb424e56 | |||
| ce4c8f26ee | |||
|
|
902e1e16bc | ||
|
|
0832725507 | ||
| 30b2e4d041 | |||
| fd61cb72e1 | |||
| 3cf9484442 | |||
| 7a5338daf5 | |||
| f1cc1ea18e | |||
|
|
9a2a96114a | ||
|
|
2c5ac45b97 | ||
|
|
939f836e3a | ||
| ae47b87feb |
8
.gitignore
vendored
8
.gitignore
vendored
@@ -144,5 +144,9 @@ build/
|
|||||||
|
|
||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode/launch.json
|
!.vscode/launch.json
|
||||||
local/path/home/bestTarget.txt
|
|
||||||
local/path/home/serverList.txt
|
# Non Clashing Bitburner Override
|
||||||
|
*config.mjs*
|
||||||
|
*serverList.txt*
|
||||||
|
*bestTarget.txt*
|
||||||
|
config.mjs
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { getGrowThreads } from "myLibrary.js";
|
import { getGrowThreads, getSetting } from "myLibrary.js";
|
||||||
|
|
||||||
/** @param {NS} ns */
|
/** @param {NS} ns */
|
||||||
export async function main(ns) {
|
export async function main(ns) {
|
||||||
@@ -31,7 +31,8 @@ export async function main(ns) {
|
|||||||
const nGrowScriptRAM = 1.7 * nGrowThreads;
|
const nGrowScriptRAM = 1.7 * nGrowThreads;
|
||||||
//ns.tprint("nGrowScriptRAM = " + nGrowScriptRAM);
|
//ns.tprint("nGrowScriptRAM = " + nGrowScriptRAM);
|
||||||
|
|
||||||
const nFrequency = 50;
|
//const nFrequency = 50;
|
||||||
|
const nFrequency = getSetting(ns, "batchFrequency");
|
||||||
let nScriptsRAM;
|
let nScriptsRAM;
|
||||||
let nMaxRam;
|
let nMaxRam;
|
||||||
let nScripts;
|
let nScripts;
|
||||||
@@ -56,7 +56,6 @@ export async function main(ns) {
|
|||||||
if (!ns.getRunningScript(sGangScript)) {
|
if (!ns.getRunningScript(sGangScript)) {
|
||||||
ns.exec(sGangScript, sThisRunner, 1);
|
ns.exec(sGangScript, sThisRunner, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ns.print("Gang: " + cRed + "none" + cReset);
|
ns.print("Gang: " + cRed + "none" + cReset);
|
||||||
@@ -104,8 +103,9 @@ export async function main(ns) {
|
|||||||
|
|
||||||
//Home Upgrades
|
//Home Upgrades
|
||||||
if (nMoney > ns.singularity.getUpgradeHomeRamCost()) {
|
if (nMoney > ns.singularity.getUpgradeHomeRamCost()) {
|
||||||
|
let nHomeRAMUpgradeCost = ns.singularity.getUpgradeHomeRamCost();
|
||||||
ns.singularity.upgradeHomeRam();
|
ns.singularity.upgradeHomeRam();
|
||||||
ns.tprint(cCyan + "Upgraded home RAM" + cReset);
|
ns.tprint(cCyan + "Upgraded home RAM to " + (nHomeMaxRAM*2) + " for " + nHomeRAMUpgradeCost + cReset);
|
||||||
}
|
}
|
||||||
else if (nCores < 8 && nMoney > ns.singularity.getUpgradeHomeCoresCost()) {
|
else if (nCores < 8 && nMoney > ns.singularity.getUpgradeHomeCoresCost()) {
|
||||||
ns.singularity.upgradeHomeCores();
|
ns.singularity.upgradeHomeCores();
|
||||||
96
Mizzajl/home/backdoor.js
Normal file
96
Mizzajl/home/backdoor.js
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/** @param {NS} ns */
|
||||||
|
export async function main(ns) {
|
||||||
|
ns.tail();
|
||||||
|
await scanRecursiveWrapper(ns);
|
||||||
|
let currentHackingLevel = ns.getHackingLevel();
|
||||||
|
let currentArray = [];
|
||||||
|
let currentHop = "";
|
||||||
|
let serverRoutes = JSON.parse(ns.read("ServerRouteList.txt"));
|
||||||
|
let allPaths = getPaths(serverRoutes);
|
||||||
|
for (const entry of allPaths) {
|
||||||
|
for (const name of entry) {
|
||||||
|
if (ns.singularity.connect(name) === false) {
|
||||||
|
ns.tprint("Error when trying to connect to: " + currentHop);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ns.getServer(name).hostname === "CSEC" || ns.getServer(name).hostname === "avmnite-02h" || ns.getServer(name).hostname === "I.I.I.I" || ns.getServer(name).hostname === "run4theh111z" || ns.getServer(name).hostname === "The-Cave") {
|
||||||
|
if (!ns.getServer(name).backdoorInstalled) {
|
||||||
|
if (ns.getServerRequiredHackingLevel(name) < currentHackingLevel && ns.hasRootAccess(name) === true) {
|
||||||
|
ns.print("Trying to backdoor " + name)
|
||||||
|
await ns.singularity.installBackdoor(name);
|
||||||
|
ns.print("Success on " + name)
|
||||||
|
}
|
||||||
|
} else { continue }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ns.singularity.connect("home");
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPaths(obj, path = []) {
|
||||||
|
const paths = [];
|
||||||
|
for (const key in obj) {
|
||||||
|
const newPath = [...path, key];
|
||||||
|
paths.push(newPath);
|
||||||
|
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
||||||
|
paths.push(...getPaths(obj[key], newPath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return paths;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {NS} ns */
|
||||||
|
async function scanRecursiveWrapper(ns) {
|
||||||
|
ns.rm("ServerRouteList.txt");
|
||||||
|
const home = "home";
|
||||||
|
let serverRouteList = { home: {} };
|
||||||
|
let knownServers = [];
|
||||||
|
let unscanned = [];
|
||||||
|
unscanned.push(home);
|
||||||
|
knownServers.push(home);
|
||||||
|
while (unscanned.length > 0) {
|
||||||
|
let currentServer = unscanned.pop();
|
||||||
|
let currentChildren = ns.scan(currentServer).filter(element => !knownServers.includes(element));
|
||||||
|
knownServers = knownServers.concat(currentChildren);
|
||||||
|
let keyPath = findKeyPath(serverRouteList, currentServer);
|
||||||
|
let childrenObject = currentChildren.reduce((a, v) => ({ ...a, [v]: {} }), {});
|
||||||
|
writeValueToPath(serverRouteList, keyPath, childrenObject);
|
||||||
|
for (let i = 0; i < currentChildren.length; i++) {
|
||||||
|
let child = currentChildren[i];
|
||||||
|
unscanned.push(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ns.write("ServerRouteList.txt", JSON.stringify(serverRouteList), "w");
|
||||||
|
}
|
||||||
|
|
||||||
|
function findKeyPath(json, key) {
|
||||||
|
if (typeof json !== 'object' || json === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (key in json) {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
for (const property in json) {
|
||||||
|
if (json.hasOwnProperty(property)) {
|
||||||
|
const path = findKeyPath(json[property], key);
|
||||||
|
if (path !== null) {
|
||||||
|
return property + '*' + path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeValueToPath(json, path, value) {
|
||||||
|
const parts = path.split('*');
|
||||||
|
let currentObject = json;
|
||||||
|
for (let i = 0; i < parts.length - 1; i++) {
|
||||||
|
const part = parts[i];
|
||||||
|
if (currentObject[part] === undefined) {
|
||||||
|
currentObject[part] = {};
|
||||||
|
}
|
||||||
|
currentObject = currentObject[part];
|
||||||
|
}
|
||||||
|
currentObject[parts[parts.length - 1]] = value;
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { getGrowThreads } from "myLibrary.js";
|
import { getGrowThreads, getSetting } from "myLibrary.js";
|
||||||
|
|
||||||
/** @param {NS} ns */
|
/** @param {NS} ns */
|
||||||
export async function main(ns) {
|
export async function main(ns) {
|
||||||
@@ -22,7 +22,8 @@ export async function main(ns) {
|
|||||||
const sGrowScript = "RMgrow.js";
|
const sGrowScript = "RMgrow.js";
|
||||||
const sWeakenScript = "RMweaken.js";
|
const sWeakenScript = "RMweaken.js";
|
||||||
|
|
||||||
const nHackThreads = 5; //1
|
//const nHackThreads = 50; //1
|
||||||
|
const nHackThreads = getSetting(ns, "batchHacks"); //1
|
||||||
|
|
||||||
const nHackScriptRAM = 1.75;
|
const nHackScriptRAM = 1.75;
|
||||||
const nGrowScriptRAM = 1.7;
|
const nGrowScriptRAM = 1.7;
|
||||||
6
Mizzajl/home/factionboost.js
Normal file
6
Mizzajl/home/factionboost.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/** @param {NS} ns */
|
||||||
|
export async function main(ns) {
|
||||||
|
while (true) {
|
||||||
|
await ns.share();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,7 @@ export async function main(ns) {
|
|||||||
|
|
||||||
|
|
||||||
while (nCurrentProgress < 100) {
|
while (nCurrentProgress < 100) {
|
||||||
ns.read(""filename"");
|
//ns.read(""filename"");
|
||||||
ns.print(sProgress[Math.floor(nCurrentProgress / (sProgress.length - 1))]);
|
ns.print(sProgress[Math.floor(nCurrentProgress / (sProgress.length - 1))]);
|
||||||
|
|
||||||
ns.write("filename", "text", "w");
|
ns.write("filename", "text", "w");
|
||||||
6
Mizzajl/home/settings.txt
Normal file
6
Mizzajl/home/settings.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{"setting":{
|
||||||
|
"autoUpgrades":true,
|
||||||
|
"autoPurchaseServers":true,
|
||||||
|
"batchHacks":50,
|
||||||
|
"batchFrequency":1000
|
||||||
|
}}
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
{"serverName":"the-hub","maxRam":32,"maxMoney":483168296.25,"minSec":13,"minPorts":2,"minHackLvl":318,"rootAccess":true,"factorMoneyPerTime":0.1841702873569451,"openPorts":0,"serverFiles":["factionboost.js"],"hackingChance":0.40919188586028893}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/** @param {NS} ns */
|
|
||||||
export async function main(ns) {
|
|
||||||
/*
|
|
||||||
ns.renamePurchasedServer("pserv-23", "pserv-24");
|
|
||||||
ns.renamePurchasedServer("pserv-22", "pserv-23");
|
|
||||||
ns.renamePurchasedServer("pserv-21", "pserv-22");
|
|
||||||
ns.renamePurchasedServer("pserv-20", "pserv-21");
|
|
||||||
ns.renamePurchasedServer("pserv-19", "pserv-20");
|
|
||||||
ns.renamePurchasedServer("pserv-18", "pserv-19");
|
|
||||||
ns.renamePurchasedServer("pserv-17", "pserv-18");
|
|
||||||
ns.renamePurchasedServer("pserv-16", "pserv-17");
|
|
||||||
ns.renamePurchasedServer("pserv-15", "pserv-16");
|
|
||||||
ns.renamePurchasedServer("pserv-14", "pserv-15");
|
|
||||||
ns.renamePurchasedServer("pserv-13", "pserv-14");
|
|
||||||
ns.renamePurchasedServer("pserv-12", "pserv-13");
|
|
||||||
ns.renamePurchasedServer("pserv-11", "pserv-12");
|
|
||||||
ns.renamePurchasedServer("pserv-10", "pserv-11");
|
|
||||||
ns.renamePurchasedServer("pserv-9", "pserv-10");
|
|
||||||
ns.renamePurchasedServer("pserv-8", "pserv-9");
|
|
||||||
ns.renamePurchasedServer("pserv-7", "pserv-8");
|
|
||||||
ns.renamePurchasedServer("pserv-6", "pserv-7");
|
|
||||||
ns.renamePurchasedServer("pserv-5", "pserv-6");
|
|
||||||
ns.renamePurchasedServer("pserv-4", "pserv-5");
|
|
||||||
ns.renamePurchasedServer("pserv-3", "pserv-4");
|
|
||||||
ns.renamePurchasedServer("pserv-2", "pserv-3");
|
|
||||||
ns.renamePurchasedServer("pserv-1-0", "pserv-2");
|
|
||||||
*/
|
|
||||||
ns.renamePurchasedServer("pserv-1", "pserv-01");
|
|
||||||
ns.renamePurchasedServer("pserv-2", "pserv-02");
|
|
||||||
ns.renamePurchasedServer("pserv-3", "pserv-03");
|
|
||||||
ns.renamePurchasedServer("pserv-4", "pserv-04");
|
|
||||||
ns.renamePurchasedServer("pserv-5", "pserv-05");
|
|
||||||
ns.renamePurchasedServer("pserv-6", "pserv-06");
|
|
||||||
ns.renamePurchasedServer("pserv-7", "pserv-07");
|
|
||||||
ns.renamePurchasedServer("pserv-8", "pserv-08");
|
|
||||||
ns.renamePurchasedServer("pserv-9", "pserv-09");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//const nServers = ns.getPurchasedServers();
|
|
||||||
|
|
||||||
//for (let i = 0; i < nServers; i++)
|
|
||||||
//let hostname = ns.purchaseServer("pserv-" + i, ram);
|
|
||||||
// ns.renamePurchasedServer(([i]), "pserv-" + i);
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
/** @param {NS} ns */
|
|
||||||
export async function main(ns) {
|
|
||||||
const sMessage = ns.args[0]; //
|
|
||||||
const nCurrentProgress = ns.args[1]; //
|
|
||||||
const stest = ns.args[2];
|
|
||||||
|
|
||||||
const nPID = ns.pid;
|
|
||||||
const sFileName = "progress_" + nPID;
|
|
||||||
|
|
||||||
|
|
||||||
//ns.print("nPID = "+nPID);
|
|
||||||
const sProgress = [
|
|
||||||
"░░░░░░░░░░",
|
|
||||||
"█░░░░░░░░░",
|
|
||||||
"██░░░░░░░░",
|
|
||||||
"███░░░░░░░",
|
|
||||||
"████░░░░░░",
|
|
||||||
"█████░░░░░",
|
|
||||||
"██████░░░░",
|
|
||||||
"███████░░░",
|
|
||||||
"████████░░",
|
|
||||||
"█████████░",
|
|
||||||
"██████████"
|
|
||||||
];
|
|
||||||
ns.tail(nPID);
|
|
||||||
|
|
||||||
|
|
||||||
while (nCurrentProgress < 100) {
|
|
||||||
ns.read(""filename"");
|
|
||||||
ns.print(sProgress[Math.floor(nCurrentProgress / (sProgress.length - 1))]);
|
|
||||||
|
|
||||||
ns.write("filename", "text", "w");
|
|
||||||
|
|
||||||
}
|
|
||||||
if (nCurrentProgress >= 100)
|
|
||||||
ns.rm(sFileName);
|
|
||||||
return nPID;
|
|
||||||
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -15,11 +15,7 @@ const createContext = async () => await context({
|
|||||||
port: 12525,
|
port: 12525,
|
||||||
types: 'NetscriptDefinitions.d.ts',
|
types: 'NetscriptDefinitions.d.ts',
|
||||||
mirror: {
|
mirror: {
|
||||||
<<<<<<< HEAD
|
|
||||||
'Mizzajl': ['home']
|
'Mizzajl': ['home']
|
||||||
=======
|
|
||||||
'Ramses': ['home']
|
|
||||||
>>>>>>> 1fa17ab0f5dd0456582c398342b6286d6e1c9de0
|
|
||||||
},
|
},
|
||||||
distribute: {
|
distribute: {
|
||||||
},
|
},
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,29 +0,0 @@
|
|||||||
/** @param {NS} ns */
|
|
||||||
export async function main(ns) {
|
|
||||||
//8,5,1,1,2,6,7,2,5,4
|
|
||||||
//const sContractData = ns.codingcontract.getData(sContract, sTarget);
|
|
||||||
const sContractData = "8,5,1,1,2,6,7,2,5,4";
|
|
||||||
/*
|
|
||||||
8
|
|
||||||
5,1
|
|
||||||
1,2,6
|
|
||||||
7,2,5,4
|
|
||||||
*/
|
|
||||||
//nArray[0[2]]
|
|
||||||
const sArray = sContractData.split(',');
|
|
||||||
ns.tprint(sArray);
|
|
||||||
let nArray = [];
|
|
||||||
//Number
|
|
||||||
for (let i = 0; i < sArray.length; i++) {
|
|
||||||
nArray[i] = Number(sArray[i]);
|
|
||||||
}
|
|
||||||
ns.tprint(nArray);
|
|
||||||
|
|
||||||
let nLayers = [];
|
|
||||||
for (let l = 0; l < nArray.length; l++) {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
/** @param {NS} ns */
|
|
||||||
export async function main(ns) {
|
|
||||||
//args
|
|
||||||
const sTarget = ns.args[0]; // target server
|
|
||||||
|
|
||||||
// declare objects
|
|
||||||
const oHome = ns.getServer("home");
|
|
||||||
//const oTarget = ns.getServer(sTarget);
|
|
||||||
|
|
||||||
//declare variables
|
|
||||||
const sWeakenScript = "RMweaken.js";
|
|
||||||
const sGrowScript = "RMgrow.js";
|
|
||||||
const sBatch = "RMcontroller.js";
|
|
||||||
|
|
||||||
const nCores = oHome.cpuCores;
|
|
||||||
let nSecurity = ns.getServerSecurityLevel(sTarget);
|
|
||||||
const nMinSecurity = ns.getServerMinSecurityLevel(sTarget);
|
|
||||||
let nMoney = ns.getServerMoneyAvailable(sTarget);
|
|
||||||
const nMaxMoney = ns.getServerMaxMoney(sTarget);
|
|
||||||
|
|
||||||
const nWeakenSTR = ns.weakenAnalyze(1, nCores);
|
|
||||||
let nWeakenThreads = Math.ceil((nSecurity - nMinSecurity) / nWeakenSTR);
|
|
||||||
let nFreeRam = ns.getServerMaxRam("home") - ns.getServerUsedRam("home");
|
|
||||||
ns.tail(ns.pid, oHome.hostname, sTarget);
|
|
||||||
//ns.resizeTail(815, 395);
|
|
||||||
//ns.moveTail(1925, 0);
|
|
||||||
|
|
||||||
// crack target
|
|
||||||
//ns.run(sCrack, 1, sTarget);
|
|
||||||
const nDelay = ns.getWeakenTime(sTarget);
|
|
||||||
if (nWeakenThreads > 0 && nSecurity > nMinSecurity) {
|
|
||||||
|
|
||||||
|
|
||||||
ns.tprint("current security is: " + nSecurity);
|
|
||||||
ns.tprint("minimum security is: " + nMinSecurity);
|
|
||||||
ns.tprint("threads needed for weaken: " + nWeakenThreads);
|
|
||||||
ns.tprint(nWeakenThreads + " will reduce Security by " + ns.weakenAnalyze(nWeakenThreads, nCores));
|
|
||||||
let nScriptRAM = ns.getScriptRam(sWeakenScript, "home");
|
|
||||||
let nRequiredRAM = nScriptRAM * nWeakenThreads;
|
|
||||||
ns.tprint(nWeakenThreads + " of " + sWeakenScript + " requires " + nRequiredRAM + " GB of RAM");
|
|
||||||
ns.tprint("weakening will take " + (nDelay / 1000 / 60) + " minutes");
|
|
||||||
|
|
||||||
if (nFreeRam > nRequiredRAM) {
|
|
||||||
ns.run(sWeakenScript, nWeakenThreads, sTarget);
|
|
||||||
|
|
||||||
//await ns.sleep(Math.ceil(nDelay));
|
|
||||||
|
|
||||||
nSecurity = ns.getServerSecurityLevel(sTarget);
|
|
||||||
ns.tprint("Breach complete, security level is now at: " + nSecurity);
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ns.print("not enough RAM to run all threads at once, splitting into smaller chunks...");
|
|
||||||
|
|
||||||
|
|
||||||
while (nSecurity > nMinSecurity) {
|
|
||||||
//nWeakenThreads /= (1+(nRequiredRAM / nFreeRam));
|
|
||||||
nMaxThreads = Math.min( );
|
|
||||||
ns.print(Math.ceil(nRequiredRAM / nFreeRam));
|
|
||||||
ns.print(nWeakenThreads);
|
|
||||||
ns.print(nWeakenThreads * nScriptRAM);
|
|
||||||
ns.run(sWeakenScript, Math.ceil(nWeakenThreads), sTarget);
|
|
||||||
await ns.sleep(Math.ceil(nDelay));
|
|
||||||
nSecurity = ns.getServerSecurityLevel(sTarget);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
let nGrowMulti = 1;
|
|
||||||
ns.print("nGrowMulti = " + nGrowMulti);
|
|
||||||
let nGrowth = ns.growthAnalyze(sTarget, nGrowMulti, nCores);
|
|
||||||
ns.print("nGrowth = " + nGrowth);
|
|
||||||
*/
|
|
||||||
|
|
||||||
//ns.growthAnalyzeSecurity();
|
|
||||||
|
|
||||||
|
|
||||||
const startValue = nMoney; // First argument: starting value
|
|
||||||
const target = nMaxMoney; // Second argument: target value
|
|
||||||
let result = startValue; // Initialize result with the starting value
|
|
||||||
let n = 1;
|
|
||||||
// For loop that continues until the result exceeds or matches the target
|
|
||||||
for (; result < target; n++) {
|
|
||||||
result += 1; // Add 1 before multiplication
|
|
||||||
result *= n; // Multiply by the current step value
|
|
||||||
}
|
|
||||||
let nGrowThreadsNeeded = n * ns.growthAnalyze(sTarget, n, 1);
|
|
||||||
ns.print("nGrowThreadsNeeded = " + nGrowThreadsNeeded);
|
|
||||||
|
|
||||||
while (nMoney < nMaxMoney) {
|
|
||||||
|
|
||||||
let nFreeRam = ns.getServerMaxRam("home") - ns.getServerUsedRam("home");
|
|
||||||
let nGrowPID = ns.run(sGrowScript, Math.min([Math.ceil(nGrowThreadsNeeded)], [Math.ceil(nFreeRam / ns.getScriptRam(sGrowScript, "home"))]), sTarget);
|
|
||||||
await ns.nextPortWrite(nGrowPID);
|
|
||||||
await ns.sleep(1000);
|
|
||||||
nMoney = ns.getServerMoneyAvailable(sTarget);
|
|
||||||
}
|
|
||||||
|
|
||||||
await ns.sleep(Math.ceil(nDelay));
|
|
||||||
|
|
||||||
//run batch
|
|
||||||
const nBatchPID = ns.run(sBatch, 1, sTarget);
|
|
||||||
ns.tail(nBatchPID, "home", sBatch, 1, sTarget);
|
|
||||||
ns.resizeTail(815, 395, nBatchPID);
|
|
||||||
ns.moveTail(1925, 0, nBatchPID);
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
/** @param {NS} ns */
|
|
||||||
export async function main(ns) {
|
|
||||||
//Arguments
|
|
||||||
const sTarget = ns.args[0]; // target server
|
|
||||||
|
|
||||||
ns.tail("RMcontroller.js", "home", sTarget);
|
|
||||||
|
|
||||||
//Settings
|
|
||||||
const oHome = ns.getServer("home");
|
|
||||||
const nCores = oHome.cpuCores;
|
|
||||||
const sScript = ns.getScriptName();
|
|
||||||
const sWeaken = "RMweaken.js";
|
|
||||||
const sGrow = "RMgrow.js";
|
|
||||||
const sHack = "RMhack.js";
|
|
||||||
const nScriptRAM = ns.getScriptRam(sScript, "home");
|
|
||||||
const nWeakenRAM = ns.getScriptRam(sWeaken, "home");
|
|
||||||
const nGrowRAM = ns.getScriptRam(sGrow, "home");
|
|
||||||
const nHackRAM = ns.getScriptRam(sHack, "home");
|
|
||||||
const nHomeUsedRAM = ns.getServerUsedRam("home");
|
|
||||||
const nHomeMaxRAM = ns.getServerMaxRam("home");
|
|
||||||
let nHomeFreeRAM = nHomeMaxRAM - nHomeUsedRAM;
|
|
||||||
|
|
||||||
const nDelays = [0, 100, 200, 300];
|
|
||||||
|
|
||||||
|
|
||||||
//abort script if sTarget is undefined
|
|
||||||
if (sTarget === undefined) {
|
|
||||||
ns.tprint("1st arg sTarget is undefined");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//target server info
|
|
||||||
const nMinSecurity = ns.getServerMinSecurityLevel(sTarget);
|
|
||||||
const nMaxMoney = ns.getServerMaxMoney(sTarget);
|
|
||||||
|
|
||||||
let nWeakenTime1 = ns.getWeakenTime(sTarget);
|
|
||||||
let nWeakenTime2 = nWeakenTime1 + nDelays[3];
|
|
||||||
let nGrowTime = nWeakenTime1 * 0.8;
|
|
||||||
let nHackTime = nWeakenTime1 / 4;
|
|
||||||
|
|
||||||
//let nHackSecurityGain = ns.hackAnalyzeSecurity(1, sTarget);
|
|
||||||
//let nHackSecurityGain = 0.002;
|
|
||||||
//let nHackThreadsEstimate = Math.max(Math.floor(1 / nHackSecurityGain),1);
|
|
||||||
//let nHackThreadsEstimate = 10;
|
|
||||||
//ns.tprint("nHackSecurityGain = " + nHackSecurityGain);
|
|
||||||
//ns.tprint("nHackThreadsEstimate = " + nHackThreadsEstimate);
|
|
||||||
const nHackTotalRAM = nHackRAM * 25;
|
|
||||||
|
|
||||||
//let nGrowSecurityGain = ns.growthAnalyzeSecurity(1, sTarget, nCores);
|
|
||||||
//let nGrowSecurityGain = 0.004;
|
|
||||||
//let nGrowThreadsEstimate = Math.max(Math.floor(1 / nGrowSecurityGain),1);
|
|
||||||
//ns.tprint("nGrowSecurityGain = " + nGrowSecurityGain);
|
|
||||||
//ns.tprint("nGrowThreadsEstimate = " + nGrowThreadsEstimate);
|
|
||||||
const nGrowTotalRAM = nGrowRAM * 12.5;
|
|
||||||
|
|
||||||
//let nWeakenSecurity = ns.weakenAnalyze(1, nCores);
|
|
||||||
//let nWeakenSecurity = 0.05;
|
|
||||||
//let nWeakenThreadsEstimate = Math.max(Math.ceil(1 / nWeakenSecurity),1);
|
|
||||||
//ns.tprint("nWeakenSecurity = " + nWeakenSecurity);
|
|
||||||
//ns.tprint("nWeakenThreadsEstimate = " + nWeakenThreadsEstimate);
|
|
||||||
const nWeakenTotalRAM = nWeakenRAM * 1;
|
|
||||||
|
|
||||||
const nTotalRAM = nHackTotalRAM + nGrowTotalRAM + (nWeakenTotalRAM * 2)
|
|
||||||
const nTotalBatches = Math.floor((nHomeFreeRAM - nScriptRAM) / nTotalRAM);
|
|
||||||
|
|
||||||
let nHackThreadsEstimate = nTotalBatches * 25;
|
|
||||||
let nWeakenThreadsEstimate1 = nTotalBatches * 1;
|
|
||||||
let nGrowThreadsEstimate = nTotalBatches * 12.5;
|
|
||||||
let nWeakenThreadsEstimate2 = nTotalBatches * 1;
|
|
||||||
|
|
||||||
ns.tprint("RAM per Cycle = " + nTotalRAM);
|
|
||||||
ns.tprint("how many batches can i run at the same time? = " + nTotalBatches);
|
|
||||||
|
|
||||||
//await ns.grow(server, { additionalMsec: nMsecDelay });
|
|
||||||
let nGrowDelay = nWeakenTime1 - nGrowTime;
|
|
||||||
let nHackDelay = nWeakenTime1 - nHackTime;
|
|
||||||
|
|
||||||
|
|
||||||
const nCycleDuration = nWeakenTime2 + nDelays[3];
|
|
||||||
ns.tprint("nCycleDuration = " + nCycleDuration);
|
|
||||||
|
|
||||||
const nBatchFrequency = Math.ceil(nCycleDuration / nTotalBatches);
|
|
||||||
ns.tprint("nBatchFrequency = " + nBatchFrequency);
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
|
|
||||||
//server stats
|
|
||||||
let nCurrentSecurity = ns.getServerSecurityLevel(sTarget);
|
|
||||||
let nCurrentMoney = ns.getServerMoneyAvailable(sTarget);
|
|
||||||
|
|
||||||
//timestamp
|
|
||||||
let currentDate = new Date();
|
|
||||||
let nOffset;
|
|
||||||
|
|
||||||
ns.print("Cash: " + (Math.floor(nCurrentMoney * 1000) / 1000) + " / " + nMaxMoney);
|
|
||||||
ns.print("Security: " + (Math.floor(nCurrentSecurity * 1000) / 1000) + " / " + nMinSecurity);
|
|
||||||
|
|
||||||
//Calculate estimate time of completion
|
|
||||||
nOffset = ns.getWeakenTime(sTarget);
|
|
||||||
let nSafeTime = nOffset + nDelays[3] + 1000;
|
|
||||||
let nWeakTime = new Date(currentDate.getTime() + nSafeTime);
|
|
||||||
let sWeakTime = nWeakTime.toLocaleTimeString('sw-SV'); //swedish time
|
|
||||||
|
|
||||||
//Print estimated time of completion
|
|
||||||
ns.print("Weakening " + sTarget + " Estimated complete at " + sWeakTime);
|
|
||||||
|
|
||||||
//hack
|
|
||||||
const nHackPID = ns.exec(sHack, "home", nHackThreadsEstimate, sTarget, false, nHackDelay + nDelays[0]);
|
|
||||||
//ns.tail(nHackPID, "home", "home", nHackThreadsEstimate, sTarget, 0, nHackDelay + nDelays[0]);
|
|
||||||
|
|
||||||
//weaken 1
|
|
||||||
const nWeakenPID1 = ns.exec(sWeaken, "home", nWeakenThreadsEstimate1, sTarget, false, nDelays[1]);
|
|
||||||
//ns.tail(nWeakenPID, "home", "home", nWeakenThreadsEstimate, sTarget, 0, nDelays[1]);
|
|
||||||
|
|
||||||
//grow
|
|
||||||
const nGrowPID = ns.exec(sGrow, "home", nGrowThreadsEstimate, sTarget, false, nGrowDelay + nDelays[2]);
|
|
||||||
//ns.tail(nGrowPID, "home", "home", nGrowThreadsEstimate, sTarget, 0, nGrowDelay + nDelays[2]);
|
|
||||||
|
|
||||||
//weaken 2
|
|
||||||
const nWeakenPID2 = ns.exec(sWeaken, "home", nWeakenThreadsEstimate2, sTarget, false, nDelays[3]);
|
|
||||||
//ns.tail(nWeakenPID2, "home", "home", nWeakenThreadsEstimate, sTarget, 0, nDelays[3]);
|
|
||||||
|
|
||||||
//await ns.sleep(nSafeTime);
|
|
||||||
|
|
||||||
/*
|
|
||||||
await ns.nextPortWrite(nHackPID);
|
|
||||||
await ns.nextPortWrite(nWeakenPID1);
|
|
||||||
await ns.nextPortWrite(nGrowPID);
|
|
||||||
await ns.nextPortWrite(nWeakenPID2);
|
|
||||||
|
|
||||||
ns.print("nHackPeek = " + nHackPeek);
|
|
||||||
ns.print("nWeaken1Peek = " + nWeaken1Peek);
|
|
||||||
ns.print("nGrowPeek = " + nGrowPeek);
|
|
||||||
ns.print("nWeaken2Peek = " + nWeaken2Peek);
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
let nHackPeek = ns.peek(nHackPID);
|
|
||||||
let nWeaken1Peek = ns.peek(nWeakenPID1);
|
|
||||||
let nGrowPeek = ns.peek(nGrowPID);
|
|
||||||
let nWeaken2Peek = ns.peek(nWeakenPID2);
|
|
||||||
|
|
||||||
|
|
||||||
if (nHackPeek === true || nWeaken1Peek === true || nGrowPeek === true || nWeaken2Peek === true) {
|
|
||||||
ns.print("some of the ports are already written to...");
|
|
||||||
ns.print("nHackPeek = " + nHackPeek);
|
|
||||||
ns.print("nWeaken1Peek = " + nWeaken1Peek);
|
|
||||||
ns.print("nGrowPeek = " + nGrowPeek);
|
|
||||||
ns.print("nWeaken2Peek = " + nWeaken2Peek);
|
|
||||||
}
|
|
||||||
|
|
||||||
await Promise.all([
|
|
||||||
ns.nextPortWrite(nHackPID),
|
|
||||||
ns.nextPortWrite(nWeakenPID1),
|
|
||||||
ns.nextPortWrite(nGrowPID),
|
|
||||||
ns.nextPortWrite(nWeakenPID2)
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
ns.print("hack: " + nHackPID + " completed at " + ns.readPort(nHackPID));
|
|
||||||
ns.print("weaken1: " + nWeakenPID1 + " completed at " + ns.readPort(nWeakenPID1));
|
|
||||||
ns.print("grow: " + nGrowPID + " completed at " + ns.readPort(nGrowPID));
|
|
||||||
ns.print("weaken2: " + nWeakenPID2 + " completed at " + ns.readPort(nWeakenPID2));
|
|
||||||
await ns.sleep(100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
/** @param {NS} ns */
|
|
||||||
export async function main(ns) {
|
|
||||||
ns.tprint(ns.codingcontract.getContractTypes())
|
|
||||||
let testcontract = ns.codingcontract.createDummyContract("Total Ways to Sum")
|
|
||||||
let contractType = ns.codingcontract.getContractType(testcontract);
|
|
||||||
ns.tprint(ns.codingcontract.getDescription(testcontract))
|
|
||||||
let n = ns.codingcontract.getData(testcontract);
|
|
||||||
ns.tprint("Data: " + n);
|
|
||||||
let answer = "";
|
|
||||||
if (contractType === "Find Largest Prime Factor") {
|
|
||||||
answer = largestPrimeFactor(n);
|
|
||||||
}
|
|
||||||
if (contractType === "Subarray with Maximum Sum") {
|
|
||||||
answer = SubarrayWithMaximumSum(ns, n)
|
|
||||||
}
|
|
||||||
if (contractType === "Total Ways to Sum") {
|
|
||||||
answer = TotalWaysToSum(ns, n)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ns.tprint(answer);
|
|
||||||
|
|
||||||
ns.tprint(ns.codingcontract.attempt(answer, testcontract));
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
5:
|
|
||||||
4 1
|
|
||||||
3 2
|
|
||||||
3 1 1
|
|
||||||
2 2 1
|
|
||||||
2 1 1 1
|
|
||||||
1 1 1 1 1
|
|
||||||
|
|
||||||
6:
|
|
||||||
5 1
|
|
||||||
4 2
|
|
||||||
4 1 1
|
|
||||||
3 3
|
|
||||||
3 2 1
|
|
||||||
3 1 1 1
|
|
||||||
2 2 2
|
|
||||||
2 2 1 1
|
|
||||||
2 1 1 1 1
|
|
||||||
1 1 1 1 1 1
|
|
||||||
|
|
||||||
# Start with one position m filling it with the integers between 1 and target
|
|
||||||
# For each m, fill the next position n with integers between 1 and m
|
|
||||||
# Repeat as long as the sum is smaller than target.
|
|
||||||
# append all iterations to the Array and count
|
|
||||||
*/
|
|
||||||
|
|
||||||
function TotalWaysToSum(ns, target) {
|
|
||||||
let sumArray = [];
|
|
||||||
let inputArray = [];
|
|
||||||
let unfinishedArray = [];
|
|
||||||
let rollingSum = 0;
|
|
||||||
for (let i = 1; i < target; i++) {
|
|
||||||
inputArray.push([i]);
|
|
||||||
}
|
|
||||||
let z = 1
|
|
||||||
while (inputArray.length > 0) {
|
|
||||||
z++
|
|
||||||
inputArray.forEach((element) => {
|
|
||||||
rollingSum = element.reduce((a, b) => a + b, 0);
|
|
||||||
if (rollingSum === target) {
|
|
||||||
sumArray.push(element)
|
|
||||||
} else {
|
|
||||||
|
|
||||||
for (let k = 1; k <= element[element.length-1] && k <= target - rollingSum; k++) {
|
|
||||||
|
|
||||||
unfinishedArray.push(element.concat([k]))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
inputArray = unfinishedArray;
|
|
||||||
}
|
|
||||||
ns.tprint("Target: " +target)
|
|
||||||
ns.tprint("Length: " + sumArray.length)
|
|
||||||
return sumArray.length
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function SubarrayWithMaximumSum(ns, givenArray) {
|
|
||||||
let arrayLength = givenArray.length;
|
|
||||||
let maxSum = -10000;
|
|
||||||
let runningSum = 0;
|
|
||||||
for (let i = 1; i <= arrayLength; i++) {
|
|
||||||
for (let j = 0; j <= arrayLength - i; j++) {
|
|
||||||
runningSum = eval(givenArray.slice(j, i + j).join('+'));
|
|
||||||
//ns.tprint("i: "+i+ " j: "+ j + " Array: "+givenArray.slice(j,i+j)+ " eval: "+ givenArray.slice(j,i+j).join('+')+"runningSum: "+runningSum);
|
|
||||||
if (maxSum < runningSum) { maxSum = runningSum };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return maxSum
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function FindLargestPrimeFactor(number) {
|
|
||||||
|
|
||||||
let factor = 2;
|
|
||||||
while (factor * factor <= number) {
|
|
||||||
if (number % factor === 0) {
|
|
||||||
number /= factor;
|
|
||||||
} else {
|
|
||||||
factor++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return number;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
function FindLargestPrimeFactor(n) {
|
|
||||||
let x = Math.ceil(Math.random()*10);
|
|
||||||
let y = x;
|
|
||||||
let d = 1;
|
|
||||||
|
|
||||||
while (d === 1) {
|
|
||||||
x = g(x, n);
|
|
||||||
y = g(g(y, n), n)
|
|
||||||
d = gcd(n, Math.abs(x - y))
|
|
||||||
//ns.tprint("x:" + x + " y: " + y + " d: " + d)
|
|
||||||
}
|
|
||||||
if (d === n) {
|
|
||||||
return ("failure")
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return (d)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function g(x, n) {
|
|
||||||
return (x * x) % n
|
|
||||||
}
|
|
||||||
|
|
||||||
function gcd(a,b) {
|
|
||||||
a = Math.abs(a);
|
|
||||||
b = Math.abs(b);
|
|
||||||
if (b > a) {var temp = a; a = b; b = temp;}
|
|
||||||
while (true) {
|
|
||||||
if (b == 0) return a;
|
|
||||||
a %= b;
|
|
||||||
if (a == 0) return b;
|
|
||||||
b %= a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function gcd(a, b) {
|
|
||||||
if (!b) {
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
return gcd(b, a % b);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"home":{"n00dles":{"nectar-net":{"neo-net":{"computek":{"summit-uni":{}}}}},"foodnstuff":{"zer0":{"silver-helix":{"the-hub":{"rothman-uni":{"millenium-fitness":{}}},"netlink":{"zb-institute":{"alpha-ent":{"galactic-cyber":{}}}},"johnson-ortho":{},"crush-fitness":{}}},"max-hardware":{"phantasy":{},"omega-net":{"avmnite-02h":{"syscore":{"rho-construction":{},"aevum-police":{"global-pharm":{"omnia":{"defcomm":{},"solaris":{}}}}},"catalyst":{},"I.I.I.I":{"lexo-corp":{"aerocorp":{"deltaone":{"icarus":{"infocomm":{"run4theh111z":{"helios":{}}},"taiyang-digital":{"titan-labs":{"vitalife":{"omnitek":{"nwo":{},"powerhouse-fitness":{"fulcrumassets":{},"The-Cave":{}}}}}},"zb-def":{"microdyne":{}}},"zeus-med":{}},"unitalife":{"univ-energy":{"nova-med":{"applied-energetics":{"fulcrumtech":{"4sigma":{},".":{"b-and-a":{"ecorp":{}}}},"stormtech":{"kuai-gong":{"blade":{},"clarkinc":{"megacorp":{}}}}}}}}},"snap-fitness":{}}}}}}},"sigma-cosmetics":{"CSEC":{}},"joesguns":{},"hong-fang-tea":{},"harakiri-sushi":{},"iron-gym":{},"darkweb":{},"pserv-01":{},"pserv-02":{},"pserv-03":{},"pserv-04":{},"pserv-05":{},"pserv-06":{},"pserv-07":{},"pserv-08":{},"pserv-09":{},"pserv-10":{},"pserv-11":{},"pserv-12":{},"pserv-13":{},"pserv-14":{},"pserv-15":{},"pserv-16":{},"pserv-17":{},"pserv-18":{},"pserv-19":{},"pserv-20":{},"pserv-21":{},"pserv-22":{},"pserv-23":{},"pserv-24":{},"pserv-25":{}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"serverName":"the-hub","maxRam":32,"maxMoney":483168296.25,"minSec":13,"minPorts":2,"minHackLvl":318,"rootAccess":true,"factorMoneyPerTime":0.22430424828218737,"openPorts":0,"serverFiles":["factionboost.js"],"hackingChance":0.6884405377713446}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user