mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2025-01-13 08:47:34 +01:00
93 lines
2.7 KiB
TypeScript
93 lines
2.7 KiB
TypeScript
/** Implementation for what happens when you destroy a BitNode */
|
|
import React from "react";
|
|
import { Player } from "@player";
|
|
import { type BitNodeOptions } from "@nsdefs";
|
|
import { SourceFiles } from "./SourceFile/SourceFiles";
|
|
|
|
import { dialogBoxCreate } from "./ui/React/DialogBox";
|
|
import { Router } from "./ui/GameRoot";
|
|
import { Page } from "./ui/Router";
|
|
import { prestigeSourceFile } from "./Prestige";
|
|
import { getDefaultBitNodeOptions, setBitNodeOptions } from "./BitNode/BitNodeUtils";
|
|
import { prestigeWorkerScripts } from "./NetscriptWorker";
|
|
import { exceptionAlert } from "./utils/helpers/exceptionAlert";
|
|
|
|
function giveSourceFile(bitNodeNumber: number): void {
|
|
const sourceFileKey = "SourceFile" + bitNodeNumber.toString();
|
|
const sourceFile = SourceFiles[sourceFileKey];
|
|
if (!sourceFile) {
|
|
console.error(`Could not find source file for Bit node: ${bitNodeNumber}`);
|
|
return;
|
|
}
|
|
|
|
// Check if player already has this source file
|
|
let lvl = Player.sourceFileLvl(bitNodeNumber);
|
|
|
|
if (lvl > 0) {
|
|
if (lvl >= 3 && bitNodeNumber !== 12) {
|
|
dialogBoxCreate(
|
|
`The Source-File for the BitNode you just destroyed, ${sourceFile.name}, is already at max level!`,
|
|
);
|
|
} else {
|
|
lvl++;
|
|
Player.sourceFiles.set(bitNodeNumber, lvl);
|
|
dialogBoxCreate(`${sourceFile.name} was upgraded to level ${lvl} for destroying its corresponding BitNode!`);
|
|
}
|
|
} else {
|
|
Player.sourceFiles.set(bitNodeNumber, 1);
|
|
if (bitNodeNumber === 5 && Player.skills.intelligence === 0) {
|
|
Player.skills.intelligence = 1;
|
|
}
|
|
dialogBoxCreate(
|
|
<>
|
|
You received a Source-File for destroying a BitNode!
|
|
<br />
|
|
<br />
|
|
{sourceFile.name}
|
|
<br />
|
|
<br />
|
|
{sourceFile.info}
|
|
</>,
|
|
);
|
|
}
|
|
}
|
|
|
|
export function enterBitNode(
|
|
isFlume: boolean,
|
|
destroyedBitNode: number,
|
|
newBitNode: number,
|
|
bitNodeOptions: BitNodeOptions,
|
|
): void {
|
|
// We must kill all scripts before setting up BitNode data and performing the prestige.
|
|
prestigeWorkerScripts();
|
|
|
|
if (!isFlume) {
|
|
giveSourceFile(destroyedBitNode);
|
|
} else if (Player.sourceFileLvl(5) === 0 && newBitNode !== 5) {
|
|
Player.skills.intelligence = 0;
|
|
Player.exp.intelligence = 0;
|
|
}
|
|
if (newBitNode === 5 && Player.skills.intelligence === 0) {
|
|
Player.skills.intelligence = 1;
|
|
}
|
|
// Set new Bit Node
|
|
Player.bitNodeN = newBitNode;
|
|
|
|
// Set BitNode options
|
|
try {
|
|
setBitNodeOptions(bitNodeOptions);
|
|
} catch (error) {
|
|
exceptionAlert(error);
|
|
// Use default options
|
|
setBitNodeOptions(getDefaultBitNodeOptions());
|
|
}
|
|
|
|
prestigeSourceFile(isFlume);
|
|
|
|
if (newBitNode === 6) {
|
|
Router.toPage(Page.BladeburnerCinematic);
|
|
} else {
|
|
Router.toPage(Page.Terminal);
|
|
}
|
|
}
|