using Core.Annotations; using Core.Generators; using Core.Helpers; using Core.Models.Eft.Common.Tables; using Core.Models.Spt.Bots; using Core.Utils.Cloners; using ILogger = Core.Models.Utils.ILogger; namespace Core.Services; [Injectable(InjectionType.Singleton)] public class BotLootCacheService { private readonly ILogger _logger; private readonly ItemHelper _itemHelper; private readonly PMCLootGenerator _pmcLootGenerator; private readonly RagfairPriceService _ragfairPriceService; private readonly ICloner _cloner; private readonly Dictionary _lootCache = new(); public BotLootCacheService( ILogger logger, ItemHelper itemHelper, PMCLootGenerator pmcLootGenerator, RagfairPriceService ragfairPriceService, ICloner cloner ) { _logger = logger; _itemHelper = itemHelper; _pmcLootGenerator = pmcLootGenerator; _ragfairPriceService = ragfairPriceService; _cloner = cloner; } /// /// Remove cached bot loot data /// public void ClearCache() { _lootCache.Clear(); } /// /// Get the fully created loot array, ordered by price low to high /// /// bot to get loot for /// is the bot a pmc /// what type of loot is needed (backpack/pocket/stim/vest etc) /// Base json db file for the bot having its loot generated /// Dictionary public Dictionary GetLootFromCache( string botRole, bool isPmc, string lootType, BotType botJsonTemplate) { throw new NotImplementedException(); } /// /// Generate loot for a bot and store inside a private class property /// /// bots role (assault / pmcBot etc) /// Is the bot a PMC (alteres what loot is cached) /// db template for bot having its loot generated protected void AddLootToCache(string botRole, bool isPmc, BotType botJsonTemplate) { throw new NotImplementedException(); } /// /// Add unique items into combined pool /// /// Pool of items to add to /// items to add to combined pool if unique protected void AddUniqueItemsToPool(List poolToAddTo, List itemsToAdd) { throw new NotImplementedException(); } protected void AddItemsToPool(Dictionary poolToAddTo, Dictionary poolOfItemsToAdd) { throw new NotImplementedException(); } /// /// Ammo/grenades have this property /// /// /// protected bool IsBulletOrGrenade(Props props) { throw new NotImplementedException(); } /// /// Internal and external magazine have this property /// /// /// protected bool IsMagazine(Props props) { return props.ReloadMagType is not null; } /// /// Medical use items (e.g. morphine/lip balm/grizzly) /// /// /// protected bool IsMedicalItem(Props props) { throw new NotImplementedException(); } /// /// Grenades have this property (e.g. smoke/frag/flash grenades) /// /// /// protected bool IsGrenade(Props props) { throw new NotImplementedException(); } protected bool IsFood(string tpl) { throw new NotImplementedException(); } protected bool IsDrink(string tpl) { throw new NotImplementedException(); } protected bool IsCurrency(string tpl) { throw new NotImplementedException(); } /// /// Check if a bot type exists inside the loot cache /// /// role to check for /// true if they exist protected bool BotRoleExistsInCache(string botRole) { throw new NotImplementedException(); } /// /// If lootcache is undefined, init with empty property arrays /// /// Bot role to hydrate protected void InitCacheForBotRole(string botRole) { throw new NotImplementedException(); } /// /// Compares two item prices by their flea (or handbook if that doesnt exist) price /// /// /// /// protected int CompareByValue(int itemAPrice, int itemBPrice) { throw new NotImplementedException(); } }