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

SpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/SpaceNinjaServer

feat: archon shard fusion (#785)

534f7d8c
Sainan <sainan@calamity.inc>
提交于

代码差异

4 个文件 +120 -15
Added src/controllers/api/archonFusionController.ts +51 -0
@@ -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 }
Modified src/controllers/api/infestedFoundryController.ts +1 -15
@@ -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;
Added src/helpers/shardHelper.ts +66 -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 };
Modified src/routes/api.ts +2 -0
@@ -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);