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..e80e2f6f3 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,29 @@ export function NetscriptStanek( checkStanekAPIAccess("removeFragment"); return staneksGift.delete(rootX, rootY); }, + acceptGift: (_ctx: NetscriptContext) => + function (): boolean { + //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 + joinFaction(Factions[FactionNames.ChurchOfTheMachineGod]); + //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 ( + Factions[FactionNames.ChurchOfTheMachineGod].isMember && + 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; } /**