bitburner-src/src/Prestige.js

357 lines
13 KiB
JavaScript
Raw Normal View History

import { deleteActiveScriptsItem } from "./ActiveScriptsUI";
import { Augmentations } from "./Augmentation/Augmentations";
import {
augmentationExists,
initAugmentations
} from "./Augmentation/AugmentationHelpers";
import { AugmentationNames } from "./Augmentation/data/AugmentationNames";
import { initBitNodeMultipliers } from "./BitNode/BitNode";
import { Bladeburner } from "./Bladeburner";
import { writeCinematicText } from "./CinematicText";
import { Companies, initCompanies } from "./Company/Companies";
import { resetIndustryResearchTrees } from "./Corporation/IndustryData";
import { Programs } from "./Programs/Programs";
import { Engine } from "./engine";
import { Faction } from "./Faction/Faction";
import { Factions, initFactions } from "./Faction/Factions";
import { joinFaction } from "./Faction/FactionHelpers";
import { deleteGangDisplayContent } from "./Gang";
import { Message } from "./Message/Message";
import { initMessages, Messages } from "./Message/MessageHelpers";
import { initSingularitySFFlags, hasWallStreetSF } from "./NetscriptFunctions";
import {
WorkerScript,
workerScripts,
prestigeWorkerScripts
} from "./NetscriptWorker";
import { Player } from "./Player";
2018-03-12 20:39:04 +01:00
import {
AllServers,
AddToAllServers,
initForeignServers,
prestigeAllServers
} from "./Server/AllServers";
import { Server } from "./Server/Server";
import { prestigeHomeComputer } from "./Server/ServerHelpers";
import {
SourceFileFlags,
updateSourceFileFlags
} from "./SourceFile/SourceFileFlags";
import {
SpecialServerIps,
SpecialServerIpsMap,
prestigeSpecialServerIps,
SpecialServerNames
} from "./Server/SpecialServerIps";
import {
initStockMarket,
initSymbolToStockMap,
} from "./StockMarket/StockMarket";
import { Terminal, postNetburnerText } from "./Terminal";
2019-02-09 03:46:30 +01:00
import { Page, routing } from "./ui/navigationTracking";
2019-02-09 03:46:30 +01:00
import { dialogBoxCreate } from "../utils/DialogBox";
import { exceptionAlert } from "../utils/helpers/exceptionAlert";
import { removeElementById } from "../utils/uiHelpers/removeElementById";
import { createElement } from "../utils/uiHelpers/createElement";
import { createPopup } from "../utils/uiHelpers/createPopup";
2017-02-20 23:06:16 +01:00
import Decimal from "decimal.js";
const BitNode8StartingMoney = 250e6;
2018-06-03 03:37:56 +02:00
// Prestige by purchasing augmentation
2017-02-20 23:06:16 +01:00
function prestigeAugmentation() {
2019-02-20 09:42:27 +01:00
// Set Navigation to Terminal screen, for any logic that depends on it
2019-02-09 03:46:30 +01:00
routing.navigateTo(Page.Terminal);
initBitNodeMultipliers(Player);
Player.prestigeAugmentation();
2019-02-20 09:42:27 +01:00
// Now actually go to the Terminal Screen (and reset it)
var mainMenu = document.getElementById("mainmenu-container");
mainMenu.style.visibility = "visible";
Terminal.resetTerminalInput();
Engine.loadTerminalContent();
$("#terminal tr:not(:last)").remove();
postNetburnerText();
// Delete all Worker Scripts objects
prestigeWorkerScripts();
var homeComp = Player.getHomeComputer();
// Delete all servers except home computer
prestigeAllServers();
// Delete Special Server IPs
prestigeSpecialServerIps(); // Must be done before initForeignServers()
// Reset home computer (only the programs) and add to AllServers
AddToAllServers(homeComp);
prestigeHomeComputer(homeComp);
if (augmentationExists(AugmentationNames.Neurolink) &&
Augmentations[AugmentationNames.Neurolink].owned) {
2018-06-02 01:31:34 +02:00
homeComp.programs.push(Programs.FTPCrackProgram.name);
homeComp.programs.push(Programs.RelaySMTPProgram.name);
}
if (augmentationExists(AugmentationNames.CashRoot) &&
Augmentations[AugmentationNames.CashRoot].owned) {
Player.setMoney(new Decimal(1000000));
2018-06-02 01:31:34 +02:00
homeComp.programs.push(Programs.BruteSSHProgram.name);
}
// Re-create foreign servers
initForeignServers(Player.getHomeComputer());
// Gain favor for Companies
2017-02-20 23:06:16 +01:00
for (var member in Companies) {
2017-05-10 22:21:15 +02:00
if (Companies.hasOwnProperty(member)) {
Companies[member].gainFavor();
2017-05-10 22:21:15 +02:00
}
2017-02-20 23:06:16 +01:00
}
// Gain favor for factions
2017-02-20 23:06:16 +01:00
for (var member in Factions) {
2017-05-10 22:21:15 +02:00
if (Factions.hasOwnProperty(member)) {
Factions[member].gainFavor();
2017-05-10 22:21:15 +02:00
}
2017-02-20 23:06:16 +01:00
}
// Stop a Terminal action if there is onerror
if (Engine._actionInProgress) {
Engine._actionInProgress = false;
Terminal.finishAction(true);
}
// Re-initialize things - This will update any changes
initFactions(); // Factions must be initialized before augmentations
initAugmentations(); // Calls reapplyAllAugmentations() and resets Player multipliers
2017-08-13 07:01:33 +02:00
Player.reapplyAllSourceFiles();
2017-02-20 23:06:16 +01:00
initCompanies();
// Messages
initMessages();
2019-04-14 11:08:10 +02:00
// Gang
if (Player.inGang()) {
const faction = Factions[Player.gang.facName];
2017-08-13 07:01:33 +02:00
if (faction instanceof Faction) {
joinFaction(faction);
}
}
// Cancel Bladeburner action
if (Player.bladeburner instanceof Bladeburner) {
Player.bladeburner.prestige();
}
2018-05-02 19:38:11 +02:00
// BitNode 8: Ghost of Wall Street
2018-06-03 03:37:56 +02:00
if (Player.bitNodeN === 8) {Player.money = new Decimal(BitNode8StartingMoney);}
if (Player.bitNodeN === 8 || hasWallStreetSF) {
Player.hasWseAccount = true;
Player.hasTixApiAccess = true;
}
// Reset Stock market
if (Player.hasWseAccount) {
initStockMarket();
initSymbolToStockMap();
}
2018-11-01 19:18:32 +01:00
// Refresh Main Menu (the 'World' menu, specifically)
document.getElementById("world-menu-header").click();
document.getElementById("world-menu-header").click();
// Red Pill
2017-07-22 00:54:55 +02:00
if (augmentationExists(AugmentationNames.TheRedPill) &&
Augmentations[AugmentationNames.TheRedPill].owned) {
var WorldDaemon = AllServers[SpecialServerIps[SpecialServerNames.WorldDaemon]];
var DaedalusServer = AllServers[SpecialServerIps[SpecialServerNames.DaedalusServer]];
if (WorldDaemon && DaedalusServer) {
WorldDaemon.serversOnNetwork.push(DaedalusServer.ip);
DaedalusServer.serversOnNetwork.push(WorldDaemon.ip);
}
}
}
2017-08-13 07:01:33 +02:00
// Prestige by destroying Bit Node and gaining a Source File
2017-08-13 07:01:33 +02:00
function prestigeSourceFile() {
initBitNodeMultipliers(Player);
updateSourceFileFlags(Player);
2017-08-13 07:01:33 +02:00
Player.prestigeSourceFile();
prestigeWorkerScripts(); // Delete all Worker Scripts objects
2017-08-13 07:01:33 +02:00
var homeComp = Player.getHomeComputer();
// Delete all servers except home computer
prestigeAllServers(); // Must be done before initForeignServers()
// Delete Special Server IPs
prestigeSpecialServerIps();
2017-08-13 07:01:33 +02:00
// Reset home computer (only the programs) and add to AllServers
AddToAllServers(homeComp);
prestigeHomeComputer(homeComp);
// Re-create foreign servers
initForeignServers(Player.getHomeComputer());
2019-03-30 04:01:34 +01:00
if (SourceFileFlags[9] >= 2) {
homeComp.setMaxRam(128);
} else if (SourceFileFlags[1] > 0) {
homeComp.setMaxRam(32);
2017-08-13 07:01:33 +02:00
} else {
homeComp.setMaxRam(8);
2017-08-13 07:01:33 +02:00
}
2017-10-10 06:56:48 +02:00
homeComp.cpuCores = 1;
2019-03-30 04:01:34 +01:00
// Reset favor for Companies
2017-08-13 07:01:33 +02:00
for (var member in Companies) {
if (Companies.hasOwnProperty(member)) {
Companies[member].favor = 0;
}
}
2019-03-30 04:01:34 +01:00
// Reset favor for factions
2017-08-13 07:01:33 +02:00
for (var member in Factions) {
if (Factions.hasOwnProperty(member)) {
Factions[member].favor = 0;
}
}
2019-03-30 04:01:34 +01:00
// Stop a Terminal action if there is one
2017-08-13 07:01:33 +02:00
if (Engine._actionInProgress) {
Engine._actionInProgress = false;
Terminal.finishAction(true);
}
2019-03-30 04:01:34 +01:00
// Delete all Augmentations
for (var name in Augmentations) {
if (Augmentations.hasOwnProperty(name)) {
delete Augmentations[name];
}
}
2017-08-20 03:36:19 +02:00
2019-03-30 04:01:34 +01:00
// Re-initialize things - This will update any changes
initFactions(); // Factions must be initialized before augmentations
initAugmentations(); // Calls reapplyAllAugmentations() and resets Player multipliers
2017-08-13 07:01:33 +02:00
Player.reapplyAllSourceFiles();
initCompanies();
// Clear terminal
2017-08-13 07:01:33 +02:00
$("#terminal tr:not(:last)").remove();
postNetburnerText();
// Messages
2017-08-13 07:01:33 +02:00
initMessages();
var mainMenu = document.getElementById("mainmenu-container");
mainMenu.style.visibility = "visible";
2017-09-13 16:22:22 +02:00
Terminal.resetTerminalInput();
2017-08-13 07:01:33 +02:00
Engine.loadTerminalContent();
2017-09-15 16:06:59 +02:00
// Reinitialize Bit Node flags
2017-09-19 20:38:03 +02:00
initSingularitySFFlags();
// BitNode 3: Corporatocracy
2018-03-12 20:39:04 +01:00
if (Player.bitNodeN === 3) {
homeComp.messages.push("corporation-management-handbook.lit");
dialogBoxCreate("You received a copy of the Corporation Management Handbook on your home computer. " +
"Read it if you need help getting started with Corporations!");
}
// BitNode 6: Bladeburner
2018-05-02 19:38:11 +02:00
if (Player.bitNodeN === 6) {
var cinematicText = ["In the middle of the 21st century, OmniTek Incorporated advanced robot evolution " +
"with their Synthoids (synthetic androids), a being virtually identical to a human.",
"------",
"Their sixth-generation Synthoids, called MK-VI, were stronger, faster, and more " +
"intelligent than humans. Many argued that the MK-VI Synthoids were the first " +
"example of sentient AI.",
"------",
"Unfortunately, in 2070 a terrorist group called Ascendis Totalis hacked into OmniTek and " +
"uploaded a rogue AI into their Synthoid manufacturing facilities.",
"------",
"The MK-VI Synthoids infected by the rogue AI turned hostile toward humanity, initiating " +
"the deadliest conflict in human history. This dark chapter is now known as the Synthoid Uprising.",
"------",
"In the aftermath of the Uprising, further manufacturing of Synthoids with advanced AI " +
"was banned. MK-VI Synthoids that did not have the rogue Ascendis Totalis AI were " +
"allowed to continue their existence.",
"------",
"The intelligence community believes that not all of the rogue MK-VI Synthoids from the Uprising were " +
"found and destroyed, and that many of them are blending in as normal humans in society today. " +
"As a result, many nations have created Bladeburner divisions, special units that are tasked with " +
"investigating and dealing with Synthoid threats."];
writeCinematicText(cinematicText).then(function() {
var popupId = "bladeburner-bitnode-start-nsa-notification";
var txt = createElement("p", {
innerText:"Visit the National Security Agency (NSA) to apply for their Bladeburner " +
"division! You will need 100 of each combat stat before doing this."
})
var brEl = createElement("br");
var okBtn = createElement("a", {
class:"a-link-button", innerText:"Got it!", padding:"8px",
clickListener:()=>{
removeElementById(popupId);
return false;
}
});
createPopup(popupId, [txt, brEl, okBtn]);
}).catch(function(e) {
exceptionAlert(e);
})
}
// BitNode 8: Ghost of Wall Street
2018-06-03 03:37:56 +02:00
if (Player.bitNodeN === 8) {Player.money = new Decimal(BitNode8StartingMoney);}
if (Player.bitNodeN === 8 || hasWallStreetSF) {
Player.hasWseAccount = true;
Player.hasTixApiAccess = true;
}
// Bit Node 10: Digital Carbon
if (Player.bitNodeN === 10) {
dialogBoxCreate("Visit VitaLife in New Tokyo if you'd like to purchase a new sleeve!");
}
2019-03-30 04:01:34 +01:00
// Reset Stock market, gang, and corporation
if (Player.hasWseAccount) {
initStockMarket();
initSymbolToStockMap();
}
if (Player.inGang()) { Player.gang.clearUI(); }
Player.gang = null;
Player.corporation = null; resetIndustryResearchTrees();
Player.bladeburner = null;
2019-03-30 04:01:34 +01:00
// Source-File 9 (level 3) effect
if (SourceFileFlags[9] >= 3) {
const hserver = Player.createHacknetServer();
2019-03-30 04:01:34 +01:00
hserver.level = 100;
hserver.cores = 10;
hserver.cache = 5;
hserver.updateHashRate(Player);
hserver.updateHashCapacity();
Player.hashManager.updateCapacity(Player);
}
2018-11-01 19:18:32 +01:00
// Refresh Main Menu (the 'World' menu, specifically)
document.getElementById("world-menu-header").click();
document.getElementById("world-menu-header").click();
// Gain int exp
2017-09-15 16:06:59 +02:00
Player.gainIntelligenceExp(5);
2017-08-13 07:01:33 +02:00
}
export {prestigeAugmentation, prestigeSourceFile};