2019-04-01 11:23:25 +02:00
|
|
|
/**
|
|
|
|
* React Subcomponent for displaying a location's UI, when that location is a university
|
|
|
|
*
|
|
|
|
* This subcomponent renders all of the buttons for studying/taking courses
|
|
|
|
*/
|
|
|
|
import * as React from "react";
|
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
import { Location } from "../Location";
|
2019-04-01 11:23:25 +02:00
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
import { CONSTANTS } from "../../Constants";
|
|
|
|
import { getServer } from "../../Server/ServerHelpers";
|
|
|
|
import { Server } from "../../Server/Server";
|
|
|
|
import { SpecialServerIps } from "../../Server/SpecialServerIps";
|
2019-04-01 11:23:25 +02:00
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
import { StdButton } from "../../ui/React/StdButton";
|
|
|
|
import { Money } from "../../ui/React/Money";
|
2021-09-18 01:43:08 +02:00
|
|
|
import { use } from "../../ui/Context";
|
2019-04-01 11:23:25 +02:00
|
|
|
|
|
|
|
type IProps = {
|
2021-09-05 01:09:30 +02:00
|
|
|
loc: Location;
|
|
|
|
};
|
2019-04-01 11:23:25 +02:00
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
export function UniversityLocation(props: IProps): React.ReactElement {
|
|
|
|
const player = use.Player();
|
|
|
|
const router = use.Router();
|
2021-09-05 01:09:30 +02:00
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
function calculateCost(): number {
|
|
|
|
const ip = SpecialServerIps.getIp(props.loc.name);
|
2021-09-05 01:09:30 +02:00
|
|
|
const server = getServer(ip);
|
2021-09-18 01:43:08 +02:00
|
|
|
if (server == null || !server.hasOwnProperty("backdoorInstalled")) return props.loc.costMult;
|
2021-09-05 01:09:30 +02:00
|
|
|
const discount = (server as Server).backdoorInstalled ? 0.9 : 1;
|
2021-09-18 01:43:08 +02:00
|
|
|
return props.loc.costMult * discount;
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
function take(stat: string): void {
|
|
|
|
const loc = props.loc;
|
|
|
|
player.startClass(calculateCost(), loc.expMult, stat);
|
|
|
|
router.toWork();
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
function study(): void {
|
|
|
|
take(CONSTANTS.ClassStudyComputerScience);
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
function dataStructures(): void {
|
|
|
|
take(CONSTANTS.ClassDataStructures);
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
function networks(): void {
|
|
|
|
take(CONSTANTS.ClassNetworks);
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
function algorithms(): void {
|
|
|
|
take(CONSTANTS.ClassAlgorithms);
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
function management(): void {
|
|
|
|
take(CONSTANTS.ClassManagement);
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
function leadership(): void {
|
|
|
|
take(CONSTANTS.ClassLeadership);
|
2021-09-05 01:09:30 +02:00
|
|
|
}
|
|
|
|
|
2021-09-18 01:43:08 +02:00
|
|
|
const costMult: number = calculateCost();
|
|
|
|
|
|
|
|
const dataStructuresCost = CONSTANTS.ClassDataStructuresBaseCost * costMult;
|
|
|
|
const networksCost = CONSTANTS.ClassNetworksBaseCost * costMult;
|
|
|
|
const algorithmsCost = CONSTANTS.ClassAlgorithmsBaseCost * costMult;
|
|
|
|
const managementCost = CONSTANTS.ClassManagementBaseCost * costMult;
|
|
|
|
const leadershipCost = CONSTANTS.ClassLeadershipBaseCost * costMult;
|
|
|
|
|
|
|
|
const earnHackingExpTooltip = `Gain hacking experience!`;
|
|
|
|
const earnCharismaExpTooltip = `Gain charisma experience!`;
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
<StdButton
|
|
|
|
onClick={study}
|
|
|
|
style={{ display: "block" }}
|
|
|
|
text={`Study Computer Science (free)`}
|
|
|
|
tooltip={earnHackingExpTooltip}
|
|
|
|
/>
|
|
|
|
<StdButton
|
|
|
|
onClick={dataStructures}
|
|
|
|
style={{ display: "block" }}
|
|
|
|
text={
|
|
|
|
<>
|
|
|
|
Take Data Structures course (
|
|
|
|
<Money money={dataStructuresCost} player={player} /> / sec)
|
|
|
|
</>
|
|
|
|
}
|
|
|
|
tooltip={earnHackingExpTooltip}
|
|
|
|
/>
|
|
|
|
<StdButton
|
|
|
|
onClick={networks}
|
|
|
|
style={{ display: "block" }}
|
|
|
|
text={
|
|
|
|
<>
|
|
|
|
Take Networks course (
|
|
|
|
<Money money={networksCost} player={player} /> / sec)
|
|
|
|
</>
|
|
|
|
}
|
|
|
|
tooltip={earnHackingExpTooltip}
|
|
|
|
/>
|
|
|
|
<StdButton
|
|
|
|
onClick={algorithms}
|
|
|
|
style={{ display: "block" }}
|
|
|
|
text={
|
|
|
|
<>
|
|
|
|
Take Algorithms course (
|
|
|
|
<Money money={algorithmsCost} player={player} /> / sec)
|
|
|
|
</>
|
|
|
|
}
|
|
|
|
tooltip={earnHackingExpTooltip}
|
|
|
|
/>
|
|
|
|
<StdButton
|
|
|
|
onClick={management}
|
|
|
|
style={{ display: "block" }}
|
|
|
|
text={
|
|
|
|
<>
|
|
|
|
Take Management course (
|
|
|
|
<Money money={managementCost} player={player} /> / sec)
|
|
|
|
</>
|
|
|
|
}
|
|
|
|
tooltip={earnCharismaExpTooltip}
|
|
|
|
/>
|
|
|
|
<StdButton
|
|
|
|
onClick={leadership}
|
|
|
|
style={{ display: "block" }}
|
|
|
|
text={
|
|
|
|
<>
|
|
|
|
Take Leadership course (
|
|
|
|
<Money money={leadershipCost} player={player} /> / sec)
|
|
|
|
</>
|
|
|
|
}
|
|
|
|
tooltip={earnCharismaExpTooltip}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
);
|
2019-04-01 11:23:25 +02:00
|
|
|
}
|