mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-26 09:33:49 +01:00
Pass server to terminal actions that end later
Adds the current server object to the finishAction handler so that if the player changes during the progress he'll hit the original server with the command.
This commit is contained in:
parent
d2193e017d
commit
f9ed45a895
@ -5,6 +5,7 @@ import { IPlayer } from "../PersonObjects/IPlayer";
|
|||||||
import { IRouter } from "../ui/Router";
|
import { IRouter } from "../ui/Router";
|
||||||
import { Settings } from "../Settings/Settings";
|
import { Settings } from "../Settings/Settings";
|
||||||
import { formatTime } from "../utils/helpers/formatTime";
|
import { formatTime } from "../utils/helpers/formatTime";
|
||||||
|
import { BaseServer } from "../Server/BaseServer";
|
||||||
|
|
||||||
export class Output {
|
export class Output {
|
||||||
text: string;
|
text: string;
|
||||||
@ -43,11 +44,13 @@ export class TTimer {
|
|||||||
time: number;
|
time: number;
|
||||||
timeLeft: number;
|
timeLeft: number;
|
||||||
action: "h" | "b" | "a" | "g" | "w";
|
action: "h" | "b" | "a" | "g" | "w";
|
||||||
|
server?: BaseServer;
|
||||||
|
|
||||||
constructor(time: number, action: "h" | "b" | "a" | "g" | "w") {
|
constructor(time: number, action: "h" | "b" | "a" | "g" | "w", server?: BaseServer) {
|
||||||
this.time = time;
|
this.time = time;
|
||||||
this.timeLeft = time;
|
this.timeLeft = time;
|
||||||
this.action = action;
|
this.action = action;
|
||||||
|
this.server = server;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,16 +77,16 @@ export interface ITerminal {
|
|||||||
warn(s: string): void;
|
warn(s: string): void;
|
||||||
|
|
||||||
clear(): void;
|
clear(): void;
|
||||||
startAnalyze(): void;
|
startAnalyze(player: IPlayer): void;
|
||||||
startBackdoor(player: IPlayer): void;
|
startBackdoor(player: IPlayer): void;
|
||||||
startHack(player: IPlayer): void;
|
startHack(player: IPlayer): void;
|
||||||
startGrow(player: IPlayer): void;
|
startGrow(player: IPlayer): void;
|
||||||
startWeaken(player: IPlayer): void;
|
startWeaken(player: IPlayer): void;
|
||||||
finishHack(router: IRouter, player: IPlayer, cancelled?: boolean): void;
|
finishHack(router: IRouter, player: IPlayer, server: BaseServer, cancelled?: boolean): void;
|
||||||
finishGrow(player: IPlayer, cancelled?: boolean): void;
|
finishGrow(player: IPlayer, server: BaseServer, cancelled?: boolean): void;
|
||||||
finishWeaken(player: IPlayer, cancelled?: boolean): void;
|
finishWeaken(player: IPlayer, server: BaseServer, cancelled?: boolean): void;
|
||||||
finishBackdoor(router: IRouter, player: IPlayer, cancelled?: boolean): void;
|
finishBackdoor(router: IRouter, player: IPlayer, server: BaseServer, cancelled?: boolean): void;
|
||||||
finishAnalyze(player: IPlayer, cancelled?: boolean): void;
|
finishAnalyze(player: IPlayer, server: BaseServer, cancelled?: boolean): void;
|
||||||
finishAction(router: IRouter, player: IPlayer, cancelled?: boolean): void;
|
finishAction(router: IRouter, player: IPlayer, cancelled?: boolean): void;
|
||||||
getFilepath(filename: string): string;
|
getFilepath(filename: string): string;
|
||||||
getFile(player: IPlayer, filename: string): Script | TextFile | string | null;
|
getFile(player: IPlayer, filename: string): Script | TextFile | string | null;
|
||||||
|
@ -137,7 +137,7 @@ export class Terminal implements ITerminal {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(server instanceof Server)) throw new Error("server should be normal server");
|
if (!(server instanceof Server)) throw new Error("server should be normal server");
|
||||||
this.startAction(calculateHackingTime(server, player) / 4, "h");
|
this.startAction(calculateHackingTime(server, player) / 4, "h", server);
|
||||||
}
|
}
|
||||||
|
|
||||||
startGrow(player: IPlayer): void {
|
startGrow(player: IPlayer): void {
|
||||||
@ -147,7 +147,7 @@ export class Terminal implements ITerminal {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(server instanceof Server)) throw new Error("server should be normal server");
|
if (!(server instanceof Server)) throw new Error("server should be normal server");
|
||||||
this.startAction(calculateGrowTime(server, player) / 16, "g");
|
this.startAction(calculateGrowTime(server, player) / 16, "g", server);
|
||||||
}
|
}
|
||||||
startWeaken(player: IPlayer): void {
|
startWeaken(player: IPlayer): void {
|
||||||
const server = player.getCurrentServer();
|
const server = player.getCurrentServer();
|
||||||
@ -156,7 +156,7 @@ export class Terminal implements ITerminal {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(server instanceof Server)) throw new Error("server should be normal server");
|
if (!(server instanceof Server)) throw new Error("server should be normal server");
|
||||||
this.startAction(calculateWeakenTime(server, player) / 16, "w");
|
this.startAction(calculateWeakenTime(server, player) / 16, "w", server);
|
||||||
}
|
}
|
||||||
|
|
||||||
startBackdoor(player: IPlayer): void {
|
startBackdoor(player: IPlayer): void {
|
||||||
@ -167,22 +167,23 @@ export class Terminal implements ITerminal {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(server instanceof Server)) throw new Error("server should be normal server");
|
if (!(server instanceof Server)) throw new Error("server should be normal server");
|
||||||
this.startAction(calculateHackingTime(server, player) / 4, "b");
|
this.startAction(calculateHackingTime(server, player) / 4, "b", server);
|
||||||
}
|
}
|
||||||
|
|
||||||
startAnalyze(): void {
|
startAnalyze(player: IPlayer): void {
|
||||||
this.print("Analyzing system...");
|
this.print("Analyzing system...");
|
||||||
this.startAction(1, "a");
|
const server = player.getCurrentServer();
|
||||||
|
this.startAction(1, "a", server);
|
||||||
}
|
}
|
||||||
|
|
||||||
startAction(n: number, action: "h" | "b" | "a" | "g" | "w"): void {
|
startAction(n: number, action: "h" | "b" | "a" | "g" | "w", server?: BaseServer): void {
|
||||||
this.action = new TTimer(n, action);
|
this.action = new TTimer(n, action, server);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Complete the hack/analyze command
|
// Complete the hack/analyze command
|
||||||
finishHack(router: IRouter, player: IPlayer, cancelled = false): void {
|
finishHack(router: IRouter, player: IPlayer, server: BaseServer, cancelled = false): void {
|
||||||
if (cancelled) return;
|
if (cancelled) return;
|
||||||
const server = player.getCurrentServer();
|
|
||||||
if (server instanceof HacknetServer) {
|
if (server instanceof HacknetServer) {
|
||||||
this.error("Cannot hack this kind of server");
|
this.error("Cannot hack this kind of server");
|
||||||
return;
|
return;
|
||||||
@ -218,25 +219,25 @@ export class Terminal implements ITerminal {
|
|||||||
const newSec = server.hackDifficulty;
|
const newSec = server.hackDifficulty;
|
||||||
|
|
||||||
this.print(
|
this.print(
|
||||||
`Hack successful! Gained ${numeralWrapper.formatMoney(moneyGained)} and ${numeralWrapper.formatExp(
|
`Hack successful on '${server.hostname}'! Gained ${numeralWrapper.formatMoney(moneyGained)} and ${numeralWrapper.formatExp(
|
||||||
expGainedOnSuccess,
|
expGainedOnSuccess,
|
||||||
)} hacking exp`,
|
)} hacking exp`,
|
||||||
);
|
);
|
||||||
this.print(
|
this.print(
|
||||||
`Security increased from ${numeralWrapper.formatSecurity(oldSec)} to ${numeralWrapper.formatSecurity(newSec)}`,
|
`Security increased on '${server.hostname}' from ${numeralWrapper.formatSecurity(oldSec)} to ${numeralWrapper.formatSecurity(newSec)}`,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// Failure
|
// Failure
|
||||||
player.gainHackingExp(expGainedOnFailure);
|
player.gainHackingExp(expGainedOnFailure);
|
||||||
this.print(
|
this.print(
|
||||||
`Failed to hack ${server.hostname}. Gained ${numeralWrapper.formatExp(expGainedOnFailure)} hacking exp`,
|
`Failed to hack '${server.hostname}'. Gained ${numeralWrapper.formatExp(expGainedOnFailure)} hacking exp`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
finishGrow(player: IPlayer, cancelled = false): void {
|
finishGrow(player: IPlayer, server: BaseServer, cancelled = false): void {
|
||||||
if (cancelled) return;
|
if (cancelled) return;
|
||||||
const server = player.getCurrentServer();
|
|
||||||
if (server instanceof HacknetServer) {
|
if (server instanceof HacknetServer) {
|
||||||
this.error("Cannot hack this kind of server");
|
this.error("Cannot hack this kind of server");
|
||||||
return;
|
return;
|
||||||
@ -253,13 +254,13 @@ export class Terminal implements ITerminal {
|
|||||||
)}. Gained ${numeralWrapper.formatExp(expGain)} hacking exp.`,
|
)}. Gained ${numeralWrapper.formatExp(expGain)} hacking exp.`,
|
||||||
);
|
);
|
||||||
this.print(
|
this.print(
|
||||||
`Security increased from ${numeralWrapper.formatSecurity(oldSec)} to ${numeralWrapper.formatSecurity(newSec)}`,
|
`Security increased on '${server.hostname}' from ${numeralWrapper.formatSecurity(oldSec)} to ${numeralWrapper.formatSecurity(newSec)}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
finishWeaken(player: IPlayer, cancelled = false): void {
|
finishWeaken(player: IPlayer, server: BaseServer, cancelled = false): void {
|
||||||
if (cancelled) return;
|
if (cancelled) return;
|
||||||
const server = player.getCurrentServer();
|
|
||||||
if (server instanceof HacknetServer) {
|
if (server instanceof HacknetServer) {
|
||||||
this.error("Cannot hack this kind of server");
|
this.error("Cannot hack this kind of server");
|
||||||
return;
|
return;
|
||||||
@ -270,16 +271,15 @@ export class Terminal implements ITerminal {
|
|||||||
server.weaken(CONSTANTS.ServerWeakenAmount);
|
server.weaken(CONSTANTS.ServerWeakenAmount);
|
||||||
const newSec = server.hackDifficulty;
|
const newSec = server.hackDifficulty;
|
||||||
this.print(
|
this.print(
|
||||||
`Security decreased from ${numeralWrapper.formatSecurity(oldSec)} to ${numeralWrapper.formatSecurity(
|
`Security decreased on '${server.hostname}' from ${numeralWrapper.formatSecurity(oldSec)} to ${numeralWrapper.formatSecurity(
|
||||||
newSec,
|
newSec,
|
||||||
)} (min: ${numeralWrapper.formatSecurity(server.minDifficulty)})` +
|
)} (min: ${numeralWrapper.formatSecurity(server.minDifficulty)})` +
|
||||||
` and Gained ${numeralWrapper.formatExp(expGain)} hacking exp.`,
|
` and Gained ${numeralWrapper.formatExp(expGain)} hacking exp.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
finishBackdoor(router: IRouter, player: IPlayer, cancelled = false): void {
|
finishBackdoor(router: IRouter, player: IPlayer, server: BaseServer, cancelled = false): void {
|
||||||
if (!cancelled) {
|
if (!cancelled) {
|
||||||
const server = player.getCurrentServer();
|
|
||||||
if (server instanceof HacknetServer) {
|
if (server instanceof HacknetServer) {
|
||||||
this.error("Cannot hack this kind of server");
|
this.error("Cannot hack this kind of server");
|
||||||
return;
|
return;
|
||||||
@ -293,13 +293,12 @@ export class Terminal implements ITerminal {
|
|||||||
router.toBitVerse(false, false);
|
router.toBitVerse(false, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.print("Backdoor successful!");
|
this.print(`Backdoor on '${server.hostname}' successful!`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
finishAnalyze(player: IPlayer, cancelled = false): void {
|
finishAnalyze(player: IPlayer, currServ: BaseServer, cancelled = false): void {
|
||||||
if (!cancelled) {
|
if (!cancelled) {
|
||||||
const currServ = player.getCurrentServer();
|
|
||||||
const isHacknet = currServ instanceof HacknetServer;
|
const isHacknet = currServ instanceof HacknetServer;
|
||||||
this.print(currServ.hostname + ": ");
|
this.print(currServ.hostname + ": ");
|
||||||
const org = currServ.organizationName;
|
const org = currServ.organizationName;
|
||||||
@ -338,18 +337,22 @@ export class Terminal implements ITerminal {
|
|||||||
if (!cancelled) throw new Error("Finish action called when there was no action");
|
if (!cancelled) throw new Error("Finish action called when there was no action");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!this.action.server) throw new Error("Missing action target server");
|
||||||
|
|
||||||
this.print(this.getProgressText());
|
this.print(this.getProgressText());
|
||||||
if (this.action.action === "h") {
|
if (this.action.action === "h") {
|
||||||
this.finishHack(router, player, cancelled);
|
this.finishHack(router, player, this.action.server, cancelled);
|
||||||
} else if (this.action.action === "g") {
|
} else if (this.action.action === "g") {
|
||||||
this.finishGrow(player, cancelled);
|
this.finishGrow(player, this.action.server, cancelled);
|
||||||
} else if (this.action.action === "w") {
|
} else if (this.action.action === "w") {
|
||||||
this.finishWeaken(player, cancelled);
|
this.finishWeaken(player, this.action.server, cancelled);
|
||||||
} else if (this.action.action === "b") {
|
} else if (this.action.action === "b") {
|
||||||
this.finishBackdoor(router, player, cancelled);
|
this.finishBackdoor(router, player, this.action.server, cancelled);
|
||||||
} else if (this.action.action === "a") {
|
} else if (this.action.action === "a") {
|
||||||
this.finishAnalyze(player, cancelled);
|
this.finishAnalyze(player, this.action.server, cancelled);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cancelled) {
|
if (cancelled) {
|
||||||
this.print("Cancelled");
|
this.print("Cancelled");
|
||||||
}
|
}
|
||||||
|
@ -14,5 +14,5 @@ export function analyze(
|
|||||||
terminal.error("Incorrect usage of analyze command. Usage: analyze");
|
terminal.error("Incorrect usage of analyze command. Usage: analyze");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
terminal.startAnalyze();
|
terminal.startAnalyze(player);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user