返回提交历史
Modified
src/controllers/api/missionInventoryUpdateController.ts
+3
-0
Modified
src/controllers/api/nameWeaponController.ts
+2
-0
Modified
src/controllers/api/purchaseController.ts
+2
-0
Modified
src/controllers/api/renamePetController.ts
+2
-0
Modified
src/controllers/api/sellController.ts
+2
-0
Modified
src/services/webService.ts
+1
-0
Modified
static/webui/script.js
+3
-0
XFEstudio/XFESpaceNinjaServer
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
代码差异
7 个文件
+15
-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
/*
@@ -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
};
@@ -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
};
@@ -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 {
@@ -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 {
@@ -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 => {
@@ -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;