using System.Diagnostics; using System.Linq; using Common.Extensions; using Common.Models; using Common.Models.Input; using Common.Models.Output; using Generator.Helpers.Gear; namespace Generator { public static class BotLootGenerator { internal static void AddLoot(Bot botToUpdate, Datum rawBotData) { AddLootToContainers(botToUpdate, rawBotData); } private static void AddLootToContainers(Bot botToUpdate, Datum rawBot) { // Filter out base inventory items and equipment mod items var rawBotItems = rawBot.Inventory.items.Where(item => item.location != null); var botBackpack = rawBot.Inventory.items.FirstOrDefault(item => item.slotId == "Backpack"); if (botBackpack != null) { AddLootItemsToContainerDictionary(rawBotItems, botBackpack._id, botToUpdate.inventory.items.Backpack, "backpack", botToUpdate.botType); } var botPockets = rawBot.Inventory.items.FirstOrDefault(item => item.slotId == "Pockets"); if (botPockets != null) { AddLootItemsToContainerDictionary(rawBotItems, botPockets._id, botToUpdate.inventory.items.Pockets); } var botVest = rawBot.Inventory.items.FirstOrDefault(item => item.slotId == "TacticalVest"); if (botVest != null) { AddLootItemsToContainerDictionary(rawBotItems, botVest._id, botToUpdate.inventory.items.TacticalVest); } var botSecure = rawBot.Inventory.items.FirstOrDefault(item => item.slotId == "SecuredContainer"); if (botSecure != null) { AddLootItemsToContainerDictionary(rawBotItems, botSecure._id, botToUpdate.inventory.items.SecuredContainer); } // Add generic keys to bosses if (botToUpdate.botType.IsBoss()) { var keys = SpecialLootHelper.GetGenericBossKeysDictionary(); foreach (var bosskey in keys) { if (!botToUpdate.inventory.items.Backpack.ContainsKey(bosskey.Key)) { botToUpdate.inventory.items.Backpack.Add(bosskey.Key, bosskey.Value); } } } AddSpecialLoot(botToUpdate); // Cleanup of weights GearHelpers.ReduceWeightValues(botToUpdate.inventory.items.Backpack); GearHelpers.ReduceWeightValues(botToUpdate.inventory.items.Pockets); GearHelpers.ReduceWeightValues(botToUpdate.inventory.items.TacticalVest); GearHelpers.ReduceWeightValues(botToUpdate.inventory.items.SecuredContainer); } /// /// Look for items inside itemsToFilter that have the parentid of `containerId` and add them to dictToAddTo /// Keep track of how many items are added in the dictToAddTo value /// /// Bots inventory items /// /// private static void AddLootItemsToContainerDictionary(IEnumerable itemsToFilter, string containerId, Dictionary dictToAddTo, string container = "", BotType type = BotType.arenafighterevent) { foreach (var itemToAdd in itemsToFilter) { if (itemToAdd.parentId != containerId) continue; if (!dictToAddTo.ContainsKey(itemToAdd._tpl)) { dictToAddTo[itemToAdd._tpl] = 1; continue; } dictToAddTo[itemToAdd._tpl]++; } } private static void AddSpecialLoot(Bot botToUpdate) { var itemsToAdd = SpecialLootHelper.GetSpecialLootForBotType(botToUpdate.botType); foreach (var item in itemsToAdd) { if (!botToUpdate.inventory.items.SpecialLoot.ContainsKey(item.Key)) { botToUpdate.inventory.items.SpecialLoot.Add(item.Key, item.Value); } } } } }