forked from OpenWF/SpaceNinjaServer
		
	feat: implement upgrading & downgrading arcanes (#520)
This commit is contained in:
		
							parent
							
								
									59389a991b
								
							
						
					
					
						commit
						b7f381ba1d
					
				
							
								
								
									
										77
									
								
								src/controllers/api/arcaneCommonController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								src/controllers/api/arcaneCommonController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { getInventory, addMods } from "@/src/services/inventoryService";
 | 
			
		||||
import { IOid } from "@/src/types/commonTypes";
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
 | 
			
		||||
export const arcaneCommonController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const json = getJSONfromString(String(req.body)) as IArcaneCommonRequest;
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const upgrade = inventory.Upgrades.find(x => x._id!.toString() == json.arcane.ItemId.$oid);
 | 
			
		||||
    if (json.newRank == -1) {
 | 
			
		||||
        // Break down request?
 | 
			
		||||
        if (!upgrade || !upgrade.UpgradeFingerprint) {
 | 
			
		||||
            throw new Error(`Failed to find upgrade with OID ${json.arcane.ItemId.$oid}`);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Remove Upgrade
 | 
			
		||||
        inventory.Upgrades.pull({ _id: json.arcane.ItemId.$oid });
 | 
			
		||||
 | 
			
		||||
        // Add RawUpgrades
 | 
			
		||||
        const numRawUpgradesToGive = arcaneLevelCounts[JSON.parse(upgrade.UpgradeFingerprint).lvl];
 | 
			
		||||
        addMods(inventory, [
 | 
			
		||||
            {
 | 
			
		||||
                ItemType: json.arcane.ItemType,
 | 
			
		||||
                ItemCount: numRawUpgradesToGive
 | 
			
		||||
            }
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        res.json({ upgradeId: json.arcane.ItemId.$oid, numConsumed: numRawUpgradesToGive });
 | 
			
		||||
    } else {
 | 
			
		||||
        // Upgrade request?
 | 
			
		||||
        let numConsumed = arcaneLevelCounts[json.newRank];
 | 
			
		||||
        let upgradeId = json.arcane.ItemId.$oid;
 | 
			
		||||
        if (upgrade) {
 | 
			
		||||
            // Have an existing Upgrade item?
 | 
			
		||||
            if (upgrade.UpgradeFingerprint) {
 | 
			
		||||
                const existingLevel = JSON.parse(upgrade.UpgradeFingerprint).lvl;
 | 
			
		||||
                numConsumed -= arcaneLevelCounts[existingLevel];
 | 
			
		||||
            }
 | 
			
		||||
            upgrade.UpgradeFingerprint = JSON.stringify({ lvl: json.newRank });
 | 
			
		||||
        } else {
 | 
			
		||||
            const newLength = inventory.Upgrades.push({
 | 
			
		||||
                ItemType: json.arcane.ItemType,
 | 
			
		||||
                UpgradeFingerprint: JSON.stringify({ lvl: json.newRank })
 | 
			
		||||
            });
 | 
			
		||||
            upgradeId = inventory.Upgrades[newLength - 1]._id!.toString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Remove RawUpgrades
 | 
			
		||||
        addMods(inventory, [
 | 
			
		||||
            {
 | 
			
		||||
                ItemType: json.arcane.ItemType,
 | 
			
		||||
                ItemCount: numConsumed * -1
 | 
			
		||||
            }
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        res.json({ newLevel: json.newRank, numConsumed, upgradeId });
 | 
			
		||||
    }
 | 
			
		||||
    await inventory.save();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const arcaneLevelCounts = [0, 3, 6, 10, 15, 21];
 | 
			
		||||
 | 
			
		||||
interface IArcaneCommonRequest {
 | 
			
		||||
    arcane: {
 | 
			
		||||
        ItemType: string;
 | 
			
		||||
        ItemId: IOid;
 | 
			
		||||
        FromSKU: boolean;
 | 
			
		||||
        UpgradeFingerprint: string;
 | 
			
		||||
        PendingRerollFingerprint: string;
 | 
			
		||||
        ItemCount: number;
 | 
			
		||||
        LastAdded: IOid;
 | 
			
		||||
    };
 | 
			
		||||
    newRank: number;
 | 
			
		||||
}
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
import express from "express";
 | 
			
		||||
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
 | 
			
		||||
import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
 | 
			
		||||
import { artifactsController } from "../controllers/api/artifactsController";
 | 
			
		||||
import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController";
 | 
			
		||||
import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
 | 
			
		||||
@ -101,6 +102,7 @@ apiRouter.get("/updateSession.php", updateSessionGetController);
 | 
			
		||||
 | 
			
		||||
// post
 | 
			
		||||
apiRouter.post("/addFriendImage.php", addFriendImageController);
 | 
			
		||||
apiRouter.post("/arcaneCommon.php", arcaneCommonController);
 | 
			
		||||
apiRouter.post("/artifacts.php", artifactsController);
 | 
			
		||||
apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
 | 
			
		||||
apiRouter.post("/createGuild.php", createGuildController);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user