From e34cb305ada3b593aed99398179a12b3033f130f Mon Sep 17 00:00:00 2001 From: Sainan Date: Sat, 22 Jun 2024 18:40:51 +0200 Subject: [PATCH] feat: gravimag installation (#366) --- src/controllers/api/upgradesController.ts | 26 +++++++++++++------ .../inventoryTypes/commonInventoryTypes.ts | 1 + src/types/inventoryTypes/inventoryTypes.ts | 3 ++- src/types/requestTypes.ts | 5 ++-- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts index 9d89da708..d2f445581 100644 --- a/src/controllers/api/upgradesController.ts +++ b/src/controllers/api/upgradesController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; import { IUpgradesRequest } from "@/src/types/requestTypes"; import { FocusSchool, IEquipmentDatabase, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { IMiscItem, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; @@ -29,7 +29,7 @@ export const upgradesController: RequestHandler = async (req, res) => { switch (operation.UpgradeRequirement) { case "/Lotus/Types/Items/MiscItems/OrokinReactor": case "/Lotus/Types/Items/MiscItems/OrokinCatalyst": - for (const item of inventory[payload.ItemCategory as TEquipmentKey] as IEquipmentDatabase[]) { + for (const item of inventory[payload.ItemCategory]) { if (item._id.toString() == payload.ItemId.$oid) { item.Features ??= 0; item.Features |= EquipmentFeatures.DOUBLE_CAPACITY; @@ -39,7 +39,7 @@ export const upgradesController: RequestHandler = async (req, res) => { break; case "/Lotus/Types/Items/MiscItems/UtilityUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker": - for (const item of inventory[payload.ItemCategory as TEquipmentKey] as IEquipmentDatabase[]) { + for (const item of inventory[payload.ItemCategory]) { if (item._id.toString() == payload.ItemId.$oid) { item.Features ??= 0; item.Features |= EquipmentFeatures.UTILITY_SLOT; @@ -47,10 +47,20 @@ export const upgradesController: RequestHandler = async (req, res) => { } } break; + case "/Lotus/Types/Items/MiscItems/HeavyWeaponCatalyst": + console.assert(payload.ItemCategory == "SpaceGuns"); + for (const item of inventory[payload.ItemCategory]) { + if (item._id.toString() == payload.ItemId.$oid) { + item.Features ??= 0; + item.Features |= EquipmentFeatures.GRAVIMAG_INSTALLED; + break; + } + } + break; case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker": - for (const item of inventory[payload.ItemCategory as TEquipmentKey] as IEquipmentDatabase[]) { + for (const item of inventory[payload.ItemCategory]) { if (item._id.toString() == payload.ItemId.$oid) { item.Features ??= 0; item.Features |= EquipmentFeatures.ARCANE_SLOT; @@ -62,7 +72,7 @@ export const upgradesController: RequestHandler = async (req, res) => { case "/Lotus/Types/Items/MiscItems/FormaUmbra": case "/Lotus/Types/Items/MiscItems/FormaAura": case "/Lotus/Types/Items/MiscItems/FormaStance": - for (const item of inventory[payload.ItemCategory as TEquipmentKey] as IEquipmentDatabase[]) { + for (const item of inventory[payload.ItemCategory]) { if (item._id.toString() == payload.ItemId.$oid) { item.XP = 0; setSlotPolarity(item, operation.PolarizeSlot, operation.PolarizeValue); @@ -73,7 +83,7 @@ export const upgradesController: RequestHandler = async (req, res) => { } break; case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker": - for (const item of inventory[payload.ItemCategory as TEquipmentKey] as IEquipmentDatabase[]) { + for (const item of inventory[payload.ItemCategory]) { if (item._id.toString() == payload.ItemId.$oid) { item.ModSlotPurchases ??= 0; item.ModSlotPurchases += 1; @@ -88,7 +98,7 @@ export const upgradesController: RequestHandler = async (req, res) => { } break; case "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker": - for (const item of inventory[payload.ItemCategory as TEquipmentKey] as IEquipmentDatabase[]) { + for (const item of inventory[payload.ItemCategory]) { if (item._id.toString() == payload.ItemId.$oid) { item.CustomizationSlotPurchases ??= 0; item.CustomizationSlotPurchases += 1; @@ -104,7 +114,7 @@ export const upgradesController: RequestHandler = async (req, res) => { break; case "": console.assert(operation.OperationType == "UOT_SWAP_POLARITY"); - for (const item of inventory[payload.ItemCategory as TEquipmentKey] as IEquipmentDatabase[]) { + for (const item of inventory[payload.ItemCategory]) { if (item._id.toString() == payload.ItemId.$oid) { for (let i = 0; i != operation.PolarityRemap.length; ++i) { if (operation.PolarityRemap[i].Slot != i) { diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index 2c4343110..758038c6f 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -85,6 +85,7 @@ export interface IEquipmentClient extends Omit { export enum EquipmentFeatures { DOUBLE_CAPACITY = 1, UTILITY_SLOT = 2, + GRAVIMAG_INSTALLED = 4, ARCANE_SLOT = 32, INCARNON_GENESIS = 512 } diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 1555799bb..b6570acd0 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -66,7 +66,8 @@ export type TEquipmentKey = | "Melee" | "SpecialItems" | "Sentinels" - | "SentinelWeapons"; + | "SentinelWeapons" + | "SpaceGuns"; export interface IDuviriInfo { Seed: number; diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index c63052c03..3da747247 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -10,7 +10,8 @@ import { ITypeCount, IMission, IRawUpgrade, - ISeasonChallenge + ISeasonChallenge, + TEquipmentKey } from "./inventoryTypes/inventoryTypes"; export interface IArtifactsRequest { @@ -85,7 +86,7 @@ export interface IUpdateGlyphRequest { } export interface IUpgradesRequest { - ItemCategory: string; + ItemCategory: TEquipmentKey; ItemId: IOid; ItemFeatures: number; UpgradeVersion: number;