-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbaseLoop.js
115 lines (102 loc) · 3.92 KB
/
baseLoop.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/**
* @param {NS} ns
* @param {string} serverName Name of target server
*/
function getCurrServerSecLvl(ns, serverName) {
return ns.getServerSecurityLevel(serverName);
}
/**
* @param {NS} ns
* @param {string} serverName Name of target server
* @param {number} currServerSecLvl Current target server security level
* @param {number} serverMinSecLvl Target server minimum security level
* @param {number} weakenServerLvlStatus Target server security decrease % from weaken()
*/
async function weakenServer(ns, serverName, currServerSecLvl, serverMinSecLvl, weakenServerLvlStatus) {
// 1.5 > 1 && 1.5-1 >= .25
while (currServerSecLvl > serverMinSecLvl && currServerSecLvl - serverMinSecLvl >= weakenServerLvlStatus) {
ns.print(`${Math.floor((currServerSecLvl - serverMinSecLvl) / weakenServerLvlStatus)} weaken run(s) remaining.`);
await ns.weaken(serverName);
currServerSecLvl = getCurrServerSecLvl(ns, serverName);
}
}
// TODO: keep?
/**
* @param {NS} ns
* @param {string} serverName Name of target server
* @param {float} growthTarget Growth target
* @param {number} growthRunsCap Maximum runs of growth to avoid to wait too much before hack()
* @param {number} serverCoresNumber Number of cores used to grow
*/
function getTargetRequiredGrowthRun(ns, serverName, growthTarget, growthRunsCap, serverCoresNumber) {
// Get number of grow runs to reach TARGET_GROWTH current state
let targetRequiredGrowthRun = Math.ceil(ns.growthAnalyze(serverName, growthTarget, serverCoresNumber));
// Set default value on special cases
targetRequiredGrowthRun = [Infinity, NaN].includes(targetRequiredGrowthRun) ? 0 : targetRequiredGrowthRun;
while (targetRequiredGrowthRun > growthRunsCap) {
targetRequiredGrowthRun = Math.ceil(ns.growthAnalyze(serverName, growthTarget, serverCoresNumber));
growthTarget = Math.floor((growthTarget - 0.001) * 1000) / 1000;
// Sometimes 1.001 - 0.001 = 0.999 (JS Things you know), ensure we got minimum of 1
growthTarget = growthTarget < 1 ? 1 : growthTarget;
}
return targetRequiredGrowthRun;
}
/**
* @param {NS} ns
* @param {string} serverName Name of target server
*/
async function growServer(ns, serverName) {
let requiredGrowthRun = 10;
let i = 0;
let growthPercentResult = Infinity;
// Also break the loop if the server currently has less than half of max money and if growth is not worth it
while (
i < requiredGrowthRun &&
ns.getServerMoneyAvailable(serverName) <= ns.getServerMaxMoney(serverName) / 2 &&
// Tricky shit here, ns.grow() is not returning percent as number but as 1,"percent" (i.e: 12% = 1.12)
growthPercentResult > 1.05
) {
ns.print(`${requiredGrowthRun - i} grow run(s) required.`);
growthPercentResult = await ns.grow(serverName);
i++;
}
}
/**
* Requires 4.10GB RAM
* @param {NS} ns
* @param {string} serverName Name of target server
* @param {number} serverMinSecLvl Target server minimum security level
* @param {number} serverCoresNumber Number of threads
* @param {number} serverCoresNumber Number of cores
*/
export async function baseLoop(ns, serverName, serverMinSecLvl, threadsNumber, serverCoresNumber) {
while (1) {
const weakenServerLvlStatus = ns.weakenAnalyze(threadsNumber, serverCoresNumber);
let currServerSecLvl = getCurrServerSecLvl(ns, serverName);
await weakenServer(ns, serverName, currServerSecLvl, serverMinSecLvl, weakenServerLvlStatus);
await growServer(ns, serverName);
await ns.hack(serverName);
}
}
/**
* Requires 2.00GB RAM
* @param {NS} ns
* @param {string} serverName Name of target server
*/
export async function lowcostBaseLoop(ns, serverName) {
while (1) {
await ns.weaken(serverName);
await ns.grow(serverName);
await ns.hack(serverName);
}
}
/**
* Requires 1.70GB RAM
* @param {NS} ns
* @param {string} serverName Name of target server
*/
export async function lowcostNoGrowthBaseLoop(ns, serverName) {
while (1) {
await ns.hack(serverName);
}
}