feat: archon shard fusion (#785)
This commit is contained in:
parent
6ee28e5864
commit
534f7d8cce
51
src/controllers/api/archonFusionController.ts
Normal file
51
src/controllers/api/archonFusionController.ts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
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