返回提交历史
Modified
package-lock.json
+4
-4
Modified
package.json
+1
-1
Added
src/controllers/api/fusionTreasuresController.ts
+50
-0
Modified
src/controllers/custom/getItemListsController.ts
+1
-1
Modified
src/routes/api.ts
+2
-0
Modified
src/services/inventoryService.ts
+1
-4
XFEstudio/SpaceNinjaServer
feat: implement socketing of ayatan sculptures (#542)
07c2fbca
代码差异
6 个文件
+59
-10
@@ -12,7 +12,7 @@
12
12
"copyfiles": "^2.4.1",
13
13
"express": "^5.0.0-beta.3",
14
14
"mongoose": "^8.4.5",
15
"warframe-public-export-plus": "^0.5.1",
15
"warframe-public-export-plus": "^0.5.2",
16
16
"warframe-riven-info": "^0.1.1",
17
17
"winston": "^3.13.0",
18
18
"winston-daily-rotate-file": "^5.0.0"
@@ -3778,9 +3778,9 @@
3778
3778
}
3779
3779
},
3780
3780
"node_modules/warframe-public-export-plus": {
3781
"version": "0.5.1",
3782
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.1.tgz",
3783
"integrity": "sha512-i9Qlh/xEqUQzLj6Dda0VB0nWkyEyWDYEnAyNTbb3IxebCLWEcizCSf3nkAae5xuKvwCvOefInOAa2YgiYwzr/A=="
3781
"version": "0.5.2",
3782
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.2.tgz",
3783
"integrity": "sha512-mv7abHis5ytlevnx9lSLwnqnv5/3t322/OKkR99Hrw+w7Qm+Ps6agZcTqNaIy6zrM1vsvWY1NnbxVe2+JIW6/Q=="
3784
3784
},
3785
3785
"node_modules/warframe-riven-info": {
3786
3786
"version": "0.1.1",
@@ -16,7 +16,7 @@
16
16
"copyfiles": "^2.4.1",
17
17
"express": "^5.0.0-beta.3",
18
18
"mongoose": "^8.4.5",
19
"warframe-public-export-plus": "^0.5.1",
19
"warframe-public-export-plus": "^0.5.2",
20
20
"warframe-riven-info": "^0.1.1",
21
21
"winston": "^3.13.0",
22
22
"winston-daily-rotate-file": "^5.0.0"
@@ -0,0 +1,50 @@
1
import { RequestHandler } from "express";
2
import { ExportResources } from "warframe-public-export-plus";
3
import { getAccountIdForRequest } from "@/src/services/loginService";
4
import { addFusionTreasures, addMiscItems, getInventory } from "@/src/services/inventoryService";
5
import { IFusionTreasure, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
6
7
interface IFusionTreasureRequest {
8
oldTreasureName: string;
9
newTreasureName: string;
10
}
11
12
const parseFusionTreasure = (name: string, count: number): IFusionTreasure => {
13
const arr = name.split("_");
14
return {
15
ItemType: arr[0],
16
Sockets: parseInt(arr[1], 16),
17
ItemCount: count
18
};
19
};
20
21
// eslint-disable-next-line @typescript-eslint/no-misused-promises
22
export const fusionTreasuresController: RequestHandler = async (req, res) => {
23
const accountId = await getAccountIdForRequest(req);
24
const inventory = await getInventory(accountId);
25
const request = JSON.parse(req.body.toString() as string) as IFusionTreasureRequest;
26
27
const oldTreasure = parseFusionTreasure(request.oldTreasureName, -1);
28
const newTreasure = parseFusionTreasure(request.newTreasureName, 1);
29
30
// Swap treasures
31
addFusionTreasures(inventory, [oldTreasure]);
32
addFusionTreasures(inventory, [newTreasure]);
33
34
// Remove consumed stars
35
const miscItemChanges: IMiscItem[] = [];
36
const filledSockets = newTreasure.Sockets & ~oldTreasure.Sockets;
37
for (let i = 0; filledSockets >> i; ++i) {
38
if ((filledSockets >> i) & 1) {
39
//console.log("Socket", i, "has been filled with", ExportResources[oldTreasure.ItemType].sockets![i]);
40
miscItemChanges.push({
41
ItemType: ExportResources[oldTreasure.ItemType].sockets![i],
42
ItemCount: -1
43
});
44
}
45
}
46
addMiscItems(inventory, miscItemChanges);
47
48
await inventory.save();
49
res.end();
50
};
@@ -36,7 +36,7 @@ const getItemListsController: RequestHandler = (_req, res) => {
36
36
}
37
37
for (const [uniqueName, item] of Object.entries(ExportResources)) {
38
38
miscitems.push({
39
uniqueName: "MiscItems:" + uniqueName,
39
uniqueName: item.productCategory + ":" + uniqueName,
40
40
name: getEnglishString(item.name)
41
41
});
42
42
}
@@ -11,6 +11,7 @@ import { dronesController } from "@/src/controllers/api/dronesController";
11
11
import { evolveWeaponController } from "@/src/controllers/api/evolveWeaponController";
12
12
import { findSessionsController } from "@/src/controllers/api/findSessionsController";
13
13
import { focusController } from "@/src/controllers/api/focusController";
14
import { fusionTreasuresController } from "@/src/controllers/api/fusionTreasuresController";
14
15
import { genericUpdateController } from "@/src/controllers/api/genericUpdateController";
15
16
import { getAllianceController } from "@/src/controllers/api/getAllianceController";
16
17
import { getCreditsController } from "@/src/controllers/api/getCreditsController";
@@ -109,6 +110,7 @@ apiRouter.post("/createGuild.php", createGuildController);
109
110
apiRouter.post("/evolveWeapon.php", evolveWeaponController);
110
111
apiRouter.post("/findSessions.php", findSessionsController);
111
112
apiRouter.post("/focus.php", focusController);
113
apiRouter.post("/fusionTreasures.php", fusionTreasuresController);
112
114
apiRouter.post("/genericUpdate.php", genericUpdateController);
113
115
apiRouter.post("/getAlliance.php", getAllianceController);
114
116
apiRouter.post("/gildWeapon.php", gildWeaponController);
@@ -657,10 +657,7 @@ export const addFusionTreasures = (
657
657
) => {
658
658
const { FusionTreasures } = inventory;
659
659
itemsArray?.forEach(({ ItemType, ItemCount, Sockets }) => {
660
const itemIndex = FusionTreasures.findIndex(i => {
661
i.ItemType === ItemType;
662
i.Sockets === Sockets;
663
});
660
const itemIndex = FusionTreasures.findIndex(i => i.ItemType == ItemType && (i.Sockets || 0) == (Sockets || 0));
664
661
665
662
if (itemIndex !== -1) {
666
663
FusionTreasures[itemIndex].ItemCount += ItemCount;