fix buying programs and writing them at the same time.

This commit is contained in:
Olivier Gagnon 2022-04-13 00:21:51 -04:00
parent c7702d8511
commit f1a3fb7d3e
3 changed files with 25 additions and 11 deletions

@ -72,17 +72,12 @@ export function buyDarkwebItem(itemName: string): void {
// buy and push // buy and push
Player.loseMoney(item.price, "other"); Player.loseMoney(item.price, "other");
const programsRef = Player.getHomeComputer().programs; Player.getHomeComputer().pushProgram(item.program);
// Remove partially created program if there is one // Cancel if the program is in progress of writing
const existingPartialExeIndex = programsRef.findIndex( if (Player.createProgramName === item.program) {
(program) => item?.program && program.startsWith(item?.program), Player.isWorking = false;
); Player.resetWorkStatus();
// findIndex returns -1 if there is no match, we only want to splice on a match
if (existingPartialExeIndex > -1) {
programsRef.splice(existingPartialExeIndex, 1);
} }
// Add the newly bought, full .exe
Player.getHomeComputer().programs.push(item.program);
Terminal.print( Terminal.print(
"You have purchased the " + item.program + " program. The new program can be found on your home computer.", "You have purchased the " + item.program + " program. The new program can be found on your home computer.",

@ -547,8 +547,14 @@ export function NetscriptSingularity(player: IPlayer, workerScript: WorkerScript
return true; return true;
} }
player.getHomeComputer().pushProgram(item.program);
// Cancel if the program is in progress of writing
if (player.createProgramName === item.program) {
player.isWorking = false;
player.resetWorkStatus();
}
player.loseMoney(item.price, "other"); player.loseMoney(item.price, "other");
player.getHomeComputer().programs.push(item.program);
workerScript.log( workerScript.log(
"purchaseProgram", "purchaseProgram",
() => `You have purchased the '${item.program}' program. The new program can be found on your home computer.`, () => `You have purchased the '${item.program}' program. The new program can be found on your home computer.`,

@ -248,6 +248,19 @@ export class BaseServer {
this.ramUsed = ram; this.ramUsed = ram;
} }
pushProgram(program: string): void {
if (this.programs.includes(program)) return;
// Remove partially created program if there is one
const existingPartialExeIndex = this.programs.findIndex((p) => p.startsWith(program));
// findIndex returns -1 if there is no match, we only want to splice on a match
if (existingPartialExeIndex > -1) {
this.programs.splice(existingPartialExeIndex, 1);
}
this.programs.push(program);
}
/** /**
* Write to a script file * Write to a script file
* Overwrites existing files. Creates new files if the script does not eixst * Overwrites existing files. Creates new files if the script does not eixst