This commit is contained in:
2022-10-16 15:22:06 +02:00
parent 017f853a03
commit af84e9b05f
10 changed files with 212 additions and 49 deletions
+129
View File
@@ -0,0 +1,129 @@
/** @param {import(".").NS } ns */
/**
* get all servers
* for servers ram > 0 get ram, get money
* home ram substract ram needed for bots
* get available threads for each server for hack/grow/weaken
* sum all money
* run with proportion to the money available
*/
export async function main(ns) {
// ns.disableLog('ALL');
async function writeLog(type, obj) {
let timeNow = new Date();
let year = timeNow.getFullYear().toString().substring(2);
let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);
let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();
let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();
let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();
let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();
let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;
await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\n`);
if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);
}
async function runHack(server) {
let script = 'simple-hack.js';
let serverStatus = analyzeServer(server);
await writeLog('ANALYZE', `{server: "${server}", status: ${JSON.stringify(serverStatus)}}`);
if (!serverStatus.rootAccess) {
if (serverStatus.nukeAvailable) {
await writeLog('NUKE', `"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`);
for (let i = 0; i < maxPortsToHack(); ++i) {
switch (EXPLOITS[i]) {
case 'BruteSSH.exe':
ns.brutessh(server);
break;
case 'FTPCrack.exe':
ns.ftpcrack(server);
break;
case 'relaySMTP.exe':
ns.relaysmtp(server);
break;
case 'HTTPWorm.exe':
ns.httpworm(server);
break;
case 'SQLInject.exe':
ns.sqlinject(server);
break;
}
}
ns.nuke(server);
}
}
serverStatus = analyzeServer(server);
if (serverStatus.rootAccess) {
if (!ns.fileExists(script, 'home')) {
await writeLog('ERROR', `"Script '${script}' doesn't exist!"`);
// return -3;
}
ns.scp(script, server, 'home');
let serverMaxRam = ns.getServerMaxRam(server);
let serverUsedRam = ns.getServerUsedRam(server);
let serverFreeRam = serverMaxRam - serverUsedRam;
let scriptRam = ns.getScriptRam(script, server);
let maxThreads = Math.floor(serverFreeRam / scriptRam);
let a = ns.scriptRunning(script, server);
if (!a) {
if (maxThreads == 0) {
// await writeLog('ERROR', `"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!"`);
return -4;
}
let execExitCode = ns.exec(script, server, maxThreads, server);
if (!execExitCode) {
// await writeLog('ERROR', `"Exec error running script '${script} on '${server}!"`);
return -5;
}
else {
return execExitCode;
}
} else {
// await writeLog('ERROR', `"Hack already running on ${server}"`);
return 0;
}
}
return -6;
}
function scanServer(currentServer, previousServer = currentServer) {
let availableServers = ns.scan(currentServer);
let result = [];
for (let i = 0; i < availableServers.length; ++i) {
let nextServer = availableServers[i];
if (nextServer != currentServer && nextServer != previousServer) {
result.concat(scanServer(nextServer, currentServer));
}
}
return [currentServer].concat(result);
}
while(true){
let network = scanServer('home');
await sleep(100);
}
}
+3 -1
View File
@@ -19,5 +19,7 @@ const COMPLETED_FACTIONS = [
'NiteSec',
'The Black Hand',
'Aevum',
'Sector-12'
'Sector-12',
'Volhaven',
'Tian Di Hui'
];
+7
View File
@@ -0,0 +1,7 @@
/** @param {import(".").NS } ns */
export async function main(ns) {
// ns.disableLog('ALL');
}
+7
View File
@@ -0,0 +1,7 @@
/** @param {import(".").NS } ns */
export async function main(ns) {
// ns.disableLog('ALL');
}
+51 -48
View File
@@ -10,6 +10,7 @@ export async function main(ns) {
const levelCap = 200;
const ramCap = 64;
const coreCap = 16;
const serverRAM = 32;
// const levelCap = 150;
// const ramCap = 64;
// const coreCap = 4;
@@ -69,65 +70,67 @@ export async function main(ns) {
};
while (true) {
let currentMoney = ns.getServerMoneyAvailable("home");
while (true) {
let currentMoney = ns.getServerMoneyAvailable("home");
if (!HACKNET_UPGRADE_PATTERN.complete) {
let nodePurchaseCost = ns.hacknet.getPurchaseNodeCost();
let nodeCount = ns.hacknet.numNodes();
if (!HACKNET_UPGRADE_PATTERN.complete) {
let nodePurchaseCost = ns.hacknet.getPurchaseNodeCost();
let nodeCount = ns.hacknet.numNodes();
if (nodeCount < nodeCap && nodePurchaseCost / Math.abs(currentMoney) < nodeCostThreshold) {
ns.hacknet.purchaseNode();
currentMoney = ns.getServerMoneyAvailable("home");
++nodeCount;
}
for (let index = 0; index < nodeCount; ++index) {
let nodeStats = ns.hacknet.getNodeStats(index);
if (nodeStats.level < levelCap && ns.hacknet.getLevelUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {
ns.hacknet.upgradeLevel(index, upgradeCount);
if (nodeCount < nodeCap && nodePurchaseCost / Math.abs(currentMoney) < nodeCostThreshold) {
ns.hacknet.purchaseNode();
currentMoney = ns.getServerMoneyAvailable("home");
++nodeCount;
}
if (nodeStats.ram < ramCap && ns.hacknet.getRamUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {
ns.hacknet.upgradeRam(index, upgradeCount);
currentMoney = ns.getServerMoneyAvailable("home");
}
for (let index = 0; index < nodeCount; ++index) {
let nodeStats = ns.hacknet.getNodeStats(index);
if (nodeStats.cores < coreCap && ns.hacknet.getCoreUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {
ns.hacknet.upgradeCore(index, upgradeCount);
currentMoney = ns.getServerMoneyAvailable("home");
if (nodeStats.level < levelCap && ns.hacknet.getLevelUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {
ns.hacknet.upgradeLevel(index, upgradeCount);
currentMoney = ns.getServerMoneyAvailable("home");
}
if (nodeStats.ram < ramCap && ns.hacknet.getRamUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {
ns.hacknet.upgradeRam(index, upgradeCount);
currentMoney = ns.getServerMoneyAvailable("home");
}
if (nodeStats.cores < coreCap && ns.hacknet.getCoreUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {
ns.hacknet.upgradeCore(index, upgradeCount);
currentMoney = ns.getServerMoneyAvailable("home");
}
}
}
}
let serverCost = ns.getPurchasedServerCost(16);
let serverCost = ns.getPurchasedServerCost(serverRAM);
if (serverCost < currentMoney) {
let newServer = ns.purchaseServer('home', 16);
if (newServer != '') {
ns.tprint(`Bought a server`);
ns.scp('grow-helper.js', newServer);
ns.scp('constants.js', newServer);
let execExitCode = ns.exec('grow-helper.js', newServer, 5, 20);
ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);
if (serverCost < currentMoney) {
let newServer = ns.purchaseServer('home', serverRAM);
if (newServer != '') {
ns.tprint(`Bought a server`);
ns.scp('grow-helper.js', newServer);
ns.scp('constants.js', newServer);
let execExitCode = ns.exec('grow-helper.js', newServer, 5, 20);
ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);
}
}
// terminalInput.value = backdoorCommand;
// terminalInput[handler].onChange({ target: terminalInput });
// terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
let logFiles = ['hack-log.js', 'nuke-log.js'];
for (let index = 0; index < logFiles.length; index++) {
const logFile = logFiles[index];
let portData = ns.readPort(index + 1);
if (portData != 'NULL PORT DATA') ns.write(logFile, portData, 'a');
}
await ns.sleep(1000);
}
// terminalInput.value = backdoorCommand;
// terminalInput[handler].onChange({ target: terminalInput });
// terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
let logFiles = ['hack-log.js', 'nuke-log.js'];
for (let index = 0; index < logFiles.length; index++) {
const logFile = logFiles[index];
let portData = ns.readPort(index + 1);
if (portData != 'NULL PORT DATA') ns.write(logFile, portData, 'a');
}
await ns.sleep(1000);
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+11
View File
@@ -0,0 +1,11 @@
/** @param {import(".").NS } ns */
export async function main(ns) {
// ns.disableLog('ALL');
let target;
if(ns.args.length == 1) {
target = JSON.parse(ns.args[0]);
}
}