/** @param {NS} ns */ export async function main(ns) { ns.tail(); let aCitites = ["Sector-12", "Aevum", "Volhaven", "Chongqing", "New Tokyo", "Ishima"]; let sCorpName = "RM Enterprises"; let sDivisionName = "Agri-Ram"; let reset = ns.args[0]; if (reset === true || !ns.fileExists("CorpStatus.txt")) { ns.write("CorpStatus.txt", JSON.stringify({ nStep: 0 }), "w"); }; let oCorpStatus = JSON.parse(ns.read("CorpStatus.txt")) || { nStep: 0 }; let nStep = oCorpStatus.nStep; let nListenPID = 0; let oCorpData = {}; let oDivisionData = {}; let oOfficeData = {}; let oWarehouseData = {}; let bUnlockStatus = false; let nTargetSize = 0; let oNewOfficeData = {}; let oWorkerNumbers = {}; nListenPID = ns.run("/corp/HasCorp.js"); await ns.nextPortWrite(nListenPID); await ns.sleep(1); let bCorpExists = ns.readPort(nListenPID); if (!bCorpExists) { nListenPID = ns.run("/corp/CreateCorp.js", 1, sCorpName); await ns.nextPortWrite(nListenPID); await ns.sleep(1); } if (!ns.readPort(nListenPID)) { ns.tprint("Error! Couldn't start Corporation!"); return }; ns.tprint(oCorpStatus); while (nStep < 199) { await ns.corporation.nextUpdate(); if (nStep > 40) { for (let sCity of aCitites) { nListenPID = ns.run("/corp/GetOfficeData.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oOfficeData = ns.readPort(nListenPID); if (oOfficeData.avgEnergy < 99.5) { nListenPID = ns.run("/corp/BuyTea.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); } if (oOfficeData.avgMorale < 99.5) { nListenPID = ns.run("/corp/ThrowParty.js", 1, sDivisionName, sCity, 500000); await ns.nextPortWrite(nListenPID); await ns.sleep(1); } // InsertSmartSupplyHere } }; nStep = oCorpStatus.nStep; switch (nStep) { case 0: nListenPID = ns.run("/corp/GetCorpData.js"); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oCorpData = ns.readPort(nListenPID); if (!oCorpData.divisions.length > 0) { nListenPID = ns.run("/corp/CorpStart.js", 1, sDivisionName, "Agriculture"); await ns.nextPortWrite(nListenPID); await ns.sleep(1); }; oCorpStatus.nStep = 10; break; case 10: for (let sCity of aCitites) { nListenPID = ns.run("/corp/GetDivisionsData.js", 1, sDivisionName); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oDivisionData = ns.readPort(nListenPID); if (sCity !== "Sector-12" && !oDivisionData.cities.includes(sCity)) { nListenPID = ns.run("/corp/CorpExpandCity.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); } } oCorpStatus.nStep = 15; break; case 15: nListenPID = ns.run("/corp/BuyWarehouseAPI.js"); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oCorpStatus.nStep = 20; break; case 20: /*nListenPID = ns.run("/corp/HasUnlock.js", 1, "Smart Supply"); await ns.nextPortWrite(nListenPID); await ns.sleep(1); bUnlockStatus = ns.readPort(nListenPID); if (!bUnlockStatus) { await ns.nextPortWrite(ns.run("/corp/BuyUnlock.js", 1, "Smart Supply")); await ns.sleep(1); }*/ for (let sCity of aCitites) { nListenPID = ns.run("/corp/GetWarehouseData.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oWarehouseData = ns.readPort(nListenPID); if (!oWarehouseData) { await ns.nextPortWrite(ns.run("/corp/PurchaseWarehouses.js", 1, sDivisionName, sCity)); await ns.sleep(1); } }; oCorpStatus.nStep = 30; break; case 30: nTargetSize = 4; for (let sCity of aCitites) { nListenPID = ns.run("/corp/GetOfficeData.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oOfficeData = ns.readPort(nListenPID); await ns.nextPortWrite(ns.run("/corp/UpgradeOffice.js", 1, sDivisionName, sCity, nTargetSize, oOfficeData.size)) await ns.sleep(1); } oCorpStatus.nStep = 40; break; case 40: for (let sCity of aCitites) { nListenPID = ns.run("/corp/GetOfficeData.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oOfficeData = ns.readPort(nListenPID); nListenPID = ns.run("/corp/HireWorkers.js", 1, sDivisionName, sCity, JSON.stringify(oOfficeData)); await ns.nextPortWrite(nListenPID); await ns.sleep(1); } oCorpStatus.nStep = 45; break; case 45: nListenPID = ns.run("/corp/GetDivisionsData.js", 1, sDivisionName); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oDivisionData = ns.readPort(nListenPID); if (!oDivisionData.researchPoints > 55) { continue } else { for (let sCity of aCitites) { nListenPID = ns.run("/corp/GetOfficeData.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oOfficeData = ns.readPort(nListenPID); nListenPID = ns.run("/corp/SetWorkerOnPosition.js", 1, sDivisionName, sCity, JSON.stringify(oOfficeData), JSON.stringify({ nWorkerNumbers: [1, 1, 1, 1, 0, 0] })); await ns.nextPortWrite(nListenPID); await ns.sleep(1); } oCorpStatus.nStep = 70; } break; case 70: break; case 80: break; case 90: break; case 100: break; default: break; } ns.write("CorpStatus.txt", JSON.stringify(oCorpStatus), "w") await ns.sleep(1) } } /* case 50: let aCurrentGoods = [ { "sMaterialName": "Food", "yAmount": "MAX", "yPrice": "MP-5" }, { "sMaterialName": "Plants", "yAmount": "MAX", "yPrice": "MP-5" } ] for (let sCity of aCitites) { 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)); }) } oCorpStatus.nStep = 60; break; case 60: for (let sCity of aCitites) { nTargetSize = sCity === "Sector-12" ? 12 : 4; oWorkerNumbers = sCity === "Sector-12" ? { nWorkerNumbers: [2, 2, 2, 2, 2, 2] } : { nWorkerNumbers: [1, 1, 1, 1, 0, 0] } let running = true; while (running) { nListenPID = ns.run("/corp/GetOfficeData.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oOfficeData = ns.readPort(nListenPID); await ns.nextPortWrite(ns.run("/corp/UpgradeOffice.js", 1, sDivisionName, sCity, nTargetSize, oOfficeData.size)); await ns.sleep(1); nListenPID = ns.run("/corp/GetOfficeData.js", 1, sDivisionName, sCity); await ns.nextPortWrite(nListenPID); await ns.sleep(1); oNewOfficeData = ns.readPort(nListenPID); if (oNewOfficeData.size < nTargetSize) { await ns.sleep(10000); ns.tprint("Waiting for money"); continue; } else { nListenPID = ns.run("/corp/HireWorkers.js", 1, sDivisionName, sCity, JSON.stringify(oOfficeData), JSON.stringify(oWorkerNumbers)); await ns.nextPortWrite(nListenPID); await ns.sleep(1); running = false; } } } oCorpStatus.nStep = 70; break; */