diff --git a/config.json.example b/config.json.example index e874d4500..12843a76c 100644 --- a/config.json.example +++ b/config.json.example @@ -20,5 +20,6 @@ "unlockAllShipDecorations": true, "unlockAllFlavourItems": true, "unlockAllSkins": true, + "universalPolarityEverywhere": true, "spoofMasteryRank": -1 } diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 03383df8f..021a75585 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -5,7 +5,8 @@ import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; import { config } from "@/src/services/configService"; import allMissions from "@/static/fixed_responses/allMissions.json"; import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes"; -import { IShipInventory } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IPolarity, ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { ExportCustoms, ExportFlavour, ExportKeys, ExportResources } from "warframe-public-export-plus"; // eslint-disable-next-line @typescript-eslint/no-misused-promises @@ -118,6 +119,23 @@ const inventoryController: RequestHandler = async (request, response) => { } } + if (config.universalPolarityEverywhere) { + const Polarity: IPolarity[] = []; + for (let i = 0; i != 10; ++i) { + Polarity.push({ + Slot: i, + Value: ArtifactPolarity.Any + }); + } + for (const key of equipmentKeys) { + if (key in inventoryResponse) { + for (const equipment of inventoryResponse[key]) { + equipment.Polarity = Polarity; + } + } + } + } + response.json(inventoryResponse); }; diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts index d2f445581..e3a06d2d8 100644 --- a/src/controllers/api/upgradesController.ts +++ b/src/controllers/api/upgradesController.ts @@ -1,6 +1,10 @@ import { RequestHandler } from "express"; import { IUpgradesRequest } from "@/src/types/requestTypes"; -import { FocusSchool, IEquipmentDatabase, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { + ArtifactPolarity, + IEquipmentDatabase, + EquipmentFeatures +} from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; @@ -133,7 +137,7 @@ export const upgradesController: RequestHandler = async (req, res) => { res.json({ InventoryChanges }); }; -const setSlotPolarity = (item: IEquipmentDatabase, slot: number, polarity: FocusSchool): void => { +const setSlotPolarity = (item: IEquipmentDatabase, slot: number, polarity: ArtifactPolarity): void => { item.Polarity ??= []; const entry = item.Polarity.find(entry => entry.Slot == slot); if (entry) { diff --git a/src/services/configService.ts b/src/services/configService.ts index 785c0f0b6..272f50ac3 100644 --- a/src/services/configService.ts +++ b/src/services/configService.ts @@ -37,6 +37,7 @@ interface IConfig { unlockAllShipDecorations?: boolean; unlockAllFlavourItems?: boolean; unlockAllSkins?: boolean; + universalPolarityEverywhere?: boolean; spoofMasteryRank?: number; } diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index 758038c6f..b1debf7ab 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -3,19 +3,19 @@ import { Types } from "mongoose"; export interface IPolarity { Slot: number; - Value: FocusSchool; + Value: ArtifactPolarity; } -export enum FocusSchool { - ApAny = "AP_ANY", - ApAttack = "AP_ATTACK", - ApDefense = "AP_DEFENSE", - ApPower = "AP_POWER", - ApPrecept = "AP_PRECEPT", - ApTactic = "AP_TACTIC", - ApUmbra = "AP_UMBRA", - ApUniversal = "AP_UNIVERSAL", - ApWard = "AP_WARD" +export enum ArtifactPolarity { + Any = "AP_ANY", + Attack = "AP_ATTACK", + Defense = "AP_DEFENSE", + Power = "AP_POWER", + Precept = "AP_PRECEPT", + Tactic = "AP_TACTIC", + Umbra = "AP_UMBRA", + Universal = "AP_UNIVERSAL", + Ward = "AP_WARD" } export interface IColor { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 38c2decbb..5e897f2ab 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -2,8 +2,8 @@ import { Document, Types } from "mongoose"; import { IOid, IMongoDate } from "../commonTypes"; import { + ArtifactPolarity, IColor, - FocusSchool, IItemConfig, IOperatorConfigClient, IEquipmentSelection, @@ -61,15 +61,21 @@ export interface ITypeCount { ItemCount: number; } -export type TEquipmentKey = - | "Suits" - | "LongGuns" - | "Pistols" - | "Melee" - | "SpecialItems" - | "Sentinels" - | "SentinelWeapons" - | "SpaceGuns"; +export const equipmentKeys = [ + "Suits", + "LongGuns", + "Pistols", + "Melee", + "SpecialItems", + "Sentinels", + "SentinelWeapons", + "SpaceSuits", + "SpaceGuns", + "SpaceMelee", + "Hoverboards" +] as const; + +export type TEquipmentKey = (typeof equipmentKeys)[number]; export interface IDuviriInfo { Seed: number; @@ -599,6 +605,14 @@ export interface ILoadOutPresets { OPERATOR_ADULT: ILoadoutConfigClient[]; } +export enum FocusSchool { + Attack = "AP_ATTACK", + Defense = "AP_DEFENSE", + Power = "AP_POWER", + Tactic = "AP_TACTIC", + Ward = "AP_WARD" +} + export interface ILoadoutConfigClient { FocusSchool?: FocusSchool; PresetIcon?: string; @@ -707,7 +721,7 @@ export interface IUpgradeFingerprint { compat: string; lim: number; lvlReq: number; - pol: FocusSchool; + pol: ArtifactPolarity; buffs: IBuff[]; curses: IBuff[]; } diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 49917e9ae..3fc4c0f6b 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -1,5 +1,5 @@ import { IOid } from "./commonTypes"; -import { IPolarity, FocusSchool, IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { ArtifactPolarity, IPolarity, IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IBooster, IChallengeProgress, @@ -98,6 +98,6 @@ export interface IUpgradeOperation { OperationType: string; UpgradeRequirement: string; // uniqueName of item being consumed PolarizeSlot: number; - PolarizeValue: FocusSchool; + PolarizeValue: ArtifactPolarity; PolarityRemap: IPolarity[]; } diff --git a/static/webui/index.html b/static/webui/index.html index d19f125a2..4db8f2ef4 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -231,9 +231,9 @@
- +
@@ -241,22 +241,30 @@
- +
- +
-
- +
+ + +
+
+