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 express from "express";
|
||||||
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
|
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
|
||||||
|
import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
|
||||||
import { artifactsController } from "../controllers/api/artifactsController";
|
import { artifactsController } from "../controllers/api/artifactsController";
|
||||||
import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController";
|
import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController";
|
||||||
import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
|
import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
|
||||||
@ -101,6 +102,7 @@ apiRouter.get("/updateSession.php", updateSessionGetController);
|
|||||||
|
|
||||||
// post
|
// post
|
||||||
apiRouter.post("/addFriendImage.php", addFriendImageController);
|
apiRouter.post("/addFriendImage.php", addFriendImageController);
|
||||||
|
apiRouter.post("/arcaneCommon.php", arcaneCommonController);
|
||||||
apiRouter.post("/artifacts.php", artifactsController);
|
apiRouter.post("/artifacts.php", artifactsController);
|
||||||
apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
|
apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
|
||||||
apiRouter.post("/createGuild.php", createGuildController);
|
apiRouter.post("/createGuild.php", createGuildController);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user