2024-10-14 01:25:45 +02:00
3 changed files with 68 additions and 23 deletions

View File

@@ -84,7 +84,6 @@ export async function main(ns) {
nListenPID = ns.run("/corp/GetOfficeData.js", 1, sDivisionName, sCity);
await ns.nextPortWrite(nListenPID);
oOfficeData = ns.readPort(nListenPID);
ns.tprint(oOfficeData);
nListenPID = ns.run("/corp/HireWorkers.js", 1, sDivisionName, sCity, JSON.stringify(oOfficeData));
await ns.nextPortWrite(nListenPID);
}
@@ -92,19 +91,18 @@ export async function main(ns) {
break;
case 50:
let aCurrentGoods = [
{"sMaterialName":"Food","yAmount":"MAX","yPrice":"MP"},
{"sMaterialName":"Plants","yAmount":"MAX","yPrice":"MP"}
{ "sMaterialName": "Food", "yAmount": "MAX", "yPrice": "MP-5" },
{ "sMaterialName": "Plants", "yAmount": "MAX", "yPrice": "MP-5" }
]
aCurrentGoods.forEach(async (entry) =>{
for (let sCity of aCitites) {
forEach
nListenPID = ns.run("/corp/SetSalePrices.js", 1, sDivisionName, sCity, oCurrentGoods);
await ns.nextPortWrite(nListenPID);
oOfficeData = ns.readPort(nListenPID);
ns.tprint(oOfficeData);
nListenPID = ns.run("/corp/HireWorkers.js", 1, sDivisionName, sCity, JSON.stringify(oOfficeData));
await ns.nextPortWrite(nListenPID);
}})
aCurrentGoods.forEach(async (entry) => {
nListenPID = ns.run("/corp/SetSalePrices.js", 1, sDivisionName, sCity, JSON.stringify(entry));
nListenPID = ns.run("/corp/SetMaterialLimit.js", 1, sDivisionName, sCity, JSON.stringify(entry));
ns.tprint(sCity, entry)
})
}
oCorpStatus.nStep = 200;
break;
case 60:

View File

@@ -262,29 +262,69 @@ export function listWorkServers(ns) {
const sFileName = "serverList.txt";
if (!ns.fileExists(sFileName, "home")) { ns.print(`ERROR ${sFileName} does not exist.`); return false; };
let serverList = JSON.parse(ns.read(sFileName));
let sortedList = sortJsonArrayByKey(serverList, "serverCores", "maxRam").reverse();
let nTotalWorkerRAM = 0;
let nTotalFreeRAM = 0;
const nServerColumnWidth = 20;
const nValueColumnWidth = 8;
const nValueColumnWidth = 10;
const nCoresWidth = 5;
ns.printRaw("┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓");
ns.printRaw("┃ Server ┃ Free / Max RAM ┃ Cores ┃");
ns.printRaw("┣━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━┫");
serverList.forEach((entry) => {
ns.printRaw("┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓");
ns.printRaw("┃ Server ┃ Free / Max RAM ┃ Cores ┃");
ns.printRaw("┣━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━┫");
sortedList.forEach((entry) => {
if (entry.rootAccess && entry.maxRam >= 1) {
let sServerName = entry.serverName.padEnd(nServerColumnWidth, ' ');
let nFreeRAM = entry.maxRam - ns.getServerUsedRam(entry.serverName);
let sFreeRAM = nFreeRAM.toLocaleString().padStart(nValueColumnWidth, ' ');
let sMaxRam = entry.maxRam.toLocaleString().padStart(nValueColumnWidth, ' ');
let sCores = entry.serverCores.toLocaleString().padStart(nCoresWidth, ' ');
let sFreeRAM = Math.floor(nFreeRAM).toLocaleString("en-US").padStart(nValueColumnWidth, ' ');
let sMaxRam = entry.maxRam.toLocaleString("en-US").padStart(nValueColumnWidth, ' ');
let sCores = entry.serverCores.toLocaleString("en-US").padStart(nCoresWidth, ' ');
ns.printRaw(`${sServerName}${sFreeRAM} / ${sMaxRam}${sCores}`);
nTotalWorkerRAM += entry.maxRam;
nTotalFreeRAM += nFreeRAM;
}
});
ns.printRaw("┗━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━┛");
ns.printRaw(`Total Free: ${nTotalFreeRAM.toLocaleString()} / ${nTotalWorkerRAM.toLocaleString()} GB`);
ns.printRaw("┗━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━┛");
ns.printRaw(`Total Free: ${Math.floor(nTotalFreeRAM).toLocaleString("en-US")} / ${nTotalWorkerRAM.toLocaleString("en-US")} GB`);
}
export function sortJsonArrayByKey(array, primaryKey, secondaryKey) {
return array.sort((a, b) => {
const xPrimary = a[primaryKey];
const yPrimary = b[primaryKey];
// Handle null or undefined values for primary key
if (xPrimary === null || yPrimary === null || xPrimary === undefined || yPrimary === undefined) {
return 0;
}
// Compare primary keys
const primaryComparison = compareValues(xPrimary, yPrimary);
if (primaryComparison !== 0) {
return primaryComparison;
}
// If primary keys are equal, compare secondary keys
const xSecondary = a[secondaryKey];
const ySecondary = b[secondaryKey];
// Handle null or undefined values for secondary key
if (xSecondary === null || ySecondary === null || xSecondary === undefined || ySecondary === undefined) {
return 0;
}
return compareValues(xSecondary, ySecondary);
});
function compareValues(x, y) {
// Handle numeric and string comparisons differently
if (typeof x === 'string' && typeof y === 'string') {
return x.localeCompare(y); // For string comparison
} else {
return x - y; // For numeric comparison
}
}
}

View File

@@ -0,0 +1,7 @@
/** @param {NS} ns */
export async function main(ns) {
let [sDivName, sCity, oCurrentGoods] = ns.args;
oCurrentGoods = JSON.parse(oCurrentGoods);
ns.corporation.limitMaterialProduction(sDivName, sCity, oCurrentGoods.sMaterialName,50);
ns.writePort(ns.pid, true);
}