feat: archon shard fusion
This commit is contained in:
		
							parent
							
								
									9633d307a2
								
							
						
					
					
						commit
						cbda130c04
					
				
							
								
								
									
										49
									
								
								src/controllers/api/archonFusionController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/controllers/api/archonFusionController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { addMiscItems, getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
				
			||||||
 | 
					import { colorToShard, combineColors, shardToColor } from "@/src/helpers/shardHelper";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const archonFusionController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const request = JSON.parse(String(req.body)) as IArchonFusionRequest;
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    request.Consumed.forEach(x => x.ItemCount * -1);
 | 
				
			||||||
 | 
					    addMiscItems(inventory, request.Consumed);
 | 
				
			||||||
 | 
					    const newArchons: IMiscItem[] = [];
 | 
				
			||||||
 | 
					    switch (request.FusionType) {
 | 
				
			||||||
 | 
					        case "AFT_ASCENT":
 | 
				
			||||||
 | 
					            newArchons.push({
 | 
				
			||||||
 | 
					                ItemType: request.Consumed[0].ItemType + "Mythic",
 | 
				
			||||||
 | 
					                ItemCount: 1
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case "AFT_COALESCENT":
 | 
				
			||||||
 | 
					            newArchons.push({
 | 
				
			||||||
 | 
					                ItemType:
 | 
				
			||||||
 | 
					                    colorToShard[
 | 
				
			||||||
 | 
					                        combineColors(
 | 
				
			||||||
 | 
					                            shardToColor[request.Consumed[0].ItemType],
 | 
				
			||||||
 | 
					                            shardToColor[request.Consumed[1].ItemType]
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                ItemCount: 1
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            throw new Error(`unknown archon fusion type: ${request.FusionType}`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    addMiscItems(inventory, newArchons);
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					    res.json({
 | 
				
			||||||
 | 
					        NewArchons: newArchons
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IArchonFusionRequest {
 | 
				
			||||||
 | 
					    Consumed: IMiscItem[];
 | 
				
			||||||
 | 
					    FusionType: string;
 | 
				
			||||||
 | 
					    StatResultType: "SRT_NEW_STAT"; // ???
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -15,6 +15,7 @@ import { getRecipe } from "@/src/services/itemDataService";
 | 
				
			|||||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
					import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
				
			||||||
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
 | 
					import { toMongoDate } from "@/src/helpers/inventoryHelpers";
 | 
				
			||||||
import { logger } from "@/src/utils/logger";
 | 
					import { logger } from "@/src/utils/logger";
 | 
				
			||||||
 | 
					import { colorToShard } from "@/src/helpers/shardHelper";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
					export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
				
			||||||
    const accountId = await getAccountIdForRequest(req);
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
@ -355,21 +356,6 @@ interface IHelminthFeedRequest {
 | 
				
			|||||||
    }[];
 | 
					    }[];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const colorToShard: Record<string, string> = {
 | 
					 | 
				
			||||||
    ACC_RED: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmar",
 | 
					 | 
				
			||||||
    ACC_RED_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmarMythic",
 | 
					 | 
				
			||||||
    ACC_YELLOW: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNira",
 | 
					 | 
				
			||||||
    ACC_YELLOW_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNiraMythic",
 | 
					 | 
				
			||||||
    ACC_BLUE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal",
 | 
					 | 
				
			||||||
    ACC_BLUE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBorealMythic",
 | 
					 | 
				
			||||||
    ACC_GREEN: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreen",
 | 
					 | 
				
			||||||
    ACC_GREEN_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreenMythic",
 | 
					 | 
				
			||||||
    ACC_ORANGE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrange",
 | 
					 | 
				
			||||||
    ACC_ORANGE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrangeMythic",
 | 
					 | 
				
			||||||
    ACC_PURPLE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalViolet",
 | 
					 | 
				
			||||||
    ACC_PURPLE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic"
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): ITypeCount[] => {
 | 
					export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): ITypeCount[] => {
 | 
				
			||||||
    const recipeChanges: ITypeCount[] = [];
 | 
					    const recipeChanges: ITypeCount[] = [];
 | 
				
			||||||
    infestedFoundry.XP ??= 0;
 | 
					    infestedFoundry.XP ??= 0;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										66
									
								
								src/helpers/shardHelper.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/helpers/shardHelper.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					export const colorToShard: Record<string, string> = {
 | 
				
			||||||
 | 
					    ACC_RED: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmar",
 | 
				
			||||||
 | 
					    ACC_RED_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmarMythic",
 | 
				
			||||||
 | 
					    ACC_YELLOW: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNira",
 | 
				
			||||||
 | 
					    ACC_YELLOW_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNiraMythic",
 | 
				
			||||||
 | 
					    ACC_BLUE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal",
 | 
				
			||||||
 | 
					    ACC_BLUE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBorealMythic",
 | 
				
			||||||
 | 
					    ACC_GREEN: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreen",
 | 
				
			||||||
 | 
					    ACC_GREEN_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreenMythic",
 | 
				
			||||||
 | 
					    ACC_ORANGE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrange",
 | 
				
			||||||
 | 
					    ACC_ORANGE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrangeMythic",
 | 
				
			||||||
 | 
					    ACC_PURPLE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalViolet",
 | 
				
			||||||
 | 
					    ACC_PURPLE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const shardToColor: Record<string, string> = {
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmar": "ACC_RED",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmarMythic": "ACC_RED_MYTHIC",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNira": "ACC_YELLOW",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNiraMythic": "ACC_YELLOW_MYTHIC",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal": "ACC_BLUE",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBorealMythic": "ACC_BLUE_MYTHIC",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreen": "ACC_GREEN",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreenMythic": "ACC_GREEN_MYTHIC",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrange": "ACC_ORANGE",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrangeMythic": "ACC_ORANGE_MYTHIC",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalViolet": "ACC_PURPLE",
 | 
				
			||||||
 | 
					    "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic": "ACC_PURPLE_MYTHIC"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const combineColors = (a: string, b: string): string => {
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					        combinePlainColors(a.replace("_MYTHIC", ""), b.replace("_MYTHIC", "")) +
 | 
				
			||||||
 | 
					        (a.indexOf("_MYTHIC") != -1 ? "_MYTHIC" : "")
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const combinePlainColors = (a: string, b: string): string => {
 | 
				
			||||||
 | 
					    switch (a) {
 | 
				
			||||||
 | 
					        case "ACC_RED":
 | 
				
			||||||
 | 
					            switch (b) {
 | 
				
			||||||
 | 
					                case "ACC_YELLOW":
 | 
				
			||||||
 | 
					                    return "ACC_ORANGE";
 | 
				
			||||||
 | 
					                case "ACC_BLUE":
 | 
				
			||||||
 | 
					                    return "ACC_PURPLE";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case "ACC_YELLOW":
 | 
				
			||||||
 | 
					            switch (b) {
 | 
				
			||||||
 | 
					                case "ACC_RED":
 | 
				
			||||||
 | 
					                    return "ACC_ORANGE";
 | 
				
			||||||
 | 
					                case "ACC_BLUE":
 | 
				
			||||||
 | 
					                    return "ACC_GREEN";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case "ACC_BLUE":
 | 
				
			||||||
 | 
					            switch (b) {
 | 
				
			||||||
 | 
					                case "ACC_RED":
 | 
				
			||||||
 | 
					                    return "ACC_PURPLE";
 | 
				
			||||||
 | 
					                case "ACC_YELLOW":
 | 
				
			||||||
 | 
					                    return "ACC_GREEN";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    throw new Error(`invalid color combination request: ${a} and ${b}`);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -2,6 +2,7 @@ import express from "express";
 | 
				
			|||||||
import { activateRandomModController } from "@/src/controllers/api/activateRandomModController";
 | 
					import { activateRandomModController } from "@/src/controllers/api/activateRandomModController";
 | 
				
			||||||
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
 | 
					import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
 | 
				
			||||||
import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
 | 
					import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
 | 
				
			||||||
 | 
					import { archonFusionController } from "@/src/controllers/api/archonFusionController";
 | 
				
			||||||
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";
 | 
				
			||||||
@ -114,6 +115,7 @@ apiRouter.get("/updateSession.php", updateSessionGetController);
 | 
				
			|||||||
apiRouter.post("/activateRandomMod.php", activateRandomModController);
 | 
					apiRouter.post("/activateRandomMod.php", activateRandomModController);
 | 
				
			||||||
apiRouter.post("/addFriendImage.php", addFriendImageController);
 | 
					apiRouter.post("/addFriendImage.php", addFriendImageController);
 | 
				
			||||||
apiRouter.post("/arcaneCommon.php", arcaneCommonController);
 | 
					apiRouter.post("/arcaneCommon.php", arcaneCommonController);
 | 
				
			||||||
 | 
					apiRouter.post("/archonFusion.php", archonFusionController);
 | 
				
			||||||
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