forked from OpenWF/SpaceNinjaServer
feat: gilded weapons (#410)
Co-authored-by: AMelonInsideLemon <AMelonInsideLemon@users.noreply.github.com>
This commit is contained in:
parent
34c0011abf
commit
94f6d1b941
66
src/controllers/api/gildWeaponController.ts
Normal file
66
src/controllers/api/gildWeaponController.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
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;
|
||||||
|
Category: 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.Category = req.query.Category as WeaponTypeInternal | "Hoverboards";
|
||||||
|
|
||||||
|
const inventory = await getInventory(accountId);
|
||||||
|
if (!inventory[data.Category]) {
|
||||||
|
throw new Error(`Category ${req.query.Category} not found in inventory`);
|
||||||
|
}
|
||||||
|
const weaponIndex = inventory[data.Category].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.Category][weaponIndex];
|
||||||
|
weapon.Features = EquipmentFeatures.GILDED; // maybe 9 idk if DOUBLE_CAPACITY is also given
|
||||||
|
weapon.ItemName = data.ItemName;
|
||||||
|
weapon.XP = 0;
|
||||||
|
if (data.Category != "OperatorAmps" && data.PolarizeSlot && data.PolarizeValue) {
|
||||||
|
weapon.Polarity = [
|
||||||
|
{
|
||||||
|
Slot: data.PolarizeSlot,
|
||||||
|
Value: data.PolarizeValue
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
inventory[data.Category][weaponIndex] = weapon;
|
||||||
|
await inventory.save();
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
InventoryChanges: {
|
||||||
|
[data.Category]: [weapon]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
@ -61,6 +61,7 @@ import { updateChallengeProgressController } from "@/src/controllers/api/updateC
|
|||||||
import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController";
|
import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController";
|
||||||
import { updateThemeController } from "../controllers/api/updateThemeController";
|
import { updateThemeController } from "../controllers/api/updateThemeController";
|
||||||
import { upgradesController } from "@/src/controllers/api/upgradesController";
|
import { upgradesController } from "@/src/controllers/api/upgradesController";
|
||||||
|
import { gildWeaponController } from "../controllers/api/gildWeaponController";
|
||||||
|
|
||||||
const apiRouter = express.Router();
|
const apiRouter = express.Router();
|
||||||
|
|
||||||
@ -106,6 +107,7 @@ apiRouter.post("/findSessions.php", findSessionsController);
|
|||||||
apiRouter.post("/focus.php", focusController);
|
apiRouter.post("/focus.php", focusController);
|
||||||
apiRouter.post("/genericUpdate.php", genericUpdateController);
|
apiRouter.post("/genericUpdate.php", genericUpdateController);
|
||||||
apiRouter.post("/getAlliance.php", getAllianceController);
|
apiRouter.post("/getAlliance.php", getAllianceController);
|
||||||
|
apiRouter.post("/gildWeapon.php", gildWeaponController);
|
||||||
apiRouter.post("/guildTech.php", guildTechController);
|
apiRouter.post("/guildTech.php", guildTechController);
|
||||||
apiRouter.post("/hostSession.php", hostSessionController);
|
apiRouter.post("/hostSession.php", hostSessionController);
|
||||||
apiRouter.post("/infestedFoundry.php", infestedFoundryController);
|
apiRouter.post("/infestedFoundry.php", infestedFoundryController);
|
||||||
|
@ -86,6 +86,7 @@ export enum EquipmentFeatures {
|
|||||||
DOUBLE_CAPACITY = 1,
|
DOUBLE_CAPACITY = 1,
|
||||||
UTILITY_SLOT = 2,
|
UTILITY_SLOT = 2,
|
||||||
GRAVIMAG_INSTALLED = 4,
|
GRAVIMAG_INSTALLED = 4,
|
||||||
|
GILDED = 8,
|
||||||
ARCANE_SLOT = 32,
|
ARCANE_SLOT = 32,
|
||||||
INCARNON_GENESIS = 512
|
INCARNON_GENESIS = 512
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user