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(webui): update inventory when in-game changes are made (#2239)

A bit of a rough initial implementation, but already works pretty well. Closes #2224 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2239 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

6dd9b42f
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

7 个文件 +15 -0
Modified src/controllers/api/missionInventoryUpdateController.ts +3 -0
@@ -7,6 +7,7 @@ import { generateRewardSeed, getInventory } from "@/src/services/inventoryServic
7 7 import { getInventoryResponse } from "./inventoryController";
8 8 import { logger } from "@/src/utils/logger";
9 9 import { IMissionInventoryUpdateResponse } from "@/src/types/missionTypes";
10 import { sendWsBroadcastTo } from "@/src/services/webService";
10 11
11 12 /*
12 13 **** INPUT ****
@@ -76,6 +77,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res)
76 77 InventoryJson: JSON.stringify(inventoryResponse),
77 78 MissionRewards: []
78 79 });
80 sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
79 81 return;
80 82 }
81 83
@@ -106,6 +108,7 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res)
106 108 AffiliationMods,
107 109 ConquestCompletedMissionsCount
108 110 } satisfies IMissionInventoryUpdateResponse);
111 sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
109 112 };
110 113
111 114 /*
Modified src/controllers/api/nameWeaponController.ts +2 -0
@@ -3,6 +3,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
3 3 import { getInventory, updateCurrency } from "@/src/services/inventoryService";
4 4 import { getJSONfromString } from "@/src/helpers/stringHelpers";
5 5 import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
6 import { sendWsBroadcastTo } from "@/src/services/webService";
6 7
7 8 interface INameWeaponRequest {
8 9 ItemName: string;
@@ -27,4 +28,5 @@ export const nameWeaponController: RequestHandler = async (req, res) => {
27 28 res.json({
28 29 InventoryChanges: currencyChanges
29 30 });
31 sendWsBroadcastTo(accountId, { update_inventory: true });
30 32 };
Modified src/controllers/api/purchaseController.ts +2 -0
@@ -3,6 +3,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
3 3 import { IPurchaseRequest } from "@/src/types/purchaseTypes";
4 4 import { handlePurchase } from "@/src/services/purchaseService";
5 5 import { getInventory } from "@/src/services/inventoryService";
6 import { sendWsBroadcastTo } from "@/src/services/webService";
6 7
7 8 export const purchaseController: RequestHandler = async (req, res) => {
8 9 const purchaseRequest = JSON.parse(String(req.body)) as IPurchaseRequest;
@@ -11,4 +12,5 @@ export const purchaseController: RequestHandler = async (req, res) => {
11 12 const response = await handlePurchase(purchaseRequest, inventory);
12 13 await inventory.save();
13 14 res.json(response);
15 sendWsBroadcastTo(accountId, { update_inventory: true });
14 16 };
Modified src/controllers/api/renamePetController.ts +2 -0
@@ -1,6 +1,7 @@
1 1 import { getJSONfromString } from "@/src/helpers/stringHelpers";
2 2 import { getInventory, updateCurrency } from "@/src/services/inventoryService";
3 3 import { getAccountIdForRequest } from "@/src/services/loginService";
4 import { sendWsBroadcastTo } from "@/src/services/webService";
4 5 import { IInventoryChanges } from "@/src/types/purchaseTypes";
5 6 import { RequestHandler } from "express";
6 7
@@ -22,6 +23,7 @@ export const renamePetController: RequestHandler = async (req, res) => {
22 23 ...data,
23 24 inventoryChanges: inventoryChanges
24 25 });
26 sendWsBroadcastTo(accountId, { update_inventory: true });
25 27 };
26 28
27 29 interface IRenamePetRequest {
Modified src/controllers/api/sellController.ts +2 -0
@@ -15,6 +15,7 @@ import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
15 15 import { ExportDojoRecipes } from "warframe-public-export-plus";
16 16 import { IInventoryChanges } from "@/src/types/purchaseTypes";
17 17 import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
18 import { sendWsBroadcastTo } from "@/src/services/webService";
18 19
19 20 export const sellController: RequestHandler = async (req, res) => {
20 21 const payload = JSON.parse(String(req.body)) as ISellRequest;
@@ -279,6 +280,7 @@ export const sellController: RequestHandler = async (req, res) => {
279 280 res.json({
280 281 inventoryChanges: inventoryChanges // "inventoryChanges" for this response instead of the usual "InventoryChanges"
281 282 });
283 sendWsBroadcastTo(accountId, { update_inventory: true });
282 284 };
283 285
284 286 interface ISellRequest {
Modified src/services/webService.ts +1 -0
@@ -125,6 +125,7 @@ interface IWsMsgToClient {
125 125 isRegister: boolean;
126 126 };
127 127 logged_out?: boolean;
128 update_inventory?: boolean;
128 129 }
129 130
130 131 const wsOnConnect = (ws: ws, _req: http.IncomingMessage): void => {
Modified static/webui/script.js +3 -0
@@ -79,6 +79,9 @@ function openWebSocket() {
79 79 if ("logged_out" in msg) {
80 80 sendAuth();
81 81 }
82 if ("update_inventory" in msg) {
83 updateInventory();
84 }
82 85 };
83 86 window.ws.onclose = function () {
84 87 ws_is_open = false;