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