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