From 46a90e6271e0a60229bcc8a3cdda9b2194899011 Mon Sep 17 00:00:00 2001 From: Undeemiss Date: Tue, 19 Apr 2022 12:00:24 -0500 Subject: [PATCH 1/3] Added ns function stanek.acceptGift Added a new ns function stanek.acceptGift to the game, with a ram cost of 2gb. The function attempts to join the CotMG and install the gift, then returns true iff the player is in the CotMG and has the gift installed. --- src/Netscript/RamCostGenerator.ts | 2 ++ src/NetscriptFunctions/Stanek.ts | 27 ++++++++++++++++++++++ src/ScriptEditor/NetscriptDefinitions.d.ts | 10 ++++++++ 3 files changed, 39 insertions(+) diff --git a/src/Netscript/RamCostGenerator.ts b/src/Netscript/RamCostGenerator.ts index b7f8b704e..a74f248a4 100644 --- a/src/Netscript/RamCostGenerator.ts +++ b/src/Netscript/RamCostGenerator.ts @@ -70,6 +70,7 @@ export const RamCostConstants: IMap = { ScriptStanekPlace: 5, ScriptStanekFragmentAt: 2, ScriptStanekDeleteAt: 0.15, + ScriptStanekAcceptGift: 2, }; function SF4Cost(cost: number): (player: IPlayer) => number { @@ -284,6 +285,7 @@ const stanek: IMap = { placeFragment: RamCostConstants.ScriptStanekPlace, getFragment: RamCostConstants.ScriptStanekFragmentAt, removeFragment: RamCostConstants.ScriptStanekDeleteAt, + acceptGift: RamCostConstants.ScriptStanekAcceptGift, }; // UI API diff --git a/src/NetscriptFunctions/Stanek.ts b/src/NetscriptFunctions/Stanek.ts index 0b2010f6c..07a271a37 100644 --- a/src/NetscriptFunctions/Stanek.ts +++ b/src/NetscriptFunctions/Stanek.ts @@ -13,6 +13,10 @@ import { } from "../ScriptEditor/NetscriptDefinitions"; import { AugmentationNames } from "../Augmentation/data/AugmentationNames"; import { NetscriptContext, InternalAPI } from "../Netscript/APIWrapper"; +import { applyAugmentation } from "../Augmentation/AugmentationHelpers"; +import { FactionNames } from "../Faction/data/FactionNames"; +import { joinFaction } from "../Faction/FactionHelpers"; +import { Factions } from "../Faction/Factions"; export function NetscriptStanek( player: IPlayer, @@ -109,5 +113,28 @@ export function NetscriptStanek( checkStanekAPIAccess("removeFragment"); return staneksGift.delete(rootX, rootY); }, + acceptGift: (_ctx: NetscriptContext) => + function (): boolean { + //Check if the player has access to the church + if (player.canAccessCotMG()) { + //Attempt to join CotMG + const faction = Factions[FactionNames.ChurchOfTheMachineGod]; + if (!player.factions.includes(FactionNames.ChurchOfTheMachineGod)) { + joinFaction(faction); + } + //Attempt to install the first Stanek aug + if ( + !player.hasAugmentation(AugmentationNames.StaneksGift1) && + !player.queuedAugmentations.some((a) => a.name === AugmentationNames.StaneksGift1) + ) { + applyAugmentation({ name: AugmentationNames.StaneksGift1, level: 1 }); + } + } + //Return true iff the player is in CotMG and has the first Stanek aug installed + return ( + player.factions.includes(FactionNames.ChurchOfTheMachineGod) && + player.hasAugmentation(AugmentationNames.StaneksGift1) + ); + }, }; } diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts index ba24d768b..b14c35af8 100644 --- a/src/ScriptEditor/NetscriptDefinitions.d.ts +++ b/src/ScriptEditor/NetscriptDefinitions.d.ts @@ -4261,6 +4261,16 @@ interface Stanek { * @returns The fragment at [rootX, rootY], if any. */ removeFragment(rootX: number, rootY: number): boolean; + + /** + * Accept Stanek's Gift by joining the Church of the Machine God + * @remarks + * RAM cost: 2 GB + * + * @returns true if the player is a member of the church and has the gift installed, + * false otherwise. + */ + acceptGift(): boolean; } /** From b3e83dd9760c1da451a2bc41bb8bff63b759ddc1 Mon Sep 17 00:00:00 2001 From: Undeemiss Date: Tue, 19 Apr 2022 13:33:07 -0500 Subject: [PATCH 2/3] Added check for aug status to stanek.acceptGift Added a check to stanek.acceptGift for aug status. It's not particularly elegant, but I copied the checks from the ui. Also changed the way CotMG status is checked to be more robust. --- src/NetscriptFunctions/Stanek.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/NetscriptFunctions/Stanek.ts b/src/NetscriptFunctions/Stanek.ts index 07a271a37..afd50f2bc 100644 --- a/src/NetscriptFunctions/Stanek.ts +++ b/src/NetscriptFunctions/Stanek.ts @@ -115,11 +115,15 @@ export function NetscriptStanek( }, acceptGift: (_ctx: NetscriptContext) => function (): boolean { - //Check if the player has access to the church - if (player.canAccessCotMG()) { + //Check if the player is eligible to join the church + if ( + player.canAccessCotMG() && + player.augmentations.filter((a) => a.name !== AugmentationNames.NeuroFluxGovernor).length == 0 && + player.queuedAugmentations.filter((a) => a.name !== AugmentationNames.NeuroFluxGovernor).length == 0 + ) { //Attempt to join CotMG const faction = Factions[FactionNames.ChurchOfTheMachineGod]; - if (!player.factions.includes(FactionNames.ChurchOfTheMachineGod)) { + if (!faction.isMember) { joinFaction(faction); } //Attempt to install the first Stanek aug @@ -132,7 +136,7 @@ export function NetscriptStanek( } //Return true iff the player is in CotMG and has the first Stanek aug installed return ( - player.factions.includes(FactionNames.ChurchOfTheMachineGod) && + Factions[FactionNames.ChurchOfTheMachineGod].isMember && player.hasAugmentation(AugmentationNames.StaneksGift1) ); }, From 6d55bfe79504b779baf137b79df1d6aaaaffa77e Mon Sep 17 00:00:00 2001 From: Undeemiss Date: Tue, 19 Apr 2022 13:39:56 -0500 Subject: [PATCH 3/3] Removed redundant check for whether the player is in CotMG --- src/NetscriptFunctions/Stanek.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/NetscriptFunctions/Stanek.ts b/src/NetscriptFunctions/Stanek.ts index afd50f2bc..e80e2f6f3 100644 --- a/src/NetscriptFunctions/Stanek.ts +++ b/src/NetscriptFunctions/Stanek.ts @@ -122,10 +122,7 @@ export function NetscriptStanek( player.queuedAugmentations.filter((a) => a.name !== AugmentationNames.NeuroFluxGovernor).length == 0 ) { //Attempt to join CotMG - const faction = Factions[FactionNames.ChurchOfTheMachineGod]; - if (!faction.isMember) { - joinFaction(faction); - } + joinFaction(Factions[FactionNames.ChurchOfTheMachineGod]); //Attempt to install the first Stanek aug if ( !player.hasAugmentation(AugmentationNames.StaneksGift1) &&