import { Box, Button, MenuItem, Paper, Select, SelectChangeEvent, Typography } from "@mui/material"; import React, { useState } from "react"; import { FactionNames } from "../../Faction/data/FactionNames"; import { inviteToFaction } from "../../Faction/FactionHelpers"; import { Factions } from "../../Faction/Factions"; import { Router } from "../../ui/GameRoot"; import { Player } from "@player"; import { Money } from "../../ui/React/Money"; import { Reputation } from "../../ui/React/Reputation"; import { formatNumber } from "../../utils/StringHelperFunctions"; import { calculateInfiltratorsRepReward, calculateSellInformationCashReward, calculateTradeInformationRepReward, } from "../formulas/victory"; interface IProps { StartingDifficulty: number; Difficulty: number; Reward: number; MaxLevel: number; } export function Victory(props: IProps): React.ReactElement { const [faction, setFaction] = useState("none"); function quitInfiltration(): void { handleInfiltrators(); Router.toCity(); } const soa = Factions[FactionNames.ShadowsOfAnarchy]; const repGain = calculateTradeInformationRepReward(props.Reward, props.MaxLevel, props.StartingDifficulty); const moneyGain = calculateSellInformationCashReward(props.Reward, props.MaxLevel, props.StartingDifficulty); const infiltrationRepGain = calculateInfiltratorsRepReward(soa, props.StartingDifficulty); const isMemberOfInfiltrators = Player.factions.includes(FactionNames.ShadowsOfAnarchy); function sell(): void { handleInfiltrators(); Player.gainMoney(moneyGain, "infiltration"); quitInfiltration(); } function trade(): void { if (faction === "none") return; handleInfiltrators(); Factions[faction].playerReputation += repGain; quitInfiltration(); } function changeDropdown(event: SelectChangeEvent): void { setFaction(event.target.value); } function handleInfiltrators(): void { inviteToFaction(Factions[FactionNames.ShadowsOfAnarchy]); if (isMemberOfInfiltrators) { soa.playerReputation += infiltrationRepGain; } } return ( Infiltration successful! You{" "} {isMemberOfInfiltrators ? ( <> have gained {formatNumber(infiltrationRepGain, 2)} rep for {FactionNames.ShadowsOfAnarchy} and{" "} ) : ( <> )} can trade the confidential information you found for money or reputation. ); }