diff --git a/src/IEngine.ts b/src/IEngine.ts
index 01287cceb..a7938c696 100644
--- a/src/IEngine.ts
+++ b/src/IEngine.ts
@@ -30,4 +30,5 @@ export interface IEngine {
loadMissionContent: () => void;
loadResleevingContent: () => void;
loadGameOptionsContent: () => void;
+ load: (save: string) => void;
}
diff --git a/src/Infiltration/ui/InfiltrationRoot.tsx b/src/Infiltration/ui/InfiltrationRoot.tsx
index 5db306407..c706eb9e8 100644
--- a/src/Infiltration/ui/InfiltrationRoot.tsx
+++ b/src/Infiltration/ui/InfiltrationRoot.tsx
@@ -3,7 +3,6 @@ import React, { useState } from "react";
import { Intro } from "./Intro";
import { Game } from "./Game";
import { Location } from "../../Locations/Location";
-import { Locations } from "../../Locations/Locations";
import { use } from "../../ui/Context";
interface IProps {
diff --git a/src/InteractiveTutorial.d.ts b/src/InteractiveTutorial.d.ts
deleted file mode 100644
index 28b73deb8..000000000
--- a/src/InteractiveTutorial.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export declare function iTutorialNextStep(): void;
-export declare function iTutorialPrevStep(): void;
-export declare function iTutorialEnd(): void;
-export declare const ITutorial: { isRunning: boolean; currStep: number };
-export declare const iTutorialSteps: { [key: string]: number | undefined };
diff --git a/src/InteractiveTutorial.js b/src/InteractiveTutorial.js
deleted file mode 100644
index 18379f521..000000000
--- a/src/InteractiveTutorial.js
+++ /dev/null
@@ -1,122 +0,0 @@
-import { Engine } from "./engine";
-import { Player } from "./Player";
-import { Settings } from "./Settings/Settings";
-
-import { LiteratureNames } from "./Literature/data/LiteratureNames";
-
-import { ITutorialEvents } from "./ui/InteractiveTutorial/ITutorialEvents";
-
-import { clearEventListeners } from "../utils/uiHelpers/clearEventListeners";
-import { createElement } from "../utils/uiHelpers/createElement";
-import { createPopup } from "../utils/uiHelpers/createPopup";
-import { removeElementById } from "../utils/uiHelpers/removeElementById";
-
-// Ordered array of keys to Interactive Tutorial Steps
-const orderedITutorialSteps = [
- "Start",
- "GoToCharacterPage", // Click on 'Stats' page
- "CharacterPage", // Introduction to 'Stats' page
- "CharacterGoToTerminalPage", // Go back to Terminal
- "TerminalIntro", // Introduction to Terminal
- "TerminalHelp", // Using 'help' Terminal command
- "TerminalLs", // Using 'ls' Terminal command
- "TerminalScan", // Using 'scan' Terminal command
- "TerminalScanAnalyze1", // Using 'scan-analyze' Terminal command
- "TerminalScanAnalyze2", // Using 'scan-analyze 3' Terminal command
- "TerminalConnect", // Connecting to n00dles
- "TerminalAnalyze", // Analyzing n00dles
- "TerminalNuke", // NUKE n00dles
- "TerminalManualHack", // Hack n00dles
- "TerminalHackingMechanics", // Explanation of hacking mechanics
- "TerminalGoHome", // Go home before creating a script.
- "TerminalCreateScript", // Create a script using 'nano'
- "TerminalTypeScript", // Script Editor page - Type script and then save & close
- "TerminalFree", // Using 'Free' Terminal command
- "TerminalRunScript", // Running script using 'run' Terminal command
- "TerminalGoToActiveScriptsPage",
- "ActiveScriptsPage",
- "ActiveScriptsToTerminal",
- "TerminalTailScript",
- "GoToHacknetNodesPage",
- "HacknetNodesIntroduction",
- "HacknetNodesGoToWorldPage",
- "WorldDescription",
- "TutorialPageInfo",
- "End",
-];
-
-// Create an 'enum' for the Steps
-const iTutorialSteps = {};
-for (let i = 0; i < orderedITutorialSteps.length; ++i) {
- iTutorialSteps[orderedITutorialSteps[i]] = i;
-}
-
-const ITutorial = {
- currStep: 0, // iTutorialSteps.Start
- isRunning: false,
-
- // Keeps track of whether each step has been done
- stepIsDone: {},
-};
-
-function iTutorialStart() {
- // Initialize Interactive Tutorial state by settings 'done' for each state to false
- ITutorial.stepIsDone = {};
- for (let i = 0; i < orderedITutorialSteps.length; ++i) {
- ITutorial.stepIsDone[i] = false;
- }
-
- // Don't autosave during this interactive tutorial
- Engine.Counters.autoSaveCounter = Infinity;
- ITutorial.currStep = 0;
- ITutorial.isRunning = true;
-}
-
-// Go to the next step and evaluate it
-function iTutorialNextStep() {
- ITutorial.stepIsDone[ITutorial.currStep] = true;
- if (ITutorial.currStep < iTutorialSteps.End) {
- ITutorial.currStep += 1;
- }
- if (ITutorial.currStep === iTutorialSteps.End) iTutorialEnd();
- ITutorialEvents.emit();
-}
-
-// Go to previous step and evaluate
-function iTutorialPrevStep() {
- if (ITutorial.currStep > iTutorialSteps.Start) {
- ITutorial.currStep -= 1;
- }
- ITutorialEvents.emit();
-}
-
-function iTutorialEnd() {
- ITutorial.isRunning = false;
-
- // Create a popup with final introductory stuff
- const popupId = "interactive-tutorial-ending-popup";
- const txt = createElement("p", {
- innerHTML:
- "If you are new to the game, the following links may be useful for you!
" +
- "Getting Started Guide" +
- "Documentation
" +
- "The Beginner's Guide to Hacking was added to your home computer! It contains some tips/pointers for starting out with the game. " +
- "To read it, go to Terminal and enter
cat " +
- LiteratureNames.HackersStartingHandbook,
- });
- const gotitBtn = createElement("a", {
- class: "a-link-button",
- float: "right",
- padding: "6px",
- innerText: "Got it!",
- clickListener: () => {
- removeElementById(popupId);
- },
- });
- createPopup(popupId, [txt, gotitBtn]);
-
- Player.getHomeComputer().messages.push(LiteratureNames.HackersStartingHandbook);
- ITutorialEvents.emit();
-}
-
-export { iTutorialSteps, iTutorialEnd, iTutorialStart, iTutorialNextStep, ITutorial, iTutorialPrevStep };
diff --git a/src/InteractiveTutorial.ts b/src/InteractiveTutorial.ts
new file mode 100644
index 000000000..be67f422c
--- /dev/null
+++ b/src/InteractiveTutorial.ts
@@ -0,0 +1,170 @@
+import { Player } from "./Player";
+
+import { LiteratureNames } from "./Literature/data/LiteratureNames";
+
+import { ITutorialEvents } from "./ui/InteractiveTutorial/ITutorialEvents";
+
+import { createElement } from "../utils/uiHelpers/createElement";
+import { createPopup } from "../utils/uiHelpers/createPopup";
+import { removeElementById } from "../utils/uiHelpers/removeElementById";
+
+// Ordered array of keys to Interactive Tutorial Steps
+enum iTutorialSteps {
+ Start,
+ GoToCharacterPage, // Click on 'Stats' page
+ CharacterPage, // Introduction to 'Stats' page
+ CharacterGoToTerminalPage, // Go back to Terminal
+ TerminalIntro, // Introduction to Terminal
+ TerminalHelp, // Using 'help' Terminal command
+ TerminalLs, // Using 'ls' Terminal command
+ TerminalScan, // Using 'scan' Terminal command
+ TerminalScanAnalyze1, // Using 'scan-analyze' Terminal command
+ TerminalScanAnalyze2, // Using 'scan-analyze 3' Terminal command
+ TerminalConnect, // Connecting to n00dles
+ TerminalAnalyze, // Analyzing n00dles
+ TerminalNuke, // NUKE n00dles
+ TerminalManualHack, // Hack n00dles
+ TerminalHackingMechanics, // Explanation of hacking mechanics
+ TerminalGoHome, // Go home before creating a script.
+ TerminalCreateScript, // Create a script using 'nano'
+ TerminalTypeScript, // Script Editor page - Type script and then save & close
+ TerminalFree, // Using 'Free' Terminal command
+ TerminalRunScript, // Running script using 'run' Terminal command
+ TerminalGoToActiveScriptsPage,
+ ActiveScriptsPage,
+ ActiveScriptsToTerminal,
+ TerminalTailScript,
+ GoToHacknetNodesPage,
+ HacknetNodesIntroduction,
+ HacknetNodesGoToWorldPage,
+ WorldDescription,
+ TutorialPageInfo,
+ End,
+}
+
+const ITutorial: {
+ currStep: iTutorialSteps;
+ isRunning: boolean;
+ stepIsDone: {
+ [iTutorialSteps.Start]: boolean;
+ [iTutorialSteps.GoToCharacterPage]: boolean;
+ [iTutorialSteps.CharacterPage]: boolean;
+ [iTutorialSteps.CharacterGoToTerminalPage]: boolean;
+ [iTutorialSteps.TerminalIntro]: boolean;
+ [iTutorialSteps.TerminalHelp]: boolean;
+ [iTutorialSteps.TerminalLs]: boolean;
+ [iTutorialSteps.TerminalScan]: boolean;
+ [iTutorialSteps.TerminalScanAnalyze1]: boolean;
+ [iTutorialSteps.TerminalScanAnalyze2]: boolean;
+ [iTutorialSteps.TerminalConnect]: boolean;
+ [iTutorialSteps.TerminalAnalyze]: boolean;
+ [iTutorialSteps.TerminalNuke]: boolean;
+ [iTutorialSteps.TerminalManualHack]: boolean;
+ [iTutorialSteps.TerminalHackingMechanics]: boolean;
+ [iTutorialSteps.TerminalGoHome]: boolean;
+ [iTutorialSteps.TerminalCreateScript]: boolean;
+ [iTutorialSteps.TerminalTypeScript]: boolean;
+ [iTutorialSteps.TerminalFree]: boolean;
+ [iTutorialSteps.TerminalRunScript]: boolean;
+ [iTutorialSteps.TerminalGoToActiveScriptsPage]: boolean;
+ [iTutorialSteps.ActiveScriptsPage]: boolean;
+ [iTutorialSteps.ActiveScriptsToTerminal]: boolean;
+ [iTutorialSteps.TerminalTailScript]: boolean;
+ [iTutorialSteps.GoToHacknetNodesPage]: boolean;
+ [iTutorialSteps.HacknetNodesIntroduction]: boolean;
+ [iTutorialSteps.HacknetNodesGoToWorldPage]: boolean;
+ [iTutorialSteps.WorldDescription]: boolean;
+ [iTutorialSteps.TutorialPageInfo]: boolean;
+ [iTutorialSteps.End]: boolean;
+ };
+} = {
+ currStep: iTutorialSteps.Start,
+ isRunning: false,
+
+ // Keeps track of whether each step has been done
+ stepIsDone: {
+ [iTutorialSteps.Start]: false,
+ [iTutorialSteps.GoToCharacterPage]: false,
+ [iTutorialSteps.CharacterPage]: false,
+ [iTutorialSteps.CharacterGoToTerminalPage]: false,
+ [iTutorialSteps.TerminalIntro]: false,
+ [iTutorialSteps.TerminalHelp]: false,
+ [iTutorialSteps.TerminalLs]: false,
+ [iTutorialSteps.TerminalScan]: false,
+ [iTutorialSteps.TerminalScanAnalyze1]: false,
+ [iTutorialSteps.TerminalScanAnalyze2]: false,
+ [iTutorialSteps.TerminalConnect]: false,
+ [iTutorialSteps.TerminalAnalyze]: false,
+ [iTutorialSteps.TerminalNuke]: false,
+ [iTutorialSteps.TerminalManualHack]: false,
+ [iTutorialSteps.TerminalHackingMechanics]: false,
+ [iTutorialSteps.TerminalGoHome]: false,
+ [iTutorialSteps.TerminalCreateScript]: false,
+ [iTutorialSteps.TerminalTypeScript]: false,
+ [iTutorialSteps.TerminalFree]: false,
+ [iTutorialSteps.TerminalRunScript]: false,
+ [iTutorialSteps.TerminalGoToActiveScriptsPage]: false,
+ [iTutorialSteps.ActiveScriptsPage]: false,
+ [iTutorialSteps.ActiveScriptsToTerminal]: false,
+ [iTutorialSteps.TerminalTailScript]: false,
+ [iTutorialSteps.GoToHacknetNodesPage]: false,
+ [iTutorialSteps.HacknetNodesIntroduction]: false,
+ [iTutorialSteps.HacknetNodesGoToWorldPage]: false,
+ [iTutorialSteps.WorldDescription]: false,
+ [iTutorialSteps.TutorialPageInfo]: false,
+ [iTutorialSteps.End]: false,
+ },
+};
+
+function iTutorialStart(): void {
+ ITutorial.isRunning = true;
+}
+
+// Go to the next step and evaluate it
+function iTutorialNextStep(): void {
+ ITutorial.stepIsDone[ITutorial.currStep] = true;
+ if (ITutorial.currStep < iTutorialSteps.End) {
+ ITutorial.currStep += 1;
+ }
+ if (ITutorial.currStep === iTutorialSteps.End) iTutorialEnd();
+ ITutorialEvents.emit();
+}
+
+// Go to previous step and evaluate
+function iTutorialPrevStep(): void {
+ if (ITutorial.currStep > iTutorialSteps.Start) {
+ ITutorial.currStep -= 1;
+ }
+ ITutorialEvents.emit();
+}
+
+function iTutorialEnd(): void {
+ ITutorial.isRunning = false;
+
+ // Create a popup with final introductory stuff
+ const popupId = "interactive-tutorial-ending-popup";
+ const txt = createElement("p", {
+ innerHTML:
+ "If you are new to the game, the following links may be useful for you!
" +
+ "Getting Started Guide" +
+ "Documentation
" +
+ "The Beginner's Guide to Hacking was added to your home computer! It contains some tips/pointers for starting out with the game. " +
+ "To read it, go to Terminal and enter
cat " +
+ LiteratureNames.HackersStartingHandbook,
+ });
+ const gotitBtn = createElement("a", {
+ class: "a-link-button",
+ float: "right",
+ padding: "6px",
+ innerText: "Got it!",
+ clickListener: () => {
+ removeElementById(popupId);
+ },
+ });
+ createPopup(popupId, [txt, gotitBtn]);
+
+ Player.getHomeComputer().messages.push(LiteratureNames.HackersStartingHandbook);
+ ITutorialEvents.emit();
+}
+
+export { iTutorialSteps, iTutorialEnd, iTutorialStart, iTutorialNextStep, ITutorial, iTutorialPrevStep };
diff --git a/src/Locations/ui/GenericLocation.tsx b/src/Locations/ui/GenericLocation.tsx
index b25d06638..a8d467968 100644
--- a/src/Locations/ui/GenericLocation.tsx
+++ b/src/Locations/ui/GenericLocation.tsx
@@ -18,9 +18,7 @@ import { CasinoLocation } from "./CasinoLocation";
import { Location } from "../Location";
import { LocationType } from "../LocationTypeEnum";
-import { CityName } from "../data/CityNames";
-import { IRouter } from "../../ui/Router";
import { Settings } from "../../Settings/Settings";
import { SpecialServerIps } from "../../Server/SpecialServerIps";
diff --git a/src/Locations/ui/SpecialLocation.tsx b/src/Locations/ui/SpecialLocation.tsx
index 455da8dca..a6ab94feb 100644
--- a/src/Locations/ui/SpecialLocation.tsx
+++ b/src/Locations/ui/SpecialLocation.tsx
@@ -17,7 +17,6 @@ import { CreateCorporationPopup } from "../../Corporation/ui/CreateCorporationPo
import { createPopup } from "../../ui/React/createPopup";
import { LocationName } from "../data/LocationNames";
-import { IPlayer } from "../../PersonObjects/IPlayer";
import { use } from "../../ui/Context";
import { AutoupdatingStdButton } from "../../ui/React/AutoupdatingStdButton";
@@ -29,14 +28,10 @@ type IProps = {
loc: Location;
};
-type IState = {
- inBladeburner: boolean;
-};
-
export function SpecialLocation(props: IProps): React.ReactElement {
const player = use.Player();
const router = use.Router();
- const [rerender, setRerender] = useState(false);
+ const setRerender = useState(false)[1];
const inBladeburner = player.inBladeburner();
/**
* Click handler for "Create Corporation" button at Sector-12 City Hall
diff --git a/src/NetscriptWorker.js b/src/NetscriptWorker.js
index ab3224453..e65ba65df 100644
--- a/src/NetscriptWorker.js
+++ b/src/NetscriptWorker.js
@@ -9,7 +9,6 @@ import { WorkerScriptStartStopEventEmitter } from "./Netscript/WorkerScriptStart
import { generateNextPid } from "./Netscript/Pid";
import { CONSTANTS } from "./Constants";
-import { Engine } from "./engine";
import { Interpreter } from "./JSInterpreter";
import { isScriptErrorMessage, makeRuntimeRejectMsg } from "./NetscriptEvaluator";
import { NetscriptFunctions } from "./NetscriptFunctions";
diff --git a/src/Terminal/Terminal.ts b/src/Terminal/Terminal.ts
index 4ef407a75..7fe2d18d8 100644
--- a/src/Terminal/Terminal.ts
+++ b/src/Terminal/Terminal.ts
@@ -15,10 +15,7 @@ import { AllServers } from "../Server/AllServers";
import { removeLeadingSlash, isInRootDirectory, evaluateFilePath } from "./DirectoryHelpers";
import { checkIfConnectedToDarkweb } from "../DarkWeb/DarkWeb";
-import { logBoxCreate } from "../../utils/LogBox";
import { iTutorialNextStep, iTutorialSteps, ITutorial } from "../InteractiveTutorial";
-import { findRunningScript } from "../Script/ScriptHelpers";
-import { TerminalHelpText } from "./HelpText";
import { GetServerByHostname, getServer, getServerOnNetwork } from "../Server/ServerHelpers";
import { ParseCommand, ParseCommands } from "./Parser";
import { SpecialServerIps, SpecialServerNames } from "../Server/SpecialServerIps";
diff --git a/src/engine.d.ts b/src/engine.d.ts
index ce2819933..46ed10fcd 100644
--- a/src/engine.d.ts
+++ b/src/engine.d.ts
@@ -1,2 +1,3 @@
export declare function load(cb: () => void): void;
-export declare const Engine: any;
+
+export declare const Engine: IEngine;
diff --git a/src/engine.jsx b/src/engine.jsx
index e272dbc4f..544b8fc9f 100644
--- a/src/engine.jsx
+++ b/src/engine.jsx
@@ -13,8 +13,8 @@ import { Corporation } from "./Corporation/Corporation";
import { CONSTANTS } from "./Constants";
import { Factions, initFactions } from "./Faction/Factions";
import { processPassiveFactionRepGain, inviteToFaction } from "./Faction/FactionHelpers";
-import { GameRoot, Router } from "./ui/GameRoot";
-import { TTheme as Theme } from "./ui/React/Theme";
+import { Router } from "./ui/GameRoot";
+
import {
getHackingWorkRepGain,
getFactionSecurityWorkRepGain,
@@ -36,7 +36,6 @@ import { Terminal } from "./Terminal";
import { Sleeve } from "./PersonObjects/Sleeve/Sleeve";
import { Locations } from "./Locations/Locations";
import { LocationName } from "./Locations/data/LocationNames";
-import { LoadingScreen } from "./ui/LoadingScreen";
import { Money } from "./ui/React/Money";
import { Hashes } from "./ui/React/Hashes";
@@ -49,7 +48,6 @@ import "./Exploits/tampering";
import "./Exploits/unclickable";
import React from "react";
-import ReactDOM from "react-dom";
const Engine = {
indexedDb: undefined,
@@ -466,11 +464,4 @@ function load(cb) {
var indexedDbRequest;
-ReactDOM.render(
-
-
- ,
- document.getElementById("mainmenu-container"),
-);
-
export { Engine, load };
diff --git a/src/engineStyle.js b/src/engineStyle.ts
similarity index 100%
rename from src/engineStyle.js
rename to src/engineStyle.ts
diff --git a/src/index.tsx b/src/index.tsx
new file mode 100644
index 000000000..9b1b87b19
--- /dev/null
+++ b/src/index.tsx
@@ -0,0 +1,13 @@
+import React from "react";
+import ReactDOM from "react-dom";
+
+import { TTheme as Theme } from "./ui/React/Theme";
+import { LoadingScreen } from "./ui/LoadingScreen";
+import "./engineStyle";
+
+ReactDOM.render(
+
+
+ ,
+ document.getElementById("mainmenu-container"),
+);
diff --git a/src/ui/ActiveScripts/ActiveScriptsRoot.tsx b/src/ui/ActiveScripts/ActiveScriptsRoot.tsx
index 001bee1f6..d4a93c3a1 100644
--- a/src/ui/ActiveScripts/ActiveScriptsRoot.tsx
+++ b/src/ui/ActiveScripts/ActiveScriptsRoot.tsx
@@ -10,7 +10,6 @@ import { ServerAccordions } from "./ServerAccordions";
import { WorkerScript } from "../../Netscript/WorkerScript";
import Typography from "@mui/material/Typography";
-import TextField from "@mui/material/TextField";
type IProps = {
workerScripts: Map;
@@ -35,7 +34,7 @@ export function ActiveScriptsRoot(props: IProps): React.ReactElement {
on which they are running.
-
+
>
);
diff --git a/src/ui/ActiveScripts/ScriptProduction.tsx b/src/ui/ActiveScripts/ScriptProduction.tsx
index 13ee22f22..78ee774f7 100644
--- a/src/ui/ActiveScripts/ScriptProduction.tsx
+++ b/src/ui/ActiveScripts/ScriptProduction.tsx
@@ -4,13 +4,10 @@
*/
import * as React from "react";
-import { WorkerScript } from "../../Netscript/WorkerScript";
-import { Money } from "../React/Money";
import { MoneyRate } from "../React/MoneyRate";
import { use } from "../Context";
import Typography from "@mui/material/Typography";
-import Box from "@mui/material/Box";
import { Theme } from "@mui/material/styles";
import makeStyles from "@mui/styles/makeStyles";
@@ -18,14 +15,8 @@ import createStyles from "@mui/styles/createStyles";
import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
-type IProps = {
- workerScripts: Map;
-};
-
const useStyles = makeStyles((theme: Theme) =>
createStyles({
cell: {
@@ -39,16 +30,11 @@ const useStyles = makeStyles((theme: Theme) =>
},
}),
);
-export function ScriptProduction(props: IProps): React.ReactElement {
+export function ScriptProduction(): React.ReactElement {
const player = use.Player();
const classes = useStyles();
const prodRateSinceLastAug = player.scriptProdSinceLastAug / (player.playtimeSinceLastAug / 1000);
- let onlineProduction = 0;
- for (const ws of props.workerScripts.values()) {
- onlineProduction += ws.scriptRef.onlineMoneyMade / ws.scriptRef.onlineRunningTime;
- }
-
return (
@@ -58,7 +44,7 @@ export function ScriptProduction(props: IProps): React.ReactElement {
-
+
diff --git a/src/ui/ActiveScripts/ServerAccordionContent.tsx b/src/ui/ActiveScripts/ServerAccordionContent.tsx
index 9fa3b4d9b..8deb63551 100644
--- a/src/ui/ActiveScripts/ServerAccordionContent.tsx
+++ b/src/ui/ActiveScripts/ServerAccordionContent.tsx
@@ -1,14 +1,10 @@
import React, { useState } from "react";
import { WorkerScript } from "../../Netscript/WorkerScript";
import { WorkerScriptAccordion } from "./WorkerScriptAccordion";
-import { AccordionButton } from "../React/AccordionButton";
-import Paper from "@mui/material/Paper";
import List from "@mui/material/List";
import TablePagination from "@mui/material/TablePagination";
import { TablePaginationActionsAll } from "../React/TablePaginationActionsAll";
-const pageSize = 20;
-
interface IProps {
workerScripts: WorkerScript[];
}
@@ -16,11 +12,11 @@ interface IProps {
export function ServerAccordionContent(props: IProps): React.ReactElement {
const [page, setPage] = useState(0);
const [rowsPerPage, setRowsPerPage] = useState(10);
- const handleChangePage = (event: unknown, newPage: number) => {
+ const handleChangePage = (event: unknown, newPage: number): void => {
setPage(newPage);
};
- const handleChangeRowsPerPage = (event: React.ChangeEvent) => {
+ const handleChangeRowsPerPage = (event: React.ChangeEvent): void => {
setRowsPerPage(parseInt(event.target.value, 10));
setPage(0);
};
diff --git a/src/ui/ActiveScripts/ServerAccordions.tsx b/src/ui/ActiveScripts/ServerAccordions.tsx
index ef2afc554..c8dd3cf0b 100644
--- a/src/ui/ActiveScripts/ServerAccordions.tsx
+++ b/src/ui/ActiveScripts/ServerAccordions.tsx
@@ -7,9 +7,6 @@ import React, { useState, useEffect } from "react";
import { ServerAccordion } from "./ServerAccordion";
import TextField from "@mui/material/TextField";
-import Typography from "@mui/material/Typography";
-import Paper from "@mui/material/Paper";
-import Box from "@mui/material/Box";
import List from "@mui/material/List";
import TablePagination from "@mui/material/TablePagination";
import { WorkerScript } from "../../Netscript/WorkerScript";
@@ -33,12 +30,6 @@ type IProps = {
workerScripts: Map;
};
-type IState = {
- rerenderFlag: boolean;
-};
-
-const subscriberId = "ActiveScriptsUI";
-
export function ServerAccordions(props: IProps): React.ReactElement {
const [filter, setFilter] = useState("");
const [page, setPage] = useState(0);
@@ -52,11 +43,11 @@ export function ServerAccordions(props: IProps): React.ReactElement {
return WorkerScriptStartStopEventEmitter.subscribe(rerender);
}, []);
- const handleChangePage = (event: unknown, newPage: number) => {
+ const handleChangePage = (event: unknown, newPage: number): void => {
setPage(newPage);
};
- const handleChangeRowsPerPage = (event: React.ChangeEvent) => {
+ const handleChangeRowsPerPage = (event: React.ChangeEvent): void => {
setRowsPerPage(parseInt(event.target.value, 10));
setPage(0);
};
diff --git a/src/ui/ActiveScripts/WorkerScriptAccordion.tsx b/src/ui/ActiveScripts/WorkerScriptAccordion.tsx
index 68bf7f428..39d8b8285 100644
--- a/src/ui/ActiveScripts/WorkerScriptAccordion.tsx
+++ b/src/ui/ActiveScripts/WorkerScriptAccordion.tsx
@@ -14,21 +14,15 @@ import Button from "@mui/material/Button";
import Box from "@mui/material/Box";
import Paper from "@mui/material/Paper";
import Typography from "@mui/material/Typography";
-import Accordion from "@mui/material/Accordion";
-import AccordionSummary from "@mui/material/AccordionSummary";
-import AccordionDetails from "@mui/material/AccordionDetails";
-import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
-import { AccordionButton } from "../React/AccordionButton";
import IconButton from "@mui/material/IconButton";
import DeleteIcon from "@mui/icons-material/Delete";
import ListItemButton from "@mui/material/ListItemButton";
import ListItemText from "@mui/material/ListItemText";
import makeStyles from "@mui/styles/makeStyles";
-import createStyles from "@mui/styles/createStyles";
import Collapse from "@mui/material/Collapse";
-import ExpandMore from "@mui/icons-material/ExpandMore";
import ExpandLess from "@mui/icons-material/ExpandLess";
+import ExpandMore from "@mui/icons-material/ExpandMore";
import { killWorkerScript } from "../../Netscript/killWorkerScript";
import { WorkerScript } from "../../Netscript/WorkerScript";
@@ -67,8 +61,6 @@ export function WorkerScriptAccordion(props: IProps): React.ReactElement {
// Calculations for script stats
const onlineMps = scriptRef.onlineMoneyMade / scriptRef.onlineRunningTime;
const onlineEps = scriptRef.onlineExpGained / scriptRef.onlineRunningTime;
- const offlineMps = scriptRef.offlineMoneyMade / scriptRef.offlineRunningTime;
- const offlineEps = scriptRef.offlineExpGained / scriptRef.offlineRunningTime;
return (
<>
diff --git a/src/ui/CharacterStats.tsx b/src/ui/CharacterStats.tsx
index 72f28cdae..92d3cfaa2 100644
--- a/src/ui/CharacterStats.tsx
+++ b/src/ui/CharacterStats.tsx
@@ -1,10 +1,6 @@
import React, { useState, useEffect } from "react";
import { numeralWrapper } from "../ui/numeralFormat";
-import { BitNodes } from "../BitNode/BitNode";
-import { IPlayer } from "../PersonObjects/IPlayer";
-import { MoneySourceTracker } from "../utils/MoneySourceTracker";
-import { dialogBoxCreate } from "../../utils/DialogBox";
import { convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFunctions";
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
import { SourceFileFlags } from "../SourceFile/SourceFileFlags";
@@ -13,6 +9,8 @@ import { HacknetServerConstants } from "../Hacknet/data/Constants";
import { StatsTable } from "./React/StatsTable";
import { Money } from "./React/Money";
import { use } from "./Context";
+import { MoneySourceTracker } from "../utils/MoneySourceTracker";
+import { BitNodes } from "../BitNode/BitNode";
import Typography from "@mui/material/Typography";
import Box from "@mui/material/Box";
diff --git a/src/ui/GameRoot.tsx b/src/ui/GameRoot.tsx
index 98d5026fb..177ea480e 100644
--- a/src/ui/GameRoot.tsx
+++ b/src/ui/GameRoot.tsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect, useRef } from "react";
+import React, { useState, useEffect } from "react";
import { IPlayer } from "../PersonObjects/IPlayer";
import { IEngine } from "../IEngine";
diff --git a/src/ui/InteractiveTutorial/InteractiveTutorialRoot.tsx b/src/ui/InteractiveTutorial/InteractiveTutorialRoot.tsx
index 486d342d8..f424d8fc5 100644
--- a/src/ui/InteractiveTutorial/InteractiveTutorialRoot.tsx
+++ b/src/ui/InteractiveTutorial/InteractiveTutorialRoot.tsx
@@ -7,11 +7,9 @@ import Button from "@mui/material/Button";
import ArrowForwardIos from "@mui/icons-material/ArrowForwardIos";
import ArrowBackIos from "@mui/icons-material/ArrowBackIos";
import { ITutorialEvents } from "./ITutorialEvents";
-import { use } from "../Context";
import { CopyableText } from "../React/CopyableText";
import ListItem from "@mui/material/ListItem";
-import TextField from "@mui/material/TextField";
import EqualizerIcon from "@mui/icons-material/Equalizer";
import LastPageIcon from "@mui/icons-material/LastPage";
import HelpIcon from "@mui/icons-material/Help";
diff --git a/src/ui/LoadingScreen.tsx b/src/ui/LoadingScreen.tsx
index bc9a70abd..63f555102 100644
--- a/src/ui/LoadingScreen.tsx
+++ b/src/ui/LoadingScreen.tsx
@@ -2,10 +2,6 @@ import React, { useState, useEffect } from "react";
import CircularProgress from "@mui/material/CircularProgress";
import Typography from "@mui/material/Typography";
import Grid from "@mui/material/Grid";
-import Paper from "@mui/material/Paper";
-import { Theme } from "@mui/material";
-import makeStyles from "@mui/styles/makeStyles";
-import createStyles from "@mui/styles/createStyles";
import { Terminal } from "../Terminal";
import { Engine } from "../engine";
@@ -14,24 +10,47 @@ import { GameRoot } from "./GameRoot";
import { CONSTANTS } from "../Constants";
-import { load } from "../engine";
+function load(cb: () => void): void {
+ if (!window.indexedDB) {
+ return Engine.load(""); // Will try to load from localstorage
+ }
-const useStyles = makeStyles((theme: Theme) =>
- createStyles({
- center: {
- position: "fixed",
- top: "50%",
- left: "50%",
- },
- }),
-);
+ /**
+ * DB is called bitburnerSave
+ * Object store is called savestring
+ * key for the Object store is called save
+ */
+ const indexedDbRequest: IDBOpenDBRequest = window.indexedDB.open("bitburnerSave", 1);
+
+ indexedDbRequest.onerror = function (this: IDBRequest, ev: Event) {
+ console.error("Error opening indexedDB: ");
+ console.error(ev);
+ Engine.load(""); // Try to load from localstorage
+ cb();
+ };
+
+ indexedDbRequest.onsuccess = function (this: IDBRequest) {
+ Engine.indexedDb = this.result;
+ const transaction = Engine.indexedDb.transaction(["savestring"]);
+ const objectStore = transaction.objectStore("savestring");
+ const request: IDBRequest = objectStore.get("save");
+ request.onerror = function (this: IDBRequest, ev: Event) {
+ console.error("Error in Database request to get savestring: " + ev);
+ Engine.load(""); // Try to load from localstorage
+ cb();
+ };
+
+ request.onsuccess = function (this: IDBRequest) {
+ Engine.load(this.result);
+ cb();
+ };
+ };
+}
export function LoadingScreen(): React.ReactElement {
- const classes = useStyles();
const [show, setShow] = useState(false);
const [loaded, setLoaded] = useState(false);
- console.log("renredering");
useEffect(() => {
const id = setTimeout(() => {
if (!loaded) setShow(true);
diff --git a/src/ui/React/CharacterOverview.tsx b/src/ui/React/CharacterOverview.tsx
index 8f0a331b7..f03e3c7b9 100644
--- a/src/ui/React/CharacterOverview.tsx
+++ b/src/ui/React/CharacterOverview.tsx
@@ -14,16 +14,11 @@ import Box from "@mui/material/Box";
import Typography from "@mui/material/Typography";
import Button from "@mui/material/Button";
import IconButton from "@mui/material/IconButton";
-import Collapse from "@mui/material/Collapse";
-import Fab from "@mui/material/Fab";
-import VisibilityOffIcon from "@mui/icons-material/VisibilityOff";
import SaveIcon from "@mui/icons-material/Save";
import { colors } from "./Theme";
import { Settings } from "../../Settings/Settings";
import { use } from "../Context";
-import { Page } from "../Router";
-import { Overview } from "./Overview";
interface IProps {
save: () => void;
@@ -115,7 +110,6 @@ const useStyles = makeStyles({
export function CharacterOverview({ save }: IProps): React.ReactElement {
const player = use.Player();
- const router = use.Router();
const setRerender = useState(false)[1];
diff --git a/src/ui/React/TablePaginationActionsAll.tsx b/src/ui/React/TablePaginationActionsAll.tsx
index 8064d05a4..ee9f4293f 100644
--- a/src/ui/React/TablePaginationActionsAll.tsx
+++ b/src/ui/React/TablePaginationActionsAll.tsx
@@ -1,14 +1,6 @@
import * as React from "react";
import { useTheme } from "@mui/material/styles";
import Box from "@mui/material/Box";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableFooter from "@mui/material/TableFooter";
-import TablePagination from "@mui/material/TablePagination";
-import TableRow from "@mui/material/TableRow";
-import Paper from "@mui/material/Paper";
import IconButton from "@mui/material/IconButton";
import FirstPageIcon from "@mui/icons-material/FirstPage";
import KeyboardArrowLeft from "@mui/icons-material/KeyboardArrowLeft";
@@ -22,23 +14,23 @@ interface TablePaginationActionsProps {
onPageChange: (event: React.MouseEvent, newPage: number) => void;
}
-export function TablePaginationActionsAll(props: TablePaginationActionsProps) {
+export function TablePaginationActionsAll(props: TablePaginationActionsProps): React.ReactElement {
const theme = useTheme();
const { count, page, rowsPerPage, onPageChange } = props;
- const handleFirstPageButtonClick = (event: React.MouseEvent) => {
+ const handleFirstPageButtonClick = (event: React.MouseEvent): void => {
onPageChange(event, 0);
};
- const handleBackButtonClick = (event: React.MouseEvent) => {
+ const handleBackButtonClick = (event: React.MouseEvent): void => {
onPageChange(event, page - 1);
};
- const handleNextButtonClick = (event: React.MouseEvent) => {
+ const handleNextButtonClick = (event: React.MouseEvent): void => {
onPageChange(event, page + 1);
};
- const handleLastPageButtonClick = (event: React.MouseEvent) => {
+ const handleLastPageButtonClick = (event: React.MouseEvent): void => {
onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));
};
diff --git a/webpack.config.js b/webpack.config.js
index e472ea7ae..90a344b76 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -12,9 +12,7 @@ module.exports = (env, argv) => {
const runInContainer = (env || {}).runInContainer === true;
const isDevelopment = argv.mode === "development";
const outputDirectory = isDevServer ? "dist-dev" : "dist";
- const entries = {};
- entries[`${outputDirectory}/engine`] = "./src/engine.jsx";
- entries[`${outputDirectory}/engineStyle`] = "./src/engineStyle.js";
+ const entry = "./src/index.tsx";
const statsConfig = {
builtAt: true,
@@ -134,7 +132,7 @@ module.exports = (env, argv) => {
isDevelopment && new ReactRefreshWebpackPlugin(),
].filter(Boolean),
target: "web",
- entry: entries,
+ entry: entry,
output: {
path: path.resolve(__dirname, "./"),
filename: "[name].bundle.js",