import { Factions } from "../../Faction/Factions"; import React, { useState } from "react"; import Grid from "@mui/material/Grid"; import { Money } from "../../ui/React/Money"; import { Reputation } from "../../ui/React/Reputation"; import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers"; import { use } from "../../ui/Context"; import Typography from "@mui/material/Typography"; import Button from "@mui/material/Button"; import MenuItem from "@mui/material/MenuItem"; import Select, { SelectChangeEvent } from "@mui/material/Select"; import { FactionNames } from "../../Faction/data/FactionNames"; import { AugmentationNames } from "../../Augmentation/data/AugmentationNames"; interface IProps { StartingDifficulty: number; Difficulty: number; Reward: number; MaxLevel: number; } export function Victory(props: IProps): React.ReactElement { const player = use.Player(); const router = use.Router(); const [faction, setFaction] = useState("none"); function quitInfiltration(): void { handleInfiltrators(); router.toCity(); } const levelBonus = props.MaxLevel * Math.pow(1.01, props.MaxLevel); const repGain = Math.pow(props.Reward + 1, 1.1) * Math.pow(props.StartingDifficulty, 1.2) * 30 * levelBonus * BitNodeMultipliers.InfiltrationRep; const bionicFingersRepGain = player.hasAugmentation(AugmentationNames.BionicFingers, true) ? 5 : 0; const CorporationManagementImplantRepMultiplier = player.hasAugmentation( AugmentationNames.CorporationManagementImplant, true, ) ? 2.5 : 1; const infiltratorsRepGain = (5 + bionicFingersRepGain) * CorporationManagementImplantRepMultiplier; const infiltratorFaction = Factions[FactionNames.Infiltrators]; const isMemberOfInfiltrators = infiltratorFaction && infiltratorFaction.isMember; const moneyGain = Math.pow(props.Reward + 1, 2) * Math.pow(props.StartingDifficulty, 3) * 3e3 * levelBonus * BitNodeMultipliers.InfiltrationMoney; function sell(): void { handleInfiltrators(); player.gainMoney(moneyGain, "infiltration"); quitInfiltration(); } function trade(): void { handleInfiltrators(); if (faction === "none") return; Factions[faction].playerReputation += repGain; quitInfiltration(); } function changeDropdown(event: SelectChangeEvent): void { setFaction(event.target.value); } function handleInfiltrators(): void { player.hasCompletedAnInfiltration = true; if (isMemberOfInfiltrators) { infiltratorFaction.playerReputation += infiltratorsRepGain; } } return ( <> Infiltration successful! You{" "} {isMemberOfInfiltrators ? ( <> have gained {infiltratorsRepGain} rep for {FactionNames.Infiltrators} and ) : ( <> )} can trade the confidential information you found for money or reputation. ); }