From 557aee46b74a4e4161b2a6f0161511e22065cf3d Mon Sep 17 00:00:00 2001 From: CWX Date: Mon, 27 Jan 2025 19:57:50 +0000 Subject: [PATCH] finish off lootgen --- Libraries/Core/Generators/LootGenerator.cs | 35 +++++++++++++++++-- .../Core/Models/Spt/Config/InventoryConfig.cs | 2 +- 2 files changed, 34 insertions(+), 3 deletions(-) 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/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; }