/** * React Component for displaying a single WorkerScript's info as an * Accordion element */ import * as React from "react"; import { numeralWrapper } from "../numeralFormat"; import { Accordion } from "../React/Accordion"; import { AccordionButton } from "../React/AccordionButton"; 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 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 ( {props.workerScript.name} } panelClass="active-scripts-script-panel" panelContent={ <>
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")}
} /> ) }