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

284 lines
8.1 KiB
TypeScript
Raw Normal View History

2021-09-14 02:37:35 +02:00
import React from "react";
2021-09-17 01:23:03 +02:00
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";
2021-09-14 02:37:35 +02:00
2021-10-01 02:06:40 +02:00
import Typography from "@mui/material/Typography";
2021-09-17 01:23:03 +02:00
import Button from "@mui/material/Button";
2021-09-14 02:37:35 +02:00
import { Adjuster } from "./Adjuster";
2022-09-06 15:07:12 +02:00
import { Player } from "../../Player";
2021-09-14 02:37:35 +02:00
const bigNumber = 1e27;
2022-09-06 15:07:12 +02:00
export function Stats(): React.ReactElement {
2021-09-14 02:37:35 +02:00
function modifyExp(stat: string, modifier: number) {
return function (exp: number) {
switch (stat) {
case "hacking":
if (exp) {
2022-09-06 15:07:12 +02:00
Player.gainHackingExp(exp * modifier);
2021-09-14 02:37:35 +02:00
}
break;
case "strength":
if (exp) {
2022-09-06 15:07:12 +02:00
Player.gainStrengthExp(exp * modifier);
2021-09-14 02:37:35 +02:00
}
break;
case "defense":
if (exp) {
2022-09-06 15:07:12 +02:00
Player.gainDefenseExp(exp * modifier);
2021-09-14 02:37:35 +02:00
}
break;
case "dexterity":
if (exp) {
2022-09-06 15:07:12 +02:00
Player.gainDexterityExp(exp * modifier);
2021-09-14 02:37:35 +02:00
}
break;
case "agility":
if (exp) {
2022-09-06 15:07:12 +02:00
Player.gainAgilityExp(exp * modifier);
2021-09-14 02:37:35 +02:00
}
break;
case "charisma":
if (exp) {
2022-09-06 15:07:12 +02:00
Player.gainCharismaExp(exp * modifier);
2021-09-14 02:37:35 +02:00
}
break;
case "intelligence":
if (exp) {
2022-09-06 15:07:12 +02:00
Player.gainIntelligenceExp(exp * modifier);
2021-09-14 02:37:35 +02:00
}
break;
}
2022-09-06 15:07:12 +02:00
Player.updateSkillLevels();
2021-09-14 02:37:35 +02:00
};
}
function modifyKarma(modifier: number) {
return function (amt: number) {
2022-09-06 15:07:12 +02:00
Player.karma += amt * modifier;
2021-09-14 02:37:35 +02:00
};
}
function tonsOfExp(): void {
2022-09-06 15:07:12 +02:00
Player.gainHackingExp(bigNumber);
Player.gainStrengthExp(bigNumber);
Player.gainDefenseExp(bigNumber);
Player.gainDexterityExp(bigNumber);
Player.gainAgilityExp(bigNumber);
Player.gainCharismaExp(bigNumber);
Player.gainIntelligenceExp(bigNumber);
Player.updateSkillLevels();
2021-09-14 02:37:35 +02:00
}
function resetAllExp(): void {
2022-09-06 15:07:12 +02:00
Player.exp.hacking = 0;
Player.exp.strength = 0;
Player.exp.defense = 0;
Player.exp.dexterity = 0;
Player.exp.agility = 0;
Player.exp.charisma = 0;
Player.exp.intelligence = 0;
Player.updateSkillLevels();
2021-09-14 02:37:35 +02:00
}
function resetExperience(stat: string): () => void {
return function () {
switch (stat) {
case "hacking":
2022-09-06 15:07:12 +02:00
Player.exp.hacking = 0;
2021-09-14 02:37:35 +02:00
break;
case "strength":
2022-09-06 15:07:12 +02:00
Player.exp.strength = 0;
2021-09-14 02:37:35 +02:00
break;
case "defense":
2022-09-06 15:07:12 +02:00
Player.exp.defense = 0;
2021-09-14 02:37:35 +02:00
break;
case "dexterity":
2022-09-06 15:07:12 +02:00
Player.exp.dexterity = 0;
2021-09-14 02:37:35 +02:00
break;
case "agility":
2022-09-06 15:07:12 +02:00
Player.exp.agility = 0;
2021-09-14 02:37:35 +02:00
break;
case "charisma":
2022-09-06 15:07:12 +02:00
Player.exp.charisma = 0;
2021-09-14 02:37:35 +02:00
break;
case "intelligence":
2022-09-06 15:07:12 +02:00
Player.exp.intelligence = 0;
2021-09-14 02:37:35 +02:00
break;
}
2022-09-06 15:07:12 +02:00
Player.updateSkillLevels();
2021-09-14 02:37:35 +02:00
};
}
function resetKarma(): () => void {
return function () {
2022-09-06 15:07:12 +02:00
Player.karma = 0;
2021-09-14 02:37:35 +02:00
};
}
function enableIntelligence(): void {
2022-09-06 15:07:12 +02:00
if (Player.skills.intelligence === 0) {
Player.skills.intelligence = 1;
Player.updateSkillLevels();
2021-09-14 02:37:35 +02:00
}
}
function disableIntelligence(): void {
2022-09-06 15:07:12 +02:00
Player.exp.intelligence = 0;
Player.skills.intelligence = 0;
Player.updateSkillLevels();
2021-09-14 02:37:35 +02:00
}
return (
2021-09-18 03:30:02 +02:00
<Accordion TransitionProps={{ unmountOnExit: true }}>
2021-09-14 02:37:35 +02:00
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
2021-10-01 22:22:33 +02:00
<Typography>Experience / Stats</Typography>
2021-09-14 02:37:35 +02:00
</AccordionSummary>
<AccordionDetails>
<table>
<tbody>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>All:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Button onClick={tonsOfExp}>Tons of exp</Button>
<Button onClick={resetAllExp}>Reset</Button>
</td>
</tr>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>Hacking:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Adjuster
label="hacking"
placeholder="exp"
tons={() => modifyExp("hacking", 1)(bigNumber)}
add={modifyExp("hacking", 1)}
subtract={modifyExp("hacking", -1)}
reset={resetExperience("hacking")}
/>
</td>
</tr>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>Strength:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Adjuster
label="strength"
placeholder="exp"
tons={() => modifyExp("strength", 1)(bigNumber)}
add={modifyExp("strength", 1)}
subtract={modifyExp("strength", -1)}
reset={resetExperience("strength")}
/>
</td>
</tr>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>Defense:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Adjuster
label="defense"
placeholder="exp"
tons={() => modifyExp("defense", 1)(bigNumber)}
add={modifyExp("defense", 1)}
subtract={modifyExp("defense", -1)}
reset={resetExperience("defense")}
/>
</td>
</tr>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>Dexterity:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Adjuster
label="dexterity"
placeholder="exp"
tons={() => modifyExp("dexterity", 1)(bigNumber)}
add={modifyExp("dexterity", 1)}
subtract={modifyExp("dexterity", -1)}
reset={resetExperience("dexterity")}
/>
</td>
</tr>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>Agility:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Adjuster
label="agility"
placeholder="exp"
tons={() => modifyExp("agility", 1)(bigNumber)}
add={modifyExp("agility", 1)}
subtract={modifyExp("agility", -1)}
reset={resetExperience("agility")}
/>
</td>
</tr>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>Charisma:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Adjuster
label="charisma"
placeholder="exp"
tons={() => modifyExp("charisma", 1)(bigNumber)}
add={modifyExp("charisma", 1)}
subtract={modifyExp("charisma", -1)}
reset={resetExperience("charisma")}
/>
</td>
</tr>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>Intelligence:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Adjuster
label="intelligence"
placeholder="exp"
tons={() => modifyExp("intelligence", 1)(bigNumber)}
add={modifyExp("intelligence", 1)}
subtract={modifyExp("intelligence", -1)}
reset={resetExperience("intelligence")}
/>
</td>
<td>
<Button onClick={enableIntelligence}>Enable</Button>
</td>
<td>
<Button onClick={disableIntelligence}>Disable</Button>
</td>
</tr>
<tr>
<td>
2021-10-01 02:06:40 +02:00
<Typography>Karma:</Typography>
2021-09-14 02:37:35 +02:00
</td>
<td>
<Adjuster
label="karma"
placeholder="amt"
tons={() => modifyExp("intelligence", 1)(100000)}
add={modifyKarma(1)}
subtract={modifyKarma(-1)}
reset={resetKarma()}
/>
</td>
</tr>
</tbody>
</table>
</AccordionDetails>
</Accordion>
);
}