import React, { useState } from "react"; import { Tooltip, Typography, IconButton, InputLabel, MenuItem, FormControl, Accordion, AccordionSummary, AccordionDetails, } from "@mui/material"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import Select, { SelectChangeEvent } from "@mui/material/Select"; import DeleteIcon from "@mui/icons-material/Delete"; import { Adjuster } from "./Adjuster"; import { Player } from "@player"; import { CityName } from "../../Enums"; import { Skills as AllSkills } from "../../Bladeburner/Skills"; import { SkillNames } from "../../Bladeburner/data/SkillNames"; const bigNumber = 1e27; export function Bladeburner(): React.ReactElement { if (!Player.bladeburner) return <>; const bladeburner = Player.bladeburner; // Rank functions const modifyBladeburnerRank = (modify: number) => (rank: number) => bladeburner.changeRank(Player, rank * modify); const resetBladeburnerRank = () => { bladeburner.rank = 0; bladeburner.maxRank = 0; }; const addTonsBladeburnerRank = () => bladeburner.changeRank(Player, bigNumber); // Skill point functions const modifyBladeburnerSP = (modify: number) => (skillPoints: number) => { bladeburner.skillPoints += skillPoints * modify; }; const resetBladeburnerSP = () => { bladeburner.skillPoints = 0; bladeburner.totalSkillPoints = 0; }; const addTonsBladeburnerSP = () => (bladeburner.skillPoints = bigNumber); // Cycles functions const modifyBladeburnerCycles = (modify: number) => (cycles: number) => (bladeburner.storedCycles += cycles * modify); const resetBladeburnerCycles = () => (bladeburner.storedCycles = 0); const addTonsBladeburnerCycles = () => (bladeburner.storedCycles += bigNumber); // Chaos functions const wipeAllChaos = () => Object.values(CityName).forEach((city) => (bladeburner.cities[city].chaos = 0)); const wipeActiveCityChaos = () => (bladeburner.cities[bladeburner.city].chaos = 0); const addAllChaos = (modify: number) => (chaos: number) => { Object.values(CityName).forEach((city) => (bladeburner.cities[city].chaos += chaos * modify)); }; const addTonsAllChaos = () => { Object.values(CityName).forEach((city) => (bladeburner.cities[city].chaos += bigNumber)); }; // Skill functions const [skill, setSkill] = useState(SkillNames.BladesIntuition); function setSkillDropdown(event: SelectChangeEvent): void { setSkill(event.target.value); } const modifySkill = (modifier: number) => (levelchange: number) => { if (bladeburner.skills[AllSkills[skill].name] == null) resetSkill(); if (!isNaN(levelchange)) { bladeburner.skills[AllSkills[skill].name] += levelchange * modifier; bladeburner.updateSkillMultipliers(); } }; const addTonsOfSkill = () => { if (bladeburner.skills[AllSkills[skill].name] == null) resetSkill(); bladeburner.skills[AllSkills[skill].name] += bigNumber; bladeburner.updateSkillMultipliers(); }; const resetSkill = () => { bladeburner.skills[AllSkills[skill].name] = 0; bladeburner.updateSkillMultipliers(); }; // Contract functions const AllContracts = bladeburner.contracts; const [contractTarget, setContract] = useState(AllContracts.Tracking.name); function setContractDropdown(event: SelectChangeEvent): void { setContract(event.target.value); } const modifyContractLevel = (modifier: number) => (levelchange: number) => { if (!isNaN(levelchange)) { bladeburner.contracts[AllContracts[contractTarget].name].level += levelchange * modifier; const level = bladeburner.contracts[AllContracts[contractTarget].name].level; bladeburner.contracts[AllContracts[contractTarget].name].maxLevel = level; } }; const modifyContractCount = (modifier: number) => (countchange: number) => { if (!isNaN(countchange)) bladeburner.contracts[AllContracts[contractTarget].name].count += countchange * modifier; }; const modifyContractSuccesses = (modifier: number) => (successeschange: number) => { if (!isNaN(successeschange)) bladeburner.contracts[AllContracts[contractTarget].name].successes += successeschange * modifier; }; const addTonsOfContractLevel = () => { bladeburner.contracts[AllContracts[contractTarget].name].level += bigNumber; const level = bladeburner.contracts[AllContracts[contractTarget].name].level; bladeburner.contracts[AllContracts[contractTarget].name].maxLevel = level; }; const addTonsOfContractCount = () => (bladeburner.contracts[AllContracts[contractTarget].name].count += bigNumber); const addTonsOfContractSuccesses = () => (bladeburner.contracts[AllContracts[contractTarget].name].successes += bigNumber); const resetContractLevel = () => { bladeburner.contracts[AllContracts[contractTarget].name].level = 1; bladeburner.contracts[AllContracts[contractTarget].name].maxLevel = 1; }; const resetContractCount = () => (bladeburner.contracts[AllContracts[contractTarget].name].count = 0); const resetContractSuccesses = () => (bladeburner.contracts[AllContracts[contractTarget].name].successes = 0); // Operation functions const AllOperations = bladeburner.operations; const [operationTarget, setOperation] = useState(AllOperations.Investigation.name); function setOperationDropdown(event: SelectChangeEvent): void { setOperation(event.target.value); } const modifyOperationLevel = (modifier: number) => (levelchange: number) => { if (!isNaN(levelchange)) { bladeburner.operations[AllOperations[operationTarget].name].level += levelchange * modifier; const level = bladeburner.operations[AllOperations[operationTarget].name].level; bladeburner.operations[AllOperations[operationTarget].name].maxLevel = level; } }; const modifyOperationCount = (modifier: number) => (countchange: number) => { if (!isNaN(countchange)) bladeburner.operations[AllOperations[operationTarget].name].count += countchange * modifier; }; const modifyOperationSuccesses = (modifier: number) => (successeschange: number) => { if (!isNaN(successeschange)) bladeburner.operations[AllOperations[operationTarget].name].successes += successeschange * modifier; }; const addTonsOfOperationLevel = () => { bladeburner.operations[AllOperations[operationTarget].name].level += bigNumber; const level = bladeburner.operations[AllOperations[operationTarget].name].level; bladeburner.operations[AllOperations[operationTarget].name].maxLevel = level; }; const addTonsOfOperationCount = () => (bladeburner.operations[AllOperations[operationTarget].name].count += bigNumber); const addTonsOfOperationSuccesses = () => (bladeburner.operations[AllOperations[operationTarget].name].successes += bigNumber); const resetOperationLevel = () => { bladeburner.operations[AllOperations[operationTarget].name].level = 1; bladeburner.operations[AllOperations[operationTarget].name].maxLevel = 1; }; const resetOperationCount = () => (bladeburner.operations[AllOperations[operationTarget].name].count = 0); const resetOperationSuccesses = () => (bladeburner.operations[AllOperations[operationTarget].name].successes = 0); return ( }> Bladeburner
Rank:
SP:
Cycles:
Chaos:
Skills:
Level:
Contracts:
Level:
Successes:
Count:
Operations:
Level:
Successes:
Count:
); }