bitburner-src/src/DevMenu/ui/Servers.tsx

138 lines
4.1 KiB
TypeScript
Raw Normal View History

2021-09-14 02:37:35 +02:00
import React, { useState } from "react";
import Accordion from "@material-ui/core/Accordion";
import AccordionSummary from "@material-ui/core/AccordionSummary";
import AccordionDetails from "@material-ui/core/AccordionDetails";
import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
2021-09-14 04:27:43 +02:00
import Button from "@material-ui/core/Button";
import Select from "@material-ui/core/Select";
2021-09-14 02:37:35 +02:00
import { AllServers } from "../../Server/AllServers";
import { HacknetServer } from "../../Hacknet/HacknetServer";
import { GetServerByHostname } from "../../Server/ServerHelpers";
import MenuItem from "@material-ui/core/MenuItem";
2021-09-14 04:27:43 +02:00
export function Servers(): React.ReactElement {
2021-09-14 02:37:35 +02:00
const [server, setServer] = useState("home");
function setServerDropdown(event: React.ChangeEvent<{ value: unknown }>): void {
setServer(event.target.value as string);
}
function rootServer(): void {
const s = GetServerByHostname(server);
if (s === null) return;
if (s instanceof HacknetServer) return;
s.hasAdminRights = true;
s.sshPortOpen = true;
s.ftpPortOpen = true;
s.smtpPortOpen = true;
s.httpPortOpen = true;
s.sqlPortOpen = true;
s.openPortCount = 5;
}
function rootAllServers(): void {
for (const i in AllServers) {
const s = AllServers[i];
if (s instanceof HacknetServer) return;
s.hasAdminRights = true;
s.sshPortOpen = true;
s.ftpPortOpen = true;
s.smtpPortOpen = true;
s.httpPortOpen = true;
s.sqlPortOpen = true;
s.openPortCount = 5;
}
}
function minSecurity(): void {
const s = GetServerByHostname(server);
if (s === null) return;
if (s instanceof HacknetServer) return;
s.hackDifficulty = s.minDifficulty;
}
function minAllSecurity(): void {
for (const i in AllServers) {
const server = AllServers[i];
if (server instanceof HacknetServer) continue;
server.hackDifficulty = server.minDifficulty;
}
}
function maxMoney(): void {
const s = GetServerByHostname(server);
if (s === null) return;
if (s instanceof HacknetServer) return;
s.moneyAvailable = s.moneyMax;
}
function maxAllMoney(): void {
for (const i in AllServers) {
const server = AllServers[i];
if (server instanceof HacknetServer) continue;
server.moneyAvailable = server.moneyMax;
}
}
return (
<Accordion>
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
<h2>Servers</h2>
</AccordionSummary>
<AccordionDetails>
<table>
<tbody>
<tr>
<td>
<span className="text">Server:</span>
</td>
<td colSpan={2}>
<Select id="dev-servers-dropdown" className="dropdown" onChange={setServerDropdown} value={server}>
{Object.values(AllServers).map((server) => (
<MenuItem key={server.hostname} value={server.hostname}>
{server.hostname}
</MenuItem>
))}
</Select>
</td>
</tr>
<tr>
<td>
<span className="text">Root:</span>
</td>
<td>
<Button onClick={rootServer}>Root one</Button>
</td>
<td>
<Button onClick={rootAllServers}>Root all</Button>
</td>
</tr>
<tr>
<td>
<span className="text">Security:</span>
</td>
<td>
<Button onClick={minSecurity}>Min one</Button>
</td>
<td>
<Button onClick={minAllSecurity}>Min all</Button>
</td>
</tr>
<tr>
<td>
<span className="text">Money:</span>
</td>
<td>
<Button onClick={maxMoney}>Max one</Button>
</td>
<td>
<Button onClick={maxAllMoney}>Max all</Button>
</td>
</tr>
</tbody>
</table>
</AccordionDetails>
</Accordion>
);
}