返回提交历史
Modified
src/controllers/api/artifactTransmutationController.ts
+66
-20
XFEstudio/XFESpaceNinjaServer
feat: transmutation of requiem/antivirus/potency mods (#1553)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1553 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
63e3c966
代码差异
1 个文件
+66
-20
@@ -57,12 +57,16 @@ export const artifactTransmutationController: RequestHandler = async (req, res)
57
57
payload.Consumed.forEach(upgrade => {
58
58
const meta = ExportUpgrades[upgrade.ItemType];
59
59
counts[meta.rarity] += upgrade.ItemCount;
60
addMods(inventory, [
61
{
62
ItemType: upgrade.ItemType,
63
ItemCount: upgrade.ItemCount * -1
64
}
65
]);
60
if (upgrade.ItemId.$oid != "000000000000000000000000") {
61
inventory.Upgrades.pull({ _id: upgrade.ItemId.$oid });
62
} else {
63
addMods(inventory, [
64
{
65
ItemType: upgrade.ItemType,
66
ItemCount: upgrade.ItemCount * -1
67
}
68
]);
69
}
66
70
if (upgrade.ItemType == "/Lotus/Upgrades/Mods/TransmuteCores/AttackTransmuteCore") {
67
71
forcedPolarity = "AP_ATTACK";
68
72
} else if (upgrade.ItemType == "/Lotus/Upgrades/Mods/TransmuteCores/DefenseTransmuteCore") {
@@ -72,22 +76,33 @@ export const artifactTransmutationController: RequestHandler = async (req, res)
72
76
}
73
77
});
74
78
75
// Based on the table on https://wiki.warframe.com/w/Transmutation
76
const weights: Record<TRarity, number> = {
77
COMMON: counts.COMMON * 95 + counts.UNCOMMON * 15 + counts.RARE * 4,
78
UNCOMMON: counts.COMMON * 4 + counts.UNCOMMON * 80 + counts.RARE * 10,
79
RARE: counts.COMMON * 1 + counts.UNCOMMON * 5 + counts.RARE * 50,
80
LEGENDARY: 0
81
};
82
83
const options: { uniqueName: string; rarity: TRarity }[] = [];
84
Object.entries(ExportUpgrades).forEach(([uniqueName, upgrade]) => {
85
if (upgrade.canBeTransmutation && (!forcedPolarity || upgrade.polarity == forcedPolarity)) {
86
options.push({ uniqueName, rarity: upgrade.rarity });
79
let newModType: string | undefined;
80
for (const specialModSet of specialModSets) {
81
if (specialModSet.indexOf(payload.Consumed[0].ItemType) != -1) {
82
newModType = getRandomElement(specialModSet);
83
break;
87
84
}
88
});
85
}
86
87
if (!newModType) {
88
// Based on the table on https://wiki.warframe.com/w/Transmutation
89
const weights: Record<TRarity, number> = {
90
COMMON: counts.COMMON * 95 + counts.UNCOMMON * 15 + counts.RARE * 4,
91
UNCOMMON: counts.COMMON * 4 + counts.UNCOMMON * 80 + counts.RARE * 10,
92
RARE: counts.COMMON * 1 + counts.UNCOMMON * 5 + counts.RARE * 50,
93
LEGENDARY: 0
94
};
95
96
const options: { uniqueName: string; rarity: TRarity }[] = [];
97
Object.entries(ExportUpgrades).forEach(([uniqueName, upgrade]) => {
98
if (upgrade.canBeTransmutation && (!forcedPolarity || upgrade.polarity == forcedPolarity)) {
99
options.push({ uniqueName, rarity: upgrade.rarity });
100
}
101
});
102
103
newModType = getRandomWeightedReward(options, weights)!.uniqueName;
104
}
89
105
90
const newModType = getRandomWeightedReward(options, weights)!.uniqueName;
91
106
addMods(inventory, [
92
107
{
93
108
ItemType: newModType,
@@ -130,3 +145,34 @@ interface IAgnosticUpgradeClient {
130
145
ItemCount: number;
131
146
LastAdded: IOid;
132
147
}
148
149
const specialModSets: string[][] = [
150
[
151
"/Lotus/Upgrades/Mods/Immortal/ImmortalOneMod",
152
"/Lotus/Upgrades/Mods/Immortal/ImmortalTwoMod",
153
"/Lotus/Upgrades/Mods/Immortal/ImmortalThreeMod",
154
"/Lotus/Upgrades/Mods/Immortal/ImmortalFourMod",
155
"/Lotus/Upgrades/Mods/Immortal/ImmortalFiveMod",
156
"/Lotus/Upgrades/Mods/Immortal/ImmortalSixMod",
157
"/Lotus/Upgrades/Mods/Immortal/ImmortalSevenMod",
158
"/Lotus/Upgrades/Mods/Immortal/ImmortalEightMod",
159
"/Lotus/Upgrades/Mods/Immortal/ImmortalWildcardMod"
160
],
161
[
162
"/Lotus/Upgrades/Mods/Immortal/AntivirusOneMod",
163
"/Lotus/Upgrades/Mods/Immortal/AntivirusTwoMod",
164
"/Lotus/Upgrades/Mods/Immortal/AntivirusThreeMod",
165
"/Lotus/Upgrades/Mods/Immortal/AntivirusFourMod",
166
"/Lotus/Upgrades/Mods/Immortal/AntivirusFiveMod",
167
"/Lotus/Upgrades/Mods/Immortal/AntivirusSixMod",
168
"/Lotus/Upgrades/Mods/Immortal/AntivirusSevenMod",
169
"/Lotus/Upgrades/Mods/Immortal/AntivirusEightMod"
170
],
171
[
172
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndSpeedOnUseMod",
173
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndWeaponDamageOnUseMod",
174
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusLargeOnSingleUseMod",
175
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusOnUseMod",
176
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusSmallOnSingleUseMod"
177
]
178
];