implement weapon gilding

This commit is contained in:
dutlist 2024-06-26 15:24:08 +02:00
parent 9b7127972d
commit f78b75083b
3 changed files with 68 additions and 0 deletions

View File

@ -0,0 +1,64 @@
import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { getInventory } from "@/src/services/inventoryService";
import { WeaponTypeInternal } from "@/src/services/itemDataService";
import { ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes";
const modularWeaponCategory: (WeaponTypeInternal | "Hoverboards")[] = [
"LongGuns",
"Pistols",
"Melee",
"OperatorAmps",
"Hoverboards" // Not sure about hoverboards just coppied from modual crafting
];
interface IGildWeaponRequest {
ItemName: string;
Recipe: string; // /Lotus/Weapons/SolarisUnited/LotusGildKitgunBlueprint
PolarizeSlot?: number;
PolarizeValue?: ArtifactPolarity;
ItemId: string;
Caterogy: WeaponTypeInternal | "Hoverboards";
}
// In export there no recipes for gild action, so reputation and ressources only consumed visually
// eslint-disable-next-line @typescript-eslint/no-misused-promises
export const gildWeaponController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const data: IGildWeaponRequest = getJSONfromString(String(req.body));
data.ItemId = String(req.query.ItemId);
if (!modularWeaponCategory.includes(req.query.Category as WeaponTypeInternal | "Hoverboards")) {
throw new Error(`unknown modular weapon Category: ${req.query.Category}`);
}
data.Caterogy = req.query.Category as WeaponTypeInternal | "Hoverboards";
const inventory = await getInventory(accountId);
if(!inventory[data.Caterogy]){
throw new Error(`Category ${req.query.Category} dont foudn in inventory`);
}
const weaponIndex = inventory[data.Caterogy].findIndex(x => String(x._id) === data.ItemId);
if(weaponIndex === -1){
throw new Error(`Weapon with ${data.ItemId} not found in category ${req.query.Category}`);
}
const weapon = inventory[data.Caterogy][weaponIndex];
weapon.Features = EquipmentFeatures.GILDING; // maybe 9 idk if DOUBLE_CAPACITY is also given
weapon.ItemName = data.ItemName
weapon.XP = 0;
if(data.Caterogy != "OperatorAmps" && (data.PolarizeSlot && data.PolarizeValue)){
weapon.Polarity= [{
Slot: data.PolarizeSlot,
Value: data.PolarizeValue
}]
}
inventory[data.Caterogy][weaponIndex] = weapon
await inventory.save();
res.json({
InventoryChanges: {
[data.Caterogy]: [weapon]
}
});
};

View File

@ -61,6 +61,7 @@ import { updateChallengeProgressController } from "@/src/controllers/api/updateC
import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController";
import { updateThemeController } from "../controllers/api/updateThemeController";
import { upgradesController } from "@/src/controllers/api/upgradesController";
import { gildWeaponController } from "../controllers/api/gildWeaponController";
const apiRouter = express.Router();
@ -106,6 +107,7 @@ apiRouter.post("/findSessions.php", findSessionsController);
apiRouter.post("/focus.php", focusController);
apiRouter.post("/genericUpdate.php", genericUpdateController);
apiRouter.post("/getAlliance.php", getAllianceController);
apiRouter.post("/gildWeapon.php", gildWeaponController);
apiRouter.post("/guildTech.php", guildTechController);
apiRouter.post("/hostSession.php", hostSessionController);
apiRouter.post("/infestedFoundry.php", infestedFoundryController);

View File

@ -86,6 +86,7 @@ export enum EquipmentFeatures {
DOUBLE_CAPACITY = 1,
UTILITY_SLOT = 2,
GRAVIMAG_INSTALLED = 4,
GILDING = 8,
ARCANE_SLOT = 32,
INCARNON_GENESIS = 512
}
@ -112,6 +113,7 @@ export interface IEquipmentDatabase {
Expiry?: IMongoDate;
SkillTree?: string;
ArchonCrystalUpgrades?: IArchonCrystalUpgrade[];
ItemId: IOid;
_id: Types.ObjectId;
}