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

代码差异

4 个文件 +40 -5
Modified src/controllers/api/focusController.ts +16 -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 => {
Modified src/controllers/api/upgradesController.ts +19 -0
@@ -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 }
Modified src/services/inventoryService.ts +1 -0
@@ -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
Modified static/webui/script.js +4 -0
@@ -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) {