refactor: Combine Equipment and Config Types (#289)

Co-authored-by: AMelonInsideLemon <AMelonInsideLemon@users.noreply.github.com>
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
This commit is contained in:
AMelonInsideLemon 2024-06-16 17:51:20 +02:00 committed by GitHub
parent c9b570059e
commit e2221f257b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 214 additions and 624 deletions

View File

@ -1,7 +1,7 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { IUpgradesRequest } from "@/src/types/requestTypes"; import { IUpgradesRequest } from "@/src/types/requestTypes";
import { FocusSchool } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { FocusSchool, IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { IGenericItemDatabase, IMiscItem, TGenericItemKey } from "@/src/types/inventoryTypes/inventoryTypes"; import { IMiscItem, IEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
@ -28,7 +28,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
switch (operation.UpgradeRequirement) { switch (operation.UpgradeRequirement) {
case "/Lotus/Types/Items/MiscItems/OrokinReactor": case "/Lotus/Types/Items/MiscItems/OrokinReactor":
case "/Lotus/Types/Items/MiscItems/OrokinCatalyst": case "/Lotus/Types/Items/MiscItems/OrokinCatalyst":
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { for (const item of inventory[payload.ItemCategory as IEquipmentKey] as IEquipmentDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) { if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0; item.Features ??= 0;
item.Features |= 1; item.Features |= 1;
@ -38,7 +38,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
break; break;
case "/Lotus/Types/Items/MiscItems/UtilityUnlocker": case "/Lotus/Types/Items/MiscItems/UtilityUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker":
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { for (const item of inventory[payload.ItemCategory as IEquipmentKey] as IEquipmentDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) { if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0; item.Features ??= 0;
item.Features |= 2; item.Features |= 2;
@ -49,7 +49,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker": case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker":
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { for (const item of inventory[payload.ItemCategory as IEquipmentKey] as IEquipmentDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) { if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0; item.Features ??= 0;
item.Features |= 32; item.Features |= 32;
@ -61,7 +61,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
case "/Lotus/Types/Items/MiscItems/FormaUmbra": case "/Lotus/Types/Items/MiscItems/FormaUmbra":
case "/Lotus/Types/Items/MiscItems/FormaAura": case "/Lotus/Types/Items/MiscItems/FormaAura":
case "/Lotus/Types/Items/MiscItems/FormaStance": case "/Lotus/Types/Items/MiscItems/FormaStance":
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { for (const item of inventory[payload.ItemCategory as IEquipmentKey] as IEquipmentDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) { if (item._id.toString() == payload.ItemId.$oid) {
item.XP = 0; item.XP = 0;
setSlotPolarity(item, operation.PolarizeSlot, operation.PolarizeValue); setSlotPolarity(item, operation.PolarizeSlot, operation.PolarizeValue);
@ -72,7 +72,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
} }
break; break;
case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker": case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker":
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { for (const item of inventory[payload.ItemCategory as IEquipmentKey] as IEquipmentDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) { if (item._id.toString() == payload.ItemId.$oid) {
item.ModSlotPurchases ??= 0; item.ModSlotPurchases ??= 0;
item.ModSlotPurchases += 1; item.ModSlotPurchases += 1;
@ -87,7 +87,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
} }
break; break;
case "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker": case "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker":
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { for (const item of inventory[payload.ItemCategory as IEquipmentKey] as IEquipmentDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) { if (item._id.toString() == payload.ItemId.$oid) {
item.CustomizationSlotPurchases ??= 0; item.CustomizationSlotPurchases ??= 0;
item.CustomizationSlotPurchases += 1; item.CustomizationSlotPurchases += 1;
@ -103,7 +103,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
break; break;
case "": case "":
console.assert(operation.OperationType == "UOT_SWAP_POLARITY"); console.assert(operation.OperationType == "UOT_SWAP_POLARITY");
for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { for (const item of inventory[payload.ItemCategory as IEquipmentKey] as IEquipmentDatabase[]) {
if (item._id.toString() == payload.ItemId.$oid) { if (item._id.toString() == payload.ItemId.$oid) {
for (let i = 0; i != operation.PolarityRemap.length; ++i) { for (let i = 0; i != operation.PolarityRemap.length; ++i) {
if (operation.PolarityRemap[i].Slot != i) { if (operation.PolarityRemap[i].Slot != i) {
@ -122,7 +122,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
res.json({ InventoryChanges }); res.json({ InventoryChanges });
}; };
const setSlotPolarity = (item: IGenericItemDatabase, slot: number, polarity: FocusSchool): void => { const setSlotPolarity = (item: IEquipmentDatabase, slot: number, polarity: FocusSchool): void => {
item.Polarity ??= []; item.Polarity ??= [];
const entry = item.Polarity.find(entry => entry.Slot == slot); const entry = item.Polarity.find(entry => entry.Slot == slot);
if (entry) { if (entry) {

View File

@ -8,7 +8,6 @@ import {
IBooster, IBooster,
IInventoryResponse, IInventoryResponse,
ISlots, ISlots,
IGenericItem,
IMailbox, IMailbox,
IDuviriInfo, IDuviriInfo,
IPendingRecipe as IPendingRecipeDatabase, IPendingRecipe as IPendingRecipeDatabase,
@ -16,14 +15,13 @@ import {
ITypeCount, ITypeCount,
IFocusXP, IFocusXP,
IFocusUpgrades, IFocusUpgrades,
IGenericItem2,
ITypeXPItem, ITypeXPItem,
IChallengeProgress, IChallengeProgress,
IStepSequencer, IStepSequencer,
IAffiliation, IAffiliation,
INotePacks, INotePacks,
ICompletedJobChain, ICompletedJobChain,
ISeasonChallengeHistory, ISeasonChallenge,
IPlayerSkills, IPlayerSkills,
ISettings, ISettings,
IInfestedFoundry, IInfestedFoundry,
@ -40,15 +38,14 @@ import {
ILoreFragmentScan ILoreFragmentScan
} from "../../types/inventoryTypes/inventoryTypes"; } from "../../types/inventoryTypes/inventoryTypes";
import { IOid } from "../../types/commonTypes"; import { IOid } from "../../types/commonTypes";
import { ISuitDatabase } from "@/src/types/inventoryTypes/SuitTypes";
import { IWeaponDatabase } from "@/src/types/inventoryTypes/weaponTypes";
import { import {
IAbilityOverride, IAbilityOverride,
IColor, IColor,
IItemConfig, IItemConfig,
IOperatorConfigClient,
IOperatorConfigDatabase, IOperatorConfigDatabase,
IPolarity IPolarity,
IEquipmentDatabase,
IOperatorConfigClient
} from "@/src/types/inventoryTypes/commonInventoryTypes"; } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers"; import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
@ -185,33 +182,35 @@ ItemConfigSchema.set("toJSON", {
} }
}); });
//TODO: migrate to one schema for weapons and suits.. and possibly others const EquipmentSchema = new Schema<IEquipmentDatabase>({
const WeaponSchema = new Schema<IWeaponDatabase>( ItemType: String,
{ Configs: [ItemConfigSchema],
ItemType: String, UpgradeVer: Number,
Configs: [ItemConfigSchema], XP: Number,
UpgradeVer: Number, Features: Number,
XP: Number, Polarized: Number,
Features: Number, Polarity: [polaritySchema],
Polarized: Number, FocusLens: String,
Polarity: [polaritySchema], ModSlotPurchases: Number,
FocusLens: String, CustomizationSlotPurchases: Number,
ModSlotPurchases: Number, UpgradeType: Schema.Types.Mixed, //todo
CustomizationSlotPurchases: Number, UpgradeFingerprint: String,
UpgradeType: Schema.Types.Mixed, //todo ItemName: String,
UpgradeFingerprint: String, InfestationDate: Date,
ItemName: String, InfestationDays: Number,
ModularParts: [String], InfestationType: String,
UnlockLevel: Number ModularParts: [String],
}, UnlockLevel: Number,
{ id: false } Expiry: Date,
); SkillTree: String,
ArchonCrystalUpgrades: [Schema.Types.Mixed] //TODO
});
WeaponSchema.virtual("ItemId").get(function () { EquipmentSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() } satisfies IOid; return { $oid: this._id.toString() } satisfies IOid;
}); });
WeaponSchema.set("toJSON", { EquipmentSchema.set("toJSON", {
virtuals: true, virtuals: true,
transform(_document, returnedObject) { transform(_document, returnedObject) {
delete returnedObject._id; delete returnedObject._id;
@ -248,7 +247,7 @@ RawUpgrades.set("toJSON", {
}); });
//TODO: find out what this is //TODO: find out what this is
const upgrqadesSchema = new Schema( const upgradesSchema = new Schema(
{ {
UpgradeFingerprint: String, UpgradeFingerprint: String,
ItemType: String ItemType: String
@ -256,42 +255,11 @@ const upgrqadesSchema = new Schema(
{ id: false } { id: false }
); );
upgrqadesSchema.virtual("ItemId").get(function () { upgradesSchema.virtual("ItemId").get(function () {
return toOid(this._id); return toOid(this._id);
}); });
upgrqadesSchema.set("toJSON", { upgradesSchema.set("toJSON", {
virtuals: true,
transform(_document, returnedObject) {
delete returnedObject._id;
delete returnedObject.__v;
}
});
//TODO: reduce weapon and suit schemas to one schema if reasonable
const suitSchema = new Schema<ISuitDatabase>(
{
ItemType: String,
Configs: [ItemConfigSchema],
UpgradeVer: Number,
XP: Number,
InfestationDate: Date,
Features: Number,
Polarity: [polaritySchema],
Polarized: Number,
ModSlotPurchases: Number,
CustomizationSlotPurchases: Number,
FocusLens: String,
UnlockLevel: Number
},
{ id: false }
);
suitSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() } satisfies IOid;
});
suitSchema.set("toJSON", {
virtuals: true, virtuals: true,
transform(_document, returnedObject) { transform(_document, returnedObject) {
delete returnedObject._id; delete returnedObject._id;
@ -321,33 +289,6 @@ FlavourItemSchema.set("toJSON", {
} }
}); });
const GenericItemSchema = new Schema<IGenericItem>(
{
ItemType: String,
Configs: [ItemConfigSchema],
UpgradeVer: Number,
XP: Number,
Features: Number,
Polarity: [polaritySchema],
Polarized: Number,
ModSlotPurchases: Number,
CustomizationSlotPurchases: Number
},
{ id: false }
);
GenericItemSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() } satisfies IOid;
});
GenericItemSchema.set("toJSON", {
virtuals: true,
transform(_document, returnedObject) {
delete returnedObject._id;
delete returnedObject.__v;
}
});
// "Mailbox": { "LastInboxId": { "$oid": "123456780000000000000000" } } // "Mailbox": { "LastInboxId": { "$oid": "123456780000000000000000" } }
const MailboxSchema = new Schema<IMailbox>( const MailboxSchema = new Schema<IMailbox>(
{ {
@ -384,30 +325,6 @@ DuviriInfoSchema.set("toJSON", {
} }
}); });
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const GenericItemSchema2 = new Schema<IGenericItem2>({
ItemType: String,
ItemName: String,
XP: Number,
UpgradeVer: Number, //this is probably __v
Features: Number,
Polarized: Number,
CustomizationSlotPurchases: Number,
ModSlotPurchases: Number,
FocusLens: String,
Expiry: Date, //TODO: needs conversion
Polarity: [polaritySchema],
Configs: [ItemConfigSchema],
ModularParts: [String],
SkillTree: String,
UpgradeType: String,
UpgradeFingerprint: String,
OffensiveUpgrade: String,
DefensiveUpgrade: String,
UpgradesExpiry: Date, //TODO: needs conversion
ArchonCrystalUpgrades: []
});
const TypeXPItemSchema = new Schema<ITypeXPItem>( const TypeXPItemSchema = new Schema<ITypeXPItem>(
{ {
ItemType: String, ItemType: String,
@ -475,7 +392,7 @@ const completedJobChainsSchema = new Schema<ICompletedJobChain>(
{ _id: false } { _id: false }
); );
const seasonChallengeHistorySchema = new Schema<ISeasonChallengeHistory>( const seasonChallengeHistorySchema = new Schema<ISeasonChallenge>(
{ {
challenge: String, challenge: String,
id: String id: String
@ -696,31 +613,31 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
//Non Upgrade Mods Example:I have 999 item WeaponElectricityDamageMod (only "ItemCount"+"ItemType") //Non Upgrade Mods Example:I have 999 item WeaponElectricityDamageMod (only "ItemCount"+"ItemType")
RawUpgrades: [RawUpgrades], RawUpgrades: [RawUpgrades],
//Upgrade Mods\Riven\Arcane Example:"UpgradeFingerprint"+"ItemType"+"" //Upgrade Mods\Riven\Arcane Example:"UpgradeFingerprint"+"ItemType"+""
Upgrades: [upgrqadesSchema], Upgrades: [upgradesSchema],
//Warframe //Warframe
Suits: [suitSchema], Suits: [EquipmentSchema],
//Primary Weapon //Primary Weapon
LongGuns: [WeaponSchema], LongGuns: [EquipmentSchema],
//Secondary Weapon //Secondary Weapon
Pistols: [WeaponSchema], Pistols: [EquipmentSchema],
//Melee Weapon //Melee Weapon
Melee: [WeaponSchema], Melee: [EquipmentSchema],
//Ability Weapon like Ultimate Mech\Excalibur\Ivara etc //Ability Weapon like Ultimate Mech\Excalibur\Ivara etc
SpecialItems: [GenericItemSchema], SpecialItems: [EquipmentSchema],
//The Mandachord(Octavia) is a step sequencer //The Mandachord(Octavia) is a step sequencer
StepSequencers: [StepSequencersSchema], StepSequencers: [StepSequencersSchema],
//Sentinel(like Helios or modular) //Sentinel(like Helios or modular)
Sentinels: [Schema.Types.Mixed], Sentinels: [EquipmentSchema],
//Any /Sentinels/SentinelWeapons/ (like warframe weapon) //Any /Sentinels/SentinelWeapons/ (like warframe weapon)
SentinelWeapons: [Schema.Types.Mixed], SentinelWeapons: [EquipmentSchema],
//Modular Pets //Modular Pets
MoaPets: [Schema.Types.Mixed], MoaPets: [EquipmentSchema],
KubrowPetEggs: [Schema.Types.Mixed], KubrowPetEggs: [Schema.Types.Mixed],
//Like PowerSuit Cat\Kubrow or etc Pets //Like PowerSuit Cat\Kubrow or etc Pets
KubrowPets: [Schema.Types.Mixed], KubrowPets: [EquipmentSchema],
//Prints Cat(3 Prints)\Kubrow(2 Prints) Pets //Prints Cat(3 Prints)\Kubrow(2 Prints) Pets
KubrowPetPrints: [Schema.Types.Mixed], KubrowPetPrints: [Schema.Types.Mixed],
@ -735,27 +652,27 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
//to use add SummonItem to Consumables+EquippedGear //to use add SummonItem to Consumables+EquippedGear
//Archwing need Suits+Melee+Guns //Archwing need Suits+Melee+Guns
SpaceSuits: [GenericItemSchema], SpaceSuits: [EquipmentSchema],
SpaceMelee: [GenericItemSchema], SpaceMelee: [EquipmentSchema],
SpaceGuns: [Schema.Types.Mixed], SpaceGuns: [EquipmentSchema],
ArchwingEnabled: Boolean, ArchwingEnabled: Boolean,
//Mech need Suits+SpaceGuns+SpecialItem //Mech need Suits+SpaceGuns+SpecialItem
MechSuits: [suitSchema], MechSuits: [EquipmentSchema],
///Restoratives/HoverboardSummon (like Suit) ///Restoratives/HoverboardSummon (like Suit)
Hoverboards: [Schema.Types.Mixed], Hoverboards: [EquipmentSchema],
//Use Operator\Drifter //Use Operator\Drifter
UseAdultOperatorLoadout: Boolean, UseAdultOperatorLoadout: Boolean,
//Operator\Drifter Weapon //Operator\Drifter Weapon
OperatorAmps: [Schema.Types.Mixed], OperatorAmps: [EquipmentSchema],
//Operator //Operator
OperatorLoadOuts: [operatorConfigSchema], OperatorLoadOuts: [operatorConfigSchema],
//Drifter //Drifter
AdultOperatorLoadOuts: [operatorConfigSchema], AdultOperatorLoadOuts: [operatorConfigSchema],
DrifterMelee: [GenericItemSchema], DrifterMelee: [EquipmentSchema],
DrifterGuns: [GenericItemSchema], DrifterGuns: [EquipmentSchema],
//ErsatzHorsePowerSuit //ErsatzHorsePowerSuit
Horses: [GenericItemSchema], Horses: [EquipmentSchema],
//LandingCraft like Liset //LandingCraft like Liset
Ships: { type: [Schema.Types.ObjectId], ref: "Ships" }, Ships: { type: [Schema.Types.ObjectId], ref: "Ships" },
@ -763,7 +680,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
ShipDecorations: [typeCountSchema], ShipDecorations: [typeCountSchema],
//RailJack Setting(Mods,Skin,Weapon,etc) //RailJack Setting(Mods,Skin,Weapon,etc)
CrewShipHarnesses: [Schema.Types.Mixed], CrewShipHarnesses: [EquipmentSchema],
//Railjack/Components(https://warframe.fandom.com/wiki/Railjack/Components) //Railjack/Components(https://warframe.fandom.com/wiki/Railjack/Components)
CrewShipRawSalvage: [Schema.Types.Mixed], CrewShipRawSalvage: [Schema.Types.Mixed],
@ -790,7 +707,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
FlavourItems: [FlavourItemSchema], FlavourItems: [FlavourItemSchema],
//Lunaro Weapon //Lunaro Weapon
Scoops: [GenericItemSchema], Scoops: [EquipmentSchema],
//Mastery Rank*(Need item XPInfo to rank up) //Mastery Rank*(Need item XPInfo to rank up)
PlayerLevel: Number, PlayerLevel: Number,
@ -907,7 +824,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
InvasionChainProgress: [Schema.Types.Mixed], InvasionChainProgress: [Schema.Types.Mixed],
//https://warframe.fandom.com/wiki/Parazon //https://warframe.fandom.com/wiki/Parazon
DataKnives: [GenericItemSchema], DataKnives: [EquipmentSchema],
//CorpusLich or GrineerLich //CorpusLich or GrineerLich
NemesisAbandonedRewards: [String], NemesisAbandonedRewards: [String],
@ -1000,24 +917,24 @@ inventorySchema.set("toJSON", {
// type overwrites for subdocuments/subdocument arrays // type overwrites for subdocuments/subdocument arrays
type InventoryDocumentProps = { type InventoryDocumentProps = {
Suits: Types.DocumentArray<ISuitDatabase>; Suits: Types.DocumentArray<IEquipmentDatabase>;
LongGuns: Types.DocumentArray<IWeaponDatabase>; LongGuns: Types.DocumentArray<IEquipmentDatabase>;
Pistols: Types.DocumentArray<IWeaponDatabase>; Pistols: Types.DocumentArray<IEquipmentDatabase>;
Melee: Types.DocumentArray<IWeaponDatabase>; Melee: Types.DocumentArray<IEquipmentDatabase>;
FlavourItems: Types.DocumentArray<IFlavourItem>; FlavourItems: Types.DocumentArray<IFlavourItem>;
RawUpgrades: Types.DocumentArray<IRawUpgrade>; RawUpgrades: Types.DocumentArray<IRawUpgrade>;
Upgrades: Types.DocumentArray<ICrewShipSalvagedWeaponSkin>; Upgrades: Types.DocumentArray<ICrewShipSalvagedWeaponSkin>;
MiscItems: Types.DocumentArray<IMiscItem>; MiscItems: Types.DocumentArray<IMiscItem>;
Boosters: Types.DocumentArray<IBooster>; Boosters: Types.DocumentArray<IBooster>;
OperatorLoadOuts: Types.DocumentArray<IOperatorConfigClient>; OperatorLoadOuts: Types.DocumentArray<IOperatorConfigClient>;
SpecialItems: Types.DocumentArray<IGenericItem>; SpecialItems: Types.DocumentArray<IEquipmentDatabase>;
AdultOperatorLoadOuts: Types.DocumentArray<IOperatorConfigClient>; //TODO: this should still contain _id AdultOperatorLoadOuts: Types.DocumentArray<IOperatorConfigClient>; //TODO: this should still contain _id
MechSuits: Types.DocumentArray<ISuitDatabase>; MechSuits: Types.DocumentArray<IEquipmentDatabase>;
Scoops: Types.DocumentArray<IGenericItem>; Scoops: Types.DocumentArray<IEquipmentDatabase>;
DataKnives: Types.DocumentArray<IGenericItem>; DataKnives: Types.DocumentArray<IEquipmentDatabase>;
DrifterMelee: Types.DocumentArray<IGenericItem>; DrifterMelee: Types.DocumentArray<IEquipmentDatabase>;
Sentinels: Types.DocumentArray<IWeaponDatabase>; Sentinels: Types.DocumentArray<IEquipmentDatabase>;
Horses: Types.DocumentArray<IGenericItem>; Horses: Types.DocumentArray<IEquipmentDatabase>;
PendingRecipes: Types.DocumentArray<IPendingRecipeDatabase>; PendingRecipes: Types.DocumentArray<IPendingRecipeDatabase>;
}; };

View File

@ -1,5 +1,6 @@
import { IOid } from "@/src/types/commonTypes"; import { IOid } from "@/src/types/commonTypes";
import { ILoadoutConfigDatabase, ILoadoutDatabase, IEquipmentSelection } from "@/src/types/saveLoadoutTypes"; import { IEquipmentSelection } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { ILoadoutConfigDatabase, ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
import { Model, Schema, Types, model } from "mongoose"; import { Model, Schema, Types, model } from "mongoose";
const oidSchema = new Schema<IOid>( const oidSchema = new Schema<IOid>(

View File

@ -2,9 +2,7 @@ import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
import new_inventory from "@/static/fixed_responses/postTutorialInventory.json"; import new_inventory from "@/static/fixed_responses/postTutorialInventory.json";
import { config } from "@/src/services/configService"; import { config } from "@/src/services/configService";
import { Types } from "mongoose"; import { Types } from "mongoose";
import { ISuitClient } from "@/src/types/inventoryTypes/SuitTypes";
import { SlotNames } from "@/src/types/purchaseTypes"; import { SlotNames } from "@/src/types/purchaseTypes";
import { IWeaponClient } from "@/src/types/inventoryTypes/weaponTypes";
import { import {
IChallengeProgress, IChallengeProgress,
IConsumable, IConsumable,
@ -13,7 +11,7 @@ import {
IMiscItem, IMiscItem,
IMission, IMission,
IRawUpgrade, IRawUpgrade,
ISeasonChallengeHistory, ISeasonChallenge,
ITypeCount, ITypeCount,
InventorySlot InventorySlot
} from "@/src/types/inventoryTypes/inventoryTypes"; } from "@/src/types/inventoryTypes/inventoryTypes";
@ -27,6 +25,7 @@ import {
import { logger } from "@/src/utils/logger"; import { logger } from "@/src/utils/logger";
import { WeaponTypeInternal, getWeaponType, getExalted } from "@/src/services/itemDataService"; import { WeaponTypeInternal, getWeaponType, getExalted } from "@/src/services/itemDataService";
import { ISyndicateSacrifice, ISyndicateSacrificeResponse } from "../types/syndicateTypes"; import { ISyndicateSacrifice, ISyndicateSacrificeResponse } from "../types/syndicateTypes";
import { IEquipmentClient } from "../types/inventoryTypes/commonInventoryTypes";
export const createInventory = async ( export const createInventory = async (
accountOwnerId: Types.ObjectId, accountOwnerId: Types.ObjectId,
@ -237,7 +236,7 @@ export const addSentinel = async (sentinelName: string, accountId: string) => {
return changedInventory.Sentinels[sentinelIndex - 1].toJSON(); return changedInventory.Sentinels[sentinelIndex - 1].toJSON();
}; };
export const addPowerSuit = async (powersuitName: string, accountId: string): Promise<ISuitClient> => { export const addPowerSuit = async (powersuitName: string, accountId: string): Promise<IEquipmentClient> => {
const specialItems = getExalted(powersuitName); const specialItems = getExalted(powersuitName);
if (specialItems != false) { if (specialItems != false) {
for await (const specialItem of specialItems) { for await (const specialItem of specialItems) {
@ -386,7 +385,7 @@ export const addWeapon = async (
weaponType: WeaponTypeInternal, weaponType: WeaponTypeInternal,
weaponName: string, weaponName: string,
accountId: string accountId: string
): Promise<IWeaponClient> => { ): Promise<IEquipmentClient> => {
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
let weaponIndex; let weaponIndex;
@ -418,7 +417,7 @@ export const addCustomization = async (customizatonName: string, accountId: stri
const addGearExpByCategory = ( const addGearExpByCategory = (
inventory: IInventoryDatabaseDocument, inventory: IInventoryDatabaseDocument,
gearArray: ISuitClient[] | IWeaponClient[] | undefined, gearArray: IEquipmentClient[] | undefined,
categoryName: "Pistols" | "LongGuns" | "Melee" | "Suits" categoryName: "Pistols" | "LongGuns" | "Melee" | "Suits"
) => { ) => {
const category = inventory[categoryName]; const category = inventory[categoryName];
@ -534,7 +533,7 @@ export const updateChallengeProgress = async (challenges: IUpdateChallengeProgre
export const addSeasonalChallengeHistory = ( export const addSeasonalChallengeHistory = (
inventory: IInventoryDatabaseDocument, inventory: IInventoryDatabaseDocument,
itemsArray: ISeasonChallengeHistory[] | undefined itemsArray: ISeasonChallenge[] | undefined
) => { ) => {
const category = inventory.SeasonChallengeHistory; const category = inventory.SeasonChallengeHistory;

View File

@ -1,25 +0,0 @@
import { IOid } from "@/src/types/commonTypes";
import { IPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { Types } from "mongoose";
import { IItemConfig } from "./commonInventoryTypes";
export interface ISuitClient extends Omit<ISuitDatabase, "_id"> {
ItemId: IOid;
}
export interface ISuitDatabase {
ItemType: string;
Configs: IItemConfig[];
UpgradeVer?: number;
XP?: number;
InfestationDate?: Date;
Features?: number;
Polarity?: IPolarity[];
Polarized?: number;
ModSlotPurchases?: number;
CustomizationSlotPurchases?: number;
FocusLens?: string;
UnlockLevel?: number;
_id: Types.ObjectId;
ItemId?: IOid; // only in response
}

View File

@ -1,4 +1,4 @@
import { IOid } from "@/src/types/commonTypes"; import { IMongoDate, IOid } from "@/src/types/commonTypes";
import { Types } from "mongoose"; import { Types } from "mongoose";
export interface IPolarity { export interface IPolarity {
@ -38,15 +38,8 @@ export interface ISlotsBin {
Slots: number; Slots: number;
} }
// ISigCol? IsIgCoL? ISIGCOL! export interface IItemConfig {
export interface Isigcol { Skins?: string[];
t0: number;
t1: number;
en: number;
}
interface IItemConfigBase {
Skins: string[];
pricol?: IColor; pricol?: IColor;
attcol?: IColor; attcol?: IColor;
sigcol?: IColor; sigcol?: IColor;
@ -56,12 +49,7 @@ interface IItemConfigBase {
cloth?: IColor; cloth?: IColor;
Upgrades?: string[]; Upgrades?: string[];
Name?: string; Name?: string;
ugly?: boolean; OperatorAmp?: IOid;
}
//TODO: Proper names for the different config types, this should be something like
//IItemConfigPlayable
export interface IItemConfig extends IItemConfigBase {
Songs?: ISong[]; Songs?: ISong[];
AbilityOverride?: IAbilityOverride; AbilityOverride?: IAbilityOverride;
PvpUpgrades?: string[]; PvpUpgrades?: string[];
@ -74,14 +62,47 @@ export interface ISong {
p?: string; p?: string;
s: string; s: string;
} }
export interface IOperatorConfigDatabase extends IItemConfig {
//TODO: Consider renaming it to loadout instead of config
export interface IOperatorConfigDatabase extends IItemConfigBase {
_id: Types.ObjectId; _id: Types.ObjectId;
AbilityOverride?: IAbilityOverride; // not present in adultOperator
OperatorAmp?: IOid; // not present in adultOperator
} }
export interface IOperatorConfigClient extends Omit<IOperatorConfigDatabase, "_id"> { export interface IOperatorConfigClient extends Omit<IOperatorConfigDatabase, "_id"> {
ItemId: IOid; ItemId: IOid;
} }
export interface IEquipmentSelection {
ItemId: IOid;
mod?: number;
cus?: number;
ItemType?: string;
hide?: boolean;
}
export interface IEquipmentClient extends Omit<IEquipmentDatabase, "_id"> {
ItemId: IOid;
}
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?: IMongoDate;
InfestationDays?: number;
InfestationType?: string;
ModularParts?: string[];
UnlockLevel?: number;
Expiry?: IMongoDate;
SkillTree?: string;
ArchonCrystalUpgrades?: []; //TODO
_id: Types.ObjectId;
}

View File

@ -2,15 +2,13 @@
import { Document, Types } from "mongoose"; import { Document, Types } from "mongoose";
import { IOid, IMongoDate } from "../commonTypes"; import { IOid, IMongoDate } from "../commonTypes";
import { import {
IAbilityOverride,
IColor, IColor,
FocusSchool, FocusSchool,
IPolarity,
IItemConfig, IItemConfig,
IOperatorConfigClient IOperatorConfigClient,
IEquipmentSelection,
IEquipmentDatabase
} from "@/src/types/inventoryTypes/commonInventoryTypes"; } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { ISuitDatabase } from "@/src/types/inventoryTypes/SuitTypes";
import { IOperatorLoadOutSigcol, IWeaponDatabase } from "@/src/types/inventoryTypes/weaponTypes";
//Document extends will be deleted soon. TODO: delete and migrate uses to ... //Document extends will be deleted soon. TODO: delete and migrate uses to ...
export interface IInventoryDatabaseDocument extends IInventoryDatabase, Document {} export interface IInventoryDatabaseDocument extends IInventoryDatabase, Document {}
@ -61,48 +59,14 @@ export interface ITypeCount {
ItemCount: number; ItemCount: number;
} }
export interface IGenericItem2 { export type IEquipmentKey =
ItemType: string; | "Suits"
ItemName: string; | "LongGuns"
ItemId: IOid; | "Pistols"
XP: number; | "Melee"
UpgradeVer: number; | "SpecialItems"
Features: number; | "Sentinels"
Polarized: number; | "SentinelWeapons";
CustomizationSlotPurchases: number;
ModSlotPurchases: number;
FocusLens: string;
Expiry: IMongoDate;
Polarity: IPolarity[];
Configs: IItemConfig[];
ModularParts: string[];
SkillTree: string;
UpgradeType: string;
UpgradeFingerprint: string;
OffensiveUpgrade: string;
DefensiveUpgrade: string;
UpgradesExpiry: IMongoDate;
ArchonCrystalUpgrades: [];
}
export interface IGenericItem {
ItemType: string;
XP?: number;
Configs: IItemConfig[];
UpgradeVer: number;
ItemId: IOid;
Features?: number;
Polarity?: IPolarity[];
Polarized?: number;
ModSlotPurchases?: number;
CustomizationSlotPurchases?: number;
}
export interface IGenericItemDatabase extends Omit<IGenericItem, "ItemId"> {
_id: Types.ObjectId;
}
export type TGenericItemKey = "Suits" | "LongGuns" | "Pistols" | "Melee";
export interface IDuviriInfo { export interface IDuviriInfo {
Seed: number; Seed: number;
@ -119,12 +83,12 @@ export interface IPendingRecipeResponse extends Omit<IPendingRecipe, "Completion
CompletionDate: IMongoDate; CompletionDate: IMongoDate;
} }
export interface IInventoryResponse { export interface IInventoryResponse {
Horses: IGenericItem[]; Horses: IEquipmentDatabase[];
DrifterMelee: IGenericItem[]; DrifterMelee: IEquipmentDatabase[];
DrifterGuns: IGenericItem[]; DrifterGuns: IEquipmentDatabase[];
DuviriInfo: IDuviriInfo; DuviriInfo: IDuviriInfo;
Mailbox: IMailbox; Mailbox: IMailbox;
KahlLoadOuts: IGenericItem[]; KahlLoadOuts: IEquipmentDatabase[];
SubscribedToEmails: number; SubscribedToEmails: number;
Created: IMongoDate; Created: IMongoDate;
RewardSeed: number; RewardSeed: number;
@ -156,19 +120,19 @@ export interface IInventoryResponse {
ChallengeProgress: IChallengeProgress[]; ChallengeProgress: IChallengeProgress[];
RawUpgrades: IRawUpgrade[]; RawUpgrades: IRawUpgrade[];
ReceivedStartingGear: boolean; ReceivedStartingGear: boolean;
Suits: ISuitDatabase[]; Suits: IEquipmentDatabase[];
LongGuns: IWeaponDatabase[]; LongGuns: IEquipmentDatabase[];
Pistols: IWeaponDatabase[]; Pistols: IEquipmentDatabase[];
Melee: IWeaponDatabase[]; Melee: IEquipmentDatabase[];
Ships: IShipInventory[]; Ships: IShipInventory[];
QuestKeys: IQuestKeyResponse[]; QuestKeys: IQuestKeyResponse[];
FlavourItems: IFlavourItem[]; FlavourItems: IFlavourItem[];
Scoops: IGenericItem[]; Scoops: IEquipmentDatabase[];
TrainingRetriesLeft: number; TrainingRetriesLeft: number;
LoadOutPresets: ILoadOutPresets; LoadOutPresets: ILoadOutPresets;
CurrentLoadOutIds: Array<any[] | IOid>; CurrentLoadOutIds: Array<any[] | IOid>;
Missions: IMission[]; Missions: IMission[];
RandomUpgradesIdentified: number; RandomUpgradesIdentified?: number;
LastRegionPlayed: string; LastRegionPlayed: string;
XPInfo: ITypeXPItem[]; XPInfo: ITypeXPItem[];
Recipes: ITypeCount[]; Recipes: ITypeCount[];
@ -198,14 +162,14 @@ export interface IInventoryResponse {
Affiliations: IAffiliation[]; Affiliations: IAffiliation[];
QualifyingInvasions: any[]; QualifyingInvasions: any[];
FactionScores: number[]; FactionScores: number[];
SpaceSuits: IGenericItem[]; SpaceSuits: IEquipmentDatabase[];
SpaceMelee: IGenericItem[]; SpaceMelee: IEquipmentDatabase[];
SpaceGuns: ISpaceGun[]; SpaceGuns: IEquipmentDatabase[];
ArchwingEnabled: boolean; ArchwingEnabled: boolean;
PendingSpectreLoadouts: any[]; PendingSpectreLoadouts: any[];
SpectreLoadouts: ISpectreLoadout[]; SpectreLoadouts: ISpectreLoadout[];
SentinelWeapons: IWeaponDatabase[]; SentinelWeapons: IEquipmentDatabase[];
Sentinels: IWeaponDatabase[]; Sentinels: IEquipmentDatabase[];
EmailItems: ITypeXPItem[]; EmailItems: ITypeXPItem[];
CompletedSyndicates: string[]; CompletedSyndicates: string[];
FocusXP: IFocusXP; FocusXP: IFocusXP;
@ -216,7 +180,7 @@ export interface IInventoryResponse {
Drones: IDrone[]; Drones: IDrone[];
StepSequencers: IStepSequencer[]; StepSequencers: IStepSequencer[];
ActiveAvatarImageType: string; ActiveAvatarImageType: string;
KubrowPets: IKubrowPet[]; KubrowPets: IEquipmentDatabase[];
ShipDecorations: IConsumable[]; ShipDecorations: IConsumable[];
DailyAffiliationCetus: number; DailyAffiliationCetus: number;
DailyAffiliationQuills: number; DailyAffiliationQuills: number;
@ -224,14 +188,14 @@ export interface IInventoryResponse {
CompletedJobs: ICompletedJob[]; CompletedJobs: ICompletedJob[];
FocusAbility: string; FocusAbility: string;
FocusUpgrades: IFocusUpgrade[]; FocusUpgrades: IFocusUpgrade[];
OperatorAmps: IOperatorAmp[]; OperatorAmps: IEquipmentDatabase[];
HasContributedToDojo: boolean; HasContributedToDojo?: boolean;
HWIDProtectEnabled: boolean; HWIDProtectEnabled: boolean;
KubrowPetPrints: IKubrowPetPrint[]; KubrowPetPrints: IKubrowPetPrint[];
AlignmentReplay: IAlignment; AlignmentReplay: IAlignment;
PersonalGoalProgress: IPersonalGoalProgress[]; PersonalGoalProgress: IPersonalGoalProgress[];
DailyAffiliationSolaris: number; DailyAffiliationSolaris: number;
SpecialItems: IGenericItem[]; SpecialItems: IEquipmentDatabase[];
ThemeStyle: string; ThemeStyle: string;
ThemeBackground: string; ThemeBackground: string;
ThemeSounds: string; ThemeSounds: string;
@ -242,17 +206,17 @@ export interface IInventoryResponse {
DailyAffiliationVentkids: number; DailyAffiliationVentkids: number;
DailyAffiliationVox: number; DailyAffiliationVox: number;
RecentVendorPurchases: Array<number | string>; RecentVendorPurchases: Array<number | string>;
Hoverboards: IHoverboard[]; Hoverboards: IEquipmentDatabase[];
NodeIntrosCompleted: string[]; NodeIntrosCompleted: string[];
GuildId?: IOid; GuildId?: IOid;
CompletedJobChains: ICompletedJobChain[]; CompletedJobChains: ICompletedJobChain[];
SeasonChallengeHistory: ISeasonChallengeHistory[]; SeasonChallengeHistory: ISeasonChallenge[];
MoaPets: IMoaPet[]; MoaPets: IEquipmentDatabase[];
EquippedInstrument: string; EquippedInstrument: string;
InvasionChainProgress: IInvasionChainProgress[]; InvasionChainProgress: IInvasionChainProgress[];
DataKnives: IGenericItem[]; DataKnives: IEquipmentDatabase[];
NemesisHistory: INemesisHistory[]; NemesisHistory: INemesisHistory[];
LastNemesisAllySpawnTime: IMongoDate; LastNemesisAllySpawnTime?: IMongoDate;
Settings: ISettings; Settings: ISettings;
PersonalTechProjects: IPersonalTechProject[]; PersonalTechProjects: IPersonalTechProject[];
CrewShips: ICrewShip[]; CrewShips: ICrewShip[];
@ -262,15 +226,15 @@ export interface IInventoryResponse {
CrewShipWeapons: ICrewShipWeapon[]; CrewShipWeapons: ICrewShipWeapon[];
CrewShipSalvagedWeapons: ICrewShipWeapon[]; CrewShipSalvagedWeapons: ICrewShipWeapon[];
CrewShipWeaponSkins: ICrewShipSalvagedWeaponSkin[]; CrewShipWeaponSkins: ICrewShipSalvagedWeaponSkin[];
TradeBannedUntil: IMongoDate; TradeBannedUntil?: IMongoDate;
PlayedParkourTutorial: boolean; PlayedParkourTutorial: boolean;
SubscribedToEmailsPersonalized: number; SubscribedToEmailsPersonalized: number;
DailyAffiliationEntrati: number; DailyAffiliationEntrati: number;
DailyAffiliationNecraloid: number; DailyAffiliationNecraloid: number;
MechSuits: ISuitDatabase[]; MechSuits: IEquipmentDatabase[];
InfestedFoundry: IInfestedFoundry; InfestedFoundry: IInfestedFoundry;
BlessingCooldown: IMongoDate; BlessingCooldown: IMongoDate;
CrewShipHarnesses: ICrewShipHarness[]; CrewShipHarnesses: IEquipmentDatabase[];
CrewShipRawSalvage: IConsumable[]; CrewShipRawSalvage: IConsumable[];
CrewMembers: ICrewMember[]; CrewMembers: ICrewMember[];
AdultOperatorLoadOuts: IOperatorConfigClient[]; AdultOperatorLoadOuts: IOperatorConfigClient[];
@ -297,16 +261,6 @@ export interface IInventoryResponse {
DeathSquadable: boolean; DeathSquadable: boolean;
} }
export interface IAdultOperatorLoadOut {
Skins: string[];
attcol: IColor;
eyecol: IColor;
facial: IColor;
pricol: IColor;
Upgrades?: string[];
ItemId: IOid;
}
export interface IAffiliation { export interface IAffiliation {
Initiated?: boolean; Initiated?: boolean;
Standing: number; Standing: number;
@ -384,14 +338,11 @@ export interface ICrewMember {
WeaponId: IOid; WeaponId: IOid;
XP: number; XP: number;
PowersuitType: string; PowersuitType: string;
Configs: ICrewMemberConfig[]; Configs: IItemConfig[];
SecondInCommand: boolean; SecondInCommand: boolean;
ItemId: IOid; ItemId: IOid;
} }
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface ICrewMemberConfig {}
export interface ISkillEfficiency { export interface ISkillEfficiency {
PILOTING: ICombat; PILOTING: ICombat;
GUNNERY: ICombat; GUNNERY: ICombat;
@ -404,21 +355,6 @@ export interface ICombat {
Assigned: number; Assigned: number;
} }
export interface ICrewShipHarness {
ItemType: string;
Configs: ICrewShipHarnessConfig[];
Features: number;
UpgradeVer: number;
XP: number;
Polarity: IPolarity[];
Polarized: number;
ItemId: IOid;
}
export interface ICrewShipHarnessConfig {
Upgrades?: string[];
}
export enum InventorySlot { export enum InventorySlot {
SUITS = "SuitBin", SUITS = "SuitBin",
WEAPONS = "WeaponBin", WEAPONS = "WeaponBin",
@ -443,25 +379,21 @@ export interface ICrewShipWeapon {
ItemType: string; ItemType: string;
UpgradeType?: string; UpgradeType?: string;
UpgradeFingerprint?: string; UpgradeFingerprint?: string;
Configs?: ICrewShipHarnessConfig[]; Configs?: IItemConfig[];
UpgradeVer?: number; UpgradeVer?: number;
ItemId: IOid; ItemId: IOid;
} }
export interface ICrewShip { export interface ICrewShip {
ItemType: string; ItemType: string;
Configs: ICrewShipConfig[]; Configs: IItemConfig[];
Weapon: ICrewshipWeapon; Weapon: ICrewshipWeapon;
Customization: ICustomization; Customization: ICustomization;
ItemName: string; ItemName: string;
RailjackImage: IFlavourItem; RailjackImage: IFlavourItem;
CrewMembers: ICrewMembers; CrewMembers: ICrewMembers;
ItemId: IOid; ItemId: IOid;
} _id: Types.ObjectId;
export interface ICrewShipConfig {
Skins?: string[];
pricol?: IColor;
} }
export interface ICrewMembers { export interface ICrewMembers {
@ -484,16 +416,6 @@ export interface IShipExterior {
ShipAttachments?: IShipAttachments; ShipAttachments?: IShipAttachments;
} }
//TODO: check whether it makes sense to use this specifity of color.
export interface IShipExteriorColors {
t0: number;
t1: number;
t2: number;
t3: number;
m0: number;
en: number;
}
export interface IShipAttachments { export interface IShipAttachments {
HOOD_ORNAMENT: string; //TODO: Others are probably possible HOOD_ORNAMENT: string; //TODO: Others are probably possible
} }
@ -512,22 +434,12 @@ export interface ICrewshipWeapon {
PORT_GUNS: IPortGuns; PORT_GUNS: IPortGuns;
} }
export interface IPilot {
PRIMARY_A: IL;
SECONDARY_A: IL;
}
// L? Bozo.
export interface IL {
ItemId?: IOid;
mod?: number;
cus?: number;
ItemType?: string;
hide?: boolean;
}
export interface IPortGuns { export interface IPortGuns {
PRIMARY_A: IL; PRIMARY_A: IEquipmentSelection;
}
export interface IPilot extends IPortGuns {
SECONDARY_A: IEquipmentSelection;
} }
export interface IDiscoveredMarker { export interface IDiscoveredMarker {
@ -569,38 +481,6 @@ export interface IFusionTreasure {
Sockets: number; Sockets: number;
} }
export interface IHoverboard {
ItemType: string;
Configs: IHoverboardConfig[];
ModularParts: string[];
ItemName?: string;
Polarity?: IPolarity[];
UpgradeVer: number;
XP: number;
Features: number;
ItemId: IOid;
}
export interface IHoverboardConfig {
Upgrades?: string[];
Skins?: IPurpleSkin[];
pricol?: IColor;
sigcol?: ISigcol;
attcol?: IColor;
}
export enum IPurpleSkin {
Empty = "",
The5Be4Af71A38E4A9306040E15 = "5be4af71a38e4a9306040e15",
The5C930Ac3A38E4A24Bc3Ad5De = "5c930ac3a38e4a24bc3ad5de",
The5C9C6F9857904A7A3B25656B = "5c9c6f9857904a7a3b25656b",
The5Dd8A8E3A38E4A321A45E6A0 = "5dd8a8e3a38e4a321a45e6a0"
}
export interface ISigcol {
t3: number;
}
export interface IInfestedFoundry { export interface IInfestedFoundry {
Name: string; Name: string;
Resources: ITypeCount[]; Resources: ITypeCount[];
@ -653,44 +533,13 @@ export interface ITraits {
Personality: string; Personality: string;
BodyType: string; BodyType: string;
Head?: string; Head?: string;
Tail?: Tail; Tail?: string;
}
export enum Tail {
Empty = "",
LotusTypesGameCatbrowPetTailsCatbrowTailA = "/Lotus/Types/Game/CatbrowPet/Tails/CatbrowTailA",
LotusTypesGameCatbrowPetTailsCatbrowTailB = "/Lotus/Types/Game/CatbrowPet/Tails/CatbrowTailB",
LotusTypesGameCatbrowPetTailsCatbrowTailC = "/Lotus/Types/Game/CatbrowPet/Tails/CatbrowTailC",
LotusTypesGameCatbrowPetTailsCatbrowTailD = "/Lotus/Types/Game/CatbrowPet/Tails/CatbrowTailD"
} }
export enum KubrowPetPrintItemType { export enum KubrowPetPrintItemType {
LotusTypesGameKubrowPetImprintedTraitPrint = "/Lotus/Types/Game/KubrowPet/ImprintedTraitPrint" LotusTypesGameKubrowPetImprintedTraitPrint = "/Lotus/Types/Game/KubrowPet/ImprintedTraitPrint"
} }
export interface IKubrowPet {
ItemType: string;
Configs: IKubrowPetConfig[];
UpgradeVer: number;
Details: IDetails;
XP?: number;
Polarized?: number;
Polarity?: IPolarity[];
Features?: number;
InfestationDate?: IMongoDate;
InfestationDays?: number;
InfestationType?: string;
ItemId: IOid;
ModularParts?: string[];
}
export interface IKubrowPetConfig {
Skins?: string[];
pricol?: IColor;
attcol?: IColor;
Upgrades?: string[];
}
export interface IDetails { export interface IDetails {
Name: string; Name: string;
IsPuppy: boolean; IsPuppy: boolean;
@ -733,74 +582,32 @@ export interface ILibraryPersonalProgress {
//this needs to be checked against ILoadoutDatabase //this needs to be checked against ILoadoutDatabase
export interface ILoadOutPresets { export interface ILoadOutPresets {
NORMAL: INormal[]; NORMAL: ILoadoutConfigClient[];
NORMAL_PVP: IArchwing[]; NORMAL_PVP: ILoadoutConfigClient[];
LUNARO: ILunaro[]; LUNARO: ILoadoutConfigClient[];
ARCHWING: IArchwing[]; ARCHWING: ILoadoutConfigClient[];
SENTINEL: IArchwing[]; SENTINEL: ILoadoutConfigClient[];
OPERATOR: IArchwing[]; OPERATOR: ILoadoutConfigClient[];
GEAR: IGear[]; GEAR: ILoadoutConfigClient[];
KDRIVE: IKdrive[]; KDRIVE: ILoadoutConfigClient[];
DATAKNIFE: IArchwing[]; DATAKNIFE: ILoadoutConfigClient[];
MECH: IMech[]; MECH: ILoadoutConfigClient[];
OPERATOR_ADULT: IArchwing[]; OPERATOR_ADULT: ILoadoutConfigClient[];
} }
export interface IArchwing { export interface ILoadoutConfigClient {
PresetIcon: string; FocusSchool?: FocusSchool;
Favorite: boolean; PresetIcon?: string;
n?: string; Favorite?: boolean;
s: IL; n?: string; // Loadout name
l?: IL; s?: IEquipmentSelection; // Suit
m?: IL; p?: IEquipmentSelection;
ItemId: IOid; l?: IEquipmentSelection; // Primary weapon
p?: IL; m?: IEquipmentSelection; // Melee weapon
} h?: IEquipmentSelection; // Gravimag weapon
a?: IEquipmentSelection;
export interface IGear {
n: string;
s: IL;
p: IL;
l: IL;
m: IL;
ItemId: IOid;
}
export interface IKdrive {
PresetIcon: string;
Favorite: boolean;
s: IL;
ItemId: IOid;
}
export interface ILunaro {
n: string;
s: IL;
m: IL;
ItemId: IOid;
}
export interface IMech {
PresetIcon: string;
Favorite: boolean;
s: IL;
h: IL;
a: IL;
ItemId: IOid;
}
export interface INormal {
FocusSchool: FocusSchool;
PresetIcon: string;
Favorite: boolean;
n: string;
s: IL;
p: IL;
l: IL;
m: IL;
h: IL;
a?: IL;
ItemId: IOid; ItemId: IOid;
Remove?: boolean; // when client wants to remove a config, it only includes ItemId & Remove.
} }
export enum UpgradeType { export enum UpgradeType {
@ -813,16 +620,7 @@ export interface ILoreFragmentScan {
ItemType: string; ItemType: string;
} }
export interface ILotusCustomization { export interface ILotusCustomization extends IItemConfig {
Upgrades: any[];
PvpUpgrades: any[];
Skins: string[];
pricol: IColor;
attcol: any[];
sigcol: any[];
eyecol: any[];
facial: any[];
Songs: any[];
Persona: string; Persona: string;
} }
@ -833,18 +631,6 @@ export interface IMission {
RewardsCooldownTime?: IMongoDate; RewardsCooldownTime?: IMongoDate;
} }
export interface IMoaPet {
ItemType: string;
Configs: IKubrowPetConfig[];
UpgradeVer: number;
ModularParts: string[];
XP?: number;
Features?: number;
ItemName: string;
Polarity?: IPolarity[];
ItemId: IOid;
}
export interface INemesisHistory { export interface INemesisHistory {
fp: number; fp: number;
manifest: Manifest; manifest: Manifest;
@ -879,30 +665,6 @@ export enum Manifest {
LotusTypesGameNemesisKuvaLichKuvaLichManifestVersionTwo = "/Lotus/Types/Game/Nemesis/KuvaLich/KuvaLichManifestVersionTwo" LotusTypesGameNemesisKuvaLichKuvaLichManifestVersionTwo = "/Lotus/Types/Game/Nemesis/KuvaLich/KuvaLichManifestVersionTwo"
} }
export interface IOperatorAmp {
ItemType: string;
Configs: IKubrowPetConfig[];
ModularParts?: string[];
XP?: number;
UpgradeVer?: number;
ItemName?: string;
Features?: number;
ItemId: IOid;
}
export interface IOperatorLoadOut {
Skins: string[];
pricol?: IColor;
attcol?: IColor;
eyecol: IColor;
facial?: IColor;
sigcol?: IOperatorLoadOutSigcol;
OperatorAmp?: IOid;
Upgrades?: string[];
AbilityOverride: IAbilityOverride;
ItemId: IOid;
}
export interface IPendingCoupon { export interface IPendingCoupon {
Expiry: IMongoDate; Expiry: IMongoDate;
Discount: number; Discount: number;
@ -1031,12 +793,7 @@ export interface IRawUpgrade {
LastAdded?: IOid; LastAdded?: IOid;
} }
export interface ISeasonChallengeHistory { export interface ISeasonChallenge {
challenge: string;
id: string;
}
export interface ISeasonChallengeCompletions {
challenge: string; challenge: string;
id: string; id: string;
} }
@ -1060,30 +817,6 @@ export interface IShipInventory {
ItemId: IOid; ItemId: IOid;
} }
export interface ISpaceGun {
ItemType: string;
Configs: ISpaceGunConfig[];
XP?: number;
UpgradeVer?: number;
ItemId: IOid;
Features?: number;
Polarized?: number;
Polarity?: IPolarity[];
UpgradeType?: UpgradeType;
UpgradeFingerprint?: string;
ItemName?: string;
}
export interface ISpaceGunConfig {
Skins?: string[];
pricol?: IColor;
Upgrades?: string[];
}
export interface IPurpleCol {
en: number;
}
export interface ISpectreLoadout { export interface ISpectreLoadout {
LongGuns: string; LongGuns: string;
Melee: string; Melee: string;

View File

@ -1,33 +0,0 @@
import { IOid } from "@/src/types/commonTypes";
import { IItemConfig } from "./commonInventoryTypes";
import { IPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { Types } from "mongoose";
export interface IWeaponClient extends Omit<IWeaponDatabase, "_id"> {
ItemId: IOid;
}
export interface IWeaponDatabase {
ItemType: string;
Configs: IItemConfig[];
UpgradeVer?: number;
XP?: number;
Features?: number;
Polarized?: number;
Polarity?: IPolarity[];
FocusLens?: string;
ModSlotPurchases?: number;
CustomizationSlotPurchases?: number;
UpgradeType?: string;
UpgradeFingerprint?: string;
ItemName?: string;
ModularParts?: string[];
UnlockLevel?: number;
_id: Types.ObjectId;
}
export interface IOperatorLoadOutSigcol {
t0?: number;
t1?: number;
en?: number;
}

View File

@ -1,6 +1,5 @@
import { ISuitClient } from "@/src/types/inventoryTypes/SuitTypes";
import { IFlavourItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IFlavourItem } from "@/src/types/inventoryTypes/inventoryTypes";
import { IWeaponClient } from "@/src/types/inventoryTypes/weaponTypes"; import { IEquipmentClient } from "./inventoryTypes/commonInventoryTypes";
export interface IPurchaseRequest { export interface IPurchaseRequest {
PurchaseParams: IPurchaseParams; PurchaseParams: IPurchaseParams;
@ -23,11 +22,11 @@ export interface IPurchaseResponse {
SuitBin?: IBinChanges; SuitBin?: IBinChanges;
WeaponBin?: IBinChanges; WeaponBin?: IBinChanges;
MechBin?: IBinChanges; MechBin?: IBinChanges;
MechSuits?: ISuitClient[]; MechSuits?: IEquipmentClient[];
Suits?: ISuitClient[]; Suits?: IEquipmentClient[];
LongGuns?: IWeaponClient[]; LongGuns?: IEquipmentClient[];
Pistols?: IWeaponClient[]; Pistols?: IEquipmentClient[];
Melee?: IWeaponClient[]; Melee?: IEquipmentClient[];
PremiumCredits?: number; PremiumCredits?: number;
PremiumCreditsFree?: number; PremiumCreditsFree?: number;
RegularCredits?: number; RegularCredits?: number;

View File

@ -1,5 +1,5 @@
import { IOid } from "./commonTypes"; import { IOid } from "./commonTypes";
import { IPolarity, FocusSchool } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IPolarity, FocusSchool, IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { import {
IBooster, IBooster,
IChallengeProgress, IChallengeProgress,
@ -8,11 +8,8 @@ import {
IMiscItem, IMiscItem,
IMission, IMission,
IRawUpgrade, IRawUpgrade,
ISeasonChallengeCompletions, ISeasonChallenge
ISeasonChallengeHistory
} from "./inventoryTypes/inventoryTypes"; } from "./inventoryTypes/inventoryTypes";
import { IWeaponClient } from "./inventoryTypes/weaponTypes";
import { ISuitClient } from "./inventoryTypes/SuitTypes";
export interface IArtifactsRequest { export interface IArtifactsRequest {
Upgrade: ICrewShipSalvagedWeaponSkin; Upgrade: ICrewShipSalvagedWeaponSkin;
@ -35,18 +32,18 @@ export interface IAffiliationChange {
export interface IUpdateChallengeProgressRequest { export interface IUpdateChallengeProgressRequest {
ChallengeProgress: IChallengeProgress[]; ChallengeProgress: IChallengeProgress[];
SeasonChallengeHistory: ISeasonChallengeHistory[]; SeasonChallengeHistory: ISeasonChallenge[];
SeasonChallengeCompletions: ISeasonChallengeCompletions[]; SeasonChallengeCompletions: ISeasonChallenge[];
} }
export interface IMissionInventoryUpdateRequest { export interface IMissionInventoryUpdateRequest {
rewardsMultiplier?: number; rewardsMultiplier?: number;
ActiveBoosters?: IBooster[]; ActiveBoosters?: IBooster[];
AffiliationChanges?: IAffiliationChange[]; AffiliationChanges?: IAffiliationChange[];
LongGuns?: IWeaponClient[]; LongGuns?: IEquipmentClient[];
Pistols?: IWeaponClient[]; Pistols?: IEquipmentClient[];
Suits?: ISuitClient[]; Suits?: IEquipmentClient[];
Melee?: IWeaponClient[]; Melee?: IEquipmentClient[];
RawUpgrades?: IRawUpgrade[]; RawUpgrades?: IRawUpgrade[];
MiscItems?: IMiscItem[]; MiscItems?: IMiscItem[];
Consumables?: IConsumable[]; Consumables?: IConsumable[];

View File

@ -1,6 +1,7 @@
import { IOid } from "@/src/types/commonTypes"; import { IOid } from "@/src/types/commonTypes";
import { IItemConfig, IOperatorConfigClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IItemConfig, IOperatorConfigClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { Types } from "mongoose"; import { Types } from "mongoose";
import { ILoadoutConfigClient } from "./inventoryTypes/inventoryTypes";
export interface ISaveLoadoutRequest { export interface ISaveLoadoutRequest {
LoadOuts: ILoadoutClient; LoadOuts: ILoadoutClient;
@ -72,23 +73,3 @@ export interface ILoadoutEntry {
export interface ILoadoutConfigDatabase extends Omit<ILoadoutConfigClient, "ItemId"> { export interface ILoadoutConfigDatabase extends Omit<ILoadoutConfigClient, "ItemId"> {
_id: Types.ObjectId; _id: Types.ObjectId;
} }
// for request and response from and to client
export interface ILoadoutConfigClient {
ItemId: IOid;
Remove?: boolean; // when client wants to remove a config, it only includes ItemId & Remove.
n?: string;
PresetIcon?: string;
Favorite?: boolean;
s?: IEquipmentSelection;
p?: IEquipmentSelection;
l?: IEquipmentSelection;
m?: IEquipmentSelection;
}
export interface IEquipmentSelection {
ItemId?: IOid;
mod?: number;
cus?: number;
hide?: boolean;
}