implement weapon gilding
This commit is contained in:
		
							parent
							
								
									9b7127972d
								
							
						
					
					
						commit
						f78b75083b
					
				
							
								
								
									
										64
									
								
								src/controllers/api/gildWeaponController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/controllers/api/gildWeaponController.ts
									
									
									
									
									
										Normal 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]
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user