返回提交历史
Added
src/controllers/api/archonFusionController.ts
+51
-0
Modified
src/controllers/api/infestedFoundryController.ts
+1
-15
Added
src/helpers/shardHelper.ts
+66
-0
Modified
src/routes/api.ts
+2
-0
XFEstudio/SpaceNinjaServer
feat: archon shard fusion (#785)
534f7d8c
代码差异
4 个文件
+120
-15
@@ -0,0 +1,51 @@
1
import { RequestHandler } from "express";
2
import { getAccountIdForRequest } from "@/src/services/loginService";
3
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
4
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
5
import { colorToShard, combineColors, shardToColor } from "@/src/helpers/shardHelper";
6
7
export const archonFusionController: RequestHandler = async (req, res) => {
8
const accountId = await getAccountIdForRequest(req);
9
const request = JSON.parse(String(req.body)) as IArchonFusionRequest;
10
const inventory = await getInventory(accountId);
11
request.Consumed.forEach(x => {
12
x.ItemCount *= -1;
13
});
14
addMiscItems(inventory, request.Consumed);
15
const newArchons: IMiscItem[] = [];
16
switch (request.FusionType) {
17
case "AFT_ASCENT":
18
newArchons.push({
19
ItemType: request.Consumed[0].ItemType + "Mythic",
20
ItemCount: 1
21
});
22
break;
23
24
case "AFT_COALESCENT":
25
newArchons.push({
26
ItemType:
27
colorToShard[
28
combineColors(
29
shardToColor[request.Consumed[0].ItemType],
30
shardToColor[request.Consumed[1].ItemType]
31
)
32
],
33
ItemCount: 1
34
});
35
break;
36
37
default:
38
throw new Error(`unknown archon fusion type: ${request.FusionType}`);
39
}
40
addMiscItems(inventory, newArchons);
41
await inventory.save();
42
res.json({
43
NewArchons: newArchons
44
});
45
};
46
47
interface IArchonFusionRequest {
48
Consumed: IMiscItem[];
49
FusionType: string;
50
StatResultType: "SRT_NEW_STAT"; // ???
51
}
@@ -15,6 +15,7 @@ import { getRecipe } from "@/src/services/itemDataService";
15
15
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
16
16
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
17
17
import { logger } from "@/src/utils/logger";
18
import { colorToShard } from "@/src/helpers/shardHelper";
18
19
19
20
export const infestedFoundryController: RequestHandler = async (req, res) => {
20
21
const accountId = await getAccountIdForRequest(req);
@@ -355,21 +356,6 @@ interface IHelminthFeedRequest {
355
356
}[];
356
357
}
357
358
358
const colorToShard: Record<string, string> = {
359
ACC_RED: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmar",
360
ACC_RED_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmarMythic",
361
ACC_YELLOW: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNira",
362
ACC_YELLOW_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNiraMythic",
363
ACC_BLUE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal",
364
ACC_BLUE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBorealMythic",
365
ACC_GREEN: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreen",
366
ACC_GREEN_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreenMythic",
367
ACC_ORANGE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrange",
368
ACC_ORANGE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrangeMythic",
369
ACC_PURPLE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalViolet",
370
ACC_PURPLE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic"
371
};
372
373
359
export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): ITypeCount[] => {
374
360
const recipeChanges: ITypeCount[] = [];
375
361
infestedFoundry.XP ??= 0;
@@ -0,0 +1,66 @@
1
export const colorToShard: Record<string, string> = {
2
ACC_RED: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmar",
3
ACC_RED_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmarMythic",
4
ACC_YELLOW: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNira",
5
ACC_YELLOW_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNiraMythic",
6
ACC_BLUE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal",
7
ACC_BLUE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBorealMythic",
8
ACC_GREEN: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreen",
9
ACC_GREEN_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreenMythic",
10
ACC_ORANGE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrange",
11
ACC_ORANGE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrangeMythic",
12
ACC_PURPLE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalViolet",
13
ACC_PURPLE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic"
14
};
15
16
export const shardToColor: Record<string, string> = {
17
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmar": "ACC_RED",
18
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmarMythic": "ACC_RED_MYTHIC",
19
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNira": "ACC_YELLOW",
20
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNiraMythic": "ACC_YELLOW_MYTHIC",
21
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal": "ACC_BLUE",
22
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBorealMythic": "ACC_BLUE_MYTHIC",
23
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreen": "ACC_GREEN",
24
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreenMythic": "ACC_GREEN_MYTHIC",
25
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrange": "ACC_ORANGE",
26
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrangeMythic": "ACC_ORANGE_MYTHIC",
27
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalViolet": "ACC_PURPLE",
28
"/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic": "ACC_PURPLE_MYTHIC"
29
};
30
31
export const combineColors = (a: string, b: string): string => {
32
return (
33
combinePlainColors(a.replace("_MYTHIC", ""), b.replace("_MYTHIC", "")) +
34
(a.indexOf("_MYTHIC") != -1 ? "_MYTHIC" : "")
35
);
36
};
37
38
const combinePlainColors = (a: string, b: string): string => {
39
switch (a) {
40
case "ACC_RED":
41
switch (b) {
42
case "ACC_YELLOW":
43
return "ACC_ORANGE";
44
case "ACC_BLUE":
45
return "ACC_PURPLE";
46
}
47
break;
48
case "ACC_YELLOW":
49
switch (b) {
50
case "ACC_RED":
51
return "ACC_ORANGE";
52
case "ACC_BLUE":
53
return "ACC_GREEN";
54
}
55
break;
56
case "ACC_BLUE":
57
switch (b) {
58
case "ACC_RED":
59
return "ACC_PURPLE";
60
case "ACC_YELLOW":
61
return "ACC_GREEN";
62
}
63
break;
64
}
65
throw new Error(`invalid color combination request: ${a} and ${b}`);
66
};
@@ -2,6 +2,7 @@ import express from "express";
2
2
import { activateRandomModController } from "@/src/controllers/api/activateRandomModController";
3
3
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
4
4
import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
5
import { archonFusionController } from "@/src/controllers/api/archonFusionController";
5
6
import { artifactsController } from "../controllers/api/artifactsController";
6
7
import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController";
7
8
import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController";
@@ -114,6 +115,7 @@ apiRouter.get("/updateSession.php", updateSessionGetController);
114
115
apiRouter.post("/activateRandomMod.php", activateRandomModController);
115
116
apiRouter.post("/addFriendImage.php", addFriendImageController);
116
117
apiRouter.post("/arcaneCommon.php", arcaneCommonController);
118
apiRouter.post("/archonFusion.php", archonFusionController);
117
119
apiRouter.post("/artifacts.php", artifactsController);
118
120
apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
119
121
apiRouter.post("/createGuild.php", createGuildController);