From 6ff32aa9db1afbf3b0e766b4d17c78c0f37180db Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:25:52 +0200 Subject: [PATCH] move some inventory stuff into more generic files --- .../api/claimCompletedRecipeController.ts | 4 +- .../api/contributeToVaultController.ts | 3 +- .../api/crewShipIdentifySalvageController.ts | 2 +- src/controllers/api/evolveWeaponController.ts | 2 +- src/controllers/api/focusController.ts | 3 +- .../api/getNewRewardSeedController.ts | 2 +- src/controllers/api/gildWeaponController.ts | 3 +- .../giveShipDecoAndLoreFragmentController.ts | 3 +- src/controllers/api/inventoryController.ts | 5 +- .../api/missionInventoryUpdateController.ts | 3 +- .../api/modularWeaponCraftingController.ts | 3 +- .../api/modularWeaponSaleController.ts | 3 +- src/controllers/api/nemesisController.ts | 58 ++++++- .../api/retrievePetFromStasisController.ts | 2 +- .../api/setSuitInfectionController.ts | 2 +- .../api/syndicateStandingBonusController.ts | 2 +- src/controllers/api/umbraController.ts | 2 +- src/controllers/api/upgradesController.ts | 8 +- src/controllers/custom/addXpController.ts | 2 +- .../getProfileViewingDataController.ts | 4 +- src/helpers/nemesisHelpers.ts | 56 +------ src/models/commonModel.ts | 3 +- src/models/inboxModel.ts | 3 +- src/models/inventoryModels/inventoryModel.ts | 35 ++-- src/models/inventoryModels/loadoutModel.ts | 2 +- src/services/guildService.ts | 3 +- src/services/importService.ts | 27 ++-- src/services/infestedFoundryService.ts | 3 +- src/services/inventoryService.ts | 34 ++-- src/services/missionInventoryUpdateService.ts | 8 +- src/services/questService.ts | 3 +- src/services/rngService.ts | 11 ++ src/types/commonTypes.ts | 7 +- src/types/equipmentTypes.ts | 150 ++++++++++++++++++ src/types/guildTypes.ts | 4 +- .../inventoryTypes/commonInventoryTypes.ts | 92 ++--------- src/types/inventoryTypes/inventoryTypes.ts | 144 +---------------- src/types/personalRoomsTypes.ts | 12 +- src/types/purchaseTypes.ts | 4 +- src/types/requestTypes.ts | 8 +- src/types/saveLoadoutTypes.ts | 53 ++++++- src/types/shipTypes.ts | 3 +- 42 files changed, 388 insertions(+), 393 deletions(-) create mode 100644 src/types/equipmentTypes.ts diff --git a/src/controllers/api/claimCompletedRecipeController.ts b/src/controllers/api/claimCompletedRecipeController.ts index c70a40be..afbb95ad 100644 --- a/src/controllers/api/claimCompletedRecipeController.ts +++ b/src/controllers/api/claimCompletedRecipeController.ts @@ -17,12 +17,12 @@ import { addKubrowPetPrint } from "@/src/services/inventoryService"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; -import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { InventorySlot, IPendingRecipeDatabase, Status } from "@/src/types/inventoryTypes/inventoryTypes"; +import { InventorySlot, IPendingRecipeDatabase } from "@/src/types/inventoryTypes/inventoryTypes"; import { toOid2 } from "@/src/helpers/inventoryHelpers"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { IRecipe } from "warframe-public-export-plus"; import { config } from "@/src/services/configService"; +import { IEquipmentClient, Status } from "@/src/types/equipmentTypes"; interface IClaimCompletedRecipeRequest { RecipeIds: IOid[]; diff --git a/src/controllers/api/contributeToVaultController.ts b/src/controllers/api/contributeToVaultController.ts index 77a93097..e6a33443 100644 --- a/src/controllers/api/contributeToVaultController.ts +++ b/src/controllers/api/contributeToVaultController.ts @@ -21,7 +21,8 @@ import { updateCurrency } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { IFusionTreasure, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; +import { ITypeCount } from "@/src/types/commonTypes"; +import { IFusionTreasure, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { RequestHandler } from "express"; export const contributeToVaultController: RequestHandler = async (req, res) => { diff --git a/src/controllers/api/crewShipIdentifySalvageController.ts b/src/controllers/api/crewShipIdentifySalvageController.ts index cc77589e..83a9d7cb 100644 --- a/src/controllers/api/crewShipIdentifySalvageController.ts +++ b/src/controllers/api/crewShipIdentifySalvageController.ts @@ -12,7 +12,7 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { getRandomInt } from "@/src/services/rngService"; import { IFingerprintStat } from "@/src/helpers/rivenHelper"; -import { IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IEquipmentDatabase } from "@/src/types/equipmentTypes"; export const crewShipIdentifySalvageController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/evolveWeaponController.ts b/src/controllers/api/evolveWeaponController.ts index 395b3340..8318f17b 100644 --- a/src/controllers/api/evolveWeaponController.ts +++ b/src/controllers/api/evolveWeaponController.ts @@ -3,7 +3,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, getInventory } from "@/src/services/inventoryService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getRecipe, WeaponTypeInternal } from "@/src/services/itemDataService"; -import { EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { EquipmentFeatures } from "@/src/types/equipmentTypes"; export const evolveWeaponController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/focusController.ts b/src/controllers/api/focusController.ts index c7f96a6d..b5257201 100644 --- a/src/controllers/api/focusController.ts +++ b/src/controllers/api/focusController.ts @@ -4,7 +4,6 @@ import { getInventory, addMiscItems, addEquipment, occupySlot } from "@/src/serv import { IMiscItem, TFocusPolarity, TEquipmentKey, InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes"; import { logger } from "@/src/utils/logger"; import { ExportFocusUpgrades } from "warframe-public-export-plus"; -import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; export const focusController: RequestHandler = async (req, res) => { @@ -116,7 +115,7 @@ export const focusController: RequestHandler = async (req, res) => { }); occupySlot(inventory, InventorySlot.AMPS, false); await inventory.save(); - res.json((inventoryChanges.OperatorAmps as IEquipmentClient[])[0]); + res.json(inventoryChanges.OperatorAmps![0]); break; } case FocusOperation.UnbindUpgrade: { diff --git a/src/controllers/api/getNewRewardSeedController.ts b/src/controllers/api/getNewRewardSeedController.ts index cb9e1f82..9aed91f6 100644 --- a/src/controllers/api/getNewRewardSeedController.ts +++ b/src/controllers/api/getNewRewardSeedController.ts @@ -1,6 +1,6 @@ import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; -import { generateRewardSeed } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; +import { generateRewardSeed } from "@/src/services/rngService"; import { RequestHandler } from "express"; export const getNewRewardSeedController: RequestHandler = async (req, res) => { diff --git a/src/controllers/api/gildWeaponController.ts b/src/controllers/api/gildWeaponController.ts index fac741fc..d1d02153 100644 --- a/src/controllers/api/gildWeaponController.ts +++ b/src/controllers/api/gildWeaponController.ts @@ -3,9 +3,10 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { addMiscItems, getInventory } from "@/src/services/inventoryService"; import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; -import { ArtifactPolarity, EquipmentFeatures, IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { ExportRecipes } from "warframe-public-export-plus"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; +import { EquipmentFeatures, IEquipmentClient } from "@/src/types/equipmentTypes"; interface IGildWeaponRequest { ItemName: string; diff --git a/src/controllers/api/giveShipDecoAndLoreFragmentController.ts b/src/controllers/api/giveShipDecoAndLoreFragmentController.ts index 08385cbf..ae998374 100644 --- a/src/controllers/api/giveShipDecoAndLoreFragmentController.ts +++ b/src/controllers/api/giveShipDecoAndLoreFragmentController.ts @@ -1,7 +1,8 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { addLoreFragmentScans, addShipDecorations, getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { ILoreFragmentScan, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; +import { ITypeCount } from "@/src/types/commonTypes"; +import { ILoreFragmentScan } from "@/src/types/inventoryTypes/inventoryTypes"; import { RequestHandler } from "express"; export const giveShipDecoAndLoreFragmentController: RequestHandler = async (req, res) => { diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index c1933a80..05d6aec2 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -5,7 +5,7 @@ import { config } from "@/src/services/configService"; import allDialogue from "@/static/fixed_responses/allDialogue.json"; import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes"; import { IInventoryClient, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; -import { IPolarity, ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IPolarity, ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { ExportCustoms, ExportFlavour, ExportResources, ExportVirtuals } from "warframe-public-export-plus"; import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "@/src/services/infestedFoundryService"; import { @@ -14,7 +14,6 @@ import { allDailyAffiliationKeys, cleanupInventory, createLibraryDailyTask, - generateRewardSeed, getCalendarProgress } from "@/src/services/inventoryService"; import { logger } from "@/src/utils/logger"; @@ -28,6 +27,8 @@ import { toLegacyOid, toOid, version_compare } from "@/src/helpers/inventoryHelp import { Inbox } from "@/src/models/inboxModel"; import { unixTimesInMs } from "@/src/constants/timeConstants"; import { DailyDeal } from "@/src/models/worldStateModel"; +import { EquipmentFeatures } from "@/src/types/equipmentTypes"; +import { generateRewardSeed } from "@/src/services/rngService"; export const inventoryController: RequestHandler = async (request, response) => { const account = await getAccountForRequest(request); diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index e3b86b71..da3d4198 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -3,11 +3,12 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getAccountForRequest } from "@/src/services/loginService"; import { IMissionInventoryUpdateRequest } from "@/src/types/requestTypes"; import { addMissionInventoryUpdates, addMissionRewards } from "@/src/services/missionInventoryUpdateService"; -import { generateRewardSeed, getInventory } from "@/src/services/inventoryService"; +import { getInventory } from "@/src/services/inventoryService"; import { getInventoryResponse } from "./inventoryController"; import { logger } from "@/src/utils/logger"; import { IMissionInventoryUpdateResponse } from "@/src/types/missionTypes"; import { sendWsBroadcastTo } from "@/src/services/webService"; +import { generateRewardSeed } from "@/src/services/rngService"; /* **** INPUT **** diff --git a/src/controllers/api/modularWeaponCraftingController.ts b/src/controllers/api/modularWeaponCraftingController.ts index 6034132c..7a4fc45a 100644 --- a/src/controllers/api/modularWeaponCraftingController.ts +++ b/src/controllers/api/modularWeaponCraftingController.ts @@ -15,10 +15,9 @@ import { import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { getDefaultUpgrades } from "@/src/services/itemDataService"; import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper"; -import { IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { getRandomInt } from "@/src/services/rngService"; import { ExportSentinels, ExportWeapons, IDefaultUpgrade } from "warframe-public-export-plus"; -import { Status } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IEquipmentDatabase, Status } from "@/src/types/equipmentTypes"; interface IModularCraftRequest { WeaponType: string; diff --git a/src/controllers/api/modularWeaponSaleController.ts b/src/controllers/api/modularWeaponSaleController.ts index 767d1a94..45e5b1dd 100644 --- a/src/controllers/api/modularWeaponSaleController.ts +++ b/src/controllers/api/modularWeaponSaleController.ts @@ -3,7 +3,7 @@ import { ExportWeapons } from "warframe-public-export-plus"; import { IMongoDate } from "@/src/types/commonTypes"; import { toMongoDate } from "@/src/helpers/inventoryHelpers"; import { SRng } from "@/src/services/rngService"; -import { ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { addEquipment, @@ -17,6 +17,7 @@ import { getDefaultUpgrades } from "@/src/services/itemDataService"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; +import { EquipmentFeatures } from "@/src/types/equipmentTypes"; export const modularWeaponSaleController: RequestHandler = async (req, res) => { const partTypeToParts: Record = {}; diff --git a/src/controllers/api/nemesisController.ts b/src/controllers/api/nemesisController.ts index dbdb10e3..2d361c80 100644 --- a/src/controllers/api/nemesisController.ts +++ b/src/controllers/api/nemesisController.ts @@ -1,7 +1,6 @@ import { version_compare } from "@/src/helpers/inventoryHelpers"; import { antivirusMods, - consumeModCharge, decodeNemesisGuess, encodeNemesisGuess, getInfNodes, @@ -17,12 +16,13 @@ import { parseUpgrade } from "@/src/helpers/nemesisHelpers"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { Loadout } from "@/src/models/inventoryModels/loadoutModel"; -import { freeUpSlot, getInventory } from "@/src/services/inventoryService"; +import { addMods, freeUpSlot, getInventory } from "@/src/services/inventoryService"; import { getAccountForRequest } from "@/src/services/loginService"; import { SRng } from "@/src/services/rngService"; import { IMongoDate, IOid } from "@/src/types/commonTypes"; -import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IEquipmentClient } from "@/src/types/equipmentTypes"; import { IInnateDamageFingerprint, IInventoryClient, @@ -36,6 +36,7 @@ import { } from "@/src/types/inventoryTypes/inventoryTypes"; import { logger } from "@/src/utils/logger"; import { RequestHandler } from "express"; +import { Types } from "mongoose"; export const nemesisController: RequestHandler = async (req, res) => { const account = await getAccountForRequest(req); @@ -391,3 +392,54 @@ interface IKnife { AttachedUpgrades: IUpgradeClient[]; HiddenWhenHolstered: boolean; } + +const consumeModCharge = ( + response: IKnifeResponse, + inventory: TInventoryDatabaseDocument, + upgrade: { ItemId: IOid; ItemType: string }, + dataknifeUpgrades: string[] +): void => { + response.UpgradeIds ??= []; + response.UpgradeTypes ??= []; + response.UpgradeFingerprints ??= []; + response.UpgradeNew ??= []; + response.HasKnife = true; + + if (upgrade.ItemId.$oid != "000000000000000000000000") { + const dbUpgrade = inventory.Upgrades.id(upgrade.ItemId.$oid)!; + const fingerprint = JSON.parse(dbUpgrade.UpgradeFingerprint!) as { lvl: number }; + fingerprint.lvl += 1; + dbUpgrade.UpgradeFingerprint = JSON.stringify(fingerprint); + + response.UpgradeIds.push(upgrade.ItemId.$oid); + response.UpgradeTypes.push(upgrade.ItemType); + response.UpgradeFingerprints.push(fingerprint); + response.UpgradeNew.push(false); + } else { + const id = new Types.ObjectId(); + inventory.Upgrades.push({ + _id: id, + ItemType: upgrade.ItemType, + UpgradeFingerprint: `{"lvl":1}` + }); + + addMods(inventory, [ + { + ItemType: upgrade.ItemType, + ItemCount: -1 + } + ]); + + const dataknifeRawUpgradeIndex = dataknifeUpgrades.indexOf(upgrade.ItemType); + if (dataknifeRawUpgradeIndex != -1) { + dataknifeUpgrades[dataknifeRawUpgradeIndex] = id.toString(); + } else { + logger.warn(`${upgrade.ItemType} not found in dataknife config`); + } + + response.UpgradeIds.push(id.toString()); + response.UpgradeTypes.push(upgrade.ItemType); + response.UpgradeFingerprints.push({ lvl: 1 }); + response.UpgradeNew.push(true); + } +}; diff --git a/src/controllers/api/retrievePetFromStasisController.ts b/src/controllers/api/retrievePetFromStasisController.ts index 8547f7f4..eb332f9c 100644 --- a/src/controllers/api/retrievePetFromStasisController.ts +++ b/src/controllers/api/retrievePetFromStasisController.ts @@ -1,7 +1,7 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { Status } from "@/src/types/inventoryTypes/inventoryTypes"; +import { Status } from "@/src/types/equipmentTypes"; import { RequestHandler } from "express"; export const retrievePetFromStasisController: RequestHandler = async (req, res) => { diff --git a/src/controllers/api/setSuitInfectionController.ts b/src/controllers/api/setSuitInfectionController.ts index b4a169d9..84bd0a4b 100644 --- a/src/controllers/api/setSuitInfectionController.ts +++ b/src/controllers/api/setSuitInfectionController.ts @@ -2,7 +2,7 @@ import { fromMongoDate, fromOid } from "@/src/helpers/inventoryHelpers"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IEquipmentClient } from "@/src/types/equipmentTypes"; import { RequestHandler } from "express"; export const setSuitInfectionController: RequestHandler = async (req, res) => { diff --git a/src/controllers/api/syndicateStandingBonusController.ts b/src/controllers/api/syndicateStandingBonusController.ts index f5f0a5d2..1691aa68 100644 --- a/src/controllers/api/syndicateStandingBonusController.ts +++ b/src/controllers/api/syndicateStandingBonusController.ts @@ -6,7 +6,7 @@ import { IOid } from "@/src/types/commonTypes"; import { ExportSyndicates, ExportWeapons } from "warframe-public-export-plus"; import { logger } from "@/src/utils/logger"; import { IAffiliationMods, IInventoryChanges } from "@/src/types/purchaseTypes"; -import { EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { EquipmentFeatures } from "@/src/types/equipmentTypes"; export const syndicateStandingBonusController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/umbraController.ts b/src/controllers/api/umbraController.ts index e89ca74d..88529662 100644 --- a/src/controllers/api/umbraController.ts +++ b/src/controllers/api/umbraController.ts @@ -2,7 +2,7 @@ import { fromMongoDate, fromOid } from "@/src/helpers/inventoryHelpers"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { addMiscItem, getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IEquipmentClient } from "@/src/types/equipmentTypes"; import { RequestHandler } from "express"; export const umbraController: RequestHandler = async (req, res) => { diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts index 7b112ce3..1213362d 100644 --- a/src/controllers/api/upgradesController.ts +++ b/src/controllers/api/upgradesController.ts @@ -1,11 +1,6 @@ import { RequestHandler } from "express"; import { IUpgradesRequest } from "@/src/types/requestTypes"; -import { - ArtifactPolarity, - IEquipmentDatabase, - EquipmentFeatures, - IAbilityOverride -} from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { ArtifactPolarity, IAbilityOverride } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IInventoryClient, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { addMiscItems, addRecipes, getInventory, updateCurrency } from "@/src/services/inventoryService"; @@ -14,6 +9,7 @@ import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { addInfestedFoundryXP, applyCheatsToInfestedFoundry } from "@/src/services/infestedFoundryService"; import { config } from "@/src/services/configService"; import { sendWsBroadcastTo } from "@/src/services/webService"; +import { EquipmentFeatures, IEquipmentDatabase } from "@/src/types/equipmentTypes"; export const upgradesController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/custom/addXpController.ts b/src/controllers/custom/addXpController.ts index 7e42deb3..575fe978 100644 --- a/src/controllers/custom/addXpController.ts +++ b/src/controllers/custom/addXpController.ts @@ -1,7 +1,7 @@ import { applyClientEquipmentUpdates, getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { IOid } from "@/src/types/commonTypes"; -import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IEquipmentClient } from "@/src/types/equipmentTypes"; import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; import { RequestHandler } from "express"; import { ExportMisc } from "warframe-public-export-plus"; diff --git a/src/controllers/dynamic/getProfileViewingDataController.ts b/src/controllers/dynamic/getProfileViewingDataController.ts index bc12c6d6..221eaebb 100644 --- a/src/controllers/dynamic/getProfileViewingDataController.ts +++ b/src/controllers/dynamic/getProfileViewingDataController.ts @@ -6,13 +6,11 @@ import { Account } from "@/src/models/loginModel"; import { Stats, TStatsDatabaseDocument } from "@/src/models/statsModel"; import { allDailyAffiliationKeys } from "@/src/services/inventoryService"; import { IMongoDate, IOid } from "@/src/types/commonTypes"; -import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IAffiliation, IAlignment, IChallengeProgress, IDailyAffiliations, - ILoadoutConfigClient, IMission, IPlayerSkills, ITypeXPItem @@ -23,6 +21,8 @@ import { ExportCustoms, ExportDojoRecipes } from "warframe-public-export-plus"; import { IStatsClient } from "@/src/types/statTypes"; import { toStoreItem } from "@/src/services/itemDataService"; import { FlattenMaps } from "mongoose"; +import { IEquipmentClient } from "@/src/types/equipmentTypes"; +import { ILoadoutConfigClient } from "@/src/types/saveLoadoutTypes"; const getProfileViewingDataByPlayerIdImpl = async (playerId: string): Promise => { const account = await Account.findById(playerId, "DisplayName"); diff --git a/src/helpers/nemesisHelpers.ts b/src/helpers/nemesisHelpers.ts index 4a5de0fb..677ad8fa 100644 --- a/src/helpers/nemesisHelpers.ts +++ b/src/helpers/nemesisHelpers.ts @@ -1,11 +1,8 @@ import { ExportRegions, ExportWarframes } from "warframe-public-export-plus"; import { IInfNode, TNemesisFaction } from "@/src/types/inventoryTypes/inventoryTypes"; -import { getRewardAtPercentage, SRng } from "@/src/services/rngService"; +import { generateRewardSeed, getRewardAtPercentage, SRng } from "@/src/services/rngService"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; -import { logger } from "../utils/logger"; import { IOid } from "../types/commonTypes"; -import { Types } from "mongoose"; -import { addMods, generateRewardSeed } from "../services/inventoryService"; import { isArchwingMission } from "../services/worldStateService"; type TInnateDamageTag = @@ -364,57 +361,6 @@ export const parseUpgrade = ( } }; -export const consumeModCharge = ( - response: IKnifeResponse, - inventory: TInventoryDatabaseDocument, - upgrade: { ItemId: IOid; ItemType: string }, - dataknifeUpgrades: string[] -): void => { - response.UpgradeIds ??= []; - response.UpgradeTypes ??= []; - response.UpgradeFingerprints ??= []; - response.UpgradeNew ??= []; - response.HasKnife = true; - - if (upgrade.ItemId.$oid != "000000000000000000000000") { - const dbUpgrade = inventory.Upgrades.id(upgrade.ItemId.$oid)!; - const fingerprint = JSON.parse(dbUpgrade.UpgradeFingerprint!) as { lvl: number }; - fingerprint.lvl += 1; - dbUpgrade.UpgradeFingerprint = JSON.stringify(fingerprint); - - response.UpgradeIds.push(upgrade.ItemId.$oid); - response.UpgradeTypes.push(upgrade.ItemType); - response.UpgradeFingerprints.push(fingerprint); - response.UpgradeNew.push(false); - } else { - const id = new Types.ObjectId(); - inventory.Upgrades.push({ - _id: id, - ItemType: upgrade.ItemType, - UpgradeFingerprint: `{"lvl":1}` - }); - - addMods(inventory, [ - { - ItemType: upgrade.ItemType, - ItemCount: -1 - } - ]); - - const dataknifeRawUpgradeIndex = dataknifeUpgrades.indexOf(upgrade.ItemType); - if (dataknifeRawUpgradeIndex != -1) { - dataknifeUpgrades[dataknifeRawUpgradeIndex] = id.toString(); - } else { - logger.warn(`${upgrade.ItemType} not found in dataknife config`); - } - - response.UpgradeIds.push(id.toString()); - response.UpgradeTypes.push(upgrade.ItemType); - response.UpgradeFingerprints.push({ lvl: 1 }); - response.UpgradeNew.push(true); - } -}; - export const getInnateDamageTag = (KillingSuit: string): TInnateDamageTag => { return ExportWarframes[KillingSuit].nemesisUpgradeTag!; }; diff --git a/src/models/commonModel.ts b/src/models/commonModel.ts index d29261f6..dd0ad85e 100644 --- a/src/models/commonModel.ts +++ b/src/models/commonModel.ts @@ -1,6 +1,5 @@ import { Schema } from "mongoose"; -import { IColor } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { IShipCustomization } from "@/src/types/personalRoomsTypes"; +import { IColor, IShipCustomization } from "@/src/types/inventoryTypes/commonInventoryTypes"; export const colorSchema = new Schema( { diff --git a/src/models/inboxModel.ts b/src/models/inboxModel.ts index 793d37d8..be6b0cd5 100644 --- a/src/models/inboxModel.ts +++ b/src/models/inboxModel.ts @@ -1,8 +1,7 @@ import { model, Schema, Types } from "mongoose"; import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers"; import { typeCountSchema } from "@/src/models/inventoryModels/inventoryModel"; -import { IMongoDate, IOid } from "@/src/types/commonTypes"; -import { ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IMongoDate, IOid, ITypeCount } from "@/src/types/commonTypes"; export interface IMessageClient extends Omit { diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index f5f58759..1c7b0f2a 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -1,6 +1,5 @@ import { Document, Model, Schema, Types, model } from "mongoose"; import { - IFlavourItem, IRawUpgrade, IMiscItem, IInventoryDatabase, @@ -10,7 +9,6 @@ import { IDuviriInfo, IPendingRecipeDatabase, IPendingRecipeClient, - ITypeCount, IFocusXP, IFocusUpgrade, ITypeXPItem, @@ -39,24 +37,15 @@ import { IEvolutionProgress, IEndlessXpProgressDatabase, IEndlessXpProgressClient, - ICrewShipCustomization, - ICrewShipWeapon, - ICrewShipWeaponEmplacements, IHelminthFoodRecord, - ICrewShipMembersDatabase, IDialogueHistoryDatabase, IDialogueDatabase, IDialogueGift, ICompletedDialogue, IDialogueClient, IUpgradeDatabase, - ICrewShipMemberDatabase, - ICrewShipMemberClient, TEquipmentKey, equipmentKeys, - IKubrowPetDetailsDatabase, - ITraits, - IKubrowPetDetailsClient, IKubrowPetEggDatabase, IKubrowPetEggClient, ICustomMarkers, @@ -95,27 +84,39 @@ import { IInvasionProgressClient, IAccolades, IHubNpcCustomization, - ILotusCustomization, IEndlessXpReward, IPersonalGoalProgressDatabase, IPersonalGoalProgressClient, IKubrowPetPrintClient, IKubrowPetPrintDatabase } from "../../types/inventoryTypes/inventoryTypes"; -import { IOid } from "../../types/commonTypes"; +import { IOid, ITypeCount } from "../../types/commonTypes"; import { IAbilityOverride, + ICrewShipCustomization, + IFlavourItem, IItemConfig, + ILotusCustomization, IOperatorConfigDatabase, - IPolarity, - IEquipmentDatabase, - IArchonCrystalUpgrade, - IEquipmentClient + IPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers"; import { EquipmentSelectionSchema, oidSchema } from "./loadoutModel"; import { ICountedStoreItem } from "warframe-public-export-plus"; import { colorSchema, shipCustomizationSchema } from "../commonModel"; +import { + IArchonCrystalUpgrade, + ICrewShipMemberClient, + ICrewShipMemberDatabase, + ICrewShipMembersDatabase, + ICrewShipWeapon, + ICrewShipWeaponEmplacements, + IEquipmentClient, + IEquipmentDatabase, + IKubrowPetDetailsClient, + IKubrowPetDetailsDatabase, + ITraits +} from "@/src/types/equipmentTypes"; export const typeCountSchema = new Schema({ ItemType: String, ItemCount: Number }, { _id: false }); diff --git a/src/models/inventoryModels/loadoutModel.ts b/src/models/inventoryModels/loadoutModel.ts index 208b9e17..a06a7846 100644 --- a/src/models/inventoryModels/loadoutModel.ts +++ b/src/models/inventoryModels/loadoutModel.ts @@ -1,5 +1,5 @@ import { IOid } from "@/src/types/commonTypes"; -import { IEquipmentSelection } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IEquipmentSelection } from "@/src/types/equipmentTypes"; import { ILoadoutConfigDatabase, ILoadoutDatabase } from "@/src/types/saveLoadoutTypes"; import { Document, Model, Schema, Types, model } from "mongoose"; diff --git a/src/services/guildService.ts b/src/services/guildService.ts index 87e2f721..e48328d3 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -26,12 +26,13 @@ import { logger } from "../utils/logger"; import { config } from "./configService"; import { getRandomInt } from "./rngService"; import { Inbox } from "../models/inboxModel"; -import { IFusionTreasure, ITypeCount } from "../types/inventoryTypes/inventoryTypes"; +import { IFusionTreasure } from "../types/inventoryTypes/inventoryTypes"; import { IInventoryChanges } from "../types/purchaseTypes"; import { parallelForeach } from "../utils/async-utils"; import allDecoRecipes from "@/static/fixed_responses/allDecoRecipes.json"; import { createMessage } from "./inboxService"; import { addAccountDataToFriendInfo, addInventoryDataToFriendInfo } from "./friendService"; +import { ITypeCount } from "../types/commonTypes"; export const getGuildForRequest = async (req: Request): Promise => { const accountId = await getAccountIdForRequest(req); diff --git a/src/services/importService.ts b/src/services/importService.ts index 29eee138..31289c94 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -1,7 +1,5 @@ import { Types } from "mongoose"; import { - IEquipmentClient, - IEquipmentDatabase, IItemConfig, IOperatorConfigClient, IOperatorConfigDatabase @@ -9,10 +7,6 @@ import { import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, - ICrewShipMemberClient, - ICrewShipMemberDatabase, - ICrewShipMembersClient, - ICrewShipMembersDatabase, IDialogueClient, IDialogueDatabase, IDialogueHistoryClient, @@ -20,10 +14,6 @@ import { IInfestedFoundryClient, IInfestedFoundryDatabase, IInventoryClient, - IKubrowPetDetailsClient, - IKubrowPetDetailsDatabase, - ILoadoutConfigClient, - ILoadOutPresets, INemesisClient, INemesisDatabase, IPendingRecipeClient, @@ -37,8 +27,23 @@ import { IWeaponSkinDatabase } from "../types/inventoryTypes/inventoryTypes"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; -import { ILoadoutConfigDatabase, ILoadoutDatabase } from "../types/saveLoadoutTypes"; +import { + ILoadoutConfigClient, + ILoadoutConfigDatabase, + ILoadoutDatabase, + ILoadOutPresets +} from "../types/saveLoadoutTypes"; import { slotNames } from "../types/purchaseTypes"; +import { + ICrewShipMemberClient, + ICrewShipMemberDatabase, + ICrewShipMembersClient, + ICrewShipMembersDatabase, + IEquipmentClient, + IEquipmentDatabase, + IKubrowPetDetailsClient, + IKubrowPetDetailsDatabase +} from "../types/equipmentTypes"; const convertDate = (value: IMongoDate): Date => { return new Date(parseInt(value.$date.$numberLong)); diff --git a/src/services/infestedFoundryService.ts b/src/services/infestedFoundryService.ts index 5afc93fa..c7bb700e 100644 --- a/src/services/infestedFoundryService.ts +++ b/src/services/infestedFoundryService.ts @@ -1,8 +1,9 @@ import { ExportRecipes } from "warframe-public-export-plus"; import { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel"; -import { IInfestedFoundryClient, IInfestedFoundryDatabase, ITypeCount } from "../types/inventoryTypes/inventoryTypes"; +import { IInfestedFoundryClient, IInfestedFoundryDatabase } from "../types/inventoryTypes/inventoryTypes"; import { addRecipes } from "./inventoryService"; import { config } from "./configService"; +import { ITypeCount } from "../types/commonTypes"; export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundryDatabase, delta: number): ITypeCount[] => { const recipeChanges: ITypeCount[] = []; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index b0e9dbf6..7ca8015b 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -4,12 +4,10 @@ import { Types } from "mongoose"; import { SlotNames, IInventoryChanges, IBinChanges, slotNames, IAffiliationMods } from "@/src/types/purchaseTypes"; import { IChallengeProgress, - IFlavourItem, IMiscItem, IMission, IRawUpgrade, ISeasonChallenge, - ITypeCount, InventorySlot, IWeaponSkinClient, TEquipmentKey, @@ -23,9 +21,6 @@ import { TPartialStartingGear, ILoreFragmentScan, ICrewMemberClient, - Status, - IKubrowPetDetailsDatabase, - ITraits, ICalendarProgress, INemesisWeaponTargetFingerprint, INemesisPetTargetFingerprint, @@ -36,12 +31,7 @@ import { IGenericUpdate, IUpdateNodeIntrosResponse } from "../types/genericUpdat import { IKeyChainRequest, IMissionInventoryUpdateRequest } from "../types/requestTypes"; import { logger } from "@/src/utils/logger"; import { convertInboxMessage, fromStoreItem, getKeyChainItems } from "@/src/services/itemDataService"; -import { - EquipmentFeatures, - IEquipmentClient, - IEquipmentDatabase, - IItemConfig -} from "../types/inventoryTypes/commonInventoryTypes"; +import { IFlavourItem, IItemConfig } from "../types/inventoryTypes/commonInventoryTypes"; import { ExportArcanes, ExportBoosters, @@ -82,7 +72,7 @@ import { import { addQuestKey, completeQuest } from "@/src/services/questService"; import { handleBundleAcqusition } from "./purchaseService"; import libraryDailyTasks from "@/static/fixed_responses/libraryDailyTasks.json"; -import { getRandomElement, getRandomInt, getRandomWeightedReward, SRng } from "./rngService"; +import { generateRewardSeed, getRandomElement, getRandomInt, getRandomWeightedReward, SRng } from "./rngService"; import { createMessage, IMessageCreationTemplate } from "./inboxService"; import { getMaxStanding, getMinStanding } from "@/src/helpers/syndicateStandingHelper"; import { getNightwaveSyndicateTag, getWorldState } from "./worldStateService"; @@ -91,6 +81,15 @@ import { generateNemesisProfile, INemesisProfile } from "../helpers/nemesisHelpe import { TAccountDocument } from "./loginService"; import { unixTimesInMs } from "../constants/timeConstants"; import { addString } from "../helpers/stringHelpers"; +import { + EquipmentFeatures, + IEquipmentClient, + IEquipmentDatabase, + IKubrowPetDetailsDatabase, + ITraits, + Status +} from "../types/equipmentTypes"; +import { ITypeCount } from "../types/commonTypes"; export const createInventory = async ( accountOwnerId: Types.ObjectId, @@ -132,17 +131,6 @@ export const createInventory = async ( } }; -export const generateRewardSeed = (): bigint => { - const hiDword = getRandomInt(0, 0x7fffffff); - const loDword = getRandomInt(0, 0xffffffff); - let seed = (BigInt(hiDword) << 32n) | BigInt(loDword); - if (Math.random() < 0.5) { - seed *= -1n; - seed -= 1n; - } - return seed; -}; - //TODO: RawUpgrades might need to return a LastAdded const awakeningRewards = [ "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem1", diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 69e165e7..9082ace2 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -10,8 +10,8 @@ import { } from "warframe-public-export-plus"; import { IMissionInventoryUpdateRequest, IRewardInfo } from "../types/requestTypes"; import { logger } from "@/src/utils/logger"; -import { IRngResult, SRng, getRandomElement, getRandomReward } from "@/src/services/rngService"; -import { equipmentKeys, IMission, ITypeCount, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IRngResult, SRng, generateRewardSeed, getRandomElement, getRandomReward } from "@/src/services/rngService"; +import { equipmentKeys, IMission, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; import { addBooster, addCalendarProgress, @@ -35,7 +35,6 @@ import { addStanding, applyClientEquipmentUpdates, combineInventoryChanges, - generateRewardSeed, getDialogue, giveNemesisPetRecipe, giveNemesisWeaponRecipe, @@ -48,7 +47,6 @@ import { IAffiliationMods, IInventoryChanges } from "@/src/types/purchaseTypes"; import { fromStoreItem, getLevelKeyRewards, isStoreItem, toStoreItem } from "@/src/services/itemDataService"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { getEntriesUnsafe } from "@/src/utils/ts-utils"; -import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { handleStoreItemAcquisition } from "./purchaseService"; import { IMissionCredits, IMissionReward } from "../types/missionTypes"; import { crackRelic } from "@/src/helpers/relicHelper"; @@ -81,6 +79,8 @@ import libraryDailyTasks from "@/static/fixed_responses/libraryDailyTasks.json"; import { ISyndicateMissionInfo } from "../types/worldStateTypes"; import { fromOid } from "../helpers/inventoryHelpers"; import { TAccountDocument } from "./loginService"; +import { ITypeCount } from "../types/commonTypes"; +import { IEquipmentClient } from "../types/equipmentTypes"; const getRotations = (rewardInfo: IRewardInfo, tierOverride?: number): number[] => { // For Spy missions, e.g. 3 vaults cracked = A, B, C diff --git a/src/services/questService.ts b/src/services/questService.ts index 633f1022..0bf2a6e7 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -4,13 +4,14 @@ import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/invento import { createMessage } from "@/src/services/inboxService"; import { addItem, addItems, addKeyChainItems, setupKahlSyndicate } from "@/src/services/inventoryService"; import { fromStoreItem, getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService"; -import { IQuestKeyClient, IQuestKeyDatabase, IQuestStage, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IQuestKeyClient, IQuestKeyDatabase, IQuestStage } from "@/src/types/inventoryTypes/inventoryTypes"; import { logger } from "@/src/utils/logger"; import { Types } from "mongoose"; import { ExportKeys } from "warframe-public-export-plus"; import { addFixedLevelRewards } from "./missionInventoryUpdateService"; import { IInventoryChanges } from "../types/purchaseTypes"; import questCompletionItems from "@/static/fixed_responses/questCompletionRewards.json"; +import { ITypeCount } from "../types/commonTypes"; export interface IUpdateQuestRequest { QuestKeys: Omit[]; diff --git a/src/services/rngService.ts b/src/services/rngService.ts index 01426a3f..d277c50e 100644 --- a/src/services/rngService.ts +++ b/src/services/rngService.ts @@ -18,6 +18,17 @@ export const getRandomInt = (min: number, max: number): number => { return Math.floor(Math.random() * (max - min + 1)) + min; }; +export const generateRewardSeed = (): bigint => { + const hiDword = getRandomInt(0, 0x7fffffff); + const loDword = getRandomInt(0, 0xffffffff); + let seed = (BigInt(hiDword) << 32n) | BigInt(loDword); + if (Math.random() < 0.5) { + seed *= -1n; + seed -= 1n; + } + return seed; +}; + export const getRewardAtPercentage = ( pool: T[], percentage: number diff --git a/src/types/commonTypes.ts b/src/types/commonTypes.ts index a9335fff..915614bd 100644 --- a/src/types/commonTypes.ts +++ b/src/types/commonTypes.ts @@ -1,5 +1,3 @@ -import { ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; - export interface IOid { $oid: string; } @@ -15,6 +13,11 @@ export interface IMongoDate { }; } +export interface ITypeCount { + ItemType: string; + ItemCount: number; +} + export interface IReward { items: ITypeCount[]; credits: number; diff --git a/src/types/equipmentTypes.ts b/src/types/equipmentTypes.ts new file mode 100644 index 00000000..8123c106 --- /dev/null +++ b/src/types/equipmentTypes.ts @@ -0,0 +1,150 @@ +import { Types } from "mongoose"; +import { IMongoDate, IOid, IOidWithLegacySupport } from "./commonTypes"; +import { ICrewShipCustomization, IFlavourItem, IItemConfig, IPolarity } from "./inventoryTypes/commonInventoryTypes"; + +export interface IEquipmentSelection { + ItemId: IOid; + mod?: number; + cus?: number; + ItemType?: string; + hide?: boolean; +} + +export enum EquipmentFeatures { + DOUBLE_CAPACITY = 1, + UTILITY_SLOT = 2, + GRAVIMAG_INSTALLED = 4, + GILDED = 8, + ARCANE_SLOT = 32, + INCARNON_GENESIS = 512, + VALENCE_SWAP = 1024 +} + +export interface IEquipmentDatabase { + ItemType: string; + ItemName?: string; + Configs: IItemConfig[]; + UpgradeVer?: number; + XP?: number; + Features?: number; + Polarized?: number; + Polarity?: IPolarity[]; + FocusLens?: string; + ModSlotPurchases?: number; + CustomizationSlotPurchases?: number; + UpgradeType?: string; + UpgradeFingerprint?: string; + InfestationDate?: Date; + InfestationDays?: number; + InfestationType?: string; + ModularParts?: string[]; + UnlockLevel?: number; + Expiry?: Date; + SkillTree?: string; + OffensiveUpgrade?: string; + DefensiveUpgrade?: string; + UpgradesExpiry?: Date; + UmbraDate?: Date; // related to scrapped "echoes of umbra" feature + ArchonCrystalUpgrades?: IArchonCrystalUpgrade[]; + Weapon?: ICrewShipWeapon; + Customization?: ICrewShipCustomization; + RailjackImage?: IFlavourItem; + CrewMembers?: ICrewShipMembersDatabase; + Details?: IKubrowPetDetailsDatabase; + Favorite?: boolean; + IsNew?: boolean; + _id: Types.ObjectId; +} + +export interface IEquipmentClient + extends Omit< + IEquipmentDatabase, + "_id" | "InfestationDate" | "Expiry" | "UpgradesExpiry" | "UmbraDate" | "CrewMembers" | "Details" + > { + ItemId: IOidWithLegacySupport; + InfestationDate?: IMongoDate; + Expiry?: IMongoDate; + UpgradesExpiry?: IMongoDate; + UmbraDate?: IMongoDate; + CrewMembers?: ICrewShipMembersClient; + Details?: IKubrowPetDetailsClient; +} + +export interface IArchonCrystalUpgrade { + UpgradeType?: string; + Color?: string; +} + +export interface ITraits { + BaseColor: string; + SecondaryColor: string; + TertiaryColor: string; + AccentColor: string; + EyeColor: string; + FurPattern: string; + Personality: string; + BodyType: string; + Head?: string; + Tail?: string; +} + +export interface IKubrowPetDetailsDatabase { + Name?: string; + IsPuppy?: boolean; + HasCollar: boolean; + PrintsRemaining: number; + Status: Status; + HatchDate?: Date; + DominantTraits: ITraits; + RecessiveTraits: ITraits; + IsMale: boolean; + Size: number; +} + +export interface IKubrowPetDetailsClient extends Omit { + HatchDate: IMongoDate; +} + +export enum Status { + StatusAvailable = "STATUS_AVAILABLE", + StatusStasis = "STATUS_STASIS", + StatusIncubating = "STATUS_INCUBATING" +} + +// inventory.CrewShips[0].Weapon +export interface ICrewShipWeapon { + PILOT?: ICrewShipWeaponEmplacements; + PORT_GUNS?: ICrewShipWeaponEmplacements; + STARBOARD_GUNS?: ICrewShipWeaponEmplacements; + ARTILLERY?: ICrewShipWeaponEmplacements; + SCANNER?: ICrewShipWeaponEmplacements; +} + +export interface ICrewShipWeaponEmplacements { + PRIMARY_A?: IEquipmentSelection; + PRIMARY_B?: IEquipmentSelection; + SECONDARY_A?: IEquipmentSelection; + SECONDARY_B?: IEquipmentSelection; +} + +export interface ICrewShipMembersClient { + SLOT_A?: ICrewShipMemberClient; + SLOT_B?: ICrewShipMemberClient; + SLOT_C?: ICrewShipMemberClient; +} + +export interface ICrewShipMembersDatabase { + SLOT_A?: ICrewShipMemberDatabase; + SLOT_B?: ICrewShipMemberDatabase; + SLOT_C?: ICrewShipMemberDatabase; +} + +export interface ICrewShipMemberClient { + ItemId?: IOid; + NemesisFingerprint?: number | bigint; +} + +export interface ICrewShipMemberDatabase { + ItemId?: Types.ObjectId; + NemesisFingerprint?: bigint; +} diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 0ecc1b53..af2bb9d5 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -1,6 +1,6 @@ import { Types } from "mongoose"; -import { IOid, IMongoDate, IOidWithLegacySupport } from "@/src/types/commonTypes"; -import { IFusionTreasure, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IOid, IMongoDate, IOidWithLegacySupport, ITypeCount } from "@/src/types/commonTypes"; +import { IFusionTreasure, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IPictureFrameInfo } from "./personalRoomsTypes"; import { IFriendInfo } from "./friendTypes"; diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index 8cc0d56f..3e40d104 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -1,14 +1,5 @@ -import { IMongoDate, IOid, IOidWithLegacySupport } from "@/src/types/commonTypes"; +import { IOid } from "@/src/types/commonTypes"; import { Types } from "mongoose"; -import { - ICrewShipCustomization, - ICrewShipMembersClient, - ICrewShipMembersDatabase, - ICrewShipWeapon, - IFlavourItem, - IKubrowPetDetailsClient, - IKubrowPetDetailsDatabase -} from "@/src/types/inventoryTypes/inventoryTypes"; export interface IPolarity { Slot: number; @@ -79,75 +70,24 @@ export interface IOperatorConfigClient extends Omit { - ItemId: IOidWithLegacySupport; - InfestationDate?: IMongoDate; - Expiry?: IMongoDate; - UpgradesExpiry?: IMongoDate; - UmbraDate?: IMongoDate; - CrewMembers?: ICrewShipMembersClient; - Details?: IKubrowPetDetailsClient; -} - -export enum EquipmentFeatures { - DOUBLE_CAPACITY = 1, - UTILITY_SLOT = 2, - GRAVIMAG_INSTALLED = 4, - GILDED = 8, - ARCANE_SLOT = 32, - INCARNON_GENESIS = 512, - VALENCE_SWAP = 1024 -} - -export interface IEquipmentDatabase { +export interface IFlavourItem { ItemType: string; - ItemName?: string; - Configs: IItemConfig[]; - UpgradeVer?: number; - XP?: number; - Features?: number; - Polarized?: number; - Polarity?: IPolarity[]; - FocusLens?: string; - ModSlotPurchases?: number; - CustomizationSlotPurchases?: number; - UpgradeType?: string; - UpgradeFingerprint?: string; - InfestationDate?: Date; - InfestationDays?: number; - InfestationType?: string; - ModularParts?: string[]; - UnlockLevel?: number; - Expiry?: Date; - SkillTree?: string; - OffensiveUpgrade?: string; - DefensiveUpgrade?: string; - UpgradesExpiry?: Date; - UmbraDate?: Date; // related to scrapped "echoes of umbra" feature - ArchonCrystalUpgrades?: IArchonCrystalUpgrade[]; - Weapon?: ICrewShipWeapon; - Customization?: ICrewShipCustomization; - RailjackImage?: IFlavourItem; - CrewMembers?: ICrewShipMembersDatabase; - Details?: IKubrowPetDetailsDatabase; - Favorite?: boolean; - IsNew?: boolean; - _id: Types.ObjectId; } -export interface IArchonCrystalUpgrade { - UpgradeType?: string; - Color?: string; +export interface IShipAttachments { + HOOD_ORNAMENT?: string; +} + +export interface IShipCustomization { + SkinFlavourItem?: string; + Colors?: IColor; + ShipAttachments?: IShipAttachments; +} + +export interface ICrewShipCustomization { + CrewshipInterior: IShipCustomization; } diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 1785419e..90b156c6 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -1,18 +1,20 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Types } from "mongoose"; -import { IOid, IMongoDate, IOidWithLegacySupport } from "../commonTypes"; +import { IOid, IMongoDate, IOidWithLegacySupport, ITypeCount } from "../commonTypes"; import { IColor, IItemConfig, IOperatorConfigClient, - IEquipmentSelection, - IEquipmentDatabase, - IEquipmentClient, - IOperatorConfigDatabase + IOperatorConfigDatabase, + IFlavourItem, + ILotusCustomization, + IShipCustomization } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IFingerprintStat, RivenFingerprint } from "@/src/helpers/rivenHelper"; -import { IOrbiterClient, IShipCustomization } from "../personalRoomsTypes"; +import { IOrbiterClient } from "../personalRoomsTypes"; import { ICountedStoreItem } from "warframe-public-export-plus"; +import { IEquipmentClient, IEquipmentDatabase, ITraits } from "../equipmentTypes"; +import { ILoadOutPresets } from "../saveLoadoutTypes"; export type InventoryDatabaseEquipment = { [_ in TEquipmentKey]: IEquipmentDatabase[]; @@ -110,11 +112,6 @@ export interface IQuestKeyDatabase { CompletionDate?: Date; } -export interface ITypeCount { - ItemType: string; - ItemCount: number; -} - export const equipmentKeys = [ "Suits", "LongGuns", @@ -552,54 +549,8 @@ export interface IUpgradeFromClient { LastAdded: IOidWithLegacySupport; } -export interface ICrewShipMembersClient { - SLOT_A?: ICrewShipMemberClient; - SLOT_B?: ICrewShipMemberClient; - SLOT_C?: ICrewShipMemberClient; -} - -export interface ICrewShipMembersDatabase { - SLOT_A?: ICrewShipMemberDatabase; - SLOT_B?: ICrewShipMemberDatabase; - SLOT_C?: ICrewShipMemberDatabase; -} - -export interface ICrewShipMemberClient { - ItemId?: IOid; - NemesisFingerprint?: number | bigint; -} - -export interface ICrewShipMemberDatabase { - ItemId?: Types.ObjectId; - NemesisFingerprint?: bigint; -} - -export interface ICrewShipCustomization { - CrewshipInterior: IShipCustomization; -} - -export interface IFlavourItem { - ItemType: string; -} - export type IMiscItem = ITypeCount; -// inventory.CrewShips[0].Weapon -export interface ICrewShipWeapon { - PILOT?: ICrewShipWeaponEmplacements; - PORT_GUNS?: ICrewShipWeaponEmplacements; - STARBOARD_GUNS?: ICrewShipWeaponEmplacements; - ARTILLERY?: ICrewShipWeaponEmplacements; - SCANNER?: ICrewShipWeaponEmplacements; -} - -export interface ICrewShipWeaponEmplacements { - PRIMARY_A?: IEquipmentSelection; - PRIMARY_B?: IEquipmentSelection; - SECONDARY_A?: IEquipmentSelection; - SECONDARY_B?: IEquipmentSelection; -} - export interface IDiscoveredMarker { tag: string; discoveryState: number[]; @@ -730,42 +681,6 @@ export interface IKubrowPetPrintDatabase extends Omit { - HatchDate: IMongoDate; -} - -export enum Status { - StatusAvailable = "STATUS_AVAILABLE", - StatusStasis = "STATUS_STASIS", - StatusIncubating = "STATUS_INCUBATING" -} - export interface ILastSortieRewardClient { SortieId: IOid; StoreItem: string; @@ -798,45 +713,6 @@ export interface ILibraryPersonalProgress { Completed: boolean; } -// keep in sync with ILoadoutDatabase -export interface ILoadOutPresets { - NORMAL: ILoadoutConfigClient[]; - NORMAL_PVP: ILoadoutConfigClient[]; - LUNARO: ILoadoutConfigClient[]; - ARCHWING: ILoadoutConfigClient[]; - SENTINEL: ILoadoutConfigClient[]; - OPERATOR: ILoadoutConfigClient[]; - GEAR: ILoadoutConfigClient[]; - KDRIVE: ILoadoutConfigClient[]; - DATAKNIFE: ILoadoutConfigClient[]; - MECH: ILoadoutConfigClient[]; - OPERATOR_ADULT: ILoadoutConfigClient[]; - DRIFTER: 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; - Favorite?: boolean; - n?: string; // Loadout name - s?: IEquipmentSelection; // Suit - p?: IEquipmentSelection; // Secondary weapon - l?: IEquipmentSelection; // Primary weapon - m?: IEquipmentSelection; // Melee weapon - h?: IEquipmentSelection; // Gravimag weapon - a?: IEquipmentSelection; // Necromech exalted weapon - ItemId: IOid; - Remove?: boolean; // when client wants to remove a config, it only includes ItemId & Remove. -} - export enum UpgradeType { LotusWeaponsGrineerKuvaLichUpgradesInnateDamageRandomMod = "/Lotus/Weapons/Grineer/KuvaLich/Upgrades/InnateDamageRandomMod" } @@ -847,10 +723,6 @@ export interface ILoreFragmentScan { ItemType: string; } -export interface ILotusCustomization extends IItemConfig { - Persona: string; -} - export interface IMissionDatabase { Tag: string; Completes: number; diff --git a/src/types/personalRoomsTypes.ts b/src/types/personalRoomsTypes.ts index 026b0c45..b48f8b25 100644 --- a/src/types/personalRoomsTypes.ts +++ b/src/types/personalRoomsTypes.ts @@ -1,4 +1,4 @@ -import { IColor } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IColor, IShipAttachments, IShipCustomization } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { Document, Model, Types } from "mongoose"; import { ILoadoutClient } from "./saveLoadoutTypes"; import { IMongoDate, IOid } from "./commonTypes"; @@ -11,16 +11,6 @@ export interface IGetShipResponse { LoadOutInventory: { LoadOutPresets: ILoadoutClient }; } -export interface IShipAttachments { - HOOD_ORNAMENT?: string; -} - -export interface IShipCustomization { - SkinFlavourItem?: string; - Colors?: IColor; - ShipAttachments?: IShipAttachments; -} - export type TBootLocation = "LISET" | "DRIFTER_CAMP" | "APARTMENT" | "SHOP"; export interface IOrbiterClient { diff --git a/src/types/purchaseTypes.ts b/src/types/purchaseTypes.ts index a1f475aa..f3151462 100644 --- a/src/types/purchaseTypes.ts +++ b/src/types/purchaseTypes.ts @@ -1,10 +1,10 @@ -import { IEquipmentClient } from "./inventoryTypes/commonInventoryTypes"; +import { ITypeCount } from "./commonTypes"; +import { IEquipmentClient } from "./equipmentTypes"; import { IDroneClient, IInfestedFoundryClient, IMiscItem, INemesisClient, - ITypeCount, IRecentVendorPurchaseClient, TEquipmentKey, ICrewMemberClient, diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index e2e5da92..98e82273 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -1,10 +1,9 @@ -import { IOid } from "./commonTypes"; -import { ArtifactPolarity, IPolarity, IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IOid, ITypeCount } from "./commonTypes"; +import { ArtifactPolarity, IPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IBooster, IChallengeProgress, IEvolutionProgress, - ITypeCount, IMission, IRawUpgrade, ISeasonChallenge, @@ -19,13 +18,14 @@ import { ICollectibleEntry, IDiscoveredMarker, ILockedWeaponGroupClient, - ILoadOutPresets, IInvasionProgressClient, IWeaponSkinClient, IKubrowPetEggClient, INemesisClient } from "./inventoryTypes/inventoryTypes"; import { IGroup } from "./loginTypes"; +import { ILoadOutPresets } from "./saveLoadoutTypes"; +import { IEquipmentClient } from "./equipmentTypes"; export interface IAffiliationChange { Tag: string; diff --git a/src/types/saveLoadoutTypes.ts b/src/types/saveLoadoutTypes.ts index 06734f89..d8780b2f 100644 --- a/src/types/saveLoadoutTypes.ts +++ b/src/types/saveLoadoutTypes.ts @@ -1,14 +1,13 @@ import { IOid } from "@/src/types/commonTypes"; -import { IItemConfig, IOperatorConfigClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { Types } from "mongoose"; import { ICrewShipCustomization, - ICrewShipMembersClient, - ICrewShipWeapon, IFlavourItem, - ILoadoutConfigClient, - ILotusCustomization -} from "./inventoryTypes/inventoryTypes"; + IItemConfig, + ILotusCustomization, + IOperatorConfigClient +} from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { Types } from "mongoose"; +import { ICrewShipMembersClient, ICrewShipWeapon, IEquipmentSelection } from "./equipmentTypes"; export interface ISaveLoadoutRequest { LoadOuts: ILoadoutClient; @@ -73,7 +72,6 @@ export type IConfigEntry = { export type ILoadoutClient = Omit; -// keep in sync with ILoadOutPresets export interface ILoadoutDatabase { NORMAL: ILoadoutConfigDatabase[]; SENTINEL: ILoadoutConfigDatabase[]; @@ -90,9 +88,48 @@ export interface ILoadoutDatabase { loadoutOwnerId: Types.ObjectId; } +export interface ILoadOutPresets { + NORMAL: ILoadoutConfigClient[]; + NORMAL_PVP: ILoadoutConfigClient[]; + LUNARO: ILoadoutConfigClient[]; + ARCHWING: ILoadoutConfigClient[]; + SENTINEL: ILoadoutConfigClient[]; + OPERATOR: ILoadoutConfigClient[]; + GEAR: ILoadoutConfigClient[]; + KDRIVE: ILoadoutConfigClient[]; + DATAKNIFE: ILoadoutConfigClient[]; + MECH: ILoadoutConfigClient[]; + OPERATOR_ADULT: ILoadoutConfigClient[]; + DRIFTER: ILoadoutConfigClient[]; +} + export interface ILoadoutEntry { [key: string]: ILoadoutConfigClient; } + export interface ILoadoutConfigDatabase extends Omit { _id: Types.ObjectId; } + +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; + Favorite?: boolean; + n?: string; // Loadout name + s?: IEquipmentSelection; // Suit + p?: IEquipmentSelection; // Secondary weapon + l?: IEquipmentSelection; // Primary weapon + m?: IEquipmentSelection; // Melee weapon + h?: IEquipmentSelection; // Gravimag weapon + a?: IEquipmentSelection; // Necromech exalted weapon + ItemId: IOid; + Remove?: boolean; // when client wants to remove a config, it only includes ItemId & Remove. +} diff --git a/src/types/shipTypes.ts b/src/types/shipTypes.ts index c96ae3a5..4b070f65 100644 --- a/src/types/shipTypes.ts +++ b/src/types/shipTypes.ts @@ -1,6 +1,5 @@ import { Types } from "mongoose"; -import { IColor } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { IShipAttachments } from "./personalRoomsTypes"; +import { IColor, IShipAttachments } from "@/src/types/inventoryTypes/commonInventoryTypes"; export interface IShipDatabase { ItemType: string;