forked from OpenWF/SpaceNinjaServer
feat: implement socketing of ayatan sculptures (#542)
This commit is contained in:
parent
6c4c685690
commit
07c2fbcadf
8
package-lock.json
generated
8
package-lock.json
generated
@ -12,7 +12,7 @@
|
||||
"copyfiles": "^2.4.1",
|
||||
"express": "^5.0.0-beta.3",
|
||||
"mongoose": "^8.4.5",
|
||||
"warframe-public-export-plus": "^0.5.1",
|
||||
"warframe-public-export-plus": "^0.5.2",
|
||||
"warframe-riven-info": "^0.1.1",
|
||||
"winston": "^3.13.0",
|
||||
"winston-daily-rotate-file": "^5.0.0"
|
||||
@ -3778,9 +3778,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/warframe-public-export-plus": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.1.tgz",
|
||||
"integrity": "sha512-i9Qlh/xEqUQzLj6Dda0VB0nWkyEyWDYEnAyNTbb3IxebCLWEcizCSf3nkAae5xuKvwCvOefInOAa2YgiYwzr/A=="
|
||||
"version": "0.5.2",
|
||||
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.2.tgz",
|
||||
"integrity": "sha512-mv7abHis5ytlevnx9lSLwnqnv5/3t322/OKkR99Hrw+w7Qm+Ps6agZcTqNaIy6zrM1vsvWY1NnbxVe2+JIW6/Q=="
|
||||
},
|
||||
"node_modules/warframe-riven-info": {
|
||||
"version": "0.1.1",
|
||||
|
@ -16,7 +16,7 @@
|
||||
"copyfiles": "^2.4.1",
|
||||
"express": "^5.0.0-beta.3",
|
||||
"mongoose": "^8.4.5",
|
||||
"warframe-public-export-plus": "^0.5.1",
|
||||
"warframe-public-export-plus": "^0.5.2",
|
||||
"warframe-riven-info": "^0.1.1",
|
||||
"winston": "^3.13.0",
|
||||
"winston-daily-rotate-file": "^5.0.0"
|
||||
|
50
src/controllers/api/fusionTreasuresController.ts
Normal file
50
src/controllers/api/fusionTreasuresController.ts
Normal file
@ -0,0 +1,50 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { ExportResources } from "warframe-public-export-plus";
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { addFusionTreasures, addMiscItems, getInventory } from "@/src/services/inventoryService";
|
||||
import { IFusionTreasure, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
|
||||
interface IFusionTreasureRequest {
|
||||
oldTreasureName: string;
|
||||
newTreasureName: string;
|
||||
}
|
||||
|
||||
const parseFusionTreasure = (name: string, count: number): IFusionTreasure => {
|
||||
const arr = name.split("_");
|
||||
return {
|
||||
ItemType: arr[0],
|
||||
Sockets: parseInt(arr[1], 16),
|
||||
ItemCount: count
|
||||
};
|
||||
};
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
export const fusionTreasuresController: RequestHandler = async (req, res) => {
|
||||
const accountId = await getAccountIdForRequest(req);
|
||||
const inventory = await getInventory(accountId);
|
||||
const request = JSON.parse(req.body.toString() as string) as IFusionTreasureRequest;
|
||||
|
||||
const oldTreasure = parseFusionTreasure(request.oldTreasureName, -1);
|
||||
const newTreasure = parseFusionTreasure(request.newTreasureName, 1);
|
||||
|
||||
// Swap treasures
|
||||
addFusionTreasures(inventory, [oldTreasure]);
|
||||
addFusionTreasures(inventory, [newTreasure]);
|
||||
|
||||
// Remove consumed stars
|
||||
const miscItemChanges: IMiscItem[] = [];
|
||||
const filledSockets = newTreasure.Sockets & ~oldTreasure.Sockets;
|
||||
for (let i = 0; filledSockets >> i; ++i) {
|
||||
if ((filledSockets >> i) & 1) {
|
||||
//console.log("Socket", i, "has been filled with", ExportResources[oldTreasure.ItemType].sockets![i]);
|
||||
miscItemChanges.push({
|
||||
ItemType: ExportResources[oldTreasure.ItemType].sockets![i],
|
||||
ItemCount: -1
|
||||
});
|
||||
}
|
||||
}
|
||||
addMiscItems(inventory, miscItemChanges);
|
||||
|
||||
await inventory.save();
|
||||
res.end();
|
||||
};
|
@ -36,7 +36,7 @@ const getItemListsController: RequestHandler = (_req, res) => {
|
||||
}
|
||||
for (const [uniqueName, item] of Object.entries(ExportResources)) {
|
||||
miscitems.push({
|
||||
uniqueName: "MiscItems:" + uniqueName,
|
||||
uniqueName: item.productCategory + ":" + uniqueName,
|
||||
name: getEnglishString(item.name)
|
||||
});
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import { dronesController } from "@/src/controllers/api/dronesController";
|
||||
import { evolveWeaponController } from "@/src/controllers/api/evolveWeaponController";
|
||||
import { findSessionsController } from "@/src/controllers/api/findSessionsController";
|
||||
import { focusController } from "@/src/controllers/api/focusController";
|
||||
import { fusionTreasuresController } from "@/src/controllers/api/fusionTreasuresController";
|
||||
import { genericUpdateController } from "@/src/controllers/api/genericUpdateController";
|
||||
import { getAllianceController } from "@/src/controllers/api/getAllianceController";
|
||||
import { getCreditsController } from "@/src/controllers/api/getCreditsController";
|
||||
@ -109,6 +110,7 @@ apiRouter.post("/createGuild.php", createGuildController);
|
||||
apiRouter.post("/evolveWeapon.php", evolveWeaponController);
|
||||
apiRouter.post("/findSessions.php", findSessionsController);
|
||||
apiRouter.post("/focus.php", focusController);
|
||||
apiRouter.post("/fusionTreasures.php", fusionTreasuresController);
|
||||
apiRouter.post("/genericUpdate.php", genericUpdateController);
|
||||
apiRouter.post("/getAlliance.php", getAllianceController);
|
||||
apiRouter.post("/gildWeapon.php", gildWeaponController);
|
||||
|
@ -657,10 +657,7 @@ export const addFusionTreasures = (
|
||||
) => {
|
||||
const { FusionTreasures } = inventory;
|
||||
itemsArray?.forEach(({ ItemType, ItemCount, Sockets }) => {
|
||||
const itemIndex = FusionTreasures.findIndex(i => {
|
||||
i.ItemType === ItemType;
|
||||
i.Sockets === Sockets;
|
||||
});
|
||||
const itemIndex = FusionTreasures.findIndex(i => i.ItemType == ItemType && (i.Sockets || 0) == (Sockets || 0));
|
||||
|
||||
if (itemIndex !== -1) {
|
||||
FusionTreasures[itemIndex].ItemCount += ItemCount;
|
||||
|
Loading…
x
Reference in New Issue
Block a user