From 145d21e30e00c1a80ec8a58d8c5bf685db3b75f6 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Tue, 17 Jun 2025 05:02:34 -0700 Subject: [PATCH] fix: weaken infested lich (#2181) Closes #2180 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2181 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/nemesisController.ts | 34 +++++++++++++++--------- src/helpers/nemesisHelpers.ts | 2 +- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/controllers/api/nemesisController.ts b/src/controllers/api/nemesisController.ts index 8da8fe4d..fe536267 100644 --- a/src/controllers/api/nemesisController.ts +++ b/src/controllers/api/nemesisController.ts @@ -1,5 +1,6 @@ import { version_compare } from "@/src/helpers/inventoryHelpers"; import { + antivirusMods, consumeModCharge, decodeNemesisGuess, encodeNemesisGuess, @@ -134,34 +135,37 @@ export const nemesisController: RequestHandler = async (req, res) => { for (const upgrade of body.knife!.AttachedUpgrades) { switch (upgrade.ItemType) { case "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndSpeedOnUseMod": - antivirusGain += 10; - consumeModCharge(response, inventory, upgrade, dataknifeUpgrades); - break; case "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndWeaponDamageOnUseMod": + case "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusSmallOnSingleUseMod": antivirusGain += 10; consumeModCharge(response, inventory, upgrade, dataknifeUpgrades); break; case "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusLargeOnSingleUseMod": // Instant Secure - antivirusGain += 15; - consumeModCharge(response, inventory, upgrade, dataknifeUpgrades); - break; case "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusOnUseMod": // Immuno Shield antivirusGain += 15; consumeModCharge(response, inventory, upgrade, dataknifeUpgrades); break; - case "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusSmallOnSingleUseMod": - antivirusGain += 10; - consumeModCharge(response, inventory, upgrade, dataknifeUpgrades); - break; } } inventory.Nemesis!.HenchmenKilled += antivirusGain; + if (inventory.Nemesis!.HenchmenKilled >= 100) { + inventory.Nemesis!.HenchmenKilled = 100; + // Client doesn't seem to request mode=w for infested liches, so weakening it here. + inventory.Nemesis!.InfNodes = [ + { + Node: getNemesisManifest(inventory.Nemesis!.manifest).showdownNode, + Influence: 1 + } + ]; + inventory.Nemesis!.Weakened = true; + const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, antivirusMods[passcode]); + consumeModCharge(response, inventory, upgrade, dataknifeUpgrades); + } } - if (inventory.Nemesis!.HenchmenKilled >= 100) { - inventory.Nemesis!.HenchmenKilled = 100; + if (inventory.Nemesis!.HenchmenKilled < 100) { + inventory.Nemesis!.InfNodes = getInfNodes(getNemesisManifest(inventory.Nemesis!.manifest), 0); } - inventory.Nemesis!.InfNodes = getInfNodes(getNemesisManifest(inventory.Nemesis!.manifest), 0); await inventory.save(); res.json(response); @@ -283,6 +287,10 @@ export const nemesisController: RequestHandler = async (req, res) => { ); //const body = getJSONfromString(String(req.body)); + if (inventory.Nemesis!.Weakened) { + logger.warn(`client is weakening an already-weakened nemesis?!`); + } + inventory.Nemesis!.InfNodes = [ { Node: getNemesisManifest(inventory.Nemesis!.manifest).showdownNode, diff --git a/src/helpers/nemesisHelpers.ts b/src/helpers/nemesisHelpers.ts index 8d0d8527..0c7e5bdd 100644 --- a/src/helpers/nemesisHelpers.ts +++ b/src/helpers/nemesisHelpers.ts @@ -248,7 +248,7 @@ const requiemMods: readonly string[] = [ "/Lotus/Upgrades/Mods/Immortal/ImmortalEightMod" ]; -const antivirusMods: readonly string[] = [ +export const antivirusMods: readonly string[] = [ "/Lotus/Upgrades/Mods/Immortal/AntivirusOneMod", "/Lotus/Upgrades/Mods/Immortal/AntivirusTwoMod", "/Lotus/Upgrades/Mods/Immortal/AntivirusThreeMod",