From a167216730a6b9a81bc59b2b219662b203a8e769 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 29 Mar 2025 09:27:38 -0700 Subject: [PATCH] feat: WeaponSkins IsNew flag (#1347) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1347 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/models/inventoryModels/inventoryModel.ts | 3 ++- src/services/inventoryService.ts | 2 +- src/services/saveLoadoutService.ts | 7 +++++++ src/types/inventoryTypes/inventoryTypes.ts | 1 + src/types/saveLoadoutTypes.ts | 1 + 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index cb5795be..794e9d2a 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -586,7 +586,8 @@ const spectreLoadoutsSchema = new Schema( const weaponSkinsSchema = new Schema( { - ItemType: String + ItemType: String, + IsNew: Boolean }, { id: false } ); diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index e294d9a3..9bc65bc9 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -938,7 +938,7 @@ export const addSkin = ( typeName: string, inventoryChanges: IInventoryChanges = {} ): IInventoryChanges => { - const index = inventory.WeaponSkins.push({ ItemType: typeName }) - 1; + const index = inventory.WeaponSkins.push({ ItemType: typeName, IsNew: true }) - 1; // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition inventoryChanges.WeaponSkins ??= []; (inventoryChanges.WeaponSkins as IWeaponSkinClient[]).push( diff --git a/src/services/saveLoadoutService.ts b/src/services/saveLoadoutService.ts index ff0159f5..d1fc0fcf 100644 --- a/src/services/saveLoadoutService.ts +++ b/src/services/saveLoadoutService.ts @@ -140,6 +140,13 @@ export const handleInventoryItemConfigChange = async ( inventory.UseAdultOperatorLoadout = equipment as boolean; break; } + case "WeaponSkins": { + const itemEntries = equipment as IItemEntry; + for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) { + inventory.WeaponSkins.id(itemId)!.IsNew = itemConfigEntries.IsNew; + } + break; + } default: { if (equipmentKeys.includes(equipmentName as TEquipmentKey) && equipmentName != "ValidNewLoadoutId") { logger.debug(`general Item config saved of type ${equipmentName}`, { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index a003c930..16e230c8 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -1017,6 +1017,7 @@ export interface ITaunt { export interface IWeaponSkinDatabase { ItemType: string; + IsNew?: boolean; _id: Types.ObjectId; } diff --git a/src/types/saveLoadoutTypes.ts b/src/types/saveLoadoutTypes.ts index 8a1b8883..3bef13a8 100644 --- a/src/types/saveLoadoutTypes.ts +++ b/src/types/saveLoadoutTypes.ts @@ -36,6 +36,7 @@ export interface ISaveLoadoutRequest { EquippedGear: string[]; EquippedEmotes: string[]; UseAdultOperatorLoadout: boolean; + WeaponSkins: IItemEntry; } export interface ISaveLoadoutRequestNoUpgradeVer extends Omit {}