返回提交历史
Added
src/controllers/api/arcaneCommonController.ts
+77
-0
Modified
src/routes/api.ts
+2
-0
XFEstudio/XFESpaceNinjaServer
feat: implement upgrading & downgrading arcanes (#520)
b7f381ba
代码差异
2 个文件
+79
-0
@@ -0,0 +1,77 @@
1
import { RequestHandler } from "express";
2
import { getJSONfromString } from "@/src/helpers/stringHelpers";
3
import { getAccountIdForRequest } from "@/src/services/loginService";
4
import { getInventory, addMods } from "@/src/services/inventoryService";
5
import { IOid } from "@/src/types/commonTypes";
6
7
// eslint-disable-next-line @typescript-eslint/no-misused-promises
8
export const arcaneCommonController: RequestHandler = async (req, res) => {
9
const accountId = await getAccountIdForRequest(req);
10
const json = getJSONfromString(String(req.body)) as IArcaneCommonRequest;
11
const inventory = await getInventory(accountId);
12
const upgrade = inventory.Upgrades.find(x => x._id!.toString() == json.arcane.ItemId.$oid);
13
if (json.newRank == -1) {
14
// Break down request?
15
if (!upgrade || !upgrade.UpgradeFingerprint) {
16
throw new Error(`Failed to find upgrade with OID ${json.arcane.ItemId.$oid}`);
17
}
18
19
// Remove Upgrade
20
inventory.Upgrades.pull({ _id: json.arcane.ItemId.$oid });
21
22
// Add RawUpgrades
23
const numRawUpgradesToGive = arcaneLevelCounts[JSON.parse(upgrade.UpgradeFingerprint).lvl];
24
addMods(inventory, [
25
{
26
ItemType: json.arcane.ItemType,
27
ItemCount: numRawUpgradesToGive
28
}
29
]);
30
31
res.json({ upgradeId: json.arcane.ItemId.$oid, numConsumed: numRawUpgradesToGive });
32
} else {
33
// Upgrade request?
34
let numConsumed = arcaneLevelCounts[json.newRank];
35
let upgradeId = json.arcane.ItemId.$oid;
36
if (upgrade) {
37
// Have an existing Upgrade item?
38
if (upgrade.UpgradeFingerprint) {
39
const existingLevel = JSON.parse(upgrade.UpgradeFingerprint).lvl;
40
numConsumed -= arcaneLevelCounts[existingLevel];
41
}
42
upgrade.UpgradeFingerprint = JSON.stringify({ lvl: json.newRank });
43
} else {
44
const newLength = inventory.Upgrades.push({
45
ItemType: json.arcane.ItemType,
46
UpgradeFingerprint: JSON.stringify({ lvl: json.newRank })
47
});
48
upgradeId = inventory.Upgrades[newLength - 1]._id!.toString();
49
}
50
51
// Remove RawUpgrades
52
addMods(inventory, [
53
{
54
ItemType: json.arcane.ItemType,
55
ItemCount: numConsumed * -1
56
}
57
]);
58
59
res.json({ newLevel: json.newRank, numConsumed, upgradeId });
60
}
61
await inventory.save();
62
};
63
64
const arcaneLevelCounts = [0, 3, 6, 10, 15, 21];
65
66
interface IArcaneCommonRequest {
67
arcane: {
68
ItemType: string;
69
ItemId: IOid;
70
FromSKU: boolean;
71
UpgradeFingerprint: string;
72
PendingRerollFingerprint: string;
73
ItemCount: number;
74
LastAdded: IOid;
75
};
76
newRank: number;
77
}
@@ -1,5 +1,6 @@
1
1
import express from "express";
2
2
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
3
import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
3
4
import { artifactsController } from "../controllers/api/artifactsController";
4
5
import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController";
5
6
import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
@@ -101,6 +102,7 @@ apiRouter.get("/updateSession.php", updateSessionGetController);
101
102
102
103
// post
103
104
apiRouter.post("/addFriendImage.php", addFriendImageController);
105
apiRouter.post("/arcaneCommon.php", arcaneCommonController);
104
106
apiRouter.post("/artifacts.php", artifactsController);
105
107
apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
106
108
apiRouter.post("/createGuild.php", createGuildController);