diff --git a/Libraries/SPTarkov.Server.Core/Services/FenceService.cs b/Libraries/SPTarkov.Server.Core/Services/FenceService.cs index c3274d33..f19ab213 100644 --- a/Libraries/SPTarkov.Server.Core/Services/FenceService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/FenceService.cs @@ -404,7 +404,7 @@ public class FenceService( { var firstItem = itemWithChildren.FirstOrDefault(x => x != null); logger.Error( - $"Unable to process fence assort as root item is missing, {firstItem?.Template}, skipping" + $"Unable to process fence assort as root item is missing: {firstItem?.Template}, skipping" ); continue; } @@ -425,24 +425,22 @@ public class FenceService( // Guard against a missing stack count if (existingRootItem.Upd?.StackObjectsCount == null) { + existingRootItem.Upd ??= new Upd(); existingRootItem.Upd.StackObjectsCount = 1; } - // Merge new items count into existing, dont add new loyalty/barter data as it already exists + // Merge new items count into existing, don't add new loyalty/barter data as it already exists existingRootItem.Upd.StackObjectsCount += newRootItem?.Upd?.StackObjectsCount ?? 1; continue; } } - // if the Upd doesnt exist just initialize it - if (newRootItem.Upd == null) + // if the Upd doesn't exist just initialize it + newRootItem.Upd ??= new Upd { - newRootItem.Upd = new Upd - { - StackObjectsCount = 1 - }; - } + StackObjectsCount = 1 + }; // New assort to be added to existing assorts existingFenceAssorts.Items.AddRange(itemWithChildren); @@ -583,7 +581,7 @@ public class FenceService( /// /// Get the count of items fence offers /// - /// Number + /// Count of fence offers public int GetOfferCount() { if ((fenceAssort?.Items?.Count ?? 0) == 0) @@ -627,9 +625,9 @@ public class FenceService( protected TraderAssort ConvertIntoFenceAssort(CreateFenceAssortsResult intermediaryAssorts) { var result = CreateFenceAssortSkeleton(); - foreach (var itemWithChilden in intermediaryAssorts.SptItems) + foreach (var itemWithChildren in intermediaryAssorts.SptItems) { - result.Items.AddRange(itemWithChilden); + result.Items.AddRange(itemWithChildren); } result.BarterScheme = intermediaryAssorts.BarterScheme; @@ -726,8 +724,8 @@ public class FenceService( } if (itemCounts.WeaponPreset > 0 || itemCounts.EquipmentPreset > 0) - // Add presets { + AddPresetsToAssort( itemCounts.WeaponPreset, itemCounts.EquipmentPreset, @@ -833,7 +831,7 @@ public class FenceService( RandomiseItemUpdProperties(itemDbDetails, rootItemBeingAdded); } - // Skip items already in the assort if it exists in the prevent duplicate list + // Skip items already in the assort if it exists in the 'prevent duplicate' list var existingItemThatMatches = GetMatchingItem(rootItemBeingAdded, itemDbDetails, assorts.SptItems); var shouldBeStacked = ItemShouldBeForceStacked(existingItemThatMatches, itemDbDetails); if (shouldBeStacked && existingItemThatMatches != null) @@ -845,7 +843,7 @@ public class FenceService( continue; } - // Add mods to armors so they dont show as red in the trade screen + // Add mods to armors so they don't show as red in the trade screen if (itemHelper.ItemRequiresSoftInserts(rootItemBeingAdded.Template)) { RandomiseArmorModDurability(desiredAssortItemAndChildrenClone, itemDbDetails); @@ -912,7 +910,7 @@ public class FenceService( ) && (itemDbDetails.Properties.Slots?.Count ?? 0) > 0; - // Only one match and its not medical or armored gear + // Only one match and it's not medical or armored gear if (matchingItems.Count == 1 && !(isMedical || isGearAndHasSlots)) { return matchingItems[0]; @@ -1132,7 +1130,7 @@ public class FenceService( itemHelper.FindAndReturnChildrenAsItems(baseFenceAssort.Items, randomPresetRoot.Id) ); - // Need to add mods to armors so they dont show as red in the trade screen + // Need to add mods to armors so they don't show as red in the trade screen if (itemHelper.ItemRequiresSoftInserts(randomPresetRoot.Template)) { RandomiseArmorModDurability(presetWithChildrenClone, rootItemDb); @@ -1158,7 +1156,7 @@ public class FenceService( itemHelper.ReparentItemAndChildren(presetWithChildrenClone[0], presetWithChildrenClone); itemHelper.RemapRootItemId(presetWithChildrenClone); - // Remapping IDs causes parentid to be altered + // Remapping IDs causes parentId to be altered presetWithChildrenClone[0].ParentId = "hideout"; assorts.SptItems.Add(presetWithChildrenClone); @@ -1240,14 +1238,12 @@ public class FenceService( itemHelper.AddUpdObjectToItem(modItemToAdjust); - if (modItemToAdjust.Upd.Repairable == null) + // Ensure property isn't null + modItemToAdjust.Upd.Repairable ??= new UpdRepairable { - modItemToAdjust.Upd.Repairable = new UpdRepairable - { - Durability = modItemDbDetails.Properties.MaxDurability, - MaxDurability = modItemDbDetails.Properties.MaxDurability - }; - } + Durability = modItemDbDetails.Properties.MaxDurability, + MaxDurability = modItemDbDetails.Properties.MaxDurability + }; modItemToAdjust.Upd.Repairable.Durability = durabilityValues.Durability; modItemToAdjust.Upd.Repairable.MaxDurability = durabilityValues.MaxDurability; @@ -1293,7 +1289,7 @@ public class FenceService( if (!randomUtil.GetChance100(plateExistsChance)) { // Remove plate from armor - armorItemAndMods = armorItemAndMods.Where(item => item.SlotId.ToLower() != plateSlot.Name.ToLower()) + armorItemAndMods = armorItemAndMods.Where(item => !string.Equals(item.SlotId, plateSlot.Name, StringComparison.CurrentCultureIgnoreCase)) .ToList(); continue; @@ -1611,9 +1607,7 @@ public class FenceService( public FenceLevel GetFenceInfo(PmcData pmcData) { var fenceSettings = databaseService.GetGlobals().Configuration.FenceSettings; - var pmcFenceInfo = pmcData.TradersInfo[fenceSettings.FenceIdentifier]; - - if (pmcFenceInfo == null) + if (!pmcData.TradersInfo.TryGetValue(fenceSettings.FenceIdentifier, out var pmcFenceInfo)) { return fenceSettings.Levels[0]; } @@ -1621,7 +1615,7 @@ public class FenceService( var fenceLevels = fenceSettings.Levels.Keys; var minLevel = fenceLevels.Min(); var maxLevel = fenceLevels.Max(); - var pmcFenceLevel = Math.Floor((double) pmcFenceInfo.Standing); + var pmcFenceLevel = Math.Floor(pmcFenceInfo.Standing.Value); if (pmcFenceLevel < minLevel) {