diff --git a/.editorconfig b/.editorconfig index 168defc..960bfde 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,6 +1,6 @@ root = true -[*, *.ns, *.script] +[*, *.js, *.script] indent_style = space indent_size = 2 end_of_line = lf diff --git a/README.md b/README.md index 8ed0404..c4455b7 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The script can be slow to get going, but it'll get there eventually. Getting acc ## Instalation -1. Create a new script called `start.ns` by issuing the following command: `nano start.ns`. Make sure you're on your home server if you're not (you can quickly go home by running `home` in the console). +1. Create a new script called `start.js` by issuing the following command: `nano start.js`. Make sure you're on your home server if you're not (you can quickly go home by running `home` in the console). 2. Paste the following content: ```javascript @@ -22,11 +22,11 @@ export async function main(ns) { } await ns.wget( - `https://raw.githubusercontent.com/moriakaice/bitburner/master/src/initHacking.ns?ts=${new Date().getTime()}`, - "initHacking.ns" + `https://raw.githubusercontent.com/moriakaice/bitburner/master/src/initHacking.js?ts=${new Date().getTime()}`, + "initHacking.js" ); - ns.spawn("initHacking.ns", 1); + ns.spawn("initHacking.js", 1); } ``` -3. Exit the nano and write in console: `run start.ns` +3. Exit the nano and write in console: `run start.js` diff --git a/src/commitCrime.ns b/src/commitCrime.js similarity index 93% rename from src/commitCrime.ns rename to src/commitCrime.js index ef4d7c0..f755c6a 100644 --- a/src/commitCrime.ns +++ b/src/commitCrime.js @@ -25,8 +25,8 @@ function localeHHMMSS(ms = 0) { } function getCrimesData(ns) { - ns.tprint(`[${localeHHMMSS()}] Spawning getCrimesData.ns`) - ns.spawn('getCrimesData.ns', 1) + ns.tprint(`[${localeHHMMSS()}] Spawning getCrimesData.js`) + ns.spawn('getCrimesData.js', 1) } function selectCrime(crimes) { @@ -54,7 +54,7 @@ function selectCrime(crimes) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting commitCrime.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting commitCrime.js`) let hostname = ns.getHostname() diff --git a/src/common.ns b/src/common.js similarity index 100% rename from src/common.ns rename to src/common.js diff --git a/src/contracter.ns b/src/contracter.js similarity index 99% rename from src/contracter.ns rename to src/contracter.js index a7a3b53..d339319 100644 --- a/src/contracter.ns +++ b/src/contracter.js @@ -402,7 +402,7 @@ function findAnswer(contract) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting contracter.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting contracter.js`) let hostname = ns.getHostname() diff --git a/src/find.ns b/src/find.js similarity index 95% rename from src/find.ns rename to src/find.js index 616aada..44a52b3 100644 --- a/src/find.ns +++ b/src/find.js @@ -43,7 +43,7 @@ function printPathToServer(servers, serverToFind) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting find.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting find.js`) const serverToFind = ns.args[0] @@ -65,19 +65,19 @@ export async function main(ns) { } else { ns.tprint(`[${localeHHMMSS()}] Common servers:`) ns.tprint(`* CSEC (CyberSec faction)`) - ns.tprint(printPathToServer(serverMap.servers, 'CSEC') + '; hack;') + ns.tprint(printPathToServer(serverMap.servers, 'CSEC') + '; backdoor;') ns.tprint('') ns.tprint(`* avmnite-02h (NiteSec faction)`) - ns.tprint(printPathToServer(serverMap.servers, 'avmnite-02h') + '; hack;') + ns.tprint(printPathToServer(serverMap.servers, 'avmnite-02h') + '; backdoor;') ns.tprint('') ns.tprint(`* I.I.I.I (The Black Hand faction)`) - ns.tprint(printPathToServer(serverMap.servers, 'I.I.I.I') + '; hack;') + ns.tprint(printPathToServer(serverMap.servers, 'I.I.I.I') + '; backdoor;') ns.tprint('') ns.tprint(`* run4theh111z (Bitrunners faction)`) - ns.tprint(printPathToServer(serverMap.servers, 'run4theh111z') + '; hack;') + ns.tprint(printPathToServer(serverMap.servers, 'run4theh111z') + '; backdoor;') ns.tprint('') ns.tprint(`* w0r1d_d43m0n`) - ns.tprint(printPathToServer(serverMap.servers, 'w0r1d_d43m0n') + '; hack;') + ns.tprint(printPathToServer(serverMap.servers, 'w0r1d_d43m0n') + '; backdoor;') ns.tprint('') ns.tprint(`[${localeHHMMSS()}] Looking for servers with coding contracts:`) Object.keys(serverMap.servers).forEach((hostname) => { diff --git a/src/gangFastAscender.ns b/src/gangFastAscender.js similarity index 99% rename from src/gangFastAscender.ns rename to src/gangFastAscender.js index e3678d3..72bdaa8 100644 --- a/src/gangFastAscender.ns +++ b/src/gangFastAscender.js @@ -144,7 +144,7 @@ function sortBy(ns, sortType = null, direction = DIRECTIONS.ASC) { export async function main(ns) { ns.disableLog('ALL') - ns.tprint(`[${localeHHMMSS()}] Starting gangFastAscender.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting gangFastAscender.js`) let hostname = ns.getHostname() diff --git a/src/gangManager.ns b/src/gangManager.js similarity index 99% rename from src/gangManager.ns rename to src/gangManager.js index 188fc07..2cff082 100644 --- a/src/gangManager.ns +++ b/src/gangManager.js @@ -140,7 +140,7 @@ function sortBy(ns, sortType = null, direction = DIRECTIONS.ASC) { export async function main(ns) { ns.disableLog('ALL') - ns.tprint(`[${localeHHMMSS()}] Starting gangManager.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting gangManager.js`) let hostname = ns.getHostname() diff --git a/src/getCrimesData.ns b/src/getCrimesData.js similarity index 90% rename from src/getCrimesData.ns rename to src/getCrimesData.js index 3d29640..6b9629f 100644 --- a/src/getCrimesData.ns +++ b/src/getCrimesData.js @@ -37,9 +37,9 @@ function localeHHMMSS(ms = 0) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting getCrimesData.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting getCrimesData.js`) - const scriptToRunAfter = ns.args[0] || 'getCrimesData2.ns' + const scriptToRunAfter = ns.args[0] || 'getCrimesData2.js' let hostname = ns.getHostname() diff --git a/src/getCrimesData2.ns.js b/src/getCrimesData2.ns.js index 125ea0a..473eedc 100644 --- a/src/getCrimesData2.ns.js +++ b/src/getCrimesData2.ns.js @@ -37,9 +37,9 @@ function localeHHMMSS(ms = 0) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting getCrimesData2.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting getCrimesData2.js`) - const scriptToRunAfter = ns.args[0] || 'commitCrime.ns' + const scriptToRunAfter = ns.args[0] || 'commitCrime.js' let hostname = ns.getHostname() diff --git a/src/grow.ns b/src/grow.js similarity index 100% rename from src/grow.ns rename to src/grow.js diff --git a/src/hack.ns b/src/hack.js similarity index 100% rename from src/hack.ns rename to src/hack.js diff --git a/src/initHacking.ns b/src/initHacking.js similarity index 69% rename from src/initHacking.ns rename to src/initHacking.js index 551dede..9cd7d13 100644 --- a/src/initHacking.ns +++ b/src/initHacking.js @@ -1,15 +1,18 @@ const baseUrl = 'https://raw.githubusercontent.com/moriakaice/bitburner/master/src/' const filesToDownload = [ - 'common.ns', - 'mainHack.ns', - 'spider.ns', - 'grow.ns', - 'hack.ns', - 'weaken.ns', - 'playerServers.ns', - 'killAll.ns', - 'runHacking.ns', - 'find.ns', + 'common.js', + 'mainHack.js', + 'spider.js', + 'grow.js', + 'hack.js', + 'weaken.js', + 'playerServers.js', + 'killAll.js', + 'runHacking.js', + 'find.js', + 'startStock.js', + 'stockMarketer.js', + 'stockMarketer4S.js', ] const valuesToRemove = ['BB_SERVER_MAP'] @@ -22,7 +25,7 @@ function localeHHMMSS(ms = 0) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting initHacking.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting initHacking.js`) let hostname = ns.getHostname() @@ -42,6 +45,6 @@ export async function main(ns) { valuesToRemove.map((value) => localStorage.removeItem(value)) - ns.tprint(`[${localeHHMMSS()}] Spawning killAll.ns`) - ns.spawn('killAll.ns', 1, 'runHacking.ns') + ns.tprint(`[${localeHHMMSS()}] Spawning killAll.js`) + ns.spawn('killAll.js', 1, 'runHacking.js') } diff --git a/src/karmaReducer.ns b/src/karmaReducer.js similarity index 94% rename from src/karmaReducer.ns rename to src/karmaReducer.js index 6206878..a7518ef 100644 --- a/src/karmaReducer.ns +++ b/src/karmaReducer.js @@ -24,7 +24,7 @@ function localeHHMMSS(ms = 0) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting karmaReducer.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting karmaReducer.js`) let hostname = ns.getHostname() diff --git a/src/killAll.ns b/src/killAll.js similarity index 73% rename from src/killAll.ns rename to src/killAll.js index 6bedf3e..3ea5a1b 100644 --- a/src/killAll.ns +++ b/src/killAll.js @@ -5,16 +5,19 @@ const settings = { }, } const scriptsToKill = [ - 'mainHack.ns', - 'spider.ns', - 'grow.ns', - 'hack.ns', - 'weaken.ns', - 'playerServers.ns', - 'runHacking.ns', - 'initHacking.ns', - 'start.ns', - 'find.ns', + 'mainHack.js', + 'spider.js', + 'grow.js', + 'hack.js', + 'weaken.js', + 'playerServers.js', + 'runHacking.js', + 'initHacking.js', + 'start.js', + 'find.js', + 'startStock.js', + 'stockMarketer.js', + 'stockMarketer4S.js', ] function getItem(key) { @@ -32,7 +35,7 @@ function localeHHMMSS(ms = 0) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting killAll.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting killAll.js`) const scriptToRunAfter = ns.args[0] @@ -45,8 +48,8 @@ export async function main(ns) { const serverMap = getItem(settings.keys.serverMap) if (!serverMap || serverMap.lastUpdate < new Date().getTime() - settings.mapRefreshInterval) { - ns.tprint(`[${localeHHMMSS()}] Spawning spider.ns`) - ns.spawn('spider.ns', 1, 'killAll.ns') + ns.tprint(`[${localeHHMMSS()}] Spawning spider.js`) + ns.spawn('spider.js', 1, 'killAll.js') ns.exit() return } @@ -69,7 +72,7 @@ export async function main(ns) { ns.tprint(`[${localeHHMMSS()}] Spawning ${scriptToRunAfter}`) ns.spawn(scriptToRunAfter, 1) } else { - ns.tprint(`[${localeHHMMSS()}] Spawning runHacking.ns`) - ns.spawn('runHacking.ns', 1) + ns.tprint(`[${localeHHMMSS()}] Spawning runHacking.js`) + ns.spawn('runHacking.js', 1) } } diff --git a/src/mainHack.ns b/src/mainHack.js similarity index 85% rename from src/mainHack.ns rename to src/mainHack.js index bd7dea0..2b9a68a 100644 --- a/src/mainHack.ns +++ b/src/mainHack.js @@ -29,7 +29,7 @@ function setItem(key, value) { } const hackPrograms = ['BruteSSH.exe', 'FTPCrack.exe', 'relaySMTP.exe', 'HTTPWorm.exe', 'SQLInject.exe'] -const hackScripts = ['hack.ns', 'grow.ns', 'weaken.ns'] +const hackScripts = ['hack.js', 'grow.js', 'weaken.js'] function getPlayerDetails(ns) { let portHacks = 0 @@ -91,12 +91,12 @@ function weakenCyclesForHack(hackCycles) { async function getHackableServers(ns, servers) { const playerDetails = getPlayerDetails(ns) - const hackableServers = Object.keys(servers) + const vulnerableServers = Object.keys(servers) .filter((hostname) => ns.serverExists(hostname)) .filter((hostname) => servers[hostname].ports <= playerDetails.portHacks || ns.hasRootAccess(hostname)) .filter((hostname) => servers[hostname].ram >= 2) - for (const hostname of hackableServers) { + for (const hostname of vulnerableServers) { if (hostname === 'home') continue; if (!ns.hasRootAccess(hostname)) { hackPrograms.forEach((hackProgram) => { @@ -111,8 +111,8 @@ async function getHackableServers(ns, servers) { } - hackableServers.sort((a, b) => servers[a].ram - servers[b].ram) - return hackableServers + vulnerableServers.sort((a, b) => servers[a].ram - servers[b].ram) + return vulnerableServers } function findTargetServer(ns, serversList, servers, serverExtraData) { @@ -149,7 +149,7 @@ function findTargetServer(ns, serversList, servers, serverExtraData) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting mainHack.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting mainHack.js`) let hostname = ns.getHostname() @@ -165,24 +165,24 @@ export async function main(ns) { } if (!serverMap || serverMap.lastUpdate < new Date().getTime() - settings.mapRefreshInterval) { - ns.tprint(`[${localeHHMMSS()}] Spawning spider.ns`) - ns.spawn('spider.ns', 1, 'mainHack.ns') + ns.tprint(`[${localeHHMMSS()}] Spawning spider.js`) + ns.spawn('spider.js', 1, 'mainHack.js') ns.exit() return } serverMap.servers.home.ram = Math.max(0, serverMap.servers.home.ram - settings.homeRamReserved) - const hackableServers = await getHackableServers(ns, serverMap.servers) + const vulnerableServers = await getHackableServers(ns, serverMap.servers) - const targetServers = findTargetServer(ns, hackableServers, serverMap.servers, serverExtraData) + const targetServers = findTargetServer(ns, vulnerableServers, serverMap.servers, serverExtraData) const bestTarget = targetServers.shift() - const hackTime = ns.getHackTime(bestTarget) * 1000 - const growTime = ns.getGrowTime(bestTarget) * 1000 - const weakenTime = ns.getWeakenTime(bestTarget) * 1000 + const hackTime = ns.getHackTime(bestTarget) + const growTime = ns.getGrowTime(bestTarget) + const weakenTime = ns.getWeakenTime(bestTarget) const growDelay = Math.max(0, weakenTime - growTime - 15 * 1000) const hackDelay = Math.max(0, growTime + growDelay - hackTime - 15 * 1000) - + const securityLevel = ns.getServerSecurityLevel(bestTarget) const money = ns.getServerMoneyAvailable(bestTarget) @@ -199,8 +199,8 @@ export async function main(ns) { let growCycles = 0 let weakenCycles = 0 - for (let i = 0; i < hackableServers.length; i++) { - const server = serverMap.servers[hackableServers[i]] + for (let i = 0; i < vulnerableServers.length; i++) { + const server = serverMap.servers[vulnerableServers[i]] hackCycles += Math.floor(server.ram / 1.7) growCycles += Math.floor(server.ram / 1.75) } @@ -239,19 +239,19 @@ export async function main(ns) { }` ) - for (let i = 0; i < hackableServers.length; i++) { - const server = serverMap.servers[hackableServers[i]] + for (let i = 0; i < vulnerableServers.length; i++) { + const server = serverMap.servers[vulnerableServers[i]] let cyclesFittable = Math.max(0, Math.floor(server.ram / 1.75)) const cyclesToRun = Math.max(0, Math.min(cyclesFittable, growCycles)) if (growCycles) { - await ns.exec('grow.ns', server.host, cyclesToRun, bestTarget, cyclesToRun, growDelay, createUUID()) + await ns.exec('grow.js', server.host, cyclesToRun, bestTarget, cyclesToRun, growDelay, createUUID()) growCycles -= cyclesToRun cyclesFittable -= cyclesToRun } if (cyclesFittable) { - await ns.exec('weaken.ns', server.host, cyclesFittable, bestTarget, cyclesFittable, 0, createUUID()) + await ns.exec('weaken.js', server.host, cyclesFittable, bestTarget, cyclesFittable, 0, createUUID()) weakenCycles -= cyclesFittable } } @@ -261,19 +261,19 @@ export async function main(ns) { ns.tprint(`[${localeHHMMSS()}] Cycles ratio: ${growCycles} grow cycles; ${weakenCycles} weaken cycles`) - for (let i = 0; i < hackableServers.length; i++) { - const server = serverMap.servers[hackableServers[i]] + for (let i = 0; i < vulnerableServers.length; i++) { + const server = serverMap.servers[vulnerableServers[i]] let cyclesFittable = Math.max(0, Math.floor(server.ram / 1.75)) const cyclesToRun = Math.max(0, Math.min(cyclesFittable, growCycles)) if (growCycles) { - await ns.exec('grow.ns', server.host, cyclesToRun, bestTarget, cyclesToRun, growDelay, createUUID()) + await ns.exec('grow.js', server.host, cyclesToRun, bestTarget, cyclesToRun, growDelay, createUUID()) growCycles -= cyclesToRun cyclesFittable -= cyclesToRun } if (cyclesFittable) { - await ns.exec('weaken.ns', server.host, cyclesFittable, bestTarget, cyclesFittable, 0, createUUID()) + await ns.exec('weaken.js', server.host, cyclesFittable, bestTarget, cyclesFittable, 0, createUUID()) weakenCycles -= cyclesFittable } } @@ -300,13 +300,13 @@ export async function main(ns) { ns.tprint(`[${localeHHMMSS()}] Cycles ratio: ${hackCycles} hack cycles; ${growCycles} grow cycles; ${weakenCycles} weaken cycles`) - for (let i = 0; i < hackableServers.length; i++) { - const server = serverMap.servers[hackableServers[i]] + for (let i = 0; i < vulnerableServers.length; i++) { + const server = serverMap.servers[vulnerableServers[i]] let cyclesFittable = Math.max(0, Math.floor(server.ram / 1.7)) const cyclesToRun = Math.max(0, Math.min(cyclesFittable, hackCycles)) if (hackCycles) { - await ns.exec('hack.ns', server.host, cyclesToRun, bestTarget, cyclesToRun, hackDelay, createUUID()) + await ns.exec('hack.js', server.host, cyclesToRun, bestTarget, cyclesToRun, hackDelay, createUUID()) hackCycles -= cyclesToRun cyclesFittable -= cyclesToRun } @@ -317,13 +317,13 @@ export async function main(ns) { if (cyclesFittable && growCycles) { const growCyclesToRun = Math.min(growCycles, cyclesFittable) - await ns.exec('grow.ns', server.host, growCyclesToRun, bestTarget, growCyclesToRun, growDelay, createUUID()) + await ns.exec('grow.js', server.host, growCyclesToRun, bestTarget, growCyclesToRun, growDelay, createUUID()) growCycles -= growCyclesToRun cyclesFittable -= growCyclesToRun } if (cyclesFittable) { - await ns.exec('weaken.ns', server.host, cyclesFittable, bestTarget, cyclesFittable, 0, createUUID()) + await ns.exec('weaken.js', server.host, cyclesFittable, bestTarget, cyclesFittable, 0, createUUID()) weakenCycles -= cyclesFittable } } diff --git a/src/playerServers.ns b/src/playerServers.js similarity index 98% rename from src/playerServers.ns rename to src/playerServers.js index 00c9022..80bd64c 100644 --- a/src/playerServers.ns +++ b/src/playerServers.js @@ -84,7 +84,7 @@ function getPurchasedServers(ns) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting playerServers.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting playerServers.js`) settings.maxGbRam = ns.getPurchasedServerMaxRam() settings.maxPlayerServers = ns.getPurchasedServerLimit() diff --git a/src/prepareGang.ns b/src/prepareGang.js similarity index 94% rename from src/prepareGang.ns rename to src/prepareGang.js index 1995217..03b2120 100644 --- a/src/prepareGang.ns +++ b/src/prepareGang.js @@ -22,7 +22,7 @@ export async function main(ns) { name: equipmentName, type: ns.gang.getEquipmentType(equipmentName), cost: ns.gang.getEquipmentCost(equipmentName), - ...ns.gang.getEquipmentStats(equipmentName), + ...js.gang.getEquipmentStats(equipmentName), } }) equpiments.sort((a, b) => a.cost - b.cost) diff --git a/src/runHacking.js b/src/runHacking.js new file mode 100644 index 0000000..0b9ce32 --- /dev/null +++ b/src/runHacking.js @@ -0,0 +1,53 @@ +function localeHHMMSS(ms = 0) { + if (!ms) { + ms = new Date().getTime() + } + + return new Date(ms).toLocaleTimeString() +} + +export async function main(ns) { + ns.tprint(`[${localeHHMMSS()}] Starting runHacking.js`) + + let hostname = ns.getHostname() + + if (hostname !== 'home') { + throw new Exception('Run the script from home') + } + + const homeRam = ns.getServerRam('home').shift() + + if (homeRam >= 32) { + ns.tprint(`[${localeHHMMSS()}] Spawning spider.js`) + await ns.run('spider.js', 1, 'playerServers.js') + + let player = ns.getPlayer(); + if (player.hasTixApiAccess) { + ns.tprint(`[${localeHHMMSS()}] Player has Tix API Access`) + try { + ns.stock.short(); + } + catch (e) { + ns.tprint(e.toString()) + const cantShort = e.toString().includes("BitNode-8") + if (player.has4SDataTixApi) { + if (cantShort) { + ns.tprint(`[${localeHHMMSS()}] Spawning startStock.js`) + await ns.run('startStock.js', 1) + } else { + ns.tprint(`[${localeHHMMSS()}] Spawning stockMarketer4s.js`) + await ns.run('stockMarketer4s.js', 1) + } + } else if (!player.has4SDataTixApi && !cantShort) { + ns.tprint(`[${localeHHMMSS()}] Spawning stockMarketer.js`) + await ns.run('stockMarketer.js', 1) + } + } + } + ns.tprint(`[${localeHHMMSS()}] Spawning spider.js`) + ns.spawn('spider.js', 1, 'mainHack.js') + } else { + ns.tprint(`[${localeHHMMSS()}] Spawning spider.js`) + ns.spawn('spider.js', 1, 'mainHack.js') + } +} \ No newline at end of file diff --git a/src/runHacking.ns b/src/runHacking.ns deleted file mode 100644 index 14d2a6b..0000000 --- a/src/runHacking.ns +++ /dev/null @@ -1,30 +0,0 @@ -function localeHHMMSS(ms = 0) { - if (!ms) { - ms = new Date().getTime() - } - - return new Date(ms).toLocaleTimeString() -} - -export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting runHacking.ns`) - - let hostname = ns.getHostname() - - if (hostname !== 'home') { - throw new Exception('Run the script from home') - } - - const homeRam = ns.getServerRam('home').shift() - - if (homeRam >= 32) { - ns.tprint(`[${localeHHMMSS()}] Spawning spider.ns`) - await ns.run('spider.ns', 1, 'mainHack.ns') - await ns.sleep(3000) - ns.tprint(`[${localeHHMMSS()}] Spawning playerServers.ns`) - ns.spawn('playerServers.ns', 1) - } else { - ns.tprint(`[${localeHHMMSS()}] Spawning spider.ns`) - ns.spawn('spider.ns', 1, 'mainHack.ns') - } -} diff --git a/src/sellAllStock.ns b/src/sellAllStock.js similarity index 100% rename from src/sellAllStock.ns rename to src/sellAllStock.js diff --git a/src/spider.ns b/src/spider.js similarity index 95% rename from src/spider.ns rename to src/spider.js index 8d85a3d..9679325 100644 --- a/src/spider.ns +++ b/src/spider.js @@ -1,4 +1,4 @@ -import { settings, setItem } from 'common.ns' +import { settings, setItem } from 'common.js' const hackPrograms = ['BruteSSH.exe', 'FTPCrack.exe', 'relaySMTP.exe', 'HTTPWorm.exe', 'SQLInject.exe'] @@ -34,7 +34,7 @@ function localeHHMMSS(ms = 0) { } export async function main(ns) { - ns.tprint(`[${localeHHMMSS()}] Starting spider.ns`) + ns.tprint(`[${localeHHMMSS()}] Starting spider.js`) const scriptToRunAfter = ns.args[0] @@ -142,8 +142,8 @@ export async function main(ns) { setItem(settings().keys.serverMap, serverMap) if (!scriptToRunAfter) { - ns.tprint(`[${localeHHMMSS()}] Spawning mainHack.ns`) - ns.spawn('mainHack.ns', 1) + ns.tprint(`[${localeHHMMSS()}] Spawning mainHack.js`) + ns.spawn('mainHack.js', 1) } else { ns.tprint(`[${localeHHMMSS()}] Spawning ${scriptToRunAfter}`) ns.spawn(scriptToRunAfter, 1) diff --git a/src/startStock.js b/src/startStock.js new file mode 100644 index 0000000..76ebba9 --- /dev/null +++ b/src/startStock.js @@ -0,0 +1,49 @@ +// Built upon u/pwillia7 's stock script. +// u/ferrus_aub stock script using simple portfolio algorithm. +/** @param {NS} ns **/ +export async function main(ns) { + var maxSharePer = 1.00 + var stockBuyPer = 0.60 + var stockVolPer = 0.05 + var moneyKeep = 0 + var minSharePer = 5 + + while (true) { + ns.disableLog('disableLog'); + ns.disableLog('sleep'); + ns.disableLog('getServerMoneyAvailable'); + var stocks = ns.stock.getSymbols().sort(function(a,b){return ns.stock.getForecast(b) - ns.stock.getForecast(a);}) + for (const stock of stocks) { + var position = ns.stock.getPosition(stock); + if (position[0]) { + //ns.print('Position: ' + stock + ', ') + sellPositions(stock); + } + buyPositions(stock); + } + ns.print('Cycle Complete'); + await ns.sleep(6000); + } + function buyPositions(stock) { + var maxShares = (ns.stock.getMaxShares(stock) * maxSharePer) - position[0]; + var askPrice = ns.stock.getAskPrice(stock); + var forecast = ns.stock.getForecast(stock); + var volPer = ns.stock.getVolatility(stock); + var playerMoney = ns.getServerMoneyAvailable('home'); + + if (forecast >= stockBuyPer && volPer <= stockVolPer) { + if (playerMoney - moneyKeep > ns.stock.getPurchaseCost(stock,minSharePer, "Long")) { + var shares = Math.min((playerMoney - moneyKeep - 100000) / askPrice, maxShares); + ns.stock.buy(stock, shares); + //ns.print('Bought: '+ stock + '') + } + } + } + function sellPositions(stock) { + var forecast = ns.stock.getForecast(stock); + if (forecast < 0.5) { + ns.stock.sell(stock, position[0]); + //ns.print('Sold: '+ stock + '') + } + } +} \ No newline at end of file diff --git a/src/stockMarketer.ns b/src/stockMarketer.js similarity index 91% rename from src/stockMarketer.ns rename to src/stockMarketer.js index 355448e..9d87214 100644 --- a/src/stockMarketer.ns +++ b/src/stockMarketer.js @@ -27,7 +27,7 @@ function processTick(ns, stockSymbol) { let positionChanged = false let avgTracker = avgTrackers[stockSymbol] || [] let rising = risingTrackers[stockSymbol] - avgTracker.push(ns.getStockPrice(stockSymbol)) + avgTracker.push(ns.stock.getPrice(stockSymbol)) avgTracker = avgTracker.slice(-40) if (avgTracker.length === 40) { @@ -37,7 +37,7 @@ function processTick(ns, stockSymbol) { const avg10 = average(avgTracker.slice(-10)) if (profitTracker.volume && profitTracker.position) { - const stockSaleGain = ns.getStockSaleGain(stockSymbol, profitTracker.volume, profitTracker.position) + const stockSaleGain = ns.stock.getSaleGain(stockSymbol, profitTracker.volume, profitTracker.position) profitPercentage = (stockSaleGain - profitTracker.volume * profitTracker.value) / (profitTracker.volume * profitTracker.value) if (Math.abs(profitPercentage) > profitMargin) { @@ -46,7 +46,7 @@ function processTick(ns, stockSymbol) { } if (profitMarginCrossed) { - const shortSellValue = ns.sellShort(stockSymbol, 9999999999999999999999999) + const shortSellValue = ns.stock.sellShort(stockSymbol, 9999999999999999999999999) if (shortSellValue && profitTracker.volume) { const profit = profitTracker.volume * (profitTracker.value - shortSellValue) - 200000 corpus += profit @@ -68,7 +68,7 @@ function processTick(ns, stockSymbol) { } } - const longSellValue = ns.sellStock(stockSymbol, 9999999999999999999999999) + const longSellValue = ns.stock.sell(stockSymbol, 9999999999999999999999999) if (longSellValue && profitTracker.volume) { const profit = profitTracker.volume * (longSellValue - profitTracker.value) - 200000 corpus += profit @@ -99,7 +99,7 @@ function processTick(ns, stockSymbol) { if (positionChanged) { if (rising) { // It's rising now, sell short, buy long - const shortSellValue = ns.sellShort(stockSymbol, 9999999999999999999999999) + const shortSellValue = ns.stock.sellShort(stockSymbol, 9999999999999999999999999) if (shortSellValue && profitTracker.volume) { const profit = profitTracker.volume * (profitTracker.value - shortSellValue) - 200000 corpus += profit @@ -123,11 +123,11 @@ function processTick(ns, stockSymbol) { const moneyToInvest = firstInvests[stockSymbol] ? getMoney(ns) : Math.floor(corpus / 6) if (moneyToInvest > minimumMoneyToInvest) { - let volume = Math.floor(moneyToInvest / ns.getStockAskPrice(stockSymbol)) - volume = Math.min(volume, ns.getStockMaxShares(stockSymbol)) + let volume = Math.floor(moneyToInvest / ns.stock.getAskPrice(stockSymbol)) + volume = Math.min(volume, ns.stock.getMaxShares(stockSymbol)) if (volume > 0) { - const longBuyValue = ns.buyStock(stockSymbol, volume) + const longBuyValue = ns.stock.buy(stockSymbol, volume) const message = `[${localeHHMMSS()}] ${stockSymbol}, buying longs, volume: ${volume}, @@ -161,7 +161,7 @@ function processTick(ns, stockSymbol) { } } else { // It's falling now, sell long, buy short - const longSellValue = ns.sellStock(stockSymbol, 9999999999999999999999999) + const longSellValue = ns.stock.sell(stockSymbol, 9999999999999999999999999) if (longSellValue && profitTracker.volume) { const profit = profitTracker.volume * (longSellValue - profitTracker.value) - 200000 corpus += profit @@ -185,8 +185,8 @@ function processTick(ns, stockSymbol) { const moneyToInvest = firstInvests[stockSymbol] ? getMoney(ns) : Math.floor(corpus / 6) if (moneyToInvest > minimumMoneyToInvest) { - let volume = Math.floor(moneyToInvest / ns.getStockBidPrice(stockSymbol)) - volume = Math.min(volume, ns.getStockMaxShares(stockSymbol)) + let volume = Math.floor(moneyToInvest / ns.stock.getBidPrice(stockSymbol)) + volume = Math.min(volume, ns.stock.getMaxShares(stockSymbol)) if (volume > 0) { const shortBuyValue = ns.shortStock(stockSymbol, volume) @@ -236,7 +236,7 @@ export async function main(ns) { corpus = ns.getServerMoneyAvailable('home') - 1000000 stockSymbols.forEach((stockSymbol) => { - const [sharesLong, avgPriceLong, sharesShort, avgPriceShort] = ns.getStockPosition(stockSymbol) + const [sharesLong, avgPriceLong, sharesShort, avgPriceShort] = ns.stock.getPosition(stockSymbol) corpus += sharesLong * avgPriceLong + sharesShort * avgPriceShort }) diff --git a/src/stockMarketer4S.ns b/src/stockMarketer4S.js similarity index 100% rename from src/stockMarketer4S.ns rename to src/stockMarketer4S.js diff --git a/src/weaken.ns b/src/weaken.js similarity index 100% rename from src/weaken.ns rename to src/weaken.js