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

SpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/SpaceNinjaServer

feat: infusing abilities (#676)

0c6f6e55
Sainan <sainan@calamity.inc>
提交于

代码差异

2 个文件 +111 -82
Modified src/controllers/api/upgradesController.ts +107 -82
@@ -3,11 +3,13 @@ import { IUpgradesRequest } from "@/src/types/requestTypes";
3 3 import {
4 4 ArtifactPolarity,
5 5 IEquipmentDatabase,
6 EquipmentFeatures
6 EquipmentFeatures,
7 IAbilityOverride
7 8 } from "@/src/types/inventoryTypes/commonInventoryTypes";
8 9 import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
9 10 import { getAccountIdForRequest } from "@/src/services/loginService";
10 11 import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
12 import { getRecipeByResult } from "@/src/services/itemDataService";
11 13
12 14 export const upgradesController: RequestHandler = async (req, res) => {
13 15 const accountId = await getAccountIdForRequest(req);
@@ -28,97 +30,120 @@ export const upgradesController: RequestHandler = async (req, res) => {
28 30 ]);
29 31 }
30 32
31 switch (operation.UpgradeRequirement) {
32 case "/Lotus/Types/Items/MiscItems/OrokinReactor":
33 case "/Lotus/Types/Items/MiscItems/OrokinCatalyst":
34 for (const item of inventory[payload.ItemCategory]) {
35 if (item._id.toString() == payload.ItemId.$oid) {
36 item.Features ??= 0;
37 item.Features |= EquipmentFeatures.DOUBLE_CAPACITY;
38 break;
39 }
33 if (operation.OperationType == "UOT_ABILITY_OVERRIDE") {
34 console.assert(payload.ItemCategory == "Suits");
35 const suit = inventory.Suits.find(x => x._id.toString() == payload.ItemId.$oid)!;
36
37 let newAbilityOverride: IAbilityOverride | undefined;
38 if (operation.UpgradeRequirement != "") {
39 newAbilityOverride = {
40 Ability: operation.UpgradeRequirement,
41 Index: operation.PolarizeSlot
42 };
43
44 const recipe = getRecipeByResult(operation.UpgradeRequirement)!;
45 for (const ingredient of recipe.ingredients) {
46 inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == ingredient.ItemType)!.Count -=
47 ingredient.ItemCount;
40 48 }
41 break;
42 case "/Lotus/Types/Items/MiscItems/UtilityUnlocker":
43 case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker":
44 for (const item of inventory[payload.ItemCategory]) {
45 if (item._id.toString() == payload.ItemId.$oid) {
46 item.Features ??= 0;
47 item.Features |= EquipmentFeatures.UTILITY_SLOT;
48 break;
49 }
50
51 for (const entry of operation.PolarityRemap) {
52 suit.Configs[entry.Slot] ??= {};
53 suit.Configs[entry.Slot].AbilityOverride = newAbilityOverride;
54 }
55 } else
56 switch (operation.UpgradeRequirement) {
57 case "/Lotus/Types/Items/MiscItems/OrokinReactor":
58 case "/Lotus/Types/Items/MiscItems/OrokinCatalyst":
59 for (const item of inventory[payload.ItemCategory]) {
60 if (item._id.toString() == payload.ItemId.$oid) {
61 item.Features ??= 0;
62 item.Features |= EquipmentFeatures.DOUBLE_CAPACITY;
63 break;
64 }
49 65 }
50 }
51 break;
52 case "/Lotus/Types/Items/MiscItems/HeavyWeaponCatalyst":
53 console.assert(payload.ItemCategory == "SpaceGuns");
54 for (const item of inventory[payload.ItemCategory]) {
55 if (item._id.toString() == payload.ItemId.$oid) {
56 item.Features ??= 0;
57 item.Features |= EquipmentFeatures.GRAVIMAG_INSTALLED;
58 break;
66 break;
67 case "/Lotus/Types/Items/MiscItems/UtilityUnlocker":
68 case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker":
69 for (const item of inventory[payload.ItemCategory]) {
70 if (item._id.toString() == payload.ItemId.$oid) {
71 item.Features ??= 0;
72 item.Features |= EquipmentFeatures.UTILITY_SLOT;
73 break;
74 }
59 75 }
60 }
61 break;
62 case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker":
63 case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker":
64 case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker":
65 case "/Lotus/Types/Items/MiscItems/WeaponAmpArcaneUnlocker":
66 for (const item of inventory[payload.ItemCategory]) {
67 if (item._id.toString() == payload.ItemId.$oid) {
68 item.Features ??= 0;
69 item.Features |= EquipmentFeatures.ARCANE_SLOT;
70 break;
76 break;
77 case "/Lotus/Types/Items/MiscItems/HeavyWeaponCatalyst":
78 console.assert(payload.ItemCategory == "SpaceGuns");
79 for (const item of inventory[payload.ItemCategory]) {
80 if (item._id.toString() == payload.ItemId.$oid) {
81 item.Features ??= 0;
82 item.Features |= EquipmentFeatures.GRAVIMAG_INSTALLED;
83 break;
84 }
71 85 }
72 }
73 break;
74 case "/Lotus/Types/Items/MiscItems/Forma":
75 case "/Lotus/Types/Items/MiscItems/FormaUmbra":
76 case "/Lotus/Types/Items/MiscItems/FormaAura":
77 case "/Lotus/Types/Items/MiscItems/FormaStance":
78 for (const item of inventory[payload.ItemCategory]) {
79 if (item._id.toString() == payload.ItemId.$oid) {
80 item.XP = 0;
81 setSlotPolarity(item, operation.PolarizeSlot, operation.PolarizeValue);
82 item.Polarized ??= 0;
83 item.Polarized += 1;
84 break;
86 break;
87 case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker":
88 case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker":
89 case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker":
90 case "/Lotus/Types/Items/MiscItems/WeaponAmpArcaneUnlocker":
91 for (const item of inventory[payload.ItemCategory]) {
92 if (item._id.toString() == payload.ItemId.$oid) {
93 item.Features ??= 0;
94 item.Features |= EquipmentFeatures.ARCANE_SLOT;
95 break;
96 }
85 97 }
86 }
87 break;
88 case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker":
89 for (const item of inventory[payload.ItemCategory]) {
90 if (item._id.toString() == payload.ItemId.$oid) {
91 item.ModSlotPurchases ??= 0;
92 item.ModSlotPurchases += 1;
93 break;
98 break;
99 case "/Lotus/Types/Items/MiscItems/Forma":
100 case "/Lotus/Types/Items/MiscItems/FormaUmbra":
101 case "/Lotus/Types/Items/MiscItems/FormaAura":
102 case "/Lotus/Types/Items/MiscItems/FormaStance":
103 for (const item of inventory[payload.ItemCategory]) {
104 if (item._id.toString() == payload.ItemId.$oid) {
105 item.XP = 0;
106 setSlotPolarity(item, operation.PolarizeSlot, operation.PolarizeValue);
107 item.Polarized ??= 0;
108 item.Polarized += 1;
109 break;
110 }
94 111 }
95 }
96 break;
97 case "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker":
98 for (const item of inventory[payload.ItemCategory]) {
99 if (item._id.toString() == payload.ItemId.$oid) {
100 item.CustomizationSlotPurchases ??= 0;
101 item.CustomizationSlotPurchases += 1;
102 break;
112 break;
113 case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker":
114 for (const item of inventory[payload.ItemCategory]) {
115 if (item._id.toString() == payload.ItemId.$oid) {
116 item.ModSlotPurchases ??= 0;
117 item.ModSlotPurchases += 1;
118 break;
119 }
103 120 }
104 }
105 break;
106 case "":
107 console.assert(operation.OperationType == "UOT_SWAP_POLARITY");
108 for (const item of inventory[payload.ItemCategory]) {
109 if (item._id.toString() == payload.ItemId.$oid) {
110 for (let i = 0; i != operation.PolarityRemap.length; ++i) {
111 if (operation.PolarityRemap[i].Slot != i) {
112 setSlotPolarity(item, i, operation.PolarityRemap[i].Value);
121 break;
122 case "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker":
123 for (const item of inventory[payload.ItemCategory]) {
124 if (item._id.toString() == payload.ItemId.$oid) {
125 item.CustomizationSlotPurchases ??= 0;
126 item.CustomizationSlotPurchases += 1;
127 break;
128 }
129 }
130 break;
131 case "":
132 console.assert(operation.OperationType == "UOT_SWAP_POLARITY");
133 for (const item of inventory[payload.ItemCategory]) {
134 if (item._id.toString() == payload.ItemId.$oid) {
135 for (let i = 0; i != operation.PolarityRemap.length; ++i) {
136 if (operation.PolarityRemap[i].Slot != i) {
137 setSlotPolarity(item, i, operation.PolarityRemap[i].Value);
138 }
113 139 }
140 break;
114 141 }
115 break;
116 142 }
117 }
118 break;
119 default:
120 throw new Error("Unsupported upgrade: " + operation.UpgradeRequirement);
121 }
143 break;
144 default:
145 throw new Error("Unsupported upgrade: " + operation.UpgradeRequirement);
146 }
122 147 }
123 148 await inventory.save();
124 149 res.json({ InventoryChanges: {} });
Modified src/services/itemDataService.ts +4 -0
@@ -65,6 +65,10 @@ export const getRecipe = (uniqueName: string): IRecipe | undefined => {
65 65 return ExportRecipes[uniqueName];
66 66 };
67 67
68 export const getRecipeByResult = (resultType: string): IRecipe | undefined => {
69 return Object.values(ExportRecipes).find(x => x.resultType == resultType);
70 };
71
68 72 export const getExalted = (uniqueName: string): string[] | undefined => {
69 73 return getSuitByUniqueName(uniqueName)?.exalted;
70 74 };