diff --git a/css/treant.css b/css/treant.css index 69bbde981..990b5ea5e 100644 --- a/css/treant.css +++ b/css/treant.css @@ -21,7 +21,9 @@ } .Treant > .researched { - background-color: #444; + background-color: #666; + pointer-events: none; + font-size: 16px; } .Treant > .locked > div { diff --git a/dist/engine.bundle.js b/dist/engine.bundle.js index ae63dfe4a..3047d5aca 100644 --- a/dist/engine.bundle.js +++ b/dist/engine.bundle.js @@ -3114,6 +3114,7 @@ exports.CONSTANTS = { find a pop-up/dialog box that doesnt support this, let me know specifically which one ('Enter' for the default option, 'Esc' for cancelling and closing the pop-up box) * Added "brace_style = preserve_inline" configuration to Script Editor Beautifier + * ServerProfiler.exe can now be purchased from the Dark Web ` }; @@ -3594,7 +3595,7 @@ exports.Locations = { /* harmony import */ var _utils_acorn__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_utils_acorn__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _utils_helpers_arrayToString__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/helpers/arrayToString */ 54); /* harmony import */ var _utils_helpers_arrayToString__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_arrayToString__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/helpers/isValidIPAddress */ 88); +/* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/helpers/isValidIPAddress */ 89); /* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _utils_helpers_isString__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/helpers/isString */ 40); /* harmony import */ var _utils_helpers_isString__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_isString__WEBPACK_IMPORTED_MODULE_11__); @@ -4625,7 +4626,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _NetscriptFunctions__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./NetscriptFunctions */ 43); /* harmony import */ var _NetscriptWorker__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./NetscriptWorker */ 25); /* harmony import */ var _Player__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./Player */ 0); -/* harmony import */ var _Prestige__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./Prestige */ 86); +/* harmony import */ var _Prestige__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./Prestige */ 87); /* harmony import */ var _Programs_Programs__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./Programs/Programs */ 24); /* harmony import */ var _Programs_Programs__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(_Programs_Programs__WEBPACK_IMPORTED_MODULE_37__); /* harmony import */ var _Programs_ProgramHelpers__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./Programs/ProgramHelpers */ 94); @@ -6706,7 +6707,7 @@ exports.BitNodeMultipliers = { /* harmony import */ var _data_servers__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./data/servers */ 137); /* harmony import */ var _data_servers__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_data_servers__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/JSONReviver */ 13); -/* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/helpers/isValidIPAddress */ 88); +/* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/helpers/isValidIPAddress */ 89); /* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_12__); @@ -7845,7 +7846,7 @@ exports.removeElementById = removeElementById; /* harmony import */ var _NetscriptFunctions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./NetscriptFunctions */ 43); /* harmony import */ var _NetscriptWorker__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./NetscriptWorker */ 25); /* harmony import */ var _Player__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Player */ 0); -/* harmony import */ var _Prestige__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Prestige */ 86); +/* harmony import */ var _Prestige__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Prestige */ 87); /* harmony import */ var _SaveObject__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./SaveObject */ 75); /* harmony import */ var _Script__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Script */ 30); /* harmony import */ var _Server__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Server */ 11); @@ -12084,6 +12085,7 @@ function updateStockOrderList(stock) { Object.defineProperty(exports, "__esModule", { value: true }); const BaseResearchTree_1 = __webpack_require__(/*! ./data/BaseResearchTree */ 209); const numeralFormat_1 = __webpack_require__(/*! ../ui/numeralFormat */ 4); +const JSONReviver_1 = __webpack_require__(/*! ../../utils/JSONReviver */ 13); // Map of official names for each Industry exports.Industries = { Energy: "Energy", @@ -12181,6 +12183,10 @@ exports.IndustryResearchTrees = { Healthcare: BaseResearchTree_1.getBaseResearchTreeCopy(), RealEstate: BaseResearchTree_1.getBaseResearchTreeCopy(), }; +function loadIndustryResearchTrees(saveString) { + exports.IndustryResearchTrees = JSON.parse(saveString, JSONReviver_1.Reviver); +} +exports.loadIndustryResearchTrees = loadIndustryResearchTrees; /***/ }), @@ -12964,7 +12970,7 @@ JSONReviver_1.Reviver.constructors.Stock = Stock; Object.defineProperty(exports, "__esModule", { value: true }); // Constructs all CompanyPosition objects using the metadata in data/companypositions.ts const CompanyPositionsMetadata_1 = __webpack_require__(/*! ./data/CompanyPositionsMetadata */ 211); -const CompanyPosition_1 = __webpack_require__(/*! ./CompanyPosition */ 85); +const CompanyPosition_1 = __webpack_require__(/*! ./CompanyPosition */ 86); exports.CompanyPositions = {}; function addCompanyPosition(params) { if (exports.CompanyPositions[params.name] != null) { @@ -13063,7 +13069,7 @@ exports.removeChildrenFromElement = removeChildrenFromElement; /* harmony import */ var _utils_helpers_compareArrays__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_compareArrays__WEBPACK_IMPORTED_MODULE_17__); /* harmony import */ var _utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils/uiHelpers/createElement */ 2); /* harmony import */ var _utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_18__); -/* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../utils/helpers/getTimestamp */ 87); +/* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../utils/helpers/getTimestamp */ 88); /* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_19__); /* harmony import */ var _utils_helpers_roundToTwo__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../utils/helpers/roundToTwo */ 81); /* harmony import */ var _utils_helpers_roundToTwo__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_roundToTwo__WEBPACK_IMPORTED_MODULE_20__); @@ -14220,7 +14226,7 @@ _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_16__["Reviver"].constructors.AllServ /* harmony import */ var _utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_23__); /* harmony import */ var _utils_helpers_getRandomInt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../utils/helpers/getRandomInt */ 15); /* harmony import */ var _utils_helpers_getRandomInt__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_getRandomInt__WEBPACK_IMPORTED_MODULE_24__); -/* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../utils/helpers/getTimestamp */ 87); +/* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../utils/helpers/getTimestamp */ 88); /* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_25__); /* harmony import */ var _utils_uiHelpers_removeElement__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../utils/uiHelpers/removeElement */ 61); /* harmony import */ var _utils_uiHelpers_removeElement__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_removeElement__WEBPACK_IMPORTED_MODULE_26__); @@ -19972,7 +19978,7 @@ JSONReviver_1.Reviver.constructors.CodingContract = CodingContract; /* harmony import */ var _Company_Company__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_Company_Company__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _Company_Companies__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Company/Companies */ 18); /* harmony import */ var _Company_Companies__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_Company_Companies__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _Company_CompanyPosition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Company/CompanyPosition */ 85); +/* harmony import */ var _Company_CompanyPosition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Company/CompanyPosition */ 86); /* harmony import */ var _Company_CompanyPosition__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_Company_CompanyPosition__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _Company_CompanyPositions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Company/CompanyPositions */ 28); /* harmony import */ var _Company_CompanyPositions__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_Company_CompanyPositions__WEBPACK_IMPORTED_MODULE_8__); @@ -31570,7 +31576,7 @@ Gang.prototype.clearUI = function() { /* harmony import */ var _utils_helpers_isString__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_isString__WEBPACK_IMPORTED_MODULE_26__); /* harmony import */ var _utils_helpers_arrayToString__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../utils/helpers/arrayToString */ 54); /* harmony import */ var _utils_helpers_arrayToString__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_arrayToString__WEBPACK_IMPORTED_MODULE_27__); -/* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../utils/helpers/getTimestamp */ 87); +/* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../utils/helpers/getTimestamp */ 88); /* harmony import */ var _utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_getTimestamp__WEBPACK_IMPORTED_MODULE_28__); /* harmony import */ var _utils_LogBox__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../utils/LogBox */ 79); /* harmony import */ var _utils_YesNoBox__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../utils/YesNoBox */ 17); @@ -35572,7 +35578,7 @@ exports.appendLineBreaks = appendLineBreaks; /* harmony import */ var _BitNode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BitNode */ 59); /* harmony import */ var _engine__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./engine */ 8); /* harmony import */ var _Player__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Player */ 0); -/* harmony import */ var _Prestige__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Prestige */ 86); +/* harmony import */ var _Prestige__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Prestige */ 87); /* harmony import */ var _SourceFile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./SourceFile */ 70); /* harmony import */ var _Terminal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Terminal */ 51); /* harmony import */ var _utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/uiHelpers/clearEventListeners */ 16); @@ -36380,7 +36386,7 @@ function initBitNodeMultipliers() { /* harmony import */ var _utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__); /* harmony import */ var _utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../utils/uiHelpers/createPopup */ 37); /* harmony import */ var _utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__); -/* harmony import */ var _utils_uiHelpers_createPopupCloseButton__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../utils/uiHelpers/createPopupCloseButton */ 89); +/* harmony import */ var _utils_uiHelpers_createPopupCloseButton__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../utils/uiHelpers/createPopupCloseButton */ 85); /* harmony import */ var _utils_uiHelpers_createPopupCloseButton__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_createPopupCloseButton__WEBPACK_IMPORTED_MODULE_24__); /* harmony import */ var _utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../utils/StringHelperFunctions */ 3); /* harmony import */ var _utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_25__); @@ -36503,6 +36509,7 @@ function Industry(params={}) { this.type = params.type ? params.type : 0; this.sciResearch = new _Material__WEBPACK_IMPORTED_MODULE_6__["Material"]({name: "Scientific Research"}); + this.researched = {}; // Object of acquired Research. Keys = research name //A map of the NAME of materials required to create produced materials to //how many are needed to produce 1 unit of produced materials @@ -37547,44 +37554,65 @@ Industry.prototype.getMarketFactor = function(mat) { // Returns a boolean indicating whether this Industry has the specified Research Industry.prototype.hasResearch = function(name) { + return (this.researched[name] === true); +} + +Industry.prototype.updateResearchTree = function() { const researchTree = _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type]; - return (researchTree.researched[name] != null); + + // Since ResearchTree data isnt saved, we'll update the Research Tree data + // based on the stored 'researched' property in the Industry object + if (Object.keys(researchTree.researched).length !== Object.keys(this.researched).length) { + console.log("Updating Corporation Research Tree Data"); + for (let research in this.researched) { + researchTree.research(research); + } + } } // Get multipliers from Research Industry.prototype.getAdvertisingMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getAdvertisingMultiplier(); } Industry.prototype.getEmployeeChaMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getEmployeeChaMultiplier(); } Industry.prototype.getEmployeeCreMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getEmployeeCreMultiplier(); } Industry.prototype.getEmployeeEffMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getEmployeeEffMultiplier(); } Industry.prototype.getEmployeeIntMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getEmployeeIntMultiplier(); } Industry.prototype.getProductionMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getProductionMultiplier(); } Industry.prototype.getSalesMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getSalesMultiplier(); } Industry.prototype.getScientificResearchMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getScientificResearchMultiplier(); } Industry.prototype.getStorageMultiplier = function() { + this.updateResearchTree(); return _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type].getStorageMultiplier(); } @@ -37598,8 +37626,10 @@ Industry.prototype.createResearchBox = function() { researchTreeBox = null; } + this.updateResearchTree(); const researchTree = _IndustryData__WEBPACK_IMPORTED_MODULE_4__["IndustryResearchTrees"][this.type]; + // Create the popup first, so that the tree diagram can be added to it // This is handled by Treant researchTreeBox = Object(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__["createPopup"])(boxId, [], { backgroundColor: "black" }); @@ -37641,8 +37671,8 @@ Industry.prototype.createResearchBox = function() { this.sciResearch.qty -= research.cost; // Get the Node from the Research Tree and set its 'researched' property - const node = researchTree.findNode(allResearch[i]); - node.researched = true; + researchTree.research(allResearch[i]); + this.researched[allResearch[i]] = true; return this.createResearchBox(); } else { @@ -40014,13 +40044,18 @@ Corporation.prototype.displayCorporationOverviewContent = function() { "per second before taxes."; const txt = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("p", { innerHTML: descText, }); + let allocateBtn; const dividendPercentInput = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("input", { margin: "5px", placeholder: "Dividend %", type: "number", + onkeyup: (e) => { + e.preventDefault(); + if (e.keyCode === 13) {allocateBtn.click();} + } }); - const allocateBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("button", { + allocateBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("button", { class: "std-button", display: "inline-block", innerText: "Allocate Dividend Percentage", @@ -40037,17 +40072,14 @@ Corporation.prototype.displayCorporationOverviewContent = function() { } }); - const cancelBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("button", { + const cancelBtn = Object(_utils_uiHelpers_createPopupCloseButton__WEBPACK_IMPORTED_MODULE_24__["createPopupCloseButton"])(popupId, { class: "std-button", display: "inline-block", innerText: "Cancel", - clickListener: () => { - Object(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_30__["removeElementById"])(popupId); - return false; - } - }) + }); Object(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__["createPopup"])(popupId, [txt, dividendPercentInput, allocateBtn, cancelBtn]); + dividendPercentInput.focus(); }, }); companyManagementPanel.appendChild(issueDividends); @@ -40355,7 +40387,10 @@ Corporation.prototype.displayDivisionContent = function(division, city) { fontSize:"14px", })); industryOverviewUpgrades.appendChild(Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("br", {})); - for (var i = 0; i < numUpgrades; ++i) { + for (let i = 0; i < numUpgrades; ++i) { + if (division.hasResearch("AutoBrew") && i == 0) { + continue; // AutoBrew disables Coffee upgrades, which is index 0 + } (function(i, corp, division, office) { var upgrade = _IndustryUpgrades__WEBPACK_IMPORTED_MODULE_5__["IndustryUpgrades"][i.toString()]; if (upgrade == null) { @@ -40684,72 +40719,74 @@ Corporation.prototype.displayDivisionContent = function(division, city) { industryEmployeePanel.appendChild(industryOfficeUpgradeSizeButton); //Throw Office Party - industryEmployeePanel.appendChild(Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("a", { - class:"a-link-button", display:"inline-block", innerText:"Throw Party", - fontSize:"13px", - tooltip:"Throw an office party to increase your employee's morale and happiness", - clickListener:()=>{ - var popupId = "cmpy-mgmt-throw-office-party-popup"; - var txt = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("p", { - innerText:"Enter the amount of money you would like to spend PER EMPLOYEE " + - "on this office party" - }); - var totalCostTxt = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("p", { - innerText:"Throwing this party will cost a total of $0" - }); - var confirmBtn; - var input = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("input", { - type:"number", margin:"5px", placeholder:"$ / employee", - inputListener:()=>{ - if (isNaN(input.value) || input.value < 0) { - totalCostTxt.innerText = "Invalid value entered!" - } else { - var totalCost = input.value * office.employees.length; - totalCostTxt.innerText = "Throwing this party will cost a total of " + _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_16__["numeralWrapper"].format(totalCost, '$0.000a'); - } - }, - onkeyup:(e)=>{ - e.preventDefault(); - if (e.keyCode === 13) {confirmBtn.click();} - } - }); - confirmBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("a", { - class:"a-link-button", - display:"inline-block", - innerText:"Throw Party", - clickListener:()=>{ - if (isNaN(input.value) || input.value < 0) { - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("Invalid value entered"); - } else { - var totalCost = input.value * office.employees.length; - if (this.funds.lt(totalCost)) { - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("You don't have enough company funds to throw this party!"); + if (!division.hasResearch("AutoPartyManager")) { + industryEmployeePanel.appendChild(Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("a", { + class:"a-link-button", display:"inline-block", innerText:"Throw Party", + fontSize:"13px", + tooltip:"Throw an office party to increase your employee's morale and happiness", + clickListener:()=>{ + var popupId = "cmpy-mgmt-throw-office-party-popup"; + var txt = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("p", { + innerText:"Enter the amount of money you would like to spend PER EMPLOYEE " + + "on this office party" + }); + var totalCostTxt = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("p", { + innerText:"Throwing this party will cost a total of $0" + }); + var confirmBtn; + var input = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("input", { + type:"number", margin:"5px", placeholder:"$ / employee", + inputListener:()=>{ + if (isNaN(input.value) || input.value < 0) { + totalCostTxt.innerText = "Invalid value entered!" } else { - this.funds = this.funds.minus(totalCost); - var mult; - for (var fooit = 0; fooit < office.employees.length; ++fooit) { - mult = office.employees[fooit].throwParty(input.value); - } - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("You threw a party for the office! The morale and happiness " + - "of each employee increased by " + Object(_utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_25__["formatNumber"])((mult-1) * 100, 2) + "%."); - Object(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_30__["removeElementById"])(popupId); + var totalCost = input.value * office.employees.length; + totalCostTxt.innerText = "Throwing this party will cost a total of " + _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_16__["numeralWrapper"].format(totalCost, '$0.000a'); } + }, + onkeyup:(e)=>{ + e.preventDefault(); + if (e.keyCode === 13) {confirmBtn.click();} } - return false; - } - }); - var cancelBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("a", { - class:"a-link-button", - display:"inline-block", - innerText:"Cancel", - clickListener:()=>{ - Object(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_30__["removeElementById"])(popupId); - return false; - } - }); - Object(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__["createPopup"])(popupId, [txt, totalCostTxt, input, confirmBtn, cancelBtn]); - } - })); + }); + confirmBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("a", { + class:"a-link-button", + display:"inline-block", + innerText:"Throw Party", + clickListener:()=>{ + if (isNaN(input.value) || input.value < 0) { + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("Invalid value entered"); + } else { + var totalCost = input.value * office.employees.length; + if (this.funds.lt(totalCost)) { + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("You don't have enough company funds to throw this party!"); + } else { + this.funds = this.funds.minus(totalCost); + var mult; + for (var fooit = 0; fooit < office.employees.length; ++fooit) { + mult = office.employees[fooit].throwParty(input.value); + } + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("You threw a party for the office! The morale and happiness " + + "of each employee increased by " + Object(_utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_25__["formatNumber"])((mult-1) * 100, 2) + "%."); + Object(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_30__["removeElementById"])(popupId); + } + } + return false; + } + }); + var cancelBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("a", { + class:"a-link-button", + display:"inline-block", + innerText:"Cancel", + clickListener:()=>{ + Object(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_30__["removeElementById"])(popupId); + return false; + } + }); + Object(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__["createPopup"])(popupId, [txt, totalCostTxt, input, confirmBtn, cancelBtn]); + } + })); + } industryEmployeeManagementUI = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("div", {}); industryEmployeeInfo = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("p", {margin:"4px", padding:"4px"}); @@ -43102,7 +43139,7 @@ var PurchaseAugmentationsOrderSetting; Object.defineProperty(exports, "__esModule", { value: true }); const JSONReviver_1 = __webpack_require__(/*! ../../utils/JSONReviver */ 13); -const CompanyPosition_1 = __webpack_require__(/*! ./CompanyPosition */ 85); +const CompanyPosition_1 = __webpack_require__(/*! ./CompanyPosition */ 86); const Constants_1 = __webpack_require__(/*! ../Constants */ 1); const DefaultConstructorParams = { name: "", @@ -43202,41 +43239,44 @@ JSONReviver_1.Reviver.constructors.Company = Company; /* harmony import */ var _Alias__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Alias */ 45); /* harmony import */ var _Company_Companies__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Company/Companies */ 18); /* harmony import */ var _Company_Companies__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Company_Companies__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _Company_CompanyPosition__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Company/CompanyPosition */ 85); +/* harmony import */ var _Company_CompanyPosition__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Company/CompanyPosition */ 86); /* harmony import */ var _Company_CompanyPosition__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Company_CompanyPosition__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Constants */ 1); -/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_Constants__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _engine__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./engine */ 8); -/* harmony import */ var _Faction_Factions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Faction/Factions */ 14); -/* harmony import */ var _Faction_Factions__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_Faction_Factions__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _Faction_FactionHelpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Faction/FactionHelpers */ 46); -/* harmony import */ var _Fconf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Fconf */ 47); -/* harmony import */ var _Gang__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Gang */ 50); -/* harmony import */ var _HacknetNode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./HacknetNode */ 67); -/* harmony import */ var _Message__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Message */ 41); -/* harmony import */ var _Player__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Player */ 0); -/* harmony import */ var _Script__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Script */ 30); -/* harmony import */ var _Server__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Server */ 11); -/* harmony import */ var _Settings__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./Settings */ 19); -/* harmony import */ var _Settings__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_Settings__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _SpecialServerIps__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./SpecialServerIps */ 32); -/* harmony import */ var _StockMarket__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./StockMarket */ 22); -/* harmony import */ var _utils_DialogBox__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../utils/DialogBox */ 9); -/* harmony import */ var _utils_GameOptions__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils/GameOptions */ 84); -/* harmony import */ var _utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../utils/uiHelpers/clearEventListeners */ 16); -/* harmony import */ var _utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_19__); -/* harmony import */ var _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../utils/JSONReviver */ 13); -/* harmony import */ var _utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../utils/uiHelpers/createElement */ 2); -/* harmony import */ var _utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_21__); -/* harmony import */ var _utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../utils/uiHelpers/createPopup */ 37); -/* harmony import */ var _utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_22__); -/* harmony import */ var _ui_createStatusText__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ui/createStatusText */ 102); -/* harmony import */ var _ui_createStatusText__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_ui_createStatusText__WEBPACK_IMPORTED_MODULE_23__); -/* harmony import */ var _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./ui/numeralFormat */ 4); -/* harmony import */ var _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_ui_numeralFormat__WEBPACK_IMPORTED_MODULE_24__); -/* harmony import */ var _utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../utils/uiHelpers/removeElementById */ 20); -/* harmony import */ var _utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_25__); -/* harmony import */ var decimal_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! decimal.js */ 35); +/* harmony import */ var _Corporation_IndustryData__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Corporation/IndustryData */ 23); +/* harmony import */ var _Corporation_IndustryData__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_Corporation_IndustryData__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Constants */ 1); +/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_Constants__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _engine__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./engine */ 8); +/* harmony import */ var _Faction_Factions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Faction/Factions */ 14); +/* harmony import */ var _Faction_Factions__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_Faction_Factions__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _Faction_FactionHelpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Faction/FactionHelpers */ 46); +/* harmony import */ var _Fconf__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Fconf */ 47); +/* harmony import */ var _Gang__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Gang */ 50); +/* harmony import */ var _HacknetNode__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./HacknetNode */ 67); +/* harmony import */ var _Message__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Message */ 41); +/* harmony import */ var _Player__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Player */ 0); +/* harmony import */ var _Script__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Script */ 30); +/* harmony import */ var _Server__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./Server */ 11); +/* harmony import */ var _Settings__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Settings */ 19); +/* harmony import */ var _Settings__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_Settings__WEBPACK_IMPORTED_MODULE_15__); +/* harmony import */ var _SpecialServerIps__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./SpecialServerIps */ 32); +/* harmony import */ var _StockMarket__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./StockMarket */ 22); +/* harmony import */ var _utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils/DialogBox */ 9); +/* harmony import */ var _utils_GameOptions__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../utils/GameOptions */ 84); +/* harmony import */ var _utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../utils/uiHelpers/clearEventListeners */ 16); +/* harmony import */ var _utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_20__); +/* harmony import */ var _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../utils/JSONReviver */ 13); +/* harmony import */ var _utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../utils/uiHelpers/createElement */ 2); +/* harmony import */ var _utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__); +/* harmony import */ var _utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../utils/uiHelpers/createPopup */ 37); +/* harmony import */ var _utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__); +/* harmony import */ var _ui_createStatusText__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./ui/createStatusText */ 102); +/* harmony import */ var _ui_createStatusText__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_ui_createStatusText__WEBPACK_IMPORTED_MODULE_24__); +/* harmony import */ var _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./ui/numeralFormat */ 4); +/* harmony import */ var _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_ui_numeralFormat__WEBPACK_IMPORTED_MODULE_25__); +/* harmony import */ var _utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../utils/uiHelpers/removeElementById */ 20); +/* harmony import */ var _utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_26__); +/* harmony import */ var decimal_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! decimal.js */ 35); + @@ -43272,26 +43312,27 @@ JSONReviver_1.Reviver.constructors.Company = Company; let saveObject = new BitburnerSaveObject(); function BitburnerSaveObject() { - this.PlayerSave = ""; - this.AllServersSave = ""; - this.CompaniesSave = ""; - this.FactionsSave = ""; - this.SpecialServerIpsSave = ""; - this.AliasesSave = ""; - this.GlobalAliasesSave = ""; - this.MessagesSave = ""; - this.StockMarketSave = ""; - this.SettingsSave = ""; - this.FconfSettingsSave = ""; - this.VersionSave = ""; - this.AllGangsSave = ""; + this.PlayerSave = ""; + this.AllServersSave = ""; + this.CompaniesSave = ""; + this.FactionsSave = ""; + this.SpecialServerIpsSave = ""; + this.AliasesSave = ""; + this.GlobalAliasesSave = ""; + this.MessagesSave = ""; + this.StockMarketSave = ""; + this.SettingsSave = ""; + this.FconfSettingsSave = ""; + this.VersionSave = ""; + this.AllGangsSave = ""; + this.CorporationResearchTreesSave = ""; } BitburnerSaveObject.prototype.saveGame = function(db) { - this.PlayerSave = JSON.stringify(_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"]); + this.PlayerSave = JSON.stringify(_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"]); //Delete all logs from all running scripts - var TempAllServers = JSON.parse(JSON.stringify(_Server__WEBPACK_IMPORTED_MODULE_13__[/* AllServers */ "b"]), _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + var TempAllServers = JSON.parse(JSON.stringify(_Server__WEBPACK_IMPORTED_MODULE_14__[/* AllServers */ "b"]), _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); for (var ip in TempAllServers) { var server = TempAllServers[ip]; if (server == null) {continue;} @@ -43304,17 +43345,17 @@ BitburnerSaveObject.prototype.saveGame = function(db) { this.AllServersSave = JSON.stringify(TempAllServers); this.CompaniesSave = JSON.stringify(_Company_Companies__WEBPACK_IMPORTED_MODULE_1__["Companies"]); - this.FactionsSave = JSON.stringify(_Faction_Factions__WEBPACK_IMPORTED_MODULE_5__["Factions"]); - this.SpecialServerIpsSave = JSON.stringify(_SpecialServerIps__WEBPACK_IMPORTED_MODULE_15__[/* SpecialServerIps */ "a"]); + this.FactionsSave = JSON.stringify(_Faction_Factions__WEBPACK_IMPORTED_MODULE_6__["Factions"]); + this.SpecialServerIpsSave = JSON.stringify(_SpecialServerIps__WEBPACK_IMPORTED_MODULE_16__[/* SpecialServerIps */ "a"]); this.AliasesSave = JSON.stringify(_Alias__WEBPACK_IMPORTED_MODULE_0__[/* Aliases */ "a"]); this.GlobalAliasesSave = JSON.stringify(_Alias__WEBPACK_IMPORTED_MODULE_0__[/* GlobalAliases */ "b"]); - this.MessagesSave = JSON.stringify(_Message__WEBPACK_IMPORTED_MODULE_10__[/* Messages */ "b"]); - this.StockMarketSave = JSON.stringify(_StockMarket__WEBPACK_IMPORTED_MODULE_16__[/* StockMarket */ "c"]); - this.SettingsSave = JSON.stringify(_Settings__WEBPACK_IMPORTED_MODULE_14__["Settings"]); - this.FconfSettingsSave = JSON.stringify(_Fconf__WEBPACK_IMPORTED_MODULE_7__[/* FconfSettings */ "a"]); - this.VersionSave = JSON.stringify(_Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].Version); - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].bitNodeN == 2 && _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].inGang()) { - this.AllGangsSave = JSON.stringify(_Gang__WEBPACK_IMPORTED_MODULE_8__[/* AllGangs */ "a"]); + this.MessagesSave = JSON.stringify(_Message__WEBPACK_IMPORTED_MODULE_11__[/* Messages */ "b"]); + this.StockMarketSave = JSON.stringify(_StockMarket__WEBPACK_IMPORTED_MODULE_17__[/* StockMarket */ "c"]); + this.SettingsSave = JSON.stringify(_Settings__WEBPACK_IMPORTED_MODULE_15__["Settings"]); + this.FconfSettingsSave = JSON.stringify(_Fconf__WEBPACK_IMPORTED_MODULE_8__[/* FconfSettings */ "a"]); + this.VersionSave = JSON.stringify(_Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].Version); + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].bitNodeN == 2 && _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].inGang()) { + this.AllGangsSave = JSON.stringify(_Gang__WEBPACK_IMPORTED_MODULE_9__[/* AllGangs */ "a"]); } var saveString = btoa(unescape(encodeURIComponent(JSON.stringify(this)))); @@ -43335,7 +43376,7 @@ BitburnerSaveObject.prototype.saveGame = function(db) { //console.log("Saved game to LocalStorage!"); } catch(e) { if (e.code == 22) { - Object(_ui_createStatusText__WEBPACK_IMPORTED_MODULE_23__["createStatusText"])("Save failed for localStorage! Check console(F12)"); + Object(_ui_createStatusText__WEBPACK_IMPORTED_MODULE_24__["createStatusText"])("Save failed for localStorage! Check console(F12)"); console.log("Failed to save game to localStorage because the size of the save file " + "is too large. However, the game will still be saved to IndexedDb if your browser " + "supports it. If you would like to save to localStorage as well, then " + @@ -43344,7 +43385,7 @@ BitburnerSaveObject.prototype.saveGame = function(db) { } } - Object(_ui_createStatusText__WEBPACK_IMPORTED_MODULE_23__["createStatusText"])("Game saved!"); + Object(_ui_createStatusText__WEBPACK_IMPORTED_MODULE_24__["createStatusText"])("Game saved!"); } // Makes necessary changes to the loaded/imported data to ensure @@ -43353,11 +43394,11 @@ function evaluateVersionCompatibility(ver) { // This version refactored the Company/job-related code if (ver <= "0.41.2") { // Player's company position is now a string - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].companyPosition != null && typeof _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].companyPosition !== "string") { + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].companyPosition != null && typeof _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].companyPosition !== "string") { console.log("Changed Player.companyPosition value to be compatible with v0.41.2"); - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].companyPosition = _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].companyPosition.data.positionName; - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].companyPosition == null) { - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].companyPosition = ""; + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].companyPosition = _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].companyPosition.data.positionName; + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].companyPosition == null) { + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].companyPosition = ""; } } @@ -43395,13 +43436,13 @@ function loadGame(saveString) { console.log("Loading game from IndexedDB"); } - var saveObj = JSON.parse(saveString, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + var saveObj = JSON.parse(saveString, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); - Object(_Player__WEBPACK_IMPORTED_MODULE_11__[/* loadPlayer */ "b"])(saveObj.PlayerSave); - Object(_Server__WEBPACK_IMPORTED_MODULE_13__[/* loadAllServers */ "g"])(saveObj.AllServersSave); + Object(_Player__WEBPACK_IMPORTED_MODULE_12__[/* loadPlayer */ "b"])(saveObj.PlayerSave); + Object(_Server__WEBPACK_IMPORTED_MODULE_14__[/* loadAllServers */ "g"])(saveObj.AllServersSave); Object(_Company_Companies__WEBPACK_IMPORTED_MODULE_1__["loadCompanies"])(saveObj.CompaniesSave); - Object(_Faction_Factions__WEBPACK_IMPORTED_MODULE_5__["loadFactions"])(saveObj.FactionsSave); - Object(_SpecialServerIps__WEBPACK_IMPORTED_MODULE_15__[/* loadSpecialServerIps */ "d"])(saveObj.SpecialServerIpsSave); + Object(_Faction_Factions__WEBPACK_IMPORTED_MODULE_6__["loadFactions"])(saveObj.FactionsSave); + Object(_SpecialServerIps__WEBPACK_IMPORTED_MODULE_16__[/* loadSpecialServerIps */ "d"])(saveObj.SpecialServerIpsSave); if (saveObj.hasOwnProperty("AliasesSave")) { try { @@ -43423,48 +43464,48 @@ function loadGame(saveString) { } if (saveObj.hasOwnProperty("MessagesSave")) { try { - Object(_Message__WEBPACK_IMPORTED_MODULE_10__[/* loadMessages */ "e"])(saveObj.MessagesSave); + Object(_Message__WEBPACK_IMPORTED_MODULE_11__[/* loadMessages */ "e"])(saveObj.MessagesSave); } catch(e) { - Object(_Message__WEBPACK_IMPORTED_MODULE_10__[/* initMessages */ "d"])(); + Object(_Message__WEBPACK_IMPORTED_MODULE_11__[/* initMessages */ "d"])(); } } else { - Object(_Message__WEBPACK_IMPORTED_MODULE_10__[/* initMessages */ "d"])(); + Object(_Message__WEBPACK_IMPORTED_MODULE_11__[/* initMessages */ "d"])(); } if (saveObj.hasOwnProperty("StockMarketSave")) { try { - Object(_StockMarket__WEBPACK_IMPORTED_MODULE_16__[/* loadStockMarket */ "k"])(saveObj.StockMarketSave); + Object(_StockMarket__WEBPACK_IMPORTED_MODULE_17__[/* loadStockMarket */ "k"])(saveObj.StockMarketSave); } catch(e) { - Object(_StockMarket__WEBPACK_IMPORTED_MODULE_16__[/* loadStockMarket */ "k"])(""); + Object(_StockMarket__WEBPACK_IMPORTED_MODULE_17__[/* loadStockMarket */ "k"])(""); } } else { - Object(_StockMarket__WEBPACK_IMPORTED_MODULE_16__[/* loadStockMarket */ "k"])(""); + Object(_StockMarket__WEBPACK_IMPORTED_MODULE_17__[/* loadStockMarket */ "k"])(""); } if (saveObj.hasOwnProperty("SettingsSave")) { try { - _Settings__WEBPACK_IMPORTED_MODULE_14__["Settings"].load(saveObj.SettingsSave); + _Settings__WEBPACK_IMPORTED_MODULE_15__["Settings"].load(saveObj.SettingsSave); } catch(e) { console.log("ERROR: Failed to parse Settings. Re-initing default values"); - _Settings__WEBPACK_IMPORTED_MODULE_14__["Settings"].init(); + _Settings__WEBPACK_IMPORTED_MODULE_15__["Settings"].init(); } } else { - _Settings__WEBPACK_IMPORTED_MODULE_14__["Settings"].init(); + _Settings__WEBPACK_IMPORTED_MODULE_15__["Settings"].init(); } if (saveObj.hasOwnProperty("FconfSettingsSave")) { try { - Object(_Fconf__WEBPACK_IMPORTED_MODULE_7__[/* loadFconf */ "c"])(saveObj.FconfSettingsSave); + Object(_Fconf__WEBPACK_IMPORTED_MODULE_8__[/* loadFconf */ "c"])(saveObj.FconfSettingsSave); } catch(e) { console.log("ERROR: Failed to parse .fconf Settings."); } } if (saveObj.hasOwnProperty("VersionSave")) { try { - var ver = JSON.parse(saveObj.VersionSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + var ver = JSON.parse(saveObj.VersionSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); evaluateVersionCompatibility(ver); if (window.location.href.toLowerCase().includes("bitburner-beta")) { //Beta branch, always show changes createBetaUpdateText(); - } else if (ver != _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].Version) { + } else if (ver != _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].Version) { createNewUpdateText(); } } catch(e) { @@ -43473,9 +43514,9 @@ function loadGame(saveString) { } else { createNewUpdateText(); } - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].bitNodeN == 2 && _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].inGang() && saveObj.hasOwnProperty("AllGangsSave")) { + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].bitNodeN == 2 && _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].inGang() && saveObj.hasOwnProperty("AllGangsSave")) { try { - Object(_Gang__WEBPACK_IMPORTED_MODULE_8__[/* loadAllGangs */ "c"])(saveObj.AllGangsSave); + Object(_Gang__WEBPACK_IMPORTED_MODULE_9__[/* loadAllGangs */ "c"])(saveObj.AllGangsSave); } catch(e) { console.log("ERROR: Failed to parse AllGangsSave: " + e); } @@ -43496,28 +43537,29 @@ function loadImportedGame(saveObj, saveString) { var tempMessages = null; var tempStockMarket = null; var tempAllGangs = null; + let tempCorporationResearchTrees = null; //Check to see if the imported save file can be parsed. If any //errors are caught it will fail try { var decodedSaveString = decodeURIComponent(escape(atob(saveString))); tempSaveObj = new BitburnerSaveObject(); - tempSaveObj = JSON.parse(decodedSaveString, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + tempSaveObj = JSON.parse(decodedSaveString, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); - tempPlayer = JSON.parse(tempSaveObj.PlayerSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + tempPlayer = JSON.parse(tempSaveObj.PlayerSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); //Parse Decimal.js objects - tempPlayer.money = new decimal_js__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"](tempPlayer.money); - tempPlayer.total_money = new decimal_js__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"](tempPlayer.total_money); - tempPlayer.lifetime_money = new decimal_js__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"](tempPlayer.lifetime_money); + tempPlayer.money = new decimal_js__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"](tempPlayer.money); + tempPlayer.total_money = new decimal_js__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"](tempPlayer.total_money); + tempPlayer.lifetime_money = new decimal_js__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"](tempPlayer.lifetime_money); - tempAllServers = JSON.parse(tempSaveObj.AllServersSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); - tempCompanies = JSON.parse(tempSaveObj.CompaniesSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); - tempFactions = JSON.parse(tempSaveObj.FactionsSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); - tempSpecialServerIps = JSON.parse(tempSaveObj.SpecialServerIpsSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + tempAllServers = JSON.parse(tempSaveObj.AllServersSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); + tempCompanies = JSON.parse(tempSaveObj.CompaniesSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); + tempFactions = JSON.parse(tempSaveObj.FactionsSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); + tempSpecialServerIps = JSON.parse(tempSaveObj.SpecialServerIpsSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); if (tempSaveObj.hasOwnProperty("AliasesSave")) { try { - tempAliases = JSON.parse(tempSaveObj.AliasesSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + tempAliases = JSON.parse(tempSaveObj.AliasesSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); } catch(e) { console.log("Parsing Aliases save failed: " + e); tempAliases = {}; @@ -43527,7 +43569,7 @@ function loadImportedGame(saveObj, saveString) { } if (tempSaveObj.hasOwnProperty("GlobalAliases")) { try { - tempGlobalAliases = JSON.parse(tempSaveObj.AliasesSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + tempGlobalAliases = JSON.parse(tempSaveObj.AliasesSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); } catch(e) { console.log("Parsing Global Aliases save failed: " + e); tempGlobalAliases = {}; @@ -43537,17 +43579,17 @@ function loadImportedGame(saveObj, saveString) { } if (tempSaveObj.hasOwnProperty("MessagesSave")) { try { - tempMessages = JSON.parse(tempSaveObj.MessagesSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + tempMessages = JSON.parse(tempSaveObj.MessagesSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); } catch(e) { console.log("Parsing Messages save failed: " + e); - Object(_Message__WEBPACK_IMPORTED_MODULE_10__[/* initMessages */ "d"])(); + Object(_Message__WEBPACK_IMPORTED_MODULE_11__[/* initMessages */ "d"])(); } } else { - Object(_Message__WEBPACK_IMPORTED_MODULE_10__[/* initMessages */ "d"])(); + Object(_Message__WEBPACK_IMPORTED_MODULE_11__[/* initMessages */ "d"])(); } if (saveObj.hasOwnProperty("StockMarketSave")) { try { - tempStockMarket = JSON.parse(tempSaveObj.StockMarketSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + tempStockMarket = JSON.parse(tempSaveObj.StockMarketSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); } catch(e) { console.log("Parsing StockMarket save failed: " + e); tempStockMarket = {}; @@ -43557,7 +43599,7 @@ function loadImportedGame(saveObj, saveString) { } if (tempSaveObj.hasOwnProperty("VersionSave")) { try { - var ver = JSON.parse(tempSaveObj.VersionSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + var ver = JSON.parse(tempSaveObj.VersionSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); evaluateVersionCompatibility(ver); } catch(e) { console.error("Parsing Version save failed: " + e); @@ -43566,25 +43608,26 @@ function loadImportedGame(saveObj, saveString) { } if (tempPlayer.bitNodeN == 2 && tempPlayer.inGang() && tempSaveObj.hasOwnProperty("AllGangsSave")) { try { - Object(_Gang__WEBPACK_IMPORTED_MODULE_8__[/* loadAllGangs */ "c"])(tempSaveObj.AllGangsSave); + Object(_Gang__WEBPACK_IMPORTED_MODULE_9__[/* loadAllGangs */ "c"])(tempSaveObj.AllGangsSave); } catch(e) { - console.log("ERROR: Failed to parse AllGangsSave: " + e); + console.error(`Failed to parse AllGangsSave: {e}`); + throw e; } } } catch(e) { - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_17__["dialogBoxCreate"])("Error importing game: " + e.toString()); + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("Error importing game: " + e.toString()); return false; } //Since the save file is valid, load everything for real saveString = decodeURIComponent(escape(atob(saveString))); - saveObj = JSON.parse(saveString, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + saveObj = JSON.parse(saveString, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); - Object(_Player__WEBPACK_IMPORTED_MODULE_11__[/* loadPlayer */ "b"])(saveObj.PlayerSave); - Object(_Server__WEBPACK_IMPORTED_MODULE_13__[/* loadAllServers */ "g"])(saveObj.AllServersSave); + Object(_Player__WEBPACK_IMPORTED_MODULE_12__[/* loadPlayer */ "b"])(saveObj.PlayerSave); + Object(_Server__WEBPACK_IMPORTED_MODULE_14__[/* loadAllServers */ "g"])(saveObj.AllServersSave); Object(_Company_Companies__WEBPACK_IMPORTED_MODULE_1__["loadCompanies"])(saveObj.CompaniesSave); - Object(_Faction_Factions__WEBPACK_IMPORTED_MODULE_5__["loadFactions"])(saveObj.FactionsSave); - Object(_SpecialServerIps__WEBPACK_IMPORTED_MODULE_15__[/* loadSpecialServerIps */ "d"])(saveObj.SpecialServerIpsSave); + Object(_Faction_Factions__WEBPACK_IMPORTED_MODULE_6__["loadFactions"])(saveObj.FactionsSave); + Object(_SpecialServerIps__WEBPACK_IMPORTED_MODULE_16__[/* loadSpecialServerIps */ "d"])(saveObj.SpecialServerIpsSave); if (saveObj.hasOwnProperty("AliasesSave")) { try { @@ -43606,44 +43649,44 @@ function loadImportedGame(saveObj, saveString) { } if (saveObj.hasOwnProperty("MessagesSave")) { try { - Object(_Message__WEBPACK_IMPORTED_MODULE_10__[/* loadMessages */ "e"])(saveObj.MessagesSave); + Object(_Message__WEBPACK_IMPORTED_MODULE_11__[/* loadMessages */ "e"])(saveObj.MessagesSave); } catch(e) { - Object(_Message__WEBPACK_IMPORTED_MODULE_10__[/* initMessages */ "d"])(); + Object(_Message__WEBPACK_IMPORTED_MODULE_11__[/* initMessages */ "d"])(); } } else { - Object(_Message__WEBPACK_IMPORTED_MODULE_10__[/* initMessages */ "d"])(); + Object(_Message__WEBPACK_IMPORTED_MODULE_11__[/* initMessages */ "d"])(); } if (saveObj.hasOwnProperty("StockMarketSave")) { try { - Object(_StockMarket__WEBPACK_IMPORTED_MODULE_16__[/* loadStockMarket */ "k"])(saveObj.StockMarketSave); + Object(_StockMarket__WEBPACK_IMPORTED_MODULE_17__[/* loadStockMarket */ "k"])(saveObj.StockMarketSave); } catch(e) { - Object(_StockMarket__WEBPACK_IMPORTED_MODULE_16__[/* loadStockMarket */ "k"])(""); + Object(_StockMarket__WEBPACK_IMPORTED_MODULE_17__[/* loadStockMarket */ "k"])(""); } } else { - Object(_StockMarket__WEBPACK_IMPORTED_MODULE_16__[/* loadStockMarket */ "k"])(""); + Object(_StockMarket__WEBPACK_IMPORTED_MODULE_17__[/* loadStockMarket */ "k"])(""); } if (saveObj.hasOwnProperty("SettingsSave")) { try { - _Settings__WEBPACK_IMPORTED_MODULE_14__["Settings"].load(saveObj.SettingsSave); + _Settings__WEBPACK_IMPORTED_MODULE_15__["Settings"].load(saveObj.SettingsSave); } catch(e) { - _Settings__WEBPACK_IMPORTED_MODULE_14__["Settings"].init(); + _Settings__WEBPACK_IMPORTED_MODULE_15__["Settings"].init(); } } else { - _Settings__WEBPACK_IMPORTED_MODULE_14__["Settings"].init(); + _Settings__WEBPACK_IMPORTED_MODULE_15__["Settings"].init(); } if (saveObj.hasOwnProperty("FconfSettingsSave")) { try { - Object(_Fconf__WEBPACK_IMPORTED_MODULE_7__[/* loadFconf */ "c"])(saveObj.FconfSettingsSave); + Object(_Fconf__WEBPACK_IMPORTED_MODULE_8__[/* loadFconf */ "c"])(saveObj.FconfSettingsSave); } catch(e) { console.log("ERROR: Failed to load .fconf settings when importing"); } } if (saveObj.hasOwnProperty("VersionSave")) { try { - var ver = JSON.parse(saveObj.VersionSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"]); + var ver = JSON.parse(saveObj.VersionSave, _utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"]); evaluateVersionCompatibility(ver); - if (ver != _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].Version) { + if (ver != _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].Version) { createNewUpdateText(); } } catch(e) { @@ -43652,100 +43695,100 @@ function loadImportedGame(saveObj, saveString) { } else { createNewUpdateText(); } - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].bitNodeN == 2 && _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].inGang() && saveObj.hasOwnProperty("AllGangsSave")) { + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].bitNodeN == 2 && _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].inGang() && saveObj.hasOwnProperty("AllGangsSave")) { try { - Object(_Gang__WEBPACK_IMPORTED_MODULE_8__[/* loadAllGangs */ "c"])(saveObj.AllGangsSave); + Object(_Gang__WEBPACK_IMPORTED_MODULE_9__[/* loadAllGangs */ "c"])(saveObj.AllGangsSave); } catch(e) { console.log("ERROR: Failed to parse AllGangsSave: " + e); } } var popupId = "import-game-restart-game-notice"; - var txt = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_21__["createElement"])("p", { + var txt = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("p", { innerText:"Imported game! You need to SAVE the game and then RELOAD the page " + "to make sure everything runs smoothly" }); - var gotitBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_21__["createElement"])("a", { + var gotitBtn = Object(_utils_uiHelpers_createElement__WEBPACK_IMPORTED_MODULE_22__["createElement"])("a", { class:"a-link-button", float:"right", padding:"6px", innerText:"Got it!", clickListener:()=>{ - Object(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_25__["removeElementById"])(popupId); + Object(_utils_uiHelpers_removeElementById__WEBPACK_IMPORTED_MODULE_26__["removeElementById"])(popupId); } }); - Object(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_22__["createPopup"])(popupId, [txt, gotitBtn]); - Object(_utils_GameOptions__WEBPACK_IMPORTED_MODULE_18__[/* gameOptionsBoxClose */ "a"])(); + Object(_utils_uiHelpers_createPopup__WEBPACK_IMPORTED_MODULE_23__["createPopup"])(popupId, [txt, gotitBtn]); + Object(_utils_GameOptions__WEBPACK_IMPORTED_MODULE_19__[/* gameOptionsBoxClose */ "a"])(); //Re-start game console.log("Importing game"); - _engine__WEBPACK_IMPORTED_MODULE_4__["Engine"].setDisplayElements(); //Sets variables for important DOM elements - _engine__WEBPACK_IMPORTED_MODULE_4__["Engine"].init(); //Initialize buttons, work, etc. + _engine__WEBPACK_IMPORTED_MODULE_5__["Engine"].setDisplayElements(); //Sets variables for important DOM elements + _engine__WEBPACK_IMPORTED_MODULE_5__["Engine"].init(); //Initialize buttons, work, etc. //Calculate the number of cycles have elapsed while offline - _engine__WEBPACK_IMPORTED_MODULE_4__["Engine"]._lastUpdate = new Date().getTime(); - var lastUpdate = _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].lastUpdate; - var numCyclesOffline = Math.floor((_engine__WEBPACK_IMPORTED_MODULE_4__["Engine"]._lastUpdate - lastUpdate) / _engine__WEBPACK_IMPORTED_MODULE_4__["Engine"]._idleSpeed); + _engine__WEBPACK_IMPORTED_MODULE_5__["Engine"]._lastUpdate = new Date().getTime(); + var lastUpdate = _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].lastUpdate; + var numCyclesOffline = Math.floor((_engine__WEBPACK_IMPORTED_MODULE_5__["Engine"]._lastUpdate - lastUpdate) / _engine__WEBPACK_IMPORTED_MODULE_5__["Engine"]._idleSpeed); /* Process offline progress */ - var offlineProductionFromScripts = Object(_Script__WEBPACK_IMPORTED_MODULE_12__[/* loadAllRunningScripts */ "f"])(); //This also takes care of offline production for those scripts - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].isWorking) { - console.log("work() called in load() for " + numCyclesOffline * _engine__WEBPACK_IMPORTED_MODULE_4__["Engine"]._idleSpeed + " milliseconds"); - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].WorkTypeFaction) { - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].workForFaction(numCyclesOffline); - } else if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].WorkTypeCreateProgram) { - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].createProgramWork(numCyclesOffline); - } else if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].WorkTypeStudyClass) { - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].takeClass(numCyclesOffline); - } else if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].WorkTypeCrime) { - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].commitCrime(numCyclesOffline); - } else if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].WorkTypeCompanyPartTime) { - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].workPartTime(numCyclesOffline); + var offlineProductionFromScripts = Object(_Script__WEBPACK_IMPORTED_MODULE_13__[/* loadAllRunningScripts */ "f"])(); //This also takes care of offline production for those scripts + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].isWorking) { + console.log("work() called in load() for " + numCyclesOffline * _engine__WEBPACK_IMPORTED_MODULE_5__["Engine"]._idleSpeed + " milliseconds"); + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].WorkTypeFaction) { + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].workForFaction(numCyclesOffline); + } else if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].WorkTypeCreateProgram) { + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].createProgramWork(numCyclesOffline); + } else if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].WorkTypeStudyClass) { + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].takeClass(numCyclesOffline); + } else if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].WorkTypeCrime) { + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].commitCrime(numCyclesOffline); + } else if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].workType == _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].WorkTypeCompanyPartTime) { + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].workPartTime(numCyclesOffline); } else { - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].work(numCyclesOffline); + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].work(numCyclesOffline); } } //Hacknet Nodes offline progress - var offlineProductionFromHacknetNodes = Object(_HacknetNode__WEBPACK_IMPORTED_MODULE_9__[/* processAllHacknetNodeEarnings */ "d"])(numCyclesOffline); + var offlineProductionFromHacknetNodes = Object(_HacknetNode__WEBPACK_IMPORTED_MODULE_10__[/* processAllHacknetNodeEarnings */ "d"])(numCyclesOffline); //Passive faction rep gain offline - Object(_Faction_FactionHelpers__WEBPACK_IMPORTED_MODULE_6__[/* processPassiveFactionRepGain */ "d"])(numCyclesOffline); + Object(_Faction_FactionHelpers__WEBPACK_IMPORTED_MODULE_7__[/* processPassiveFactionRepGain */ "d"])(numCyclesOffline); //Update total playtime - var time = numCyclesOffline * _engine__WEBPACK_IMPORTED_MODULE_4__["Engine"]._idleSpeed; - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].totalPlaytime == null) {_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].totalPlaytime = 0;} - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].playtimeSinceLastAug == null) {_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].playtimeSinceLastAug = 0;} - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].playtimeSinceLastBitnode == null) {_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].playtimeSinceLastBitnode = 0;} - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].totalPlaytime += time; - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].playtimeSinceLastAug += time; - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].playtimeSinceLastBitnode += time; + var time = numCyclesOffline * _engine__WEBPACK_IMPORTED_MODULE_5__["Engine"]._idleSpeed; + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].totalPlaytime == null) {_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].totalPlaytime = 0;} + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].playtimeSinceLastAug == null) {_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].playtimeSinceLastAug = 0;} + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].playtimeSinceLastBitnode == null) {_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].playtimeSinceLastBitnode = 0;} + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].totalPlaytime += time; + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].playtimeSinceLastAug += time; + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].playtimeSinceLastBitnode += time; //Re-apply augmentations - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].reapplyAllAugmentations(); + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].reapplyAllAugmentations(); //Clear terminal $("#terminal tr:not(:last)").remove(); - _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].lastUpdate = _engine__WEBPACK_IMPORTED_MODULE_4__["Engine"]._lastUpdate; - _engine__WEBPACK_IMPORTED_MODULE_4__["Engine"].start(); //Run main game loop and Scripts loop - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_17__["dialogBoxCreate"])("While you were offline, your scripts generated $" + - _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_24__["numeralWrapper"].format(offlineProductionFromScripts, '0,0.00') + " and your Hacknet Nodes generated $" + - _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_24__["numeralWrapper"].format(offlineProductionFromHacknetNodes, '0,0.00') + ""); + _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].lastUpdate = _engine__WEBPACK_IMPORTED_MODULE_5__["Engine"]._lastUpdate; + _engine__WEBPACK_IMPORTED_MODULE_5__["Engine"].start(); //Run main game loop and Scripts loop + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("While you were offline, your scripts generated $" + + _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_25__["numeralWrapper"].format(offlineProductionFromScripts, '0,0.00') + " and your Hacknet Nodes generated $" + + _ui_numeralFormat__WEBPACK_IMPORTED_MODULE_25__["numeralWrapper"].format(offlineProductionFromHacknetNodes, '0,0.00') + ""); return true; } BitburnerSaveObject.prototype.exportGame = function() { - this.PlayerSave = JSON.stringify(_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"]); - this.AllServersSave = JSON.stringify(_Server__WEBPACK_IMPORTED_MODULE_13__[/* AllServers */ "b"]); + this.PlayerSave = JSON.stringify(_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"]); + this.AllServersSave = JSON.stringify(_Server__WEBPACK_IMPORTED_MODULE_14__[/* AllServers */ "b"]); this.CompaniesSave = JSON.stringify(_Company_Companies__WEBPACK_IMPORTED_MODULE_1__["Companies"]); - this.FactionsSave = JSON.stringify(_Faction_Factions__WEBPACK_IMPORTED_MODULE_5__["Factions"]); - this.SpecialServerIpsSave = JSON.stringify(_SpecialServerIps__WEBPACK_IMPORTED_MODULE_15__[/* SpecialServerIps */ "a"]); + this.FactionsSave = JSON.stringify(_Faction_Factions__WEBPACK_IMPORTED_MODULE_6__["Factions"]); + this.SpecialServerIpsSave = JSON.stringify(_SpecialServerIps__WEBPACK_IMPORTED_MODULE_16__[/* SpecialServerIps */ "a"]); this.AliasesSave = JSON.stringify(_Alias__WEBPACK_IMPORTED_MODULE_0__[/* Aliases */ "a"]); this.GlobalAliasesSave = JSON.stringify(_Alias__WEBPACK_IMPORTED_MODULE_0__[/* GlobalAliases */ "b"]); - this.MessagesSave = JSON.stringify(_Message__WEBPACK_IMPORTED_MODULE_10__[/* Messages */ "b"]); - this.StockMarketSave = JSON.stringify(_StockMarket__WEBPACK_IMPORTED_MODULE_16__[/* StockMarket */ "c"]); - this.SettingsSave = JSON.stringify(_Settings__WEBPACK_IMPORTED_MODULE_14__["Settings"]); - this.VersionSave = JSON.stringify(_Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].Version); - if (_Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].bitNodeN == 2 && _Player__WEBPACK_IMPORTED_MODULE_11__[/* Player */ "a"].inGang()) { - this.AllGangsSave = JSON.stringify(_Gang__WEBPACK_IMPORTED_MODULE_8__[/* AllGangs */ "a"]); + this.MessagesSave = JSON.stringify(_Message__WEBPACK_IMPORTED_MODULE_11__[/* Messages */ "b"]); + this.StockMarketSave = JSON.stringify(_StockMarket__WEBPACK_IMPORTED_MODULE_17__[/* StockMarket */ "c"]); + this.SettingsSave = JSON.stringify(_Settings__WEBPACK_IMPORTED_MODULE_15__["Settings"]); + this.VersionSave = JSON.stringify(_Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].Version); + if (_Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].bitNodeN == 2 && _Player__WEBPACK_IMPORTED_MODULE_12__[/* Player */ "a"].inGang()) { + this.AllGangsSave = JSON.stringify(_Gang__WEBPACK_IMPORTED_MODULE_9__[/* AllGangs */ "a"]); } var saveString = btoa(unescape(encodeURIComponent(JSON.stringify(this)))); @@ -43769,11 +43812,11 @@ BitburnerSaveObject.prototype.exportGame = function() { BitburnerSaveObject.prototype.importGame = function() { if (window.File && window.FileReader && window.FileList && window.Blob) { - var fileSelector = Object(_utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_19__["clearEventListeners"])("import-game-file-selector"); + var fileSelector = Object(_utils_uiHelpers_clearEventListeners__WEBPACK_IMPORTED_MODULE_20__["clearEventListeners"])("import-game-file-selector"); fileSelector.addEventListener("change", openImportFileHandler, false); $("#import-game-file-selector").click(); } else { - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_17__["dialogBoxCreate"])("ERR: Your browser does not support HTML5 File API. Cannot import."); + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("ERR: Your browser does not support HTML5 File API. Cannot import."); } } @@ -43792,41 +43835,41 @@ BitburnerSaveObject.prototype.deleteGame = function(db) { request.onerror = function(e) { console.log("Failed to delete save from indexedDb: " + e); } - Object(_ui_createStatusText__WEBPACK_IMPORTED_MODULE_23__["createStatusText"])("Game deleted!"); + Object(_ui_createStatusText__WEBPACK_IMPORTED_MODULE_24__["createStatusText"])("Game deleted!"); } function createNewUpdateText() { - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_17__["dialogBoxCreate"])("New update!
" + + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("New update!
" + "Please report any bugs/issues through the github repository " + "or the Bitburner subreddit (reddit.com/r/bitburner).

" + - _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].LatestUpdate); + _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].LatestUpdate); } function createBetaUpdateText() { - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_17__["dialogBoxCreate"])("You are playing on the beta environment! This branch of the game " + + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("You are playing on the beta environment! This branch of the game " + "features the latest developments in the game. This version may be unstable.
" + "Please report any bugs/issues through the github repository (https://github.com/danielyxie/bitburner/issues) " + "or the Bitburner subreddit (reddit.com/r/bitburner).

" + - _Constants__WEBPACK_IMPORTED_MODULE_3__["CONSTANTS"].LatestUpdate); + _Constants__WEBPACK_IMPORTED_MODULE_4__["CONSTANTS"].LatestUpdate); } BitburnerSaveObject.prototype.toJSON = function() { - return Object(_utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Generic_toJSON"])("BitburnerSaveObject", this); + return Object(_utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Generic_toJSON"])("BitburnerSaveObject", this); } BitburnerSaveObject.fromJSON = function(value) { - return Object(_utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Generic_fromJSON"])(BitburnerSaveObject, value.data); + return Object(_utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Generic_fromJSON"])(BitburnerSaveObject, value.data); } -_utils_JSONReviver__WEBPACK_IMPORTED_MODULE_20__["Reviver"].constructors.BitburnerSaveObject = BitburnerSaveObject; +_utils_JSONReviver__WEBPACK_IMPORTED_MODULE_21__["Reviver"].constructors.BitburnerSaveObject = BitburnerSaveObject; //Import game function openImportFileHandler(evt) { var file = evt.target.files[0]; if (!file) { - Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_17__["dialogBoxCreate"])("Invalid file selected"); + Object(_utils_DialogBox__WEBPACK_IMPORTED_MODULE_18__["dialogBoxCreate"])("Invalid file selected"); return; } @@ -44608,6 +44651,59 @@ function gameOptionsBoxOpen() { /***/ }), /* 85 */ +/*!***************************************************!*\ + !*** ./utils/uiHelpers/createPopupCloseButton.ts ***! + \***************************************************/ +/*! no static exports found */ +/*! exports used: createPopupCloseButton */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/* Creates a Close/Cancel button that is used for removing popups */ +Object.defineProperty(exports, "__esModule", { value: true }); +const createElement_1 = __webpack_require__(/*! ./createElement */ 2); +const removeElement_1 = __webpack_require__(/*! ./removeElement */ 61); +function createPopupCloseButton(popup, options) { + let button; + // TODO event listener works with escape. Add and remove event listener + // from document + function closePopupWithEscFn(e) { + if (e.keyCode === 27) { + button.click(); + } + } + button = createElement_1.createElement("button", { + class: options.class ? options.class : "popup-box-button", + display: options.display ? options.display : "inline-block", + innerText: options.innerText == null ? "Cancel" : options.innerText, + clickListener: () => { + if (popup instanceof Element) { + removeElement_1.removeElement(popup); + } + else { + try { + const popupEl = document.getElementById(popup); + if (popupEl instanceof Element) { + removeElement_1.removeElement(popupEl); + } + } + catch (e) { + console.error(`createPopupCloseButton() threw: ${e}`); + } + } + document.removeEventListener("keydown", closePopupWithEscFn); + return false; + }, + }); + document.addEventListener("keydown", closePopupWithEscFn); + return button; +} +exports.createPopupCloseButton = createPopupCloseButton; + + +/***/ }), +/* 86 */ /*!****************************************!*\ !*** ./src/Company/CompanyPosition.ts ***! \****************************************/ @@ -44699,7 +44795,7 @@ exports.CompanyPosition = CompanyPosition; /***/ }), -/* 86 */ +/* 87 */ /*!*************************!*\ !*** ./src/Prestige.js ***! \*************************/ @@ -45072,7 +45168,7 @@ function prestigeSourceFile() { /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ 64))) /***/ }), -/* 87 */ +/* 88 */ /*!***************************************!*\ !*** ./utils/helpers/getTimestamp.ts ***! \***************************************/ @@ -45098,7 +45194,7 @@ exports.getTimestamp = getTimestamp; /***/ }), -/* 88 */ +/* 89 */ /*!*******************************************!*\ !*** ./utils/helpers/isValidIPAddress.ts ***! \*******************************************/ @@ -45122,59 +45218,6 @@ function isValidIPAddress(ipaddress) { exports.isValidIPAddress = isValidIPAddress; -/***/ }), -/* 89 */ -/*!***************************************************!*\ - !*** ./utils/uiHelpers/createPopupCloseButton.ts ***! - \***************************************************/ -/*! no static exports found */ -/*! exports used: createPopupCloseButton */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/* Creates a Close/Cancel button that is used for removing popups */ -Object.defineProperty(exports, "__esModule", { value: true }); -const createElement_1 = __webpack_require__(/*! ./createElement */ 2); -const removeElement_1 = __webpack_require__(/*! ./removeElement */ 61); -function createPopupCloseButton(popup, options) { - let button; - // TODO event listener works with escape. Add and remove event listener - // from document - function closePopupWithEscFn(e) { - if (e.keyCode === 27) { - button.click(); - } - } - button = createElement_1.createElement("button", { - class: options.class ? options.class : "popup-box-button", - display: options.display ? options.display : "inline-block", - innerText: options.innerText == null ? "Cancel" : options.innerText, - clickListener: () => { - if (popup instanceof Element) { - removeElement_1.removeElement(popup); - } - else { - try { - const popupEl = document.getElementById(popup); - if (popupEl instanceof Element) { - removeElement_1.removeElement(popupEl); - } - } - catch (e) { - console.error(`createPopupCloseButton() threw: ${e}`); - } - } - document.removeEventListener("keydown", closePopupWithEscFn); - return false; - }, - }); - document.addEventListener("keydown", closePopupWithEscFn); - return button; -} -exports.createPopupCloseButton = createPopupCloseButton; - - /***/ }), /* 90 */, /* 91 */ @@ -49660,7 +49703,7 @@ function closeDevMenu() { /* harmony import */ var _SpecialServerIps__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../SpecialServerIps */ 32); /* harmony import */ var _ui_postToTerminal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/postToTerminal */ 7); /* harmony import */ var _ui_postToTerminal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_ui_postToTerminal__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/helpers/isValidIPAddress */ 88); +/* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/helpers/isValidIPAddress */ 89); /* harmony import */ var _utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_utils_helpers_isValidIPAddress__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/StringHelperFunctions */ 3); /* harmony import */ var _utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_utils_StringHelperFunctions__WEBPACK_IMPORTED_MODULE_5__); @@ -58899,15 +58942,10 @@ exports.ProductRatingWeights = { "use strict"; -// Defines a "Research Tree" -// Each Industry has a unique Research Tree -// Each Node in the Research Trees only holds the name(s) of Research, -// not an actual Research object. The name can be used to obtain a reference -// to the corresponding Research object using the ResearchMap Object.defineProperty(exports, "__esModule", { value: true }); const ResearchMap_1 = __webpack_require__(/*! ./ResearchMap */ 98); class Node { - constructor(p) { + constructor(p = { cost: 0, text: "" }) { // All child Nodes in the tree // The Research held in this Node is a prerequisite for all Research in // child Nodes @@ -59347,7 +59385,6 @@ exports.Research = Research; Object.defineProperty(exports, "__esModule", { value: true }); const ResearchMap_1 = __webpack_require__(/*! ../ResearchMap */ 98); const ResearchTree_1 = __webpack_require__(/*! ../ResearchTree */ 206); -exports.BaseResearchTree = new ResearchTree_1.ResearchTree(); function makeNode(name) { const research = ResearchMap_1.ResearchMap[name]; if (research == null) { @@ -59355,38 +59392,39 @@ function makeNode(name) { } return new ResearchTree_1.Node({ text: research.name, cost: research.cost }); } -const rootNode = makeNode("Hi-Tech R&D Laboratory"); -const autoBrew = makeNode("AutoBrew"); -const autoParty = makeNode("AutoPartyManager"); -const autoDrugs = makeNode("Automatic Drug Administration"); -const cph4 = makeNode("CPH4 Injections"); -const drones = makeNode("Drones"); -const dronesAssembly = makeNode("Drones - Assembly"); -const dronesTransport = makeNode("Drones - Transport"); -const goJuice = makeNode("Go-Juice"); -const joywire = makeNode("JoyWire"); -const marketta1 = makeNode("Market-TA.I"); -const marketta2 = makeNode("Market-TA.II"); -const overclock = makeNode("Overclock"); -const scAssemblers = makeNode("Self-Correcting Assemblers"); -const stimu = makeNode("Sti.mu"); -autoDrugs.addChild(goJuice); -autoDrugs.addChild(cph4); -drones.addChild(dronesAssembly); -drones.addChild(dronesTransport); -marketta1.addChild(marketta2); -overclock.addChild(stimu); -rootNode.addChild(autoBrew); -rootNode.addChild(autoParty); -rootNode.addChild(autoDrugs); -rootNode.addChild(drones); -rootNode.addChild(joywire); -rootNode.addChild(marketta1); -rootNode.addChild(overclock); -rootNode.addChild(scAssemblers); -exports.BaseResearchTree.setRoot(rootNode); function getBaseResearchTreeCopy() { - return Object.assign(Object.create(Object.getPrototypeOf(exports.BaseResearchTree)), exports.BaseResearchTree); + const baseResearchTree = new ResearchTree_1.ResearchTree(); + const rootNode = makeNode("Hi-Tech R&D Laboratory"); + const autoBrew = makeNode("AutoBrew"); + const autoParty = makeNode("AutoPartyManager"); + const autoDrugs = makeNode("Automatic Drug Administration"); + const cph4 = makeNode("CPH4 Injections"); + const drones = makeNode("Drones"); + const dronesAssembly = makeNode("Drones - Assembly"); + const dronesTransport = makeNode("Drones - Transport"); + const goJuice = makeNode("Go-Juice"); + const joywire = makeNode("JoyWire"); + const marketta1 = makeNode("Market-TA.I"); + const marketta2 = makeNode("Market-TA.II"); + const overclock = makeNode("Overclock"); + const scAssemblers = makeNode("Self-Correcting Assemblers"); + const stimu = makeNode("Sti.mu"); + autoDrugs.addChild(goJuice); + autoDrugs.addChild(cph4); + drones.addChild(dronesAssembly); + drones.addChild(dronesTransport); + marketta1.addChild(marketta2); + overclock.addChild(stimu); + rootNode.addChild(autoBrew); + rootNode.addChild(autoParty); + rootNode.addChild(autoDrugs); + rootNode.addChild(drones); + rootNode.addChild(joywire); + rootNode.addChild(marketta1); + rootNode.addChild(overclock); + rootNode.addChild(scAssemblers); + baseResearchTree.setRoot(rootNode); + return baseResearchTree; } exports.getBaseResearchTreeCopy = getBaseResearchTreeCopy; diff --git a/dist/engine.css b/dist/engine.css index 1efc85d7c..a3d88d142 100644 --- a/dist/engine.css +++ b/dist/engine.css @@ -2169,7 +2169,9 @@ button { font-size: 12px; } .Treant > .researched { - background-color: #444; } + background-color: #666; + pointer-events: none; + font-size: 16px; } .Treant > .locked > div { color: red; diff --git a/src/Corporation/Corporation.js b/src/Corporation/Corporation.js index b2e73b2ab..b5926aad3 100644 --- a/src/Corporation/Corporation.js +++ b/src/Corporation/Corporation.js @@ -119,6 +119,7 @@ function Industry(params={}) { this.type = params.type ? params.type : 0; this.sciResearch = new Material({name: "Scientific Research"}); + this.researched = {}; // Object of acquired Research. Keys = research name //A map of the NAME of materials required to create produced materials to //how many are needed to produce 1 unit of produced materials @@ -1163,44 +1164,65 @@ Industry.prototype.getMarketFactor = function(mat) { // Returns a boolean indicating whether this Industry has the specified Research Industry.prototype.hasResearch = function(name) { + return (this.researched[name] === true); +} + +Industry.prototype.updateResearchTree = function() { const researchTree = IndustryResearchTrees[this.type]; - return (researchTree.researched[name] != null); + + // Since ResearchTree data isnt saved, we'll update the Research Tree data + // based on the stored 'researched' property in the Industry object + if (Object.keys(researchTree.researched).length !== Object.keys(this.researched).length) { + console.log("Updating Corporation Research Tree Data"); + for (let research in this.researched) { + researchTree.research(research); + } + } } // Get multipliers from Research Industry.prototype.getAdvertisingMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getAdvertisingMultiplier(); } Industry.prototype.getEmployeeChaMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getEmployeeChaMultiplier(); } Industry.prototype.getEmployeeCreMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getEmployeeCreMultiplier(); } Industry.prototype.getEmployeeEffMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getEmployeeEffMultiplier(); } Industry.prototype.getEmployeeIntMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getEmployeeIntMultiplier(); } Industry.prototype.getProductionMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getProductionMultiplier(); } Industry.prototype.getSalesMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getSalesMultiplier(); } Industry.prototype.getScientificResearchMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getScientificResearchMultiplier(); } Industry.prototype.getStorageMultiplier = function() { + this.updateResearchTree(); return IndustryResearchTrees[this.type].getStorageMultiplier(); } @@ -1214,8 +1236,10 @@ Industry.prototype.createResearchBox = function() { researchTreeBox = null; } + this.updateResearchTree(); const researchTree = IndustryResearchTrees[this.type]; + // Create the popup first, so that the tree diagram can be added to it // This is handled by Treant researchTreeBox = createPopup(boxId, [], { backgroundColor: "black" }); @@ -1257,8 +1281,8 @@ Industry.prototype.createResearchBox = function() { this.sciResearch.qty -= research.cost; // Get the Node from the Research Tree and set its 'researched' property - const node = researchTree.findNode(allResearch[i]); - node.researched = true; + researchTree.research(allResearch[i]); + this.researched[allResearch[i]] = true; return this.createResearchBox(); } else { @@ -3630,13 +3654,18 @@ Corporation.prototype.displayCorporationOverviewContent = function() { "per second before taxes."; const txt = createElement("p", { innerHTML: descText, }); + let allocateBtn; const dividendPercentInput = createElement("input", { margin: "5px", placeholder: "Dividend %", type: "number", + onkeyup: (e) => { + e.preventDefault(); + if (e.keyCode === 13) {allocateBtn.click();} + } }); - const allocateBtn = createElement("button", { + allocateBtn = createElement("button", { class: "std-button", display: "inline-block", innerText: "Allocate Dividend Percentage", @@ -3653,17 +3682,14 @@ Corporation.prototype.displayCorporationOverviewContent = function() { } }); - const cancelBtn = createElement("button", { + const cancelBtn = createPopupCloseButton(popupId, { class: "std-button", display: "inline-block", innerText: "Cancel", - clickListener: () => { - removeElementById(popupId); - return false; - } - }) + }); createPopup(popupId, [txt, dividendPercentInput, allocateBtn, cancelBtn]); + dividendPercentInput.focus(); }, }); companyManagementPanel.appendChild(issueDividends); @@ -3971,7 +3997,10 @@ Corporation.prototype.displayDivisionContent = function(division, city) { fontSize:"14px", })); industryOverviewUpgrades.appendChild(createElement("br", {})); - for (var i = 0; i < numUpgrades; ++i) { + for (let i = 0; i < numUpgrades; ++i) { + if (division.hasResearch("AutoBrew") && i == 0) { + continue; // AutoBrew disables Coffee upgrades, which is index 0 + } (function(i, corp, division, office) { var upgrade = IndustryUpgrades[i.toString()]; if (upgrade == null) { @@ -4300,72 +4329,74 @@ Corporation.prototype.displayDivisionContent = function(division, city) { industryEmployeePanel.appendChild(industryOfficeUpgradeSizeButton); //Throw Office Party - industryEmployeePanel.appendChild(createElement("a", { - class:"a-link-button", display:"inline-block", innerText:"Throw Party", - fontSize:"13px", - tooltip:"Throw an office party to increase your employee's morale and happiness", - clickListener:()=>{ - var popupId = "cmpy-mgmt-throw-office-party-popup"; - var txt = createElement("p", { - innerText:"Enter the amount of money you would like to spend PER EMPLOYEE " + - "on this office party" - }); - var totalCostTxt = createElement("p", { - innerText:"Throwing this party will cost a total of $0" - }); - var confirmBtn; - var input = createElement("input", { - type:"number", margin:"5px", placeholder:"$ / employee", - inputListener:()=>{ - if (isNaN(input.value) || input.value < 0) { - totalCostTxt.innerText = "Invalid value entered!" - } else { - var totalCost = input.value * office.employees.length; - totalCostTxt.innerText = "Throwing this party will cost a total of " + numeralWrapper.format(totalCost, '$0.000a'); - } - }, - onkeyup:(e)=>{ - e.preventDefault(); - if (e.keyCode === 13) {confirmBtn.click();} - } - }); - confirmBtn = createElement("a", { - class:"a-link-button", - display:"inline-block", - innerText:"Throw Party", - clickListener:()=>{ - if (isNaN(input.value) || input.value < 0) { - dialogBoxCreate("Invalid value entered"); - } else { - var totalCost = input.value * office.employees.length; - if (this.funds.lt(totalCost)) { - dialogBoxCreate("You don't have enough company funds to throw this party!"); + if (!division.hasResearch("AutoPartyManager")) { + industryEmployeePanel.appendChild(createElement("a", { + class:"a-link-button", display:"inline-block", innerText:"Throw Party", + fontSize:"13px", + tooltip:"Throw an office party to increase your employee's morale and happiness", + clickListener:()=>{ + var popupId = "cmpy-mgmt-throw-office-party-popup"; + var txt = createElement("p", { + innerText:"Enter the amount of money you would like to spend PER EMPLOYEE " + + "on this office party" + }); + var totalCostTxt = createElement("p", { + innerText:"Throwing this party will cost a total of $0" + }); + var confirmBtn; + var input = createElement("input", { + type:"number", margin:"5px", placeholder:"$ / employee", + inputListener:()=>{ + if (isNaN(input.value) || input.value < 0) { + totalCostTxt.innerText = "Invalid value entered!" } else { - this.funds = this.funds.minus(totalCost); - var mult; - for (var fooit = 0; fooit < office.employees.length; ++fooit) { - mult = office.employees[fooit].throwParty(input.value); - } - dialogBoxCreate("You threw a party for the office! The morale and happiness " + - "of each employee increased by " + formatNumber((mult-1) * 100, 2) + "%."); - removeElementById(popupId); + var totalCost = input.value * office.employees.length; + totalCostTxt.innerText = "Throwing this party will cost a total of " + numeralWrapper.format(totalCost, '$0.000a'); } + }, + onkeyup:(e)=>{ + e.preventDefault(); + if (e.keyCode === 13) {confirmBtn.click();} } - return false; - } - }); - var cancelBtn = createElement("a", { - class:"a-link-button", - display:"inline-block", - innerText:"Cancel", - clickListener:()=>{ - removeElementById(popupId); - return false; - } - }); - createPopup(popupId, [txt, totalCostTxt, input, confirmBtn, cancelBtn]); - } - })); + }); + confirmBtn = createElement("a", { + class:"a-link-button", + display:"inline-block", + innerText:"Throw Party", + clickListener:()=>{ + if (isNaN(input.value) || input.value < 0) { + dialogBoxCreate("Invalid value entered"); + } else { + var totalCost = input.value * office.employees.length; + if (this.funds.lt(totalCost)) { + dialogBoxCreate("You don't have enough company funds to throw this party!"); + } else { + this.funds = this.funds.minus(totalCost); + var mult; + for (var fooit = 0; fooit < office.employees.length; ++fooit) { + mult = office.employees[fooit].throwParty(input.value); + } + dialogBoxCreate("You threw a party for the office! The morale and happiness " + + "of each employee increased by " + formatNumber((mult-1) * 100, 2) + "%."); + removeElementById(popupId); + } + } + return false; + } + }); + var cancelBtn = createElement("a", { + class:"a-link-button", + display:"inline-block", + innerText:"Cancel", + clickListener:()=>{ + removeElementById(popupId); + return false; + } + }); + createPopup(popupId, [txt, totalCostTxt, input, confirmBtn, cancelBtn]); + } + })); + } industryEmployeeManagementUI = createElement("div", {}); industryEmployeeInfo = createElement("p", {margin:"4px", padding:"4px"}); diff --git a/src/Corporation/IndustryData.ts b/src/Corporation/IndustryData.ts index 0d1c432b2..7036fdff4 100644 --- a/src/Corporation/IndustryData.ts +++ b/src/Corporation/IndustryData.ts @@ -1,9 +1,10 @@ import { ResearchTree } from "./ResearchTree"; -import { BaseResearchTree, - getBaseResearchTreeCopy } from "./data/BaseResearchTree"; +import { getBaseResearchTreeCopy } from "./data/BaseResearchTree"; import { numeralWrapper } from "../ui/numeralFormat"; +import { Reviver } from "../../utils/JSONReviver"; + interface IIndustryMap { Energy: T; Utilities: T; @@ -105,7 +106,7 @@ export const IndustryDescriptions: IIndustryMap = { // Map of available Research for each Industry. This data is held in a // ResearchTree object -export const IndustryResearchTrees: IIndustryMap = { +export let IndustryResearchTrees: IIndustryMap = { Energy: getBaseResearchTreeCopy(), Utilities: getBaseResearchTreeCopy(), Agriculture: getBaseResearchTreeCopy(), @@ -121,3 +122,7 @@ export const IndustryResearchTrees: IIndustryMap = { Healthcare: getBaseResearchTreeCopy(), RealEstate: getBaseResearchTreeCopy(), } + +export function loadIndustryResearchTrees(saveString: string): void { + IndustryResearchTrees = JSON.parse(saveString, Reviver); +} diff --git a/src/Corporation/ResearchTree.ts b/src/Corporation/ResearchTree.ts index ceb0de0ff..7e77aa978 100644 --- a/src/Corporation/ResearchTree.ts +++ b/src/Corporation/ResearchTree.ts @@ -3,7 +3,6 @@ // Each Node in the Research Trees only holds the name(s) of Research, // not an actual Research object. The name can be used to obtain a reference // to the corresponding Research object using the ResearchMap - import { Research } from "./Research"; import { ResearchMap } from "./ResearchMap"; @@ -17,6 +16,7 @@ interface IConstructorParams { } export class Node { + // All child Nodes in the tree // The Research held in this Node is a prerequisite for all Research in // child Nodes @@ -37,7 +37,7 @@ export class Node { // Name of the Research held in this Node text: string = ""; - constructor(p: IConstructorParams) { + constructor(p: IConstructorParams = {cost: 0, text: ""}) { if (ResearchMap[p.text] == null) { throw new Error(`Invalid Research name used when constructing ResearchTree Node: ${p.text}`); } @@ -112,6 +112,7 @@ export class Node { } } + // A ResearchTree defines all available Research in an Industry // The root node in a Research Tree must always be the "Hi-Tech R&D Laboratory" export class ResearchTree { diff --git a/src/Corporation/data/BaseResearchTree.ts b/src/Corporation/data/BaseResearchTree.ts index 849ccded2..bdd475d86 100644 --- a/src/Corporation/data/BaseResearchTree.ts +++ b/src/Corporation/data/BaseResearchTree.ts @@ -5,9 +5,6 @@ import { ResearchMap } from "../ResearchMap"; import { ResearchTree, Node } from "../ResearchTree"; - -export const BaseResearchTree: ResearchTree = new ResearchTree(); - function makeNode(name: string): Node { const research: Research | null = ResearchMap[name]; if (research == null) { @@ -17,43 +14,46 @@ function makeNode(name: string): Node { return new Node({ text: research.name, cost: research.cost }); } -const rootNode: Node = makeNode("Hi-Tech R&D Laboratory"); -const autoBrew: Node = makeNode("AutoBrew"); -const autoParty: Node = makeNode("AutoPartyManager"); -const autoDrugs: Node = makeNode("Automatic Drug Administration"); -const cph4: Node = makeNode("CPH4 Injections"); -const drones: Node = makeNode("Drones"); -const dronesAssembly: Node = makeNode("Drones - Assembly"); -const dronesTransport: Node = makeNode("Drones - Transport"); -const goJuice: Node = makeNode("Go-Juice"); -const joywire: Node = makeNode("JoyWire"); -const marketta1: Node = makeNode("Market-TA.I"); -const marketta2: Node = makeNode("Market-TA.II"); -const overclock: Node = makeNode("Overclock"); -const scAssemblers: Node = makeNode("Self-Correcting Assemblers"); -const stimu: Node = makeNode("Sti.mu"); - -autoDrugs.addChild(goJuice); -autoDrugs.addChild(cph4); - -drones.addChild(dronesAssembly); -drones.addChild(dronesTransport); - -marketta1.addChild(marketta2); - -overclock.addChild(stimu); - -rootNode.addChild(autoBrew); -rootNode.addChild(autoParty); -rootNode.addChild(autoDrugs); -rootNode.addChild(drones); -rootNode.addChild(joywire); -rootNode.addChild(marketta1); -rootNode.addChild(overclock); -rootNode.addChild(scAssemblers); - -BaseResearchTree.setRoot(rootNode); export function getBaseResearchTreeCopy(): ResearchTree { - return Object.assign(Object.create(Object.getPrototypeOf(BaseResearchTree)), BaseResearchTree); + const baseResearchTree: ResearchTree = new ResearchTree(); + + const rootNode: Node = makeNode("Hi-Tech R&D Laboratory"); + const autoBrew: Node = makeNode("AutoBrew"); + const autoParty: Node = makeNode("AutoPartyManager"); + const autoDrugs: Node = makeNode("Automatic Drug Administration"); + const cph4: Node = makeNode("CPH4 Injections"); + const drones: Node = makeNode("Drones"); + const dronesAssembly: Node = makeNode("Drones - Assembly"); + const dronesTransport: Node = makeNode("Drones - Transport"); + const goJuice: Node = makeNode("Go-Juice"); + const joywire: Node = makeNode("JoyWire"); + const marketta1: Node = makeNode("Market-TA.I"); + const marketta2: Node = makeNode("Market-TA.II"); + const overclock: Node = makeNode("Overclock"); + const scAssemblers: Node = makeNode("Self-Correcting Assemblers"); + const stimu: Node = makeNode("Sti.mu"); + + autoDrugs.addChild(goJuice); + autoDrugs.addChild(cph4); + + drones.addChild(dronesAssembly); + drones.addChild(dronesTransport); + + marketta1.addChild(marketta2); + + overclock.addChild(stimu); + + rootNode.addChild(autoBrew); + rootNode.addChild(autoParty); + rootNode.addChild(autoDrugs); + rootNode.addChild(drones); + rootNode.addChild(joywire); + rootNode.addChild(marketta1); + rootNode.addChild(overclock); + rootNode.addChild(scAssemblers); + + baseResearchTree.setRoot(rootNode); + + return baseResearchTree; } diff --git a/src/SaveObject.js b/src/SaveObject.js index b66e27d74..3e220c4bf 100755 --- a/src/SaveObject.js +++ b/src/SaveObject.js @@ -2,6 +2,8 @@ import {loadAliases, loadGlobalAliases, Aliases, GlobalAliases} from "./Alias"; import {Companies, loadCompanies} from "./Company/Companies"; import {CompanyPosition} from "./Company/CompanyPosition"; +import { IndustryResearchTrees, + loadIndustryResearchTrees } from "./Corporation/IndustryData"; import {CONSTANTS} from "./Constants"; import {Engine} from "./engine"; import { Factions, @@ -36,19 +38,20 @@ import Decimal from "decimal.js"; let saveObject = new BitburnerSaveObject(); function BitburnerSaveObject() { - this.PlayerSave = ""; - this.AllServersSave = ""; - this.CompaniesSave = ""; - this.FactionsSave = ""; - this.SpecialServerIpsSave = ""; - this.AliasesSave = ""; - this.GlobalAliasesSave = ""; - this.MessagesSave = ""; - this.StockMarketSave = ""; - this.SettingsSave = ""; - this.FconfSettingsSave = ""; - this.VersionSave = ""; - this.AllGangsSave = ""; + this.PlayerSave = ""; + this.AllServersSave = ""; + this.CompaniesSave = ""; + this.FactionsSave = ""; + this.SpecialServerIpsSave = ""; + this.AliasesSave = ""; + this.GlobalAliasesSave = ""; + this.MessagesSave = ""; + this.StockMarketSave = ""; + this.SettingsSave = ""; + this.FconfSettingsSave = ""; + this.VersionSave = ""; + this.AllGangsSave = ""; + this.CorporationResearchTreesSave = ""; } BitburnerSaveObject.prototype.saveGame = function(db) { @@ -260,6 +263,7 @@ function loadImportedGame(saveObj, saveString) { var tempMessages = null; var tempStockMarket = null; var tempAllGangs = null; + let tempCorporationResearchTrees = null; //Check to see if the imported save file can be parsed. If any //errors are caught it will fail @@ -332,7 +336,8 @@ function loadImportedGame(saveObj, saveString) { try { loadAllGangs(tempSaveObj.AllGangsSave); } catch(e) { - console.log("ERROR: Failed to parse AllGangsSave: " + e); + console.error(`Failed to parse AllGangsSave: {e}`); + throw e; } } } catch(e) {