Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { settings, Debugger, Out, Task, BatchExecutionOrder, prepareServer } from 'PRTS/services/utils.ts'
- export async function main(ns: NS) {
- //var declaration
- ns.clearLog()
- ns.disableLog('ALL')
- // const target = 'max-hardware'
- const target = ns.args[0]
- const { out } = new Debugger(ns)
- const debug = new Debugger(ns, true)
- const orderPort = ns.getPortHandle(settings.ports.router.orders)
- if (typeof target !== 'string') {
- out.terror('first argument have to be a hostname')
- return
- }
- out.normal('preparing ', target)
- await prepareServer(ns, target)
- // execution
- while (true) {
- out.info('attacking ', target)
- const delays = getDelays(ns, target, 100)
- const { hackThreads, growThreads, hWeakenThreads, gWeakenThreads } = buildHWGW(ns, target, new Debugger(ns, false))
- const tasks = [
- new Task('H', Date.now() + delays.hack, hackThreads),
- new Task('W', Date.now() + delays.hWeaken, hWeakenThreads),
- new Task('G', Date.now() + delays.grow, growThreads),
- new Task('W', Date.now() + delays.gWeaken, gWeakenThreads)
- ]
- setOrder(ns, out, orderPort, tasks, target)
- out.info('order designated and pushed')
- out.normal('awaiting for ', ns.tFormat(delays.awaitTime), ' seconds')
- await ns.sleep(delays.awaitTime)
- debug.isServerPrepared(ns.getServer(target), true)
- }
- }
- function setOrder(ns: NS, out: Out, port: NetscriptPort, tasks: Task[], target: string) {
- const order: BatchExecutionOrder = new BatchExecutionOrder(tasks, target)
- port.tryWrite(order) ? out.success('Order targeting ', target, ' wirtten to the port') : out.popup('Order targeting ', target, ' failed to write the port')
- }
- function getHGThreads(hacking: HackingFormulas, isServerPrepared: (server: Server, shouldLog?: boolean) => boolean, server: Server, player: Player) {
- if (!server.moneyAvailable || !server.moneyMax || !server.hackDifficulty || !server.minDifficulty) {
- throw new Error('FUCKING SHIT DOESENT HAVE PROPERTIES')
- }
- if (!isServerPrepared(server, true)) { throw new Error('FUCKING SHIT AINT PREPARED') }
- }
- function getDelays(ns: NS, target: string, buffer: number = 100) {
- const server = ns.getServer(target)
- const player = ns.getPlayer()
- const hackTime = ns.formulas.hacking.hackTime(server, player)
- const growTime = ns.formulas.hacking.growTime(server, player)
- const weakenTime = ns.formulas.hacking.weakenTime(server, player)
- const hack0 = weakenTime - hackTime
- const grow0 = weakenTime - growTime
- const weaken0 = weakenTime - weakenTime
- const hack = hack0
- const hWeaken = weaken0 + buffer
- const grow = grow0 + (buffer * 2)
- const gWeaken = weaken0 + (buffer * 3)
- if (!(((hackTime + hack) === weakenTime) || ((growTime + grow) === weakenTime))) {
- throw new Error('Error in delay caluclations')
- }
- const awaitTime = weakenTime + (buffer * 4)
- return {
- hack, grow, hWeaken, gWeaken, awaitTime
- }
- }
- function buildHWGW(ns: NS, target: string, debug: Debugger) {
- // calc related
- const server = ns.getServer(target)
- const player = ns.getPlayer()
- const moneyToSteal = 0.9
- if (!server.moneyAvailable || !server.moneyMax || !server.hackDifficulty || !server.minDifficulty) {
- throw new Error('FUCKING SHIT DOESENT HAVE PROPERTIES')
- }
- if (!debug.isServerPrepared(server, true)) { throw new Error('FUCKING SHIT AINT PREPARED') }
- const hackPercent = ns.formulas.hacking.hackPercent(server, player)
- const hackThreads = Math.floor(moneyToSteal / hackPercent)
- // - money decrease
- const stolenMoney = server.moneyAvailable * (hackThreads * hackPercent)
- server.moneyAvailable -= stolenMoney
- // + sec increse
- const hackSecurity = ns.hackAnalyzeSecurity(1)
- server.hackDifficulty = server.hackDifficulty + (hackSecurity * hackThreads)
- debug.out.info('hack performed')
- //weaken
- const weakenSecurity = ns.weakenAnalyze(1)
- const securityToWeaken = server.hackDifficulty - server.minDifficulty
- const hWeakenThreads = Math.ceil(securityToWeaken / weakenSecurity)
- // - sec decrease
- server.hackDifficulty = Math.max(server.hackDifficulty - ns.weakenAnalyze(hWeakenThreads), server.minDifficulty)
- debug.out.info('weaken performed')
- //growing
- const growThreads = ns.formulas.hacking.growThreads(server, player, server.moneyMax)
- // + money increse
- server.moneyAvailable = ns.formulas.hacking.growAmount(server, player, growThreads)
- // + sec increse
- const growSecurity = 0.004
- server.hackDifficulty += growSecurity * growThreads
- debug.out.info('grow performed')
- //weaken
- const securityToWeaken2 = server.hackDifficulty - server.minDifficulty
- const gWeakenThreads = Math.ceil(securityToWeaken2 / weakenSecurity)
- // - sec decrease
- server.hackDifficulty = Math.max(server.hackDifficulty - ns.weakenAnalyze(gWeakenThreads), server.minDifficulty)
- debug.out.info('weaken performed')
- debug.out.success('all operations performed')
- debug.isServerPrepared(server, true)
- // /calculations
- return {
- hackThreads, growThreads, hWeakenThreads, gWeakenThreads
- }
- }
Add Comment
Please, Sign In to add comment