Add check for if new programs have begun to exist

This commit is contained in:
Isaac Shoebottom 2023-11-13 14:08:16 -04:00
parent 9b4042af40
commit 9bacf4f97f
2 changed files with 38 additions and 2 deletions

View File

@ -154,3 +154,30 @@ export async function calculateMPS(ns: NS, time: number = 5) {
} }
return data.reduce((a, b) => a + b, 0) / time 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
}

View File

@ -1,13 +1,22 @@
import { recursiveHackingRequired } from "./utils" import { checkForNewPrograms, ProgramState, recursiveHackingRequired } from "./utils"
export async function main(ns: NS) { export async function main(ns: NS) {
let levels = recursiveHackingRequired(ns) let levels = recursiveHackingRequired(ns)
let hackingLevel = ns.getHackingLevel() 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 // Remove levels that are already hacked
levels = levels.filter(level => level > hackingLevel) levels = levels.filter(level => level > hackingLevel)
do { 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(`Hacking level increased past ${Math.min(...levels)}}, is now ${hackingLevel}`)
ns.tprint(`Remaining levels to hack: ${levels}`) ns.tprint(`Remaining levels to hack: ${levels}`)
// remove the level from the list, so we don't try to hack it again // remove the level from the list, so we don't try to hack it again