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",
|
"copyfiles": "^2.4.1",
|
||||||
"express": "^5.0.0-beta.3",
|
"express": "^5.0.0-beta.3",
|
||||||
"mongoose": "^8.4.5",
|
"mongoose": "^8.4.5",
|
||||||
"warframe-public-export-plus": "^0.5.1",
|
"warframe-public-export-plus": "^0.5.2",
|
||||||
"warframe-riven-info": "^0.1.1",
|
"warframe-riven-info": "^0.1.1",
|
||||||
"winston": "^3.13.0",
|
"winston": "^3.13.0",
|
||||||
"winston-daily-rotate-file": "^5.0.0"
|
"winston-daily-rotate-file": "^5.0.0"
|
||||||
@ -3778,9 +3778,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/warframe-public-export-plus": {
|
"node_modules/warframe-public-export-plus": {
|
||||||
"version": "0.5.1",
|
"version": "0.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.2.tgz",
|
||||||
"integrity": "sha512-i9Qlh/xEqUQzLj6Dda0VB0nWkyEyWDYEnAyNTbb3IxebCLWEcizCSf3nkAae5xuKvwCvOefInOAa2YgiYwzr/A=="
|
"integrity": "sha512-mv7abHis5ytlevnx9lSLwnqnv5/3t322/OKkR99Hrw+w7Qm+Ps6agZcTqNaIy6zrM1vsvWY1NnbxVe2+JIW6/Q=="
|
||||||
},
|
},
|
||||||
"node_modules/warframe-riven-info": {
|
"node_modules/warframe-riven-info": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
"copyfiles": "^2.4.1",
|
"copyfiles": "^2.4.1",
|
||||||
"express": "^5.0.0-beta.3",
|
"express": "^5.0.0-beta.3",
|
||||||
"mongoose": "^8.4.5",
|
"mongoose": "^8.4.5",
|
||||||
"warframe-public-export-plus": "^0.5.1",
|
"warframe-public-export-plus": "^0.5.2",
|
||||||
"warframe-riven-info": "^0.1.1",
|
"warframe-riven-info": "^0.1.1",
|
||||||
"winston": "^3.13.0",
|
"winston": "^3.13.0",
|
||||||
"winston-daily-rotate-file": "^5.0.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)) {
|
for (const [uniqueName, item] of Object.entries(ExportResources)) {
|
||||||
miscitems.push({
|
miscitems.push({
|
||||||
uniqueName: "MiscItems:" + uniqueName,
|
uniqueName: item.productCategory + ":" + uniqueName,
|
||||||
name: getEnglishString(item.name)
|
name: getEnglishString(item.name)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import { dronesController } from "@/src/controllers/api/dronesController";
|
|||||||
import { evolveWeaponController } from "@/src/controllers/api/evolveWeaponController";
|
import { evolveWeaponController } from "@/src/controllers/api/evolveWeaponController";
|
||||||
import { findSessionsController } from "@/src/controllers/api/findSessionsController";
|
import { findSessionsController } from "@/src/controllers/api/findSessionsController";
|
||||||
import { focusController } from "@/src/controllers/api/focusController";
|
import { focusController } from "@/src/controllers/api/focusController";
|
||||||
|
import { fusionTreasuresController } from "@/src/controllers/api/fusionTreasuresController";
|
||||||
import { genericUpdateController } from "@/src/controllers/api/genericUpdateController";
|
import { genericUpdateController } from "@/src/controllers/api/genericUpdateController";
|
||||||
import { getAllianceController } from "@/src/controllers/api/getAllianceController";
|
import { getAllianceController } from "@/src/controllers/api/getAllianceController";
|
||||||
import { getCreditsController } from "@/src/controllers/api/getCreditsController";
|
import { getCreditsController } from "@/src/controllers/api/getCreditsController";
|
||||||
@ -109,6 +110,7 @@ apiRouter.post("/createGuild.php", createGuildController);
|
|||||||
apiRouter.post("/evolveWeapon.php", evolveWeaponController);
|
apiRouter.post("/evolveWeapon.php", evolveWeaponController);
|
||||||
apiRouter.post("/findSessions.php", findSessionsController);
|
apiRouter.post("/findSessions.php", findSessionsController);
|
||||||
apiRouter.post("/focus.php", focusController);
|
apiRouter.post("/focus.php", focusController);
|
||||||
|
apiRouter.post("/fusionTreasures.php", fusionTreasuresController);
|
||||||
apiRouter.post("/genericUpdate.php", genericUpdateController);
|
apiRouter.post("/genericUpdate.php", genericUpdateController);
|
||||||
apiRouter.post("/getAlliance.php", getAllianceController);
|
apiRouter.post("/getAlliance.php", getAllianceController);
|
||||||
apiRouter.post("/gildWeapon.php", gildWeaponController);
|
apiRouter.post("/gildWeapon.php", gildWeaponController);
|
||||||
|
@ -657,10 +657,7 @@ export const addFusionTreasures = (
|
|||||||
) => {
|
) => {
|
||||||
const { FusionTreasures } = inventory;
|
const { FusionTreasures } = inventory;
|
||||||
itemsArray?.forEach(({ ItemType, ItemCount, Sockets }) => {
|
itemsArray?.forEach(({ ItemType, ItemCount, Sockets }) => {
|
||||||
const itemIndex = FusionTreasures.findIndex(i => {
|
const itemIndex = FusionTreasures.findIndex(i => i.ItemType == ItemType && (i.Sockets || 0) == (Sockets || 0));
|
||||||
i.ItemType === ItemType;
|
|
||||||
i.Sockets === Sockets;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (itemIndex !== -1) {
|
if (itemIndex !== -1) {
|
||||||
FusionTreasures[itemIndex].ItemCount += ItemCount;
|
FusionTreasures[itemIndex].ItemCount += ItemCount;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user