2019-04-01 11:23:25 +02:00
|
|
|
/**
|
|
|
|
* Interface for an object that represents the player (PlayerObject)
|
|
|
|
* Used because at the time of implementation, the PlayerObject
|
|
|
|
* cant be converted to TypeScript.
|
|
|
|
*/
|
2019-01-17 16:40:43 +01:00
|
|
|
import { Sleeve } from "./Sleeve/Sleeve";
|
|
|
|
|
|
|
|
import { IMap } from "../types";
|
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
import { IPlayerOwnedAugmentation } from "../Augmentation/PlayerOwnedAugmentation";
|
2021-09-13 00:03:07 +02:00
|
|
|
import { Augmentation } from "../Augmentation/Augmentation";
|
2021-09-05 01:09:30 +02:00
|
|
|
import { Company } from "../Company/Company";
|
|
|
|
import { CompanyPosition } from "../Company/CompanyPosition";
|
|
|
|
import { CityName } from "../Locations/data/CityNames";
|
|
|
|
import { Faction } from "../Faction/Faction";
|
|
|
|
import { HashManager } from "../Hacknet/HashManager";
|
|
|
|
import { HacknetNode } from "../Hacknet/HacknetNode";
|
|
|
|
import { LocationName } from "../Locations/data/LocationNames";
|
|
|
|
import { Server } from "../Server/Server";
|
2021-10-07 22:04:04 +02:00
|
|
|
import { BaseServer } from "../Server/BaseServer";
|
2021-09-05 01:09:30 +02:00
|
|
|
import { IPlayerOwnedSourceFile } from "../SourceFile/PlayerOwnedSourceFile";
|
|
|
|
import { MoneySourceTracker } from "../utils/MoneySourceTracker";
|
|
|
|
import { Exploit } from "../Exploits/Exploit";
|
|
|
|
import { ICorporation } from "../Corporation/ICorporation";
|
2021-09-10 22:57:05 +02:00
|
|
|
import { IGang } from "../Gang/IGang";
|
|
|
|
import { IBladeburner } from "../Bladeburner/IBladeburner";
|
2021-09-16 01:50:44 +02:00
|
|
|
import { ICodingContractReward } from "../CodingContracts";
|
2021-09-24 00:47:43 +02:00
|
|
|
import { HacknetServer } from "../Hacknet/HacknetServer";
|
2021-12-17 15:35:54 +01:00
|
|
|
import { ISkillProgress } from "./formulas/skill";
|
2022-01-06 13:04:03 +01:00
|
|
|
import { PlayerAchievement } from "../Achievements/Achievements";
|
2022-04-14 17:40:59 +02:00
|
|
|
import { IPerson } from "./IPerson";
|
2022-07-07 08:00:23 +02:00
|
|
|
import { Work } from "src/Work/Work";
|
2022-07-15 00:43:33 +02:00
|
|
|
import { Multipliers } from "./Multipliers";
|
2019-01-17 16:40:43 +01:00
|
|
|
|
2022-04-14 17:40:59 +02:00
|
|
|
export interface IPlayer extends IPerson {
|
2021-09-05 01:09:30 +02:00
|
|
|
bitNodeN: number;
|
|
|
|
city: CityName;
|
2021-09-24 00:47:43 +02:00
|
|
|
corporation: ICorporation | null;
|
|
|
|
gang: IGang | null;
|
|
|
|
bladeburner: IBladeburner | null;
|
2021-09-05 01:09:30 +02:00
|
|
|
currentServer: string;
|
|
|
|
factions: string[];
|
|
|
|
factionInvitations: string[];
|
|
|
|
hacknetNodes: (HacknetNode | string)[]; // HacknetNode object or IP of Hacknet Server
|
|
|
|
has4SData: boolean;
|
|
|
|
has4SDataTixApi: boolean;
|
|
|
|
hashManager: HashManager;
|
|
|
|
hasTixApiAccess: boolean;
|
|
|
|
hasWseAccount: boolean;
|
|
|
|
hp: number;
|
|
|
|
jobs: IMap<string>;
|
|
|
|
karma: number;
|
|
|
|
numPeopleKilled: number;
|
|
|
|
location: LocationName;
|
|
|
|
max_hp: number;
|
2021-11-12 03:35:26 +01:00
|
|
|
readonly money: number;
|
2021-09-05 01:09:30 +02:00
|
|
|
moneySourceA: MoneySourceTracker;
|
|
|
|
moneySourceB: MoneySourceTracker;
|
|
|
|
playtimeSinceLastAug: number;
|
|
|
|
playtimeSinceLastBitnode: number;
|
|
|
|
purchasedServers: any[];
|
|
|
|
queuedAugmentations: IPlayerOwnedAugmentation[];
|
|
|
|
scriptProdSinceLastAug: number;
|
|
|
|
sleeves: Sleeve[];
|
|
|
|
sleevesFromCovenant: number;
|
|
|
|
sourceFiles: IPlayerOwnedSourceFile[];
|
|
|
|
exploits: Exploit[];
|
2022-01-06 13:04:03 +01:00
|
|
|
achievements: PlayerAchievement[];
|
2022-01-15 12:26:58 +01:00
|
|
|
terminalCommandHistory: string[];
|
2021-09-10 22:57:05 +02:00
|
|
|
lastUpdate: number;
|
2021-09-05 01:09:30 +02:00
|
|
|
totalPlaytime: number;
|
2019-01-17 16:40:43 +01:00
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
// Stats
|
2021-11-05 22:12:52 +01:00
|
|
|
hacking: number;
|
2021-09-05 01:09:30 +02:00
|
|
|
strength: number;
|
|
|
|
defense: number;
|
|
|
|
dexterity: number;
|
|
|
|
agility: number;
|
|
|
|
charisma: number;
|
|
|
|
intelligence: number;
|
2019-01-17 16:40:43 +01:00
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
// Experience
|
|
|
|
hacking_exp: number;
|
|
|
|
strength_exp: number;
|
|
|
|
defense_exp: number;
|
|
|
|
dexterity_exp: number;
|
|
|
|
agility_exp: number;
|
|
|
|
charisma_exp: number;
|
2021-09-10 22:57:05 +02:00
|
|
|
intelligence_exp: number;
|
2019-01-17 16:40:43 +01:00
|
|
|
|
2022-07-15 00:43:33 +02:00
|
|
|
mults: Multipliers;
|
2019-01-17 16:40:43 +01:00
|
|
|
|
2022-07-07 08:00:23 +02:00
|
|
|
currentWork: Work | null;
|
2021-09-13 00:03:07 +02:00
|
|
|
focus: boolean;
|
|
|
|
|
2022-03-29 20:09:17 +02:00
|
|
|
entropy: number;
|
2022-03-19 19:15:31 +01:00
|
|
|
|
2021-09-05 01:09:30 +02:00
|
|
|
// Methods
|
2022-07-14 23:43:08 +02:00
|
|
|
init: () => void;
|
|
|
|
startWork(w: Work): void;
|
|
|
|
processWork(cycles: number): void;
|
|
|
|
finishWork(cancelled: boolean): void;
|
2021-09-24 00:47:43 +02:00
|
|
|
applyForAgentJob(sing?: boolean): boolean;
|
|
|
|
applyForBusinessConsultantJob(sing?: boolean): boolean;
|
|
|
|
applyForBusinessJob(sing?: boolean): boolean;
|
|
|
|
applyForEmployeeJob(sing?: boolean): boolean;
|
|
|
|
applyForItJob(sing?: boolean): boolean;
|
|
|
|
applyForJob(entryPosType: CompanyPosition, sing?: boolean): boolean;
|
|
|
|
applyForNetworkEngineerJob(sing?: boolean): boolean;
|
|
|
|
applyForPartTimeEmployeeJob(sing?: boolean): boolean;
|
|
|
|
applyForPartTimeWaiterJob(sing?: boolean): boolean;
|
|
|
|
applyForSecurityEngineerJob(sing?: boolean): boolean;
|
|
|
|
applyForSecurityJob(sing?: boolean): boolean;
|
|
|
|
applyForSoftwareConsultantJob(sing?: boolean): boolean;
|
|
|
|
applyForSoftwareJob(sing?: boolean): boolean;
|
|
|
|
applyForWaiterJob(sing?: boolean): boolean;
|
2021-09-05 01:09:30 +02:00
|
|
|
canAccessBladeburner(): boolean;
|
|
|
|
canAccessCorporation(): boolean;
|
|
|
|
canAccessGang(): boolean;
|
2022-03-19 05:22:21 +01:00
|
|
|
canAccessGrafting(): boolean;
|
2021-09-05 01:09:30 +02:00
|
|
|
canAfford(cost: number): boolean;
|
2021-10-27 20:18:33 +02:00
|
|
|
gainMoney(money: number, source: string): void;
|
2021-10-07 22:04:04 +02:00
|
|
|
getCurrentServer(): BaseServer;
|
2021-09-05 01:09:30 +02:00
|
|
|
getGangFaction(): Faction;
|
|
|
|
getGangName(): string;
|
|
|
|
getHomeComputer(): Server;
|
2021-09-24 00:47:43 +02:00
|
|
|
getNextCompanyPosition(company: Company, entryPosType: CompanyPosition): CompanyPosition | null;
|
2021-09-05 01:09:30 +02:00
|
|
|
getUpgradeHomeRamCost(): number;
|
2021-10-13 21:48:34 +02:00
|
|
|
getUpgradeHomeCoresCost(): number;
|
2021-09-05 01:09:30 +02:00
|
|
|
gotoLocation(to: LocationName): boolean;
|
2021-10-27 03:22:40 +02:00
|
|
|
hasAugmentation(aug: string | Augmentation, installed?: boolean): boolean;
|
2021-09-05 01:09:30 +02:00
|
|
|
hasCorporation(): boolean;
|
|
|
|
hasGangWith(facName: string): boolean;
|
|
|
|
hasTorRouter(): boolean;
|
|
|
|
hasProgram(program: string): boolean;
|
|
|
|
inBladeburner(): boolean;
|
|
|
|
inGang(): boolean;
|
2022-04-20 23:03:25 +02:00
|
|
|
isAwareOfGang(): boolean;
|
2021-09-05 01:09:30 +02:00
|
|
|
isQualified(company: Company, position: CompanyPosition): boolean;
|
2021-10-27 20:18:33 +02:00
|
|
|
loseMoney(money: number, source: string): void;
|
2021-09-24 22:02:38 +02:00
|
|
|
reapplyAllAugmentations(resetMultipliers?: boolean): void;
|
2021-09-05 01:09:30 +02:00
|
|
|
reapplyAllSourceFiles(): void;
|
|
|
|
setMoney(amt: number): void;
|
2022-07-15 07:51:30 +02:00
|
|
|
startBladeburner(): void;
|
2021-09-05 01:09:30 +02:00
|
|
|
startCorporation(corpName: string, additionalShares?: number): void;
|
2021-09-13 00:03:07 +02:00
|
|
|
startFocusing(): void;
|
2021-09-05 01:09:30 +02:00
|
|
|
startGang(facName: string, isHacking: boolean): void;
|
|
|
|
travel(to: CityName): boolean;
|
|
|
|
giveExploit(exploit: Exploit): void;
|
2022-01-06 13:04:03 +01:00
|
|
|
giveAchievement(achievementId: string): void;
|
2021-09-05 01:09:30 +02:00
|
|
|
getCasinoWinnings(): number;
|
2022-04-28 13:05:56 +02:00
|
|
|
quitJob(company: string, sing?: boolean): void;
|
2021-12-19 16:20:02 +01:00
|
|
|
hasJob(): boolean;
|
2021-09-24 23:07:53 +02:00
|
|
|
createHacknetServer(): HacknetServer;
|
2021-09-10 22:57:05 +02:00
|
|
|
queueAugmentation(augmentationName: string): void;
|
|
|
|
receiveInvite(factionName: string): void;
|
|
|
|
updateSkillLevels(): void;
|
2021-09-16 01:50:44 +02:00
|
|
|
gainCodingContractReward(reward: ICodingContractReward, difficulty?: number): string;
|
2021-09-18 01:43:08 +02:00
|
|
|
stopFocusing(): void;
|
2021-09-24 00:47:43 +02:00
|
|
|
resetMultipliers(): void;
|
|
|
|
prestigeAugmentation(): void;
|
|
|
|
prestigeSourceFile(): void;
|
2021-12-17 15:35:54 +01:00
|
|
|
calculateSkillProgress(exp: number, mult?: number): ISkillProgress;
|
2021-09-24 00:47:43 +02:00
|
|
|
hospitalize(): void;
|
2021-09-25 00:29:25 +02:00
|
|
|
checkForFactionInvitations(): Faction[];
|
2021-09-24 00:47:43 +02:00
|
|
|
setBitNodeNumber(n: number): void;
|
2021-09-25 23:21:50 +02:00
|
|
|
canAccessCotMG(): boolean;
|
2021-10-08 09:16:51 +02:00
|
|
|
sourceFileLvl(n: number): number;
|
2022-03-19 19:15:31 +01:00
|
|
|
applyEntropy(stacks?: number): void;
|
2022-07-14 23:43:08 +02:00
|
|
|
focusPenalty(): number;
|
2019-01-17 16:40:43 +01:00
|
|
|
}
|