diff --git a/Libraries/Core/Generators/LootGenerator.cs b/Libraries/Core/Generators/LootGenerator.cs index 411a4b58..3c6c9563 100644 --- a/Libraries/Core/Generators/LootGenerator.cs +++ b/Libraries/Core/Generators/LootGenerator.cs @@ -586,7 +586,30 @@ public class LootGenerator( /// List of item with children lists public List> GetRandomLootContainerLoot(RewardDetails rewardContainerDetails) { - throw new NotImplementedException(); + List> itemsToReturn = []; + + // Get random items and add to newItemRequest + for (var index = 0; index < rewardContainerDetails.RewardCount; index++) { + // Pick random reward from pool, add to request object + var chosenRewardItemTpl = PickRewardItem(rewardContainerDetails); + + if (_presetHelper.HasPreset(chosenRewardItemTpl)) { + var preset = _presetHelper.GetDefaultPreset(chosenRewardItemTpl); + + // Ensure preset has unique ids and is cloned so we don't alter the preset data stored in memory + List presetAndMods = _itemHelper.ReplaceIDs(preset.Items); + + _itemHelper.RemapRootItemId(presetAndMods); + itemsToReturn.Add(presetAndMods); + + continue; + } + + List rewardItem = [new Item { Id = _hashUtil.Generate(), Template = chosenRewardItemTpl }]; + itemsToReturn.Add(rewardItem); + } + + return itemsToReturn; } /// @@ -596,7 +619,15 @@ public class LootGenerator( /// Single tpl protected string PickRewardItem(RewardDetails rewardContainerDetails) { - throw new NotImplementedException(); + if (rewardContainerDetails.RewardTplPool is not null && rewardContainerDetails.RewardTplPool.Count > 0) { + return _weightedRandomHelper.GetWeightedValue(rewardContainerDetails.RewardTplPool); + } + + return _randomUtil.GetArrayValue( + GetItemRewardPool([], rewardContainerDetails.RewardTypePool, true, true).ItemPool.Select( + (item) => item.Id + ) + ); } } diff --git a/Libraries/Core/Helpers/DurabilityLimitsHelper.cs b/Libraries/Core/Helpers/DurabilityLimitsHelper.cs index 34955ea3..6175c5e4 100644 --- a/Libraries/Core/Helpers/DurabilityLimitsHelper.cs +++ b/Libraries/Core/Helpers/DurabilityLimitsHelper.cs @@ -229,17 +229,17 @@ public class DurabilityLimitsHelper( { if (botRole is null or "default") { - return _botConfig.Durability.Default.Weapon.HighestMax; + return _botConfig.Durability.Default.Weapon.MaxDelta; } if (botRole == "pmc") { - return _botConfig.Durability.Pmc.Weapon.HighestMax; + return _botConfig.Durability.Pmc.Weapon.MaxDelta; } _botConfig.Durability.BotDurabilities.TryGetValue(botRole, out var value); - return value.Weapon.HighestMax; + return value.Weapon.MaxDelta; } protected int GetMinArmorDeltaFromConfig(string? botRole = null) diff --git a/Libraries/Core/Models/Spt/Config/InventoryConfig.cs b/Libraries/Core/Models/Spt/Config/InventoryConfig.cs index 1d52dce2..26e00565 100644 --- a/Libraries/Core/Models/Spt/Config/InventoryConfig.cs +++ b/Libraries/Core/Models/Spt/Config/InventoryConfig.cs @@ -43,7 +43,7 @@ public record RewardDetails public bool FoundInRaid { get; set; } [JsonPropertyName("rewardTplPool")] - public Dictionary? RewardTplPool { get; set; } + public Dictionary? RewardTplPool { get; set; } [JsonPropertyName("rewardTypePool")] public List? RewardTypePool { get; set; }