XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

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
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

1 个文件 +66 -20
Modified src/controllers/api/artifactTransmutationController.ts +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 ];