XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFESpaceNinjaServer

feat: implement upgrading & downgrading arcanes (#520)

b7f381ba
Sainan <sainan@calamity.inc>
提交于

代码差异

2 个文件 +79 -0
Added src/controllers/api/arcaneCommonController.ts +77 -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 }
Modified src/routes/api.ts +2 -0
@@ -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);