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: implement socketing of ayatan sculptures (#542)

07c2fbca
Sainan <sainan@calamity.inc>
提交于

代码差异

6 个文件 +59 -10
Modified package-lock.json +4 -4
@@ -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",
Modified package.json +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"
Added src/controllers/api/fusionTreasuresController.ts +50 -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 };
Modified src/controllers/custom/getItemListsController.ts +1 -1
@@ -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 }
Modified src/routes/api.ts +2 -0
@@ -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);
Modified src/services/inventoryService.ts +1 -4
@@ -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;