added numCycleForGrowthByMultiplier (ie old growthAnalyze parameters)

implemented numCycleForGrowthByMultiplier (fully compatible with old growthAnalyze - though still slightly wrong, it does so in a way that could be seen as beneficial and is compatible with existing scripts)
Also some fixes to numCycleForGrowthByHackAmt (wrong parameter order)
This commit is contained in:
zeddrak 2022-01-31 20:41:42 -08:00 committed by GitHub
parent 76cc1532a7
commit 5cc7a6a0a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -139,9 +139,7 @@ export function numCycleForGrowthCorrected(server: Server, targetMoney: number,
/** /**
* This function calculates the number of threads needed to grow a server based on a pre-hack money and hackAmt * This function calculates the number of threads needed to grow a server based on a pre-hack money and hackAmt
* (ie, if you're hacking a server with $1e6 moneyAvail for 60%, this function will tell you how many threads to regrow it * (ie, if you're hacking a server with $1e6 moneyAvail for 60%, this function will tell you how many threads to regrow it
* PROBABLY the best replacement for the current ns.growthAnalyze * A good replacement for the current ns.growthAnalyze if you want players to have more control/responsibility
* NOTE: prehackMoney can be removed as a parameter and server.moneyMax used in its place. The return value would then give a thread count
* that would slowly grow the server more than it is hacked until reaching moneyMax where it would return the correct number of threads.
* @param server - Server being grown * @param server - Server being grown
* @param hackAmt - the amount hacked (total, not per thread) - as a decimal (like 0.60 for hacking 60% of available money) * @param hackAmt - the amount hacked (total, not per thread) - as a decimal (like 0.60 for hacking 60% of available money)
* @param prehackMoney - how much money the server had before being hacked (like 200000 for hacking a server that had $200000 on it at time of hacking) * @param prehackMoney - how much money the server had before being hacked (like 200000 for hacking a server that had $200000 on it at time of hacking)
@ -149,11 +147,28 @@ export function numCycleForGrowthCorrected(server: Server, targetMoney: number,
* @returns Number of "growth cycles" needed to reverse the described hack * @returns Number of "growth cycles" needed to reverse the described hack
*/ */
export function numCycleForGrowthByHackAmt(server: Server, hackAmt: number, prehackMoney: number, p: IPlayer, cores = 1): number{ export function numCycleForGrowthByHackAmt(server: Server, hackAmt: number, prehackMoney: number, p: IPlayer, cores = 1): number{
if (prehackMoney > server.moneyMax) { prehackMoney = server.moneyMax; } if (prehackMoney > server.moneyMax) prehackMoney = server.moneyMax;
const posthackAmt = Math.floor(prehackMoney * Math.min(1, Math.max(0, (1 - hackAmt)))); const posthacMoney = Math.floor(prehackMoney * Math.min(1, Math.max(0, (1 - hackAmt))));
return numCycleForGrowthCorrected(server, prehackMoney, posthackAmt, p, cores); return numCycleForGrowthCorrected(server, posthacMoney, prehackMoney, p, cores);
} }
/**
* This function calculates the number of threads needed to grow a server based on a multiplier (and assumes the hack was against a moneyMax'ed server)
* (ie, if you're hacking a server with for 60%, this function will tell you how many threads to regrow it if it were maxed when you hacked it)
* PROBABLY the best replacement for the current ns.growthAnalyze to maintain existing scripts
* @param server - Server being grown
* @param growth - How much the server is being grown by, as a multiple in DECIMAL form (e.g. 1.5 rather than 50). Infinity is acceptable.
* @param p - Reference to Player object
* @returns Number of "growth cycles" needed
*/
export function numCycleForGrowthByMultiplier(server: Server, growth: number, p: IPlayer, cores = 1): number{
if (!(growth > 1.0)) growth = 1.0;
const posthacMoney = server.moneyMax;
const prehackMoney = server.moneyMax / growth;
return numCycleForGrowthCorrected(server, posthacMoney, prehackMoney, p, cores);
}
//Applied server growth for a single server. Returns the percentage growth //Applied server growth for a single server. Returns the percentage growth
export function processSingleServerGrowth(server: Server, threads: number, p: IPlayer, cores = 1): number { export function processSingleServerGrowth(server: Server, threads: number, p: IPlayer, cores = 1): number {
let serverGrowth = calculateServerGrowth(server, threads, p, cores); let serverGrowth = calculateServerGrowth(server, threads, p, cores);