diff --git a/Libraries/SPTarkov.Server.Core/Controllers/HealthController.cs b/Libraries/SPTarkov.Server.Core/Controllers/HealthController.cs index 6c007b1f..3721b6dd 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/HealthController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/HealthController.cs @@ -1,4 +1,5 @@ using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Extensions; using SPTarkov.Server.Core.Helpers; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common; @@ -48,8 +49,8 @@ public class HealthController( return httpResponseUtil.AppendErrorToOutput(output, errorMessage); } - // Ensure item has a upd object - itemHelper.AddUpdObjectToItem(healingItemToUse); + // Ensure item has an upd object + healingItemToUse.AddUpd(); if (healingItemToUse.Upd.MedKit is not null) { @@ -125,7 +126,7 @@ public class HealthController( /// /// Handle Eat event - /// Consume food/water outside of a raid + /// Consume food/water outside a raid /// /// Player profile /// Eat request @@ -138,19 +139,20 @@ public class HealthController( var itemToConsume = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == request.Item); if (itemToConsume is null) - // Item not found, very bad { + // Item not found, very bad return httpResponseUtil.AppendErrorToOutput( output, serverLocalisationService.GetText("health-unable_to_find_item_to_consume", request.Item) ); } - var consumedItemMaxResource = itemHelper.GetItem(itemToConsume.Template).Value.Properties.MaxResource; + var foodItemDbDetails = itemHelper.GetItem(itemToConsume.Template).Value; + var consumedItemMaxResource = foodItemDbDetails.Properties.MaxResource; if (consumedItemMaxResource > 1) { - // Ensure item has a upd object - itemHelper.AddUpdObjectToItem(itemToConsume); + // Ensure item has an upd object + itemToConsume.AddUpd(); if (itemToConsume.Upd.FoodDrink is null) { @@ -171,7 +173,7 @@ public class HealthController( } // Check what effect eating item has and handle - var foodItemDbDetails = itemHelper.GetItem(itemToConsume.Template).Value; + var foodItemEffectDetails = foodItemDbDetails.Properties.EffectsHealth; var foodIsSingleUse = foodItemDbDetails.Properties.MaxResource == 1; diff --git a/Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs b/Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs index f6416bc5..29fac533 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs @@ -831,11 +831,11 @@ public class HideoutController( // Recipe has an `isEncoded` requirement for reward(s), Add `RecodableComponent` property if (recipe.IsEncoded ?? false) { - foreach (var reward in itemAndChildrenToSendToPlayer) + foreach (var rewardItems in itemAndChildrenToSendToPlayer) { - itemHelper.AddUpdObjectToItem(reward.FirstOrDefault()); + rewardItems.FirstOrDefault()?.AddUpd(); - reward.FirstOrDefault().Upd.RecodableComponent = new UpdRecodableComponent { IsEncoded = true }; + rewardItems.FirstOrDefault().Upd.RecodableComponent = new UpdRecodableComponent { IsEncoded = true }; } } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs b/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs index dac83996..7d4431ba 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs @@ -1,4 +1,5 @@ using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Extensions; using SPTarkov.Server.Core.Generators; using SPTarkov.Server.Core.Helpers; using SPTarkov.Server.Core.Models.Common; @@ -685,7 +686,7 @@ public class InventoryController( } // Item may not have upd object - itemHelper.AddUpdObjectToItem(itemToFold); + itemToFold.AddUpd(); itemToFold.Upd.Foldable = new UpdFoldable { Folded = request.Value }; diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs index c5ada766..5afc2e1d 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs @@ -780,7 +780,7 @@ public class BotLootGenerator( var currencyWeight = currencyWeights[moneyItem.Template]; - itemHelper.AddUpdObjectToItem(moneyItem); + moneyItem.AddUpd(); moneyItem.Upd.StackObjectsCount = int.Parse(weightedRandomHelper.GetWeightedValue(currencyWeight)); } @@ -794,7 +794,7 @@ public class BotLootGenerator( public void RandomiseAmmoStackSize(bool isPmc, TemplateItem itemTemplate, Item ammoItem) { var randomSize = itemHelper.GetRandomisedAmmoStackSize(itemTemplate); - itemHelper.AddUpdObjectToItem(ammoItem); + ammoItem.AddUpd(); ammoItem.Upd.StackObjectsCount = randomSize; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs index dd778a05..38c9aecc 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using SPTarkov.Common.Extensions; using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Extensions; using SPTarkov.Server.Core.Helpers; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common.Tables; @@ -695,7 +696,7 @@ public class RagfairOfferGenerator( ); if (randomUtil.GetChance100(25) && visorMod != null) { - itemHelper.AddUpdObjectToItem(visorMod); + visorMod.AddUpd(); visorMod.Upd.FaceShield = new UpdFaceShield { Hits = randomUtil.GetInt(1, 3) }; } @@ -787,7 +788,7 @@ public class RagfairOfferGenerator( var itemDbDetails = itemHelper.GetItem(armorItem.Template).Value; if (itemDbDetails.Properties.ArmorClass > 1) { - itemHelper.AddUpdObjectToItem(armorItem); + armorItem.AddUpd(); var baseMaxDurability = itemDbDetails.Properties.MaxDurability; var lowestMaxDurability = randomUtil.GetDouble(maxMultiplier, 1) * baseMaxDurability; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs index d38459d7..7369e22e 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs @@ -72,9 +72,15 @@ public class HideoutHelper( foreach (var tool in productionRequest.Tools) { var toolItem = cloner.Clone(pmcData.Inventory.Items.FirstOrDefault(x => x.Id == tool.Id)); + if (toolItem is null) + { + logger.Warning($"Unable to find tool item: {tool.Id}"); + + continue; + } // Make sure we only return as many as we took - itemHelper.AddUpdObjectToItem(toolItem); + toolItem.AddUpd(); toolItem.Upd.StackObjectsCount = tool.Count; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs index a733c707..7b2b42b2 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs @@ -159,7 +159,7 @@ public class InventoryHelper( foreach (var item in itemWithChildren) { // Ensure item has upd object - itemHelper.AddUpdObjectToItem(item); + item.AddUpd(); // Ammo / currency can NEVER be FiR or have a 'SpawnedInSession' property item.Upd.SpawnedInSession = itemHelper.IsOfBaseclass(item.Template, BaseClasses.AMMO) ? null : foundInRaid; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs index cc4f175a..32b93627 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs @@ -559,7 +559,7 @@ public class QuestHelper( if (newStackSize > 0) { var item = pmcData.Inventory.Items[inventoryItemIndex]; - itemHelper.AddUpdObjectToItem(item); + item.AddUpd(); item.Upd.StackObjectsCount = newStackSize; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs index 9cfcfd37..b60511ec 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs @@ -293,7 +293,7 @@ public class RewardHelper( foreach (var rewardItem in reward.Items) { - itemHelper.AddUpdObjectToItem(rewardItem); + rewardItem.AddUpd(); // Reward items are granted Found in Raid status itemHelper.SetFoundInRaid(rewardItem); @@ -386,7 +386,7 @@ public class RewardHelper( reward.Target = rootItem.Id; // Copy over stack count otherwise reward shows as missing in client - itemHelper.AddUpdObjectToItem(rootItem); + rootItem.AddUpd(); rootItem.Upd.StackObjectsCount = originalRewardRootItem.Upd.StackObjectsCount; return; } diff --git a/Libraries/SPTarkov.Server.Core/Services/FenceService.cs b/Libraries/SPTarkov.Server.Core/Services/FenceService.cs index 02abaa37..03b67fcf 100644 --- a/Libraries/SPTarkov.Server.Core/Services/FenceService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/FenceService.cs @@ -1167,7 +1167,7 @@ public class FenceService( string.Equals(mod.SlotId, requiredSlot.Name.ToLowerInvariant(), StringComparison.OrdinalIgnoreCase) ); - itemHelper.AddUpdObjectToItem(modItemToAdjust); + modItemToAdjust.AddUpd(); // Fence assorts can be null, ensure they have defaults modItemToAdjust.Upd.Repairable ??= new UpdRepairable @@ -1241,7 +1241,7 @@ public class FenceService( continue; } - itemHelper.AddUpdObjectToItem(modItemToAdjust); + modItemToAdjust.AddUpd(); if (modItemToAdjust?.Upd?.Repairable == null) {