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)
{