From 306507d6c341a529877da28cc112390b25f0e9b8 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Fri, 11 Apr 2025 00:03:28 +0200 Subject: [PATCH] feat: transmutation of requiem/antivirus/potency mods --- .../api/artifactTransmutationController.ts | 86 ++++++++++++++----- 1 file changed, 66 insertions(+), 20 deletions(-) diff --git a/src/controllers/api/artifactTransmutationController.ts b/src/controllers/api/artifactTransmutationController.ts index 78da93a1..7e39e79e 100644 --- a/src/controllers/api/artifactTransmutationController.ts +++ b/src/controllers/api/artifactTransmutationController.ts @@ -57,12 +57,16 @@ export const artifactTransmutationController: RequestHandler = async (req, res) payload.Consumed.forEach(upgrade => { const meta = ExportUpgrades[upgrade.ItemType]; counts[meta.rarity] += upgrade.ItemCount; - addMods(inventory, [ - { - ItemType: upgrade.ItemType, - ItemCount: upgrade.ItemCount * -1 - } - ]); + if (upgrade.ItemId.$oid != "000000000000000000000000") { + inventory.Upgrades.pull({ _id: upgrade.ItemId.$oid }); + } else { + addMods(inventory, [ + { + ItemType: upgrade.ItemType, + ItemCount: upgrade.ItemCount * -1 + } + ]); + } if (upgrade.ItemType == "/Lotus/Upgrades/Mods/TransmuteCores/AttackTransmuteCore") { forcedPolarity = "AP_ATTACK"; } else if (upgrade.ItemType == "/Lotus/Upgrades/Mods/TransmuteCores/DefenseTransmuteCore") { @@ -72,22 +76,33 @@ export const artifactTransmutationController: RequestHandler = async (req, res) } }); - // Based on the table on https://wiki.warframe.com/w/Transmutation - const weights: Record = { - COMMON: counts.COMMON * 95 + counts.UNCOMMON * 15 + counts.RARE * 4, - UNCOMMON: counts.COMMON * 4 + counts.UNCOMMON * 80 + counts.RARE * 10, - RARE: counts.COMMON * 1 + counts.UNCOMMON * 5 + counts.RARE * 50, - LEGENDARY: 0 - }; - - const options: { uniqueName: string; rarity: TRarity }[] = []; - Object.entries(ExportUpgrades).forEach(([uniqueName, upgrade]) => { - if (upgrade.canBeTransmutation && (!forcedPolarity || upgrade.polarity == forcedPolarity)) { - options.push({ uniqueName, rarity: upgrade.rarity }); + let newModType: string | undefined; + for (const specialModSet of specialModSets) { + if (specialModSet.indexOf(payload.Consumed[0].ItemType) != -1) { + newModType = getRandomElement(specialModSet); + break; } - }); + } + + if (!newModType) { + // Based on the table on https://wiki.warframe.com/w/Transmutation + const weights: Record = { + COMMON: counts.COMMON * 95 + counts.UNCOMMON * 15 + counts.RARE * 4, + UNCOMMON: counts.COMMON * 4 + counts.UNCOMMON * 80 + counts.RARE * 10, + RARE: counts.COMMON * 1 + counts.UNCOMMON * 5 + counts.RARE * 50, + LEGENDARY: 0 + }; + + const options: { uniqueName: string; rarity: TRarity }[] = []; + Object.entries(ExportUpgrades).forEach(([uniqueName, upgrade]) => { + if (upgrade.canBeTransmutation && (!forcedPolarity || upgrade.polarity == forcedPolarity)) { + options.push({ uniqueName, rarity: upgrade.rarity }); + } + }); + + newModType = getRandomWeightedReward(options, weights)!.uniqueName; + } - const newModType = getRandomWeightedReward(options, weights)!.uniqueName; addMods(inventory, [ { ItemType: newModType, @@ -130,3 +145,34 @@ interface IAgnosticUpgradeClient { ItemCount: number; LastAdded: IOid; } + +const specialModSets: string[][] = [ + [ + "/Lotus/Upgrades/Mods/Immortal/ImmortalOneMod", + "/Lotus/Upgrades/Mods/Immortal/ImmortalTwoMod", + "/Lotus/Upgrades/Mods/Immortal/ImmortalThreeMod", + "/Lotus/Upgrades/Mods/Immortal/ImmortalFourMod", + "/Lotus/Upgrades/Mods/Immortal/ImmortalFiveMod", + "/Lotus/Upgrades/Mods/Immortal/ImmortalSixMod", + "/Lotus/Upgrades/Mods/Immortal/ImmortalSevenMod", + "/Lotus/Upgrades/Mods/Immortal/ImmortalEightMod", + "/Lotus/Upgrades/Mods/Immortal/ImmortalWildcardMod" + ], + [ + "/Lotus/Upgrades/Mods/Immortal/AntivirusOneMod", + "/Lotus/Upgrades/Mods/Immortal/AntivirusTwoMod", + "/Lotus/Upgrades/Mods/Immortal/AntivirusThreeMod", + "/Lotus/Upgrades/Mods/Immortal/AntivirusFourMod", + "/Lotus/Upgrades/Mods/Immortal/AntivirusFiveMod", + "/Lotus/Upgrades/Mods/Immortal/AntivirusSixMod", + "/Lotus/Upgrades/Mods/Immortal/AntivirusSevenMod", + "/Lotus/Upgrades/Mods/Immortal/AntivirusEightMod" + ], + [ + "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndSpeedOnUseMod", + "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndWeaponDamageOnUseMod", + "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusLargeOnSingleUseMod", + "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusOnUseMod", + "/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusSmallOnSingleUseMod" + ] +];