From 0291b56592a9f2ce373df30b546bf99e4429723d Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 06:14:31 +0100 Subject: [PATCH] feat: gain abilities as helminth levels up --- .../api/infestedFoundryController.ts | 74 +++++++++++++++++-- 1 file changed, 66 insertions(+), 8 deletions(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index b66339e2..64235053 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -91,19 +91,21 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { } } - addInfestedFoundryXP(inventory.InfestedFoundry, 666 * totalPercentagePointsGained); + const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry, 666 * totalPercentagePointsGained); + addRecipes(inventory, recipeChanges); addMiscItems(inventory, miscItemChanges); await inventory.save(); res.json({ InventoryChanges: { + Recipes: recipeChanges, InfestedFoundry: { XP: inventory.InfestedFoundry.XP, Resources: inventory.InfestedFoundry.Resources, Slots: inventory.InfestedFoundry.Slots - } - }, - MiscItems: miscItemChanges + }, + MiscItems: miscItemChanges + } }); break; } @@ -153,11 +155,12 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { inventory.InfestedFoundry!.AbilityOverrideUnlockCooldown = new Date( new Date().getTime() + 24 * 60 * 60 * 1000 ); - addInfestedFoundryXP(inventory.InfestedFoundry!, 1600_00); + const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, 1600_00); + addRecipes(inventory, recipeChanges); await inventory.save(); - console.log(inventory.toJSON().InfestedFoundry); res.json({ InventoryChanges: { + Recipes: recipeChanges, RemovedIdItems: [ { ItemId: request.SuitId @@ -198,7 +201,8 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { suit.OffensiveUpgrade = request.OffensiveUpgradeType; suit.DefensiveUpgrade = request.DefensiveUpgradeType; suit.UpgradesExpiry = upgradesExpiry; - addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00); + const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00); + addRecipes(inventory, recipeChanges); for (let i = 0; i != request.ResourceTypes.length; ++i) { inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == request.ResourceTypes[i])!.Count -= request.ResourceCosts[i]; @@ -212,6 +216,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { DefensiveUpgrade: request.DefensiveUpgradeType, UpgradesExpiry: toMongoDate(upgradesExpiry), InventoryChanges: { + Recipes: recipeChanges, InfestedFoundry: inventory.toJSON().InfestedFoundry } }); @@ -256,7 +261,8 @@ const colorToShard: Record = { ACC_PURPLE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic" }; -const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): void => { +const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): ITypeCount[] => { + const recipeChanges: ITypeCount[] = []; infestedFoundry.XP ??= 0; const prevXP = infestedFoundry.XP; infestedFoundry.XP += delta; @@ -264,17 +270,69 @@ const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): infestedFoundry.Slots ??= 0; infestedFoundry.Slots += 3; } + if (prevXP < 5625_00 && infestedFoundry.XP >= 5625_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthShieldsBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 10125_00 && infestedFoundry.XP >= 10125_00) { + recipeChanges.push({ ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthHackBlueprint", ItemCount: 1 }); + } if (prevXP < 15750_00 && infestedFoundry.XP >= 15750_00) { infestedFoundry.Slots ??= 0; infestedFoundry.Slots += 10; } + if (prevXP < 22500_00 && infestedFoundry.XP >= 22500_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthAmmoEfficiencyBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 30375_00 && infestedFoundry.XP >= 30375_00) { + recipeChanges.push({ ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthStunBlueprint", ItemCount: 1 }); + } if (prevXP < 39375_00 && infestedFoundry.XP >= 39375_00) { infestedFoundry.Slots ??= 0; infestedFoundry.Slots += 20; } + if (prevXP < 60750_00 && infestedFoundry.XP >= 60750_00) { + recipeChanges.push({ ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthStatusBlueprint", ItemCount: 1 }); + } if (prevXP < 73125_00 && infestedFoundry.XP >= 73125) { infestedFoundry.Slots = 1; } + if (prevXP < 86625_00 && infestedFoundry.XP >= 86625_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthShieldArmorBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 101250_00 && infestedFoundry.XP >= 101250_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthProcBlockBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 117000_00 && infestedFoundry.XP >= 117000_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthEnergyShareBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 133875_00 && infestedFoundry.XP >= 133875_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthMaxStatusBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 151875_00 && infestedFoundry.XP >= 151875_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthTreasureBlueprint", + ItemCount: 1 + }); + } + return recipeChanges; }; interface IHelminthSubsumeRequest {