From 9bacf4f97fb1b5df647dc222032a28b88b6e59de Mon Sep 17 00:00:00 2001 From: Isaac Shoebottom Date: Mon, 13 Nov 2023 14:08:16 -0400 Subject: [PATCH] Add check for if new programs have begun to exist --- servers/home/utils.ts | 27 +++++++++++++++++++++++++++ servers/home/watcher.ts | 13 +++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/servers/home/utils.ts b/servers/home/utils.ts index 3f685fa..47bf68a 100644 --- a/servers/home/utils.ts +++ b/servers/home/utils.ts @@ -154,3 +154,30 @@ export async function calculateMPS(ns: NS, time: number = 5) { } return data.reduce((a, b) => a + b, 0) / time } + +/** + * Type that represents a program and whether it exists on the home server + */ +export type ProgramState = { + program: string + exists: boolean +} + +/** + * Checks if any of the programs passed in now exist on the home server, and updates the exists property of the program + * @param ns Global NS object + * @param programs The programs to check + * @returns true if any of the programs now exist, otherwise false + */ +export function checkForNewPrograms(ns: NS, programs: ProgramState[]) { + let result = false + for (const program of programs) { + if (program.exists == false) { + program.exists = ns.fileExists(program.program) + if (program.exists) { + result = true + } + } + } + return result +} diff --git a/servers/home/watcher.ts b/servers/home/watcher.ts index 3c6d786..0d9b0b0 100644 --- a/servers/home/watcher.ts +++ b/servers/home/watcher.ts @@ -1,13 +1,22 @@ -import { recursiveHackingRequired } from "./utils" +import { checkForNewPrograms, ProgramState, recursiveHackingRequired } from "./utils" export async function main(ns: NS) { let levels = recursiveHackingRequired(ns) let hackingLevel = ns.getHackingLevel() + + let state: ProgramState[] = [ + { program: "BruteSSH.exe", exists: false }, + { program: "FTPCrack.exe", exists: false }, + { program: "relaySMTP.exe", exists: false }, + { program: "HTTPWorm.exe", exists: false }, + { program: "SQLInject.exe", exists: false }, + ] + // Remove levels that are already hacked levels = levels.filter(level => level > hackingLevel) do { - if (Math.min(...levels) <= hackingLevel) { + if (Math.min(...levels) <= hackingLevel || checkForNewPrograms(ns, state)) { ns.tprint(`Hacking level increased past ${Math.min(...levels)}}, is now ${hackingLevel}`) ns.tprint(`Remaining levels to hack: ${levels}`) // remove the level from the list, so we don't try to hack it again