返回提交历史
Modified
src/controllers/api/focusController.ts
+16
-5
Modified
src/controllers/api/upgradesController.ts
+19
-0
Modified
src/services/inventoryService.ts
+1
-0
Modified
static/webui/script.js
+4
-0
XFEstudio/XFESpaceNinjaServer
feat: bayonet sync (#4226)
Closes #4220 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/4226 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
88a803e5
代码差异
4 个文件
+40
-5
@@ -129,10 +129,19 @@ export const focusController: RequestHandler = async (req, res) => {
129
129
break;
130
130
case "InstallLens": {
131
131
const request = JSON.parse(String(req.body)) as ILensInstallRequest;
132
const inventory = await getInventory2(account._id, request.Category, "MiscItems");
132
const response: IInstallLensResponse = {
133
weaponId: request.WeaponId,
134
lensType: request.LensType
135
};
136
const bayonetOtherCategory = request.Category == "Melee" ? "LongGuns" : "Melee";
137
const inventory = await getInventory2(account._id, request.Category, bayonetOtherCategory, "MiscItems");
133
138
const item = inventory[request.Category].id(request.WeaponId);
134
139
if (item) {
135
140
item.FocusLens = request.LensType;
141
if (item.AltWeaponModeId) {
142
inventory[bayonetOtherCategory].id(item.AltWeaponModeId)!.FocusLens = request.LensType;
143
response.altWeaponModeId = item.AltWeaponModeId.toString();
144
}
136
145
addMiscItems(inventory, [
137
146
{
138
147
ItemType: request.LensType,
@@ -141,10 +150,7 @@ export const focusController: RequestHandler = async (req, res) => {
141
150
]);
142
151
}
143
152
await inventory.save();
144
res.json({
145
weaponId: request.WeaponId,
146
lensType: request.LensType
147
});
153
res.json(response);
148
154
break;
149
155
}
150
156
case "UnlockWay": {
@@ -546,6 +552,11 @@ interface ILensInstallRequest {
546
552
Category: TEquipmentKey;
547
553
WeaponId: string;
548
554
}
555
interface IInstallLensResponse {
556
weaponId: string;
557
altWeaponModeId?: string;
558
lensType: string;
559
}
549
560
550
561
// Works for ways & upgrades
551
562
const focusTypeToPolarity = (type: string): TFocusPolarity => {
@@ -184,9 +184,11 @@ export const upgradesController: RequestHandler = async (req, res) => {
184
184
}
185
185
} else {
186
186
const payload = JSON.parse(String(req.body)) as IUpgradesRequest;
187
const bayonetOtherCategory = payload.ItemCategory == "Melee" ? "LongGuns" : "Melee";
187
188
const inventory = await getInventory2(
188
189
accountId,
189
190
payload.ItemCategory,
191
bayonetOtherCategory,
190
192
"MiscItems",
191
193
"infinitePlatinum",
192
194
"PremiumCredits",
@@ -262,6 +264,11 @@ export const upgradesController: RequestHandler = async (req, res) => {
262
264
const item = inventory[payload.ItemCategory].id(payload.ItemId.$oid)!;
263
265
item.Features ??= 0;
264
266
item.Features |= eEquipmentFeatures.DOUBLE_CAPACITY;
267
if (item.AltWeaponModeId) {
268
const otherItem = inventory[bayonetOtherCategory].id(item.AltWeaponModeId)!;
269
otherItem.Features ??= 0;
270
otherItem.Features |= eEquipmentFeatures.DOUBLE_CAPACITY;
271
}
265
272
break;
266
273
}
267
274
case "/Lotus/Types/Items/MiscItems/UtilityUnlocker":
@@ -269,6 +276,11 @@ export const upgradesController: RequestHandler = async (req, res) => {
269
276
const item = inventory[payload.ItemCategory].id(payload.ItemId.$oid)!;
270
277
item.Features ??= 0;
271
278
item.Features |= eEquipmentFeatures.UTILITY_SLOT;
279
if (item.AltWeaponModeId) {
280
const otherItem = inventory[bayonetOtherCategory].id(item.AltWeaponModeId)!;
281
otherItem.Features ??= 0;
282
otherItem.Features |= eEquipmentFeatures.UTILITY_SLOT;
283
}
272
284
break;
273
285
}
274
286
case "/Lotus/Types/Items/MiscItems/HeavyWeaponCatalyst": {
@@ -307,6 +319,13 @@ export const upgradesController: RequestHandler = async (req, res) => {
307
319
setSlotPolarity(item, operation.PolarizeSlot, operation.PolarizeValue);
308
320
item.Polarized ??= 0;
309
321
item.Polarized += 1;
322
if (item.AltWeaponModeId) {
323
const otherItem = inventory[bayonetOtherCategory].id(item.AltWeaponModeId)!;
324
otherItem.XP = 0;
325
setSlotPolarity(otherItem, operation.PolarizeSlot, operation.PolarizeValue);
326
otherItem.Polarized ??= 0;
327
otherItem.Polarized += 1;
328
}
310
329
sendWsBroadcastTo(accountId, { update_inventory: true }); // webui may need to to re-add "max rank" button
311
330
break;
312
331
}
@@ -825,6 +825,7 @@ export const addItem = async (
825
825
{
826
826
_id: defaultOverwrites.AltWeaponModeId,
827
827
AltWeaponModeId: defaultOverwrites._id,
828
Features: defaultOverwrites.Features, // premium purchase puts potato in both parts
828
829
IsNew: false // Not 100% sure if this is faithful, but the client seems to act a bit weird when it's set on the melee weapon.
829
830
},
830
831
inventoryChanges
@@ -1402,6 +1402,10 @@ async function populateInventoryRoute() {
1402
1402
revalidateAuthz().then(async () => {
1403
1403
if (item.XP < maxXP) {
1404
1404
await addGearExp(category, item.ItemId.$oid, maxXP - item.XP);
1405
if (item.AltWeaponModeId) {
1406
const otherCategory = category == "Melee" ? "LongGuns" : "Melee";
1407
await addGearExp(otherCategory, item.AltWeaponModeId.$oid, maxXP - item.XP);
1408
}
1405
1409
}
1406
1410
if ("exalted" in itemMap[item.ItemType]) {
1407
1411
for (const exaltedType of itemMap[item.ItemType].exalted) {