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 { 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 { formatNumber } from "../../utils/StringHelperFunctions"; import { calculateInfiltratorsRepReward, calculateSellInformationCashReward, calculateTradeInformationRepReward, } from "../formulas/victory"; import { inviteToFaction } from "../../Faction/FactionHelpers"; 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 soa = Factions[FactionNames.ShadowsOfAnarchy]; const repGain = calculateTradeInformationRepReward(player, props.Reward, props.MaxLevel, props.StartingDifficulty); const moneyGain = calculateSellInformationCashReward(player, props.Reward, props.MaxLevel, props.StartingDifficulty); const infiltrationRepGain = calculateInfiltratorsRepReward(player, soa, props.StartingDifficulty); const isMemberOfInfiltrators = player.factions.includes(FactionNames.ShadowsOfAnarchy); 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 { 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. ); }