/** * React Component for displaying a single WorkerScript's info as an * Accordion element */ import * as React from "react"; import { numeralWrapper } from "../numeralFormat"; 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 Collapse from "@mui/material/Collapse"; import ExpandMore from "@mui/icons-material/ExpandMore"; import ExpandLess from "@mui/icons-material/ExpandLess"; import { killWorkerScript } from "../../Netscript/killWorkerScript"; import { WorkerScript } from "../../Netscript/WorkerScript"; import { dialogBoxCreate } from "../../../utils/DialogBox"; import { logBoxCreate } from "../../../utils/LogBox"; import { convertTimeMsToTimeElapsedString } from "../../../utils/StringHelperFunctions"; import { arrayToString } from "../../../utils/helpers/arrayToString"; import { Money } from "../React/Money"; type IProps = { workerScript: WorkerScript; }; export function WorkerScriptAccordion(props: IProps): React.ReactElement { const [open, setOpen] = React.useState(false); const workerScript = props.workerScript; const scriptRef = workerScript.scriptRef; const logClickHandler = logBoxCreate.bind(null, scriptRef); const killScript = killWorkerScript.bind(null, scriptRef as any, scriptRef.server); function killScriptClickHandler(): void { killScript(); dialogBoxCreate("Killing script"); } // 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 ( <> setOpen((old) => !old)} component={Paper}> {props.workerScript.name}} /> {open ? : }
Threads: {numeralWrapper.formatThreads(props.workerScript.scriptRef.threads)}
Args: {arrayToString(props.workerScript.args)}
Online Time: {convertTimeMsToTimeElapsedString(scriptRef.onlineRunningTime * 1e3)}
Offline Time: {convertTimeMsToTimeElapsedString(scriptRef.offlineRunningTime * 1e3)}
            Total online production: 
          
{Array(26).join(" ") + numeralWrapper.formatExp(scriptRef.onlineExpGained) + " hacking exp"}
            Online production rate:  / second
          
{Array(25).join(" ") + numeralWrapper.formatExp(onlineEps) + " hacking exp / second"}
            Total offline production: 
          
{Array(27).join(" ") + numeralWrapper.formatExp(scriptRef.offlineExpGained) + " hacking exp"}
            Offline production rate:  / second
          
{Array(26).join(" ") + numeralWrapper.formatExp(offlineEps) + " hacking exp / second"}
); }