feat: implement socketing of ayatan sculptures (#542)

This commit is contained in:
Sainan 2024-10-12 23:51:45 +02:00 committed by GitHub
parent 6c4c685690
commit 07c2fbcadf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 59 additions and 10 deletions

8
package-lock.json generated
View File

@ -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",

View File

@ -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"

View 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();
};

View File

@ -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)
}); });
} }

View File

@ -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);

View File

@ -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;