import React, { useEffect, useState } from "react"; import { Accordion, AccordionSummary, AccordionDetails, Button, MenuItem, Select, SelectChangeEvent, TextField, Tooltip, Typography, } from "@mui/material"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import { Player } from "@player"; import { FactionName } from "@enums"; import { Money } from "../../ui/React/Money"; import { Router } from "../../ui/GameRoot"; import { Page } from "../../ui/Router"; import { Bladeburner } from "../../Bladeburner/Bladeburner"; import { GangConstants } from "../../Gang/data/Constants"; import { checkForMessagesToSend } from "../../Message/MessageHelpers"; import { ThemeEvents } from "../../Themes/ui/Theme"; import { getEnumHelper } from "../../utils/EnumHelper"; export function General(): React.ReactElement { const [error, setError] = useState(false); const [corporationName, setCorporationName] = useState(""); const [gangFaction, setGangFaction] = useState(FactionName.SlumSnakes); const [devMoney, setDevMoney] = useState(0); const [hash, setHash] = useState(Player.hashManager.hashes); const [homeRam, setHomeRam] = useState(Player.getHomeComputer().maxRam); // Money functions const moneyValues = [1e6, 1e9, 1e12, 1e15, Infinity]; const addCustomMoney = () => !Number.isNaN(devMoney) && Player.gainMoney(devMoney, "other"); const addMoney = (n: number) => () => Player.gainMoney(n, "other"); const setMoney = (n: number) => () => (Player.money = Number(n)); const addHashes = () => (Player.hashManager.hashes += hash); // Ram functions const doubleRam = () => { Player.getHomeComputer().maxRam *= 2; setHomeRam(homeRam * 2); }; const setRam = (gb: number) => () => { Player.getHomeComputer().maxRam = gb; setHomeRam(gb); }; // Node-clearing functions const quickB1tFlum3 = () => Router.toPage(Page.BitVerse, { flume: true, quick: true }); const b1tflum3 = () => Router.toPage(Page.BitVerse, { flume: true, quick: false }); const quickHackW0r1dD43m0n = () => Router.toPage(Page.BitVerse, { flume: false, quick: true }); const hackW0r1dD43m0n = () => Router.toPage(Page.BitVerse, { flume: false, quick: false }); // Corp functions const createCorporation = () => { Player.startCorporation(corporationName, false); // Rerender so the corp menu option will show up immediately on the devmenu page selection ThemeEvents.emit(); }; const destroyCorporation = () => { Player.corporation = null; // Rerender so the corp menu option will be removed immediately on the devmenu page selection ThemeEvents.emit(); }; // Blade functions const joinBladeburner = () => { Player.bladeburner = new Bladeburner(); // Rerender so the blade menu option will show up immediately on the devmenu page selection ThemeEvents.emit(); }; const leaveBladeburner = () => { Player.bladeburner = null; // Rerender so the blade menu option will be removed immediately on the devmenu page selection ThemeEvents.emit(); }; // Gang functions const startGang = () => { const isHacking = gangFaction === FactionName.NiteSec || gangFaction === FactionName.TheBlackHand; Player.startGang(gangFaction, isHacking); // Rerender so the gang menu option will show up immediately on the devmenu page selection ThemeEvents.emit(); }; const stopGang = () => { Player.gang = null; // Rerender so the gang menu option will be removed immediately on the devmenu page selection ThemeEvents.emit(); }; const setGangFactionDropdown = (event: SelectChangeEvent) => { // Todo: Make this a more specific check when a GangName enumlike is added if (!getEnumHelper("FactionName").isMember(event.target.value)) return; setGangFaction(event.target.value); }; // Misc functions const checkMessages = () => checkForMessagesToSend(); useEffect(() => { if (error) throw new ReferenceError("Manually thrown error"); }, [error]); // Component css const smallButtonStyle = { width: "12rem" }; const largeButtonStyle = { width: "20rem" }; const noArrowsNumberField = { "& input::-webkit-outer-spin-button, & input::-webkit-inner-spin-button": { display: "none", }, "& input[type=number]": { MozAppearance: "textfield", }, }; return ( }> General {moneyValues.map((value) => ( ))}
Add Money setDevMoney(parseFloat(x.target.value))} sx={noArrowsNumberField} />
setHash(parseFloat(x.target.value))} sx={noArrowsNumberField} />
Set Home Server RAM
Corporation: {Player.corporation ? ( ) : ( <> setCorporationName(x.target.value)} />
)}
Gang Faction: {Player.gang ? ( ) : ( <>
)}
Bladeburner: {Player.bladeburner ? ( ) : ( )}
General:

); }