From 090d7b64949e94edaff7a3d270823cc1068fb7a1 Mon Sep 17 00:00:00 2001 From: Cj <161484149+CJ-SPT@users.noreply.github.com> Date: Sun, 6 Jul 2025 16:40:08 -0400 Subject: [PATCH] change vars to MongoId, remove underscore from injections, fix bug introduced from last PR --- .../database/templates/repeatableQuests.json | 2 +- .../Extensions/TemplateItemExtensions.cs | 2 +- .../Generators/BotEquipmentModGenerator.cs | 258 +++++++++--------- .../Generators/BotGenerator.cs | 128 +++++---- .../Generators/BotInventoryGenerator.cs | 108 ++++---- .../Generators/BotLevelGenerator.cs | 12 +- .../Generators/BotLootGenerator.cs | 197 ++++++------- .../Generators/BotWeaponGenerator.cs | 166 ++++++----- .../CompletionQuestGenerator.cs | 6 +- .../EliminationQuestGenerator.cs | 2 +- .../ExplorationQuestGenerator.cs | 2 +- .../IRepeatableQuestGenerator.cs | 2 +- .../PickupQuestGenerator.cs | 4 +- .../RepeatableQuestRewardGenerator.cs | 2 +- ...toryMagGen.cs => BarrelInventoryMagGen.cs} | 12 +- .../ExternalInventoryMagGen.cs | 49 ++-- .../InternalMagazineInventoryMagGen.cs | 6 +- .../Implementations/UbglExternalMagGen.cs | 6 +- .../Generators/WeaponGen/InventoryMagGen.cs | 20 +- .../Eft/Common/Tables/GlobalTablesUsings.cs | 2 +- .../Models/Eft/Common/Tables/TemplateItem.cs | 2 +- .../Models/Spt/Bots/ItemSpawnLimitSettings.cs | 5 +- .../Models/Spt/Config/BotConfig.cs | 2 +- 23 files changed, 499 insertions(+), 496 deletions(-) rename Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/{BarrelInvetoryMagGen.cs => BarrelInventoryMagGen.cs} (80%) diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/templates/repeatableQuests.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/templates/repeatableQuests.json index 3193650b..003b10ab 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/database/templates/repeatableQuests.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/database/templates/repeatableQuests.json @@ -237,7 +237,7 @@ }, "Pickup": { "_id": "67d03016c971a7faef94af07", - "traderId": "{traderId}", + "traderId": "54cb57776803fa99248b456e", "location": "any", "image": "/files/quest/icon/62bd61b1b818ff064405b827.jpg", "type": "PickUp", diff --git a/Libraries/SPTarkov.Server.Core/Extensions/TemplateItemExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/TemplateItemExtensions.cs index ec499ebb..a60caca3 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/TemplateItemExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/TemplateItemExtensions.cs @@ -44,7 +44,7 @@ namespace SPTarkov.Server.Core.Extensions /// /// Weapon to get default magazine for /// Tpl of magazine - public static string? GetWeaponsDefaultMagazineTpl(this TemplateItem weaponTemplate) + public static MongoId? GetWeaponsDefaultMagazineTpl(this TemplateItem weaponTemplate) { return weaponTemplate.Properties.DefMagType; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotEquipmentModGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotEquipmentModGenerator.cs index b15c5070..5811e63c 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotEquipmentModGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotEquipmentModGenerator.cs @@ -21,22 +21,22 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class BotEquipmentModGenerator( - ISptLogger _logger, - RandomUtil _randomUtil, - ItemHelper _itemHelper, - BotEquipmentFilterService _botEquipmentFilterService, - ItemFilterService _itemFilterService, - ProfileHelper _profileHelper, - BotWeaponModLimitService _botWeaponModLimitService, - BotHelper _botHelper, - BotGeneratorHelper _botGeneratorHelper, - BotWeaponGeneratorHelper _botWeaponGeneratorHelper, - WeightedRandomHelper _weightedRandomHelper, - PresetHelper _presetHelper, - ServerLocalisationService _serverLocalisationService, - BotEquipmentModPoolService _botEquipmentModPoolService, - ConfigServer _configServer, - ICloner _cloner + ISptLogger logger, + RandomUtil randomUtil, + ItemHelper itemHelper, + BotEquipmentFilterService botEquipmentFilterService, + ItemFilterService itemFilterService, + ProfileHelper profileHelper, + BotWeaponModLimitService botWeaponModLimitService, + BotHelper botHelper, + BotGeneratorHelper botGeneratorHelper, + BotWeaponGeneratorHelper botWeaponGeneratorHelper, + WeightedRandomHelper weightedRandomHelper, + PresetHelper presetHelper, + ServerLocalisationService serverLocalisationService, + BotEquipmentModPoolService botEquipmentModPoolService, + ConfigServer configServer, + ICloner cloner ) { protected static readonly FrozenSet _modSightIds = @@ -95,7 +95,7 @@ public class BotEquipmentModGenerator( const string modScopeKey = "mod_scope"; const string modScope000Key = "mod_scope_000"; - protected readonly BotConfig _botConfig = _configServer.GetConfig(); + protected readonly BotConfig _botConfig = configServer.GetConfig(); /// /// Check mods are compatible and add to array @@ -121,7 +121,7 @@ public class BotEquipmentModGenerator( // Get mod pool for the desired item if (!settings.ModPool.TryGetValue(parentTemplate.Id, out var compatibleModsPool)) { - _logger.Warning( + logger.Warning( $"bot: {settings.BotData.Role} lacks a mod slot pool for item: {parentTemplate.Id} {parentTemplate.Name}" ); } @@ -133,8 +133,8 @@ public class BotEquipmentModGenerator( var itemSlotTemplate = GetModItemSlotFromDbTemplate(modSlotName, parentTemplate); if (itemSlotTemplate is null) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-mod_slot_missing_from_item", new { @@ -186,7 +186,7 @@ public class BotEquipmentModGenerator( // Slot can hold armor plates + we are filtering possible items by bot level, handle if ( settings.BotEquipmentConfig.FilterPlatesByLevel.GetValueOrDefault(false) - && _itemHelper.IsRemovablePlateSlot(modSlotName.ToLowerInvariant()) + && itemHelper.IsRemovablePlateSlot(modSlotName.ToLowerInvariant()) ) { var plateSlotFilteringOutcome = FilterPlateModsForSlotByLevel( @@ -197,17 +197,18 @@ public class BotEquipmentModGenerator( ); switch (plateSlotFilteringOutcome.Result) { - case Result.UNKNOWN_FAILURE or Result.NO_DEFAULT_FILTER: - if (_logger.IsLogEnabled(LogLevel.Debug)) + case Result.UNKNOWN_FAILURE + or Result.NO_DEFAULT_FILTER: + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Plate slot: {modSlotName} selection for armor: {parentTemplate.Id} failed: {plateSlotFilteringOutcome.Result}, skipping" ); } continue; case Result.LACKS_PLATE_WEIGHTS: - _logger.Warning( + logger.Warning( $"Plate slot: {modSlotName} lacks weights for armor: {parentTemplate.Id}, unable to adjust plate choice, using existing data" ); break; @@ -226,7 +227,7 @@ public class BotEquipmentModGenerator( modTpl = exhaustableModPool.GetRandomValue(); if ( modTpl is not null - && !_botGeneratorHelper + && !botGeneratorHelper .IsItemIncompatibleWithCurrentItems(equipment, modTpl.Value, modSlotName) .Incompatible.GetValueOrDefault(false) ) @@ -240,7 +241,7 @@ public class BotEquipmentModGenerator( if (!found && itemSlotTemplate.Required.GetValueOrDefault(false)) { modTpl = GetRandomModTplFromItemDb( - modTpl, + modTpl.Value, itemSlotTemplate, modSlotName, equipment @@ -255,7 +256,7 @@ public class BotEquipmentModGenerator( } // Get chosen mods db template and check it fits into slot - var modTemplate = _itemHelper.GetItem(modTpl.Value); + var modTemplate = itemHelper.GetItem(modTpl.Value); if ( !IsModValidForSlot( modTemplate, @@ -274,7 +275,7 @@ public class BotEquipmentModGenerator( equipment.Add( CreateModItem( modId, - modTpl, + modTpl.Value, parentId, modSlotName, modTemplate.Value, @@ -283,7 +284,7 @@ public class BotEquipmentModGenerator( ); // Does item being added exist in mod pool - has its own mod pool - if (settings.ModPool.ContainsKey(modTpl)) + if (settings.ModPool.ContainsKey(modTpl.Value)) // Call self again with mod being added as item to add child mods to { GenerateModsForEquipment( @@ -322,7 +323,7 @@ public class BotEquipmentModGenerator( }; // Not pmc or not a plate slot, return original mod pool array - if (!_itemHelper.IsRemovablePlateSlot(modSlot)) + if (!itemHelper.IsRemovablePlateSlot(modSlot)) { result.Result = Result.NOT_PLATE_HOLDING_SLOT; result.PlateModTemplates = existingPlateTplPool; @@ -357,11 +358,11 @@ public class BotEquipmentModGenerator( } // Choose a plate level based on weighting - var chosenArmorPlateLevelString = _weightedRandomHelper.GetWeightedValue(plateWeights); + var chosenArmorPlateLevelString = weightedRandomHelper.GetWeightedValue(plateWeights); // Convert the array of ids into database items var platesFromDb = existingPlateTplPool.Select(plateTpl => - _itemHelper.GetItem(plateTpl).Value + itemHelper.GetItem(plateTpl).Value ); // Filter plates to the chosen level based on its armorClass property @@ -411,9 +412,9 @@ public class BotEquipmentModGenerator( // No valid plate class found in 3 tries, attempt default plates if (findCompatiblePlateAttempts >= maxAttempts) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Plate filter too restrictive for armor: {armorItem.Name} {armorItem.Id}, unable to find plates of level: {chosenArmorPlateLevelString}, using items default plate" ); } @@ -435,7 +436,7 @@ public class BotEquipmentModGenerator( if (defaultPresetPlateSlot is not null) { // Found a plate, exit - var plateItem = _itemHelper.GetItem(defaultPresetPlateSlot.Template); + var plateItem = itemHelper.GetItem(defaultPresetPlateSlot.Template); platesOfDesiredLevel = [plateItem.Value]; break; @@ -492,9 +493,9 @@ public class BotEquipmentModGenerator( /// /// /// Armor IItem - protected Item? GetDefaultPresetArmorSlot(string armorItemTpl, string modSlot) + protected Item? GetDefaultPresetArmorSlot(MongoId armorItemTpl, string modSlot) { - var defaultPreset = _presetHelper.GetDefaultPreset(armorItemTpl); + var defaultPreset = presetHelper.GetDefaultPreset(armorItemTpl); return defaultPreset?.Items?.FirstOrDefault(item => string.Equals(item.SlotId, modSlot, StringComparison.OrdinalIgnoreCase) @@ -507,12 +508,12 @@ public class BotEquipmentModGenerator( /// Session id /// Data used to generate the weapon /// Weapon + mods array - public List GenerateModsForWeapon(string sessionId, GenerateWeaponRequest request) + public List GenerateModsForWeapon(MongoId sessionId, GenerateWeaponRequest request) { if (ItemLacksSlotsCartridgesAndChambers(request.ParentTemplate)) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-unable_to_add_mods_to_weapon_missing_ammo_slot", new { @@ -526,20 +527,20 @@ public class BotEquipmentModGenerator( return request.Weapon; } - var pmcProfile = _profileHelper.GetPmcProfile(sessionId); + var pmcProfile = profileHelper.GetPmcProfile(sessionId); // Get pool of mods that fit weapon request.ModPool.TryGetValue(request.ParentTemplate.Id, out var compatibleModsPool); _botConfig.Equipment.TryGetValue(request.BotData.EquipmentRole, out var botEquipConfig); - var botEquipBlacklist = _botEquipmentFilterService.GetBotEquipmentBlacklist( + var botEquipBlacklist = botEquipmentFilterService.GetBotEquipmentBlacklist( request.BotData.EquipmentRole, pmcProfile?.Info?.Level ?? 0 ); - var botWeaponSightWhitelist = _botEquipmentFilterService.GetBotWeaponSightWhitelist( + var botWeaponSightWhitelist = botEquipmentFilterService.GetBotWeaponSightWhitelist( request.BotData.EquipmentRole ); - var randomisationSettings = _botHelper.GetBotRandomizationDetails( + var randomisationSettings = botHelper.GetBotRandomizationDetails( request.BotData.Level ?? 0, botEquipConfig ); @@ -555,8 +556,8 @@ public class BotEquipmentModGenerator( var modsParentSlot = GetModItemSlotFromDbTemplate(modSlot, request.ParentTemplate); if (modsParentSlot is null) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-weapon_missing_mod_slot", new { @@ -574,7 +575,7 @@ public class BotEquipmentModGenerator( // If the parent is a UBGL, the patron_in_weapon will be generated later - so skip it for now if ( modSlot == "patron_in_weapon" - && _itemHelper.IsOfBaseclass(request.ParentTemplate.Id, BaseClasses.UBGL) + && itemHelper.IsOfBaseclass(request.ParentTemplate.Id, BaseClasses.UBGL) ) { continue; @@ -634,7 +635,7 @@ public class BotEquipmentModGenerator( var modToAddTemplate = modToAdd.Value.Value; // Skip adding mod to weapon if type limit reached if ( - _botWeaponModLimitService.WeaponModHasReachedLimit( + botWeaponModLimitService.WeaponModHasReachedLimit( request.BotData.EquipmentRole, modToAddTemplate, request.ModLimits, @@ -716,7 +717,7 @@ public class BotEquipmentModGenerator( } // Gather stats on mods being added to weapon - if (_itemHelper.IsOfBaseclass(modToAddTemplate.Id, BaseClasses.IRON_SIGHT)) + if (itemHelper.IsOfBaseclass(modToAddTemplate.Id, BaseClasses.IRON_SIGHT)) { if (modSlot == "mod_sight_front") { @@ -729,7 +730,7 @@ public class BotEquipmentModGenerator( } else if ( !(request.WeaponStats.HasOptic ?? false) - && _itemHelper.IsOfBaseclass(modToAddTemplate.Id, BaseClasses.SIGHTS) + && itemHelper.IsOfBaseclass(modToAddTemplate.Id, BaseClasses.SIGHTS) ) { request.WeaponStats.HasOptic = true; @@ -757,8 +758,8 @@ public class BotEquipmentModGenerator( // However, the recursion doesn't go over the slots of the parent mod but over the modPool which is given by the bot config // where we decided to keep cartridges instead of camoras. And since a CylinderMagazine only has one cartridge entry and // this entry is not to be filled, we need a special handling for the CylinderMagazine - var modParentItem = _itemHelper.GetItem(modToAddTemplate.Parent).Value; - if (_botWeaponGeneratorHelper.MagazineIsCylinderRelated(modParentItem.Name)) + var modParentItem = itemHelper.GetItem(modToAddTemplate.Parent).Value; + if (botWeaponGeneratorHelper.MagazineIsCylinderRelated(modParentItem.Name)) { // We don't have child mods, we need to create the camoras for the magazines instead FillCamora(request.Weapon, request.ModPool, modId, modToAddTemplate); @@ -775,7 +776,7 @@ public class BotEquipmentModGenerator( && modToAddTemplate.Properties.Slots.Any() ) { - var modFromService = _botEquipmentModPoolService.GetModsForWeaponSlot( + var modFromService = botEquipmentModPoolService.GetModsForWeaponSlot( modToAddTemplate.Id ); if (modFromService?.Count > 0) @@ -789,7 +790,7 @@ public class BotEquipmentModGenerator( if (!containsModInPool && !isRandomisableSlot) { // Check for required mods the item we've added needs to be classified as 'valid' - var modFromService = _botEquipmentModPoolService.GetRequiredModsForWeaponSlot( + var modFromService = botEquipmentModPoolService.GetRequiredModsForWeaponSlot( modToAddTemplate.Id ); if (modFromService?.Count > 0) @@ -884,7 +885,7 @@ public class BotEquipmentModGenerator( /// e.g. mod_scope, mod_mount /// Parent id of mod item /// true if it can hold a scope - public bool ModSlotCanHoldScope(string modSlot, string modsParentId) + public bool ModSlotCanHoldScope(string modSlot, MongoId modsParentId) { return _scopeIds.Contains(modSlot.ToLowerInvariant()) && modsParentId == BaseClasses.MOUNT; } @@ -903,14 +904,14 @@ public class BotEquipmentModGenerator( { if (modSpawnChances is null) { - _logger.Warning("AdjustSlotSpawnChances() modSpawnChances missing"); + logger.Warning("AdjustSlotSpawnChances() modSpawnChances missing"); return; } if (modSlotsToAdjust is null) { - _logger.Warning("AdjustSlotSpawnChances() modSlotsToAdjust missing"); + logger.Warning("AdjustSlotSpawnChances() modSlotsToAdjust missing"); return; } @@ -949,7 +950,7 @@ public class BotEquipmentModGenerator( return unsortedSlotKeys; } - var isMount = _itemHelper.IsOfBaseclass(itemTplWithKeysToSort, BaseClasses.MOUNT); + var isMount = itemHelper.IsOfBaseclass(itemTplWithKeysToSort, BaseClasses.MOUNT); HashSet sortedKeys = []; @@ -1086,7 +1087,7 @@ public class BotEquipmentModGenerator( return ModSpawn.SPAWN; } - var spawnMod = _randomUtil.RollChance( + var spawnMod = randomUtil.RollChance( modSpawnChances.GetValueOrDefault(modSlotName.ToLowerInvariant()) ); if ( @@ -1115,12 +1116,12 @@ public class BotEquipmentModGenerator( var parentSlot = request.ParentTemplate.Properties.Slots?.FirstOrDefault(i => i.Name == request.ModSlot ); - var weaponTemplate = _itemHelper.GetItem(request.Weapon[0].Template).Value; + var weaponTemplate = itemHelper.GetItem(request.Weapon[0].Template).Value; // It's ammo, use predefined ammo parameter if (GetAmmoContainers().Contains(request.ModSlot) && request.ModSlot != "mod_magazine") { - return _itemHelper.GetItem(request.AmmoTpl); + return itemHelper.GetItem(request.AmmoTpl); } // Ensure there's a pool of mods to pick from @@ -1128,9 +1129,9 @@ public class BotEquipmentModGenerator( if ((modPool is null || !modPool.Any()) && !(parentSlot?.Required ?? false)) { // Nothing in mod pool + item not required - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Mod pool for optional slot: {request.ModSlot} on item: {request.ParentTemplate.Name} was empty, skipping mod" ); } @@ -1212,9 +1213,9 @@ public class BotEquipmentModGenerator( && !parentSlot.Required.GetValueOrDefault(false) ) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Unable to find compatible mod of type: {parentSlot.Name}, in slot: {request.ModSlot} reason: {chosenModResult.Reason}" ); } @@ -1250,7 +1251,7 @@ public class BotEquipmentModGenerator( { if (parentSlot.Required.GetValueOrDefault(false)) { - _logger.Warning( + logger.Warning( $"Required slot unable to be filled, {request.ModSlot} on {request.ParentTemplate.Name} {request.ParentTemplate.Id} for weapon: {request.Weapon[0].Template}" ); } @@ -1258,7 +1259,7 @@ public class BotEquipmentModGenerator( return null; } - return _itemHelper.GetItem(chosenModResult.ChosenTemplate); + return itemHelper.GetItem(chosenModResult.ChosenTemplate); } /// @@ -1279,7 +1280,7 @@ public class BotEquipmentModGenerator( ); var desiredMagazineTpls = modPool.Where(magTpl => { - var magazineDb = _itemHelper.GetItem(magTpl).Value; + var magazineDb = itemHelper.GetItem(magTpl).Value; return magazineDb.Properties is not null && magazineDb.Properties.Cartridges.FirstOrDefault().MaxCount >= minMagSizeFromSettings; @@ -1287,7 +1288,7 @@ public class BotEquipmentModGenerator( if (!desiredMagazineTpls.Any()) { - _logger.Warning( + logger.Warning( $"Magazine size filter for: {weaponTpl} was too strict, ignoring filter" ); @@ -1377,7 +1378,7 @@ public class BotEquipmentModGenerator( while (exhaustableModPool.HasValues()) { chosenTpl = exhaustableModPool.GetRandomValue(); - var pickedItemDetails = _itemHelper.GetItem(chosenTpl); + var pickedItemDetails = itemHelper.GetItem(chosenTpl); if (!pickedItemDetails.Key) // Not valid item, try again { @@ -1445,7 +1446,7 @@ public class BotEquipmentModGenerator( public ExhaustableArray CreateExhaustableArray(ICollection itemsToAddToArray) { - return new ExhaustableArray(itemsToAddToArray, _randomUtil, _cloner); + return new ExhaustableArray(itemsToAddToArray, randomUtil, cloner); } /// @@ -1516,9 +1517,9 @@ public class BotEquipmentModGenerator( { if (request.ItemModPool[request.ModSlot]?.Count > 1) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"{request.BotData.Role} No default: {request.ModSlot} mod found for: {weaponTemplate.Name}, using existing pool" ); } @@ -1553,8 +1554,7 @@ public class BotEquipmentModGenerator( // Mod isn't in existing pool, only add if it has no children and exists inside parent filter if ( (parentSlotCompatibleItems?.Contains(matchingModFromPreset.Template) ?? false) - && _itemHelper.GetItem(matchingModFromPreset.Template).Value.Properties.Slots?.Count - == 0 + && itemHelper.GetItem(matchingModFromPreset.Template).Value.Properties.Slots?.Count == 0 ) { // Chosen mod has no conflicts + no children + is in parent compat list @@ -1564,9 +1564,9 @@ public class BotEquipmentModGenerator( } // Above chosen mod had conflicts with existing weapon mods - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"{request.BotData.Role} Chosen default: {request.ModSlot} mod found for: {weaponTemplate.Name} weapon conflicts with item on weapon, cannot use default" ); } @@ -1575,9 +1575,9 @@ public class BotEquipmentModGenerator( if (existingModPool.Count == 1) { // The only item in pool isn't compatible - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"{request.BotData.Role} {request.ModSlot} Mod pool for: {weaponTemplate.Name} weapon has only incompatible items, using parent list instead" ); } @@ -1620,23 +1620,25 @@ public class BotEquipmentModGenerator( /// Weapons db template /// Tpl of the parent item /// Default preset found - protected Preset? GetMatchingPreset(TemplateItem weaponTemplate, string parentItemTpl) + protected Preset? GetMatchingPreset(TemplateItem weaponTemplate, MongoId parentItemTpl) { - // Edge case - using mp5sd reciever means default mp5 handguard doesn't fit - var isMp5sd = parentItemTpl == "5926f2e086f7745aae644231"; + // Edge case - using MP5SD receiver means default mp5 handguard doesn't fit + var isMp5sd = parentItemTpl == ItemTpl.RECEIVER_HK_MP5SD_9X19_UPPER; if (isMp5sd) { - return _presetHelper.GetPreset("59411abb86f77478f702b5d2"); + return presetHelper.GetPreset(new MongoId("59411abb86f77478f702b5d2")); } // Edge case - dvl 500mm is the silenced barrel and has specific muzzle mods - var isDvl500mmSilencedBarrel = parentItemTpl == "5888945a2459774bf43ba385"; + var isDvl500mmSilencedBarrel = + parentItemTpl == ItemTpl.BARREL_DVL10_762X51_500MM_SUPPRESSED; + if (isDvl500mmSilencedBarrel) { - return _presetHelper.GetPreset("59e8d2b386f77445830dd299"); + return presetHelper.GetPreset(new MongoId("59e8d2b386f77445830dd299")); } - return _presetHelper.GetDefaultPreset(weaponTemplate.Id); + return presetHelper.GetDefaultPreset(weaponTemplate.Id); } /// @@ -1645,12 +1647,12 @@ public class BotEquipmentModGenerator( /// Array of items that make up a weapon /// Mod to check compatibility with weapon /// True if incompatible - public bool WeaponModComboIsIncompatible(List weapon, string modTpl) + public bool WeaponModComboIsIncompatible(List weapon, MongoId modTpl) { // STM-9 + AR-15 Lone Star Ion Lite handguard if ( - weapon[0].Template == "60339954d62c9b14ed777c06" - && modTpl == "5d4405f0a4b9361e6a4e6bd9" + weapon[0].Template == ItemTpl.SMG_SOYUZTM_STM9_GEN2_9X19_CARBINE + && modTpl == ItemTpl.HANDGUARD_AR15_LONE_STAR_ION_LITE ) { return true; @@ -1671,7 +1673,7 @@ public class BotEquipmentModGenerator( /// Item object public Item CreateModItem( MongoId modId, - string modTpl, + MongoId modTpl, string parentId, string modSlot, TemplateItem modTemplate, @@ -1684,7 +1686,7 @@ public class BotEquipmentModGenerator( Template = modTpl, ParentId = parentId, SlotId = modSlot, - Upd = _botGeneratorHelper.GenerateExtraPropertiesForItem(modTemplate, botRole), + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem(modTemplate, botRole), }; } @@ -1707,7 +1709,7 @@ public class BotEquipmentModGenerator( /// Items to ensure picked mod is compatible with /// Item tpl public MongoId? GetRandomModTplFromItemDb( - string fallbackModTpl, + MongoId fallbackModTpl, Slot parentSlot, string modSlot, List items @@ -1723,7 +1725,7 @@ public class BotEquipmentModGenerator( { tmpModTpl = exhaustableModPool.GetRandomValue(); if ( - !_botGeneratorHelper + !botGeneratorHelper .IsItemIncompatibleWithCurrentItems(items, tmpModTpl, modSlot) .Incompatible.GetValueOrDefault(false) ) @@ -1758,15 +1760,15 @@ public class BotEquipmentModGenerator( // Mod lacks db template object if (modBeingAddedDbTemplate.Value is null) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-no_item_template_found_when_adding_mod", new { modId = modBeingAddedDbTemplate.Value?.Id ?? "UNKNOWN", modSlot } ) ); - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug($"Item -> {parentTemplate?.Id}; Slot -> {modSlot}"); + logger.Debug($"Item -> {parentTemplate?.Id}; Slot -> {modSlot}"); } return false; @@ -1778,8 +1780,8 @@ public class BotEquipmentModGenerator( // Parent slot must be filled but db object is invalid, show warning and return false if (slotAddedToTemplate.Required ?? false) { - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-unable_to_add_mod_item_invalid", new { @@ -1809,7 +1811,7 @@ public class BotEquipmentModGenerator( public void AddCompatibleModsForProvidedMod( string desiredSlotName, TemplateItem modTemplate, - IDictionary>> modPool, + IDictionary>> modPool, EquipmentFilterDetails botEquipBlacklist ) { @@ -1833,8 +1835,8 @@ public class BotEquipmentModGenerator( ); if (!filteredMods.Any()) { - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-unable_to_filter_mods_all_blacklisted", new { slotName = desiredSlotObject.Name, itemName = modTemplate.Name } ) @@ -1859,8 +1861,8 @@ public class BotEquipmentModGenerator( EquipmentFilterDetails botEquipBlacklist ) { - var modsFromDynamicPool = _cloner.Clone( - _botEquipmentModPoolService.GetCompatibleModsForWeaponSlot(parentItemId, modSlot) + var modsFromDynamicPool = cloner.Clone( + botEquipmentModPoolService.GetCompatibleModsForWeaponSlot(parentItemId, modSlot) ); if (modsFromDynamicPool.Count == 0) @@ -1876,8 +1878,8 @@ public class BotEquipmentModGenerator( return filteredMods; } - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-unable_to_filter_mod_slot_all_blacklisted", modSlot ) @@ -1906,7 +1908,7 @@ public class BotEquipmentModGenerator( } // Get item blacklist and mod equipment blacklist as one Set - var blacklist = _itemFilterService.GetBlacklistedItems(); + var blacklist = itemFilterService.GetBlacklistedItems(); if ( botEquipBlacklist?.Equipment is not null && botEquipBlacklist.Equipment.TryGetValue(modSlot, out var equipmentBlacklistValues) @@ -1915,7 +1917,7 @@ public class BotEquipmentModGenerator( blacklist.UnionWith(equipmentBlacklistValues); } - var result = _cloner.Clone(modTplPool); + var result = cloner.Clone(modTplPool); // Filter out blacklisted tpls result.ExceptWith(blacklist); @@ -1935,15 +1937,15 @@ public class BotEquipmentModGenerator( /// The CylinderMagazine's template public void FillCamora( List items, - Dictionary>> modPool, + Dictionary>> modPool, string cylinderMagParentId, TemplateItem cylinderMagTemplate ) { if (!modPool.TryGetValue(cylinderMagTemplate.Id, out var itemModPool)) { - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-unable_to_fill_camora_slot_mod_pool_empty", new { weaponId = cylinderMagTemplate.Id, weaponName = cylinderMagTemplate.Name } ) @@ -1978,8 +1980,8 @@ public class BotEquipmentModGenerator( } else { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-missing_cartridge_slot", cylinderMagTemplate.Id ) @@ -1988,13 +1990,13 @@ public class BotEquipmentModGenerator( return; } - string? modTpl = null; + var modTpl = MongoId.Empty(); var found = false; while (exhaustableModPool.HasValues()) { modTpl = exhaustableModPool.GetRandomValue(); if ( - !_botGeneratorHelper + !botGeneratorHelper .IsItemIncompatibleWithCurrentItems(items, modTpl, modSlot) .Incompatible.GetValueOrDefault(false) ) @@ -2006,8 +2008,8 @@ public class BotEquipmentModGenerator( if (!found) { - _logger.Error( - _serverLocalisationService.GetText("bot-no_compatible_camora_ammo_found", modSlot) + logger.Error( + serverLocalisationService.GetText("bot-no_compatible_camora_ammo_found", modSlot) ); return; @@ -2054,7 +2056,7 @@ public class BotEquipmentModGenerator( Dictionary> botWeaponSightWhitelist ) { - var weaponDetails = _itemHelper.GetItem(weapon.Template); + var weaponDetails = itemHelper.GetItem(weapon.Template); // Return original scopes array if whitelist not found if ( @@ -2064,9 +2066,9 @@ public class BotEquipmentModGenerator( ) ) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Unable to find whitelist for weapon type: {weaponDetails.Value.Parent} {weaponDetails.Value.Name}, skipping sight filtering" ); } @@ -2079,7 +2081,7 @@ public class BotEquipmentModGenerator( foreach (var item in scopes) { // Mods is a scope, check base class is allowed - if (_itemHelper.IsOfBaseclasses(item, whitelistedSightTypes)) + if (itemHelper.IsOfBaseclasses(item, whitelistedSightTypes)) { // Add mod to allowed list filteredScopesAndMods.Add(item); @@ -2088,9 +2090,9 @@ public class BotEquipmentModGenerator( // Edge case, what if item is a mount for a scope and not directly a scope? // Check item is mount + has child items - var itemDetails = _itemHelper.GetItem(item).Value; + var itemDetails = itemHelper.GetItem(item).Value; if ( - _itemHelper.IsOfBaseclass(item, BaseClasses.MOUNT) + itemHelper.IsOfBaseclass(item, BaseClasses.MOUNT) && itemDetails.Properties.Slots.Any() ) { @@ -2106,8 +2108,8 @@ public class BotEquipmentModGenerator( scopeSlot?.All(slot => slot.Props.Filters[0] .Filter.All(tpl => - _itemHelper.IsOfBaseclasses(tpl, whitelistedSightTypes) - || _itemHelper.IsOfBaseclass(tpl, BaseClasses.MOUNT) + itemHelper.IsOfBaseclasses(tpl, whitelistedSightTypes) + || itemHelper.IsOfBaseclass(tpl, BaseClasses.MOUNT) ) ) ?? false ) @@ -2121,9 +2123,9 @@ public class BotEquipmentModGenerator( // No mods added to return list after filtering has occurred, send back the original mod list if (filteredScopesAndMods.Count == 0) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Scope whitelist too restrictive for: {weapon.Template} {weaponDetails.Value.Name}, skipping filter" ); } diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs index b426e755..f37bb594 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs @@ -20,25 +20,25 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class BotGenerator( - ISptLogger _logger, - HashUtil _hashUtil, - RandomUtil _randomUtil, - DatabaseService _databaseService, - BotInventoryGenerator _botInventoryGenerator, - BotLevelGenerator _botLevelGenerator, - BotEquipmentFilterService _botEquipmentFilterService, - WeightedRandomHelper _weightedRandomHelper, - BotHelper _botHelper, - BotGeneratorHelper _botGeneratorHelper, - SeasonalEventService _seasonalEventService, - ItemFilterService _itemFilterService, - BotNameService _botNameService, - ConfigServer _configServer, - ICloner _cloner + ISptLogger logger, + HashUtil hashUtil, + RandomUtil randomUtil, + DatabaseService databaseService, + BotInventoryGenerator botInventoryGenerator, + BotLevelGenerator botLevelGenerator, + BotEquipmentFilterService botEquipmentFilterService, + WeightedRandomHelper weightedRandomHelper, + BotHelper botHelper, + BotGeneratorHelper botGeneratorHelper, + SeasonalEventService seasonalEventService, + ItemFilterService itemFilterService, + BotNameService botNameService, + ConfigServer configServer, + ICloner cloner ) { - protected readonly BotConfig _botConfig = _configServer.GetConfig(); - protected readonly PmcConfig _pmcConfig = _configServer.GetConfig(); + protected readonly BotConfig _botConfig = configServer.GetConfig(); + protected readonly PmcConfig _pmcConfig = configServer.GetConfig(); /// /// Generate a player scav bot object @@ -50,7 +50,7 @@ public class BotGenerator( /// profile of player generating pscav /// BotBase public PmcData GeneratePlayerScav( - string sessionId, + MongoId sessionId, string role, string difficulty, BotType botTemplate, @@ -121,7 +121,7 @@ public class BotGenerator( /// details on how to generate bots /// constructed bot public BotBase PrepareAndGenerateBot( - string sessionId, + MongoId sessionId, BotGenerationDetails? botGenerationDetails ) { @@ -136,10 +136,10 @@ public class BotGenerator( botGenerationDetails.IsPmc ?? false ? preparedBotBase.Info.Side // Use side to get usec.json or bear.json when bot will be PMC : botGenerationDetails.Role; - var botJsonTemplateClone = _cloner.Clone(_botHelper.GetBotTemplate(botRole)); + var botJsonTemplateClone = cloner.Clone(botHelper.GetBotTemplate(botRole)); if (botJsonTemplateClone is null) { - _logger.Error( + logger.Error( $"Unable to retrieve: {botRole} bot template, cannot generate bot of this type" ); } @@ -170,7 +170,7 @@ public class BotGenerator( /// BotBase object public BotBase GetCloneOfBotBase() { - return _cloner.Clone(_databaseService.GetBots().Base); + return cloner.Clone(databaseService.GetBots().Base); } /// @@ -182,14 +182,14 @@ public class BotGenerator( /// details on how to generate the bot /// BotBase object public BotBase GenerateBot( - string sessionId, + MongoId sessionId, BotBase bot, BotType botJsonTemplate, BotGenerationDetails botGenerationDetails ) { var botRoleLowercase = botGenerationDetails.Role.ToLowerInvariant(); - var botLevel = _botLevelGenerator.GenerateBotLevel( + var botLevel = botLevelGenerator.GenerateBotLevel( botJsonTemplate.BotExperience.Level, botGenerationDetails, bot @@ -198,7 +198,7 @@ public class BotGenerator( // Only filter bot equipment, never players if (!botGenerationDetails.IsPlayerScav.GetValueOrDefault(false)) { - _botEquipmentFilterService.FilterBotEquipment( + botEquipmentFilterService.FilterBotEquipment( sessionId, botJsonTemplate, botLevel.Level.Value, @@ -206,7 +206,7 @@ public class BotGenerator( ); } - bot.Info.Nickname = _botNameService.GenerateUniqueBotNickname( + bot.Info.Nickname = botNameService.GenerateUniqueBotNickname( botJsonTemplate, botGenerationDetails, botRoleLowercase, @@ -224,16 +224,16 @@ public class BotGenerator( && ShouldSimulatePlayerScav(botRoleLowercase) ) { - _botNameService.AddRandomPmcNameToBotMainProfileNicknameProperty(bot); + botNameService.AddRandomPmcNameToBotMainProfileNicknameProperty(bot); SetRandomisedGameVersionAndCategory(bot.Info); } - if (!_seasonalEventService.ChristmasEventEnabled()) + if (!seasonalEventService.ChristmasEventEnabled()) // Process all bots EXCEPT gifter, he needs christmas items { if (botGenerationDetails.Role != "gifter") { - _seasonalEventService.RemoveChristmasItemsFromBotInventory( + seasonalEventService.RemoveChristmasItemsFromBotInventory( botJsonTemplate.BotInventory, botGenerationDetails.Role ); @@ -272,9 +272,7 @@ public class BotGenerator( ); bot.Info.Settings.UseSimpleAnimator = botJsonTemplate.BotExperience.UseSimpleAnimator ?? false; - bot.Info.Voice = _weightedRandomHelper.GetWeightedValue( - botJsonTemplate.BotAppearance.Voice - ); + bot.Info.Voice = weightedRandomHelper.GetWeightedValue(botJsonTemplate.BotAppearance.Voice); bot.Health = GenerateHealth( botJsonTemplate.BotHealth, botGenerationDetails.IsPlayerScav.GetValueOrDefault(false) @@ -298,7 +296,7 @@ public class BotGenerator( // Filter out blacklisted gear from the base template FilterBlacklistedGear(botJsonTemplate, botGenerationDetails); - bot.Inventory = _botInventoryGenerator.GenerateInventory( + bot.Inventory = botInventoryGenerator.GenerateInventory( sessionId, botJsonTemplate, botRoleLowercase, @@ -335,7 +333,7 @@ public class BotGenerator( public bool ShouldSimulatePlayerScav(string botRole) { return botRole == Roles.Assault - && _randomUtil.GetChance100(_botConfig.ChanceAssaultScavHasPlayerScavName); + && randomUtil.GetChance100(_botConfig.ChanceAssaultScavHasPlayerScavName); } /// @@ -353,14 +351,14 @@ public class BotGenerator( { if (!experiences.TryGetValue(botDifficulty.ToLowerInvariant(), out var result)) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Unable to find experience: {botDifficulty} for {role} bot, falling back to `normal`" ); } - return _randomUtil.GetInt(experiences["normal"].Min, experiences["normal"].Max); + return randomUtil.GetInt(experiences["normal"].Min, experiences["normal"].Max); } // Some bots have -1/-1, shortcut result @@ -370,7 +368,7 @@ public class BotGenerator( return -1; } - return _randomUtil.GetInt(result.Min, result.Max); + return randomUtil.GetInt(result.Min, result.Max); } /// @@ -388,7 +386,7 @@ public class BotGenerator( { if (!standingsForKill.TryGetValue(botDifficulty.ToLowerInvariant(), out var result)) { - _logger.Warning( + logger.Warning( $"Unable to find standing for kill value for: {role} {botDifficulty}, falling back to `normal`" ); @@ -413,7 +411,7 @@ public class BotGenerator( { if (!aggressorBonuses.TryGetValue(botDifficulty.ToLowerInvariant(), out var result)) { - _logger.Warning( + logger.Warning( $"Unable to find aggressor bonus for kill value for: {role} {botDifficulty}, falling back to `normal`" ); @@ -433,8 +431,8 @@ public class BotGenerator( BotGenerationDetails botGenerationDetails ) { - var blacklist = _botEquipmentFilterService.GetBotEquipmentBlacklist( - _botGeneratorHelper.GetBotEquipmentRole(botGenerationDetails.Role), + var blacklist = botEquipmentFilterService.GetBotEquipmentBlacklist( + botGeneratorHelper.GetBotEquipmentRole(botGenerationDetails.Role), botGenerationDetails.PlayerLevel.GetValueOrDefault(1) ); @@ -491,7 +489,7 @@ public class BotGenerator( // Create a set of tpls to remove var keysToRemove = container - .Where(item => _itemFilterService.IsLootableItemBlacklisted(item.Key)) + .Where(item => itemFilterService.IsLootableItemBlacklisted(item.Key)) .Select(item => item.Key) .ToHashSet(); @@ -516,12 +514,12 @@ public class BotGenerator( ) { // Choose random values by weight - bot.Customization.Head = _weightedRandomHelper.GetWeightedValue(appearance.Head); - bot.Customization.Feet = _weightedRandomHelper.GetWeightedValue(appearance.Feet); - bot.Customization.Body = _weightedRandomHelper.GetWeightedValue(appearance.Body); + bot.Customization.Head = weightedRandomHelper.GetWeightedValue(appearance.Head); + bot.Customization.Feet = weightedRandomHelper.GetWeightedValue(appearance.Feet); + bot.Customization.Body = weightedRandomHelper.GetWeightedValue(appearance.Body); - var bodyGlobalDictDb = _databaseService.GetGlobals().Configuration.Customization.Body; - var chosenBodyTemplate = _databaseService.GetCustomization()[bot.Customization.Body]; + var bodyGlobalDictDb = databaseService.GetGlobals().Configuration.Customization.Body; + var chosenBodyTemplate = databaseService.GetCustomization()[bot.Customization.Body]; // Some bodies have matching hands, look up body to see if this is the case var chosenBody = bodyGlobalDictDb.FirstOrDefault(c => @@ -530,7 +528,7 @@ public class BotGenerator( bot.Customization.Hands = chosenBody.Value?.IsNotRandom ?? false ? chosenBody.Value.Hands // Has fixed hands for chosen body, update to match - : _weightedRandomHelper.GetWeightedValue(appearance.Hands); // Hands can be random, choose any from weighted dict + : weightedRandomHelper.GetWeightedValue(appearance.Hands); // Hands can be random, choose any from weighted dict } /// @@ -543,23 +541,23 @@ public class BotGenerator( { var bodyParts = playerScav ? GetLowestHpBody(healthObj.BodyParts) - : _randomUtil.GetArrayValue(healthObj.BodyParts); + : randomUtil.GetArrayValue(healthObj.BodyParts); BotBaseHealth health = new() { Hydration = new CurrentMinMax { - Current = _randomUtil.GetDouble(healthObj.Hydration.Min, healthObj.Hydration.Max), + Current = randomUtil.GetDouble(healthObj.Hydration.Min, healthObj.Hydration.Max), Maximum = healthObj.Hydration.Max, }, Energy = new CurrentMinMax { - Current = _randomUtil.GetDouble(healthObj.Energy.Min, healthObj.Energy.Max), + Current = randomUtil.GetDouble(healthObj.Energy.Min, healthObj.Energy.Max), Maximum = healthObj.Energy.Max, }, Temperature = new CurrentMinMax { - Current = _randomUtil.GetDouble( + Current = randomUtil.GetDouble( healthObj.Temperature.Min, healthObj.Temperature.Max ), @@ -573,7 +571,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = _randomUtil.GetDouble(bodyParts.Head.Min, bodyParts.Head.Max), + Current = randomUtil.GetDouble(bodyParts.Head.Min, bodyParts.Head.Max), Maximum = Math.Round(bodyParts.Head.Max), }, } @@ -584,7 +582,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = _randomUtil.GetDouble( + Current = randomUtil.GetDouble( bodyParts.Chest.Min, bodyParts.Chest.Max ), @@ -598,7 +596,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = _randomUtil.GetDouble( + Current = randomUtil.GetDouble( bodyParts.Stomach.Min, bodyParts.Stomach.Max ), @@ -612,7 +610,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = _randomUtil.GetDouble( + Current = randomUtil.GetDouble( bodyParts.LeftArm.Min, bodyParts.LeftArm.Max ), @@ -626,7 +624,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = _randomUtil.GetDouble( + Current = randomUtil.GetDouble( bodyParts.RightArm.Min, bodyParts.RightArm.Max ), @@ -640,7 +638,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = _randomUtil.GetDouble( + Current = randomUtil.GetDouble( bodyParts.LeftLeg.Min, bodyParts.LeftLeg.Max ), @@ -654,7 +652,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = _randomUtil.GetDouble( + Current = randomUtil.GetDouble( bodyParts.RightLeg.Min, bodyParts.RightLeg.Max ), @@ -742,7 +740,7 @@ public class BotGenerator( return new CommonSkill { Id = Enum.Parse(kvp.Key), - Progress = _randomUtil.GetDouble(skill.Min, skill.Max), + Progress = randomUtil.GetDouble(skill.Min, skill.Max), PointsEarnedDuringSession = 0, LastAccess = 0, }; @@ -779,7 +777,7 @@ public class BotGenerator( return new MasterySkill { Id = kvp.Key, - Progress = _randomUtil.GetDouble(skill.Min, skill.Max), + Progress = randomUtil.GetDouble(skill.Min, skill.Max), }; }) .Where(baseSkill => baseSkill != null) @@ -796,7 +794,7 @@ public class BotGenerator( { bot.Id = new MongoId(); bot.Aid = botGenerationDetails.IsPmc.GetValueOrDefault(false) - ? _hashUtil.GenerateAccountId() + ? hashUtil.GenerateAccountId() : 0; } @@ -856,7 +854,7 @@ public class BotGenerator( } // Choose random weighted game version for bot - botInfo.GameVersion = _weightedRandomHelper.GetWeightedValue(_pmcConfig.GameVersionWeight); + botInfo.GameVersion = weightedRandomHelper.GetWeightedValue(_pmcConfig.GameVersionWeight); // Choose appropriate member category value switch (botInfo.GameVersion) @@ -869,7 +867,7 @@ public class BotGenerator( break; default: // Everyone else gets a weighted randomised category - botInfo.MemberCategory = _weightedRandomHelper.GetWeightedValue( + botInfo.MemberCategory = weightedRandomHelper.GetWeightedValue( _pmcConfig.AccountTypeWeight ); break; diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs index e7d09b79..f834fe69 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs @@ -17,22 +17,22 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class BotInventoryGenerator( - ISptLogger _logger, - RandomUtil _randomUtil, - ProfileActivityService _profileActivityService, - BotWeaponGenerator _botWeaponGenerator, - BotLootGenerator _botLootGenerator, - BotGeneratorHelper _botGeneratorHelper, - ProfileHelper _profileHelper, - BotHelper _botHelper, - WeightedRandomHelper _weightedRandomHelper, - ItemHelper _itemHelper, - WeatherHelper _weatherHelper, - ServerLocalisationService _serverLocalisationService, - BotEquipmentFilterService _botEquipmentFilterService, - BotEquipmentModPoolService _botEquipmentModPoolService, - BotEquipmentModGenerator _botEquipmentModGenerator, - ConfigServer _configServer + ISptLogger logger, + RandomUtil randomUtil, + ProfileActivityService profileActivityService, + BotWeaponGenerator botWeaponGenerator, + BotLootGenerator botLootGenerator, + BotGeneratorHelper botGeneratorHelper, + ProfileHelper profileHelper, + BotHelper botHelper, + WeightedRandomHelper weightedRandomHelper, + ItemHelper itemHelper, + WeatherHelper weatherHelper, + ServerLocalisationService serverLocalisationService, + BotEquipmentFilterService botEquipmentFilterService, + BotEquipmentModPoolService botEquipmentModPoolService, + BotEquipmentModGenerator botEquipmentModGenerator, + ConfigServer configServer ) { // Slots handled individually inside `GenerateAndAddEquipmentToBot` @@ -49,7 +49,7 @@ public class BotInventoryGenerator( EquipmentSlots.Earpiece, ]; - private readonly BotConfig _botConfig = _configServer.GetConfig(); + private readonly BotConfig _botConfig = configServer.GetConfig(); private readonly HashSet _slotsToCheck = [ @@ -68,7 +68,7 @@ public class BotInventoryGenerator( /// Game version for bot, only really applies for PMCs /// PmcInventory object with equipment/weapons/loot public BotBaseInventory GenerateInventory( - string sessionId, + MongoId sessionId, BotType botJsonTemplate, string botRole, bool isPmc, @@ -84,7 +84,7 @@ public class BotInventoryGenerator( var botInventory = GenerateInventoryBase(); // Get generated raid details bot will be spawned in - var raidConfig = _profileActivityService + var raidConfig = profileActivityService .GetProfileActivityRaidData(sessionId) ?.RaidConfiguration; @@ -113,7 +113,7 @@ public class BotInventoryGenerator( ); // Pick loot and add to bots containers (rig/backpack/pockets/secure) - _botLootGenerator.GenerateLoot( + botLootGenerator.GenerateLoot( sessionId, botJsonTemplate, isPmc, @@ -177,7 +177,7 @@ public class BotInventoryGenerator( /// Game version for bot, only really applies for PMCs /// RadiConfig public void GenerateAndAddEquipmentToBot( - string sessionId, + MongoId sessionId, BotTypeInventory templateInventory, Chances wornItemChances, string botRole, @@ -189,16 +189,16 @@ public class BotInventoryGenerator( ) { _botConfig.Equipment.TryGetValue( - _botGeneratorHelper.GetBotEquipmentRole(botRole), + botGeneratorHelper.GetBotEquipmentRole(botRole), out var botEquipConfig ); - var randomistionDetails = _botHelper.GetBotRandomizationDetails(botLevel, botEquipConfig); + var randomistionDetails = botHelper.GetBotRandomizationDetails(botLevel, botEquipConfig); // Apply nighttime changes if its nighttime + there's changes to make if ( randomistionDetails?.NighttimeChanges is not null && raidConfig is not null - && _weatherHelper.IsNightTime(raidConfig.TimeVariant, raidConfig.Location) + && weatherHelper.IsNightTime(raidConfig.TimeVariant, raidConfig.Location) ) { foreach ( @@ -218,8 +218,8 @@ public class BotInventoryGenerator( } // Get profile of player generating bots, we use their level later on - var pmcProfile = _profileHelper.GetPmcProfile(sessionId); - var botEquipmentRole = _botGeneratorHelper.GetBotEquipmentRole(botRole); + var pmcProfile = profileHelper.GetPmcProfile(sessionId); + var botEquipmentRole = botGeneratorHelper.GetBotEquipmentRole(botRole); // Iterate over all equipment slots of bot, do it in specifc order to reduce conflicts // e.g. ArmorVest should be generated after TactivalVest @@ -431,14 +431,14 @@ public class BotInventoryGenerator( ) { var tacVestsWithArmor = templateEquipment[EquipmentSlots.TacticalVest] - .Where(kvp => _itemHelper.ItemHasSlots(kvp.Key)) + .Where(kvp => itemHelper.ItemHasSlots(kvp.Key)) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); if (!tacVestsWithArmor.Any()) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Unable to filter to only armored rigs as bot: {botRole} has none in pool" ); } @@ -462,14 +462,14 @@ public class BotInventoryGenerator( ) { var tacVestsWithoutArmor = templateEquipment[EquipmentSlots.TacticalVest] - .Where(kvp => !_itemHelper.ItemHasSlots(kvp.Key)) + .Where(kvp => !itemHelper.ItemHasSlots(kvp.Key)) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); if (!allowEmptyResult && !tacVestsWithoutArmor.Any()) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Unable to filter to only unarmored rigs as bot: {botRole} has none in pool" ); } @@ -495,8 +495,8 @@ public class BotInventoryGenerator( if (!spawnChance.HasValue) { - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-no_spawn_chance_defined_for_equipment_slot", settings.RootEquipmentSlot ) @@ -506,7 +506,7 @@ public class BotInventoryGenerator( } // Roll dice on equipment item - var shouldSpawn = _randomUtil.GetChance100(spawnChance ?? 0); + var shouldSpawn = randomUtil.GetChance100(spawnChance ?? 0); if (shouldSpawn && settings.RootEquipmentPool.Any()) { TemplateItem? pickedItemDb = null; @@ -522,22 +522,22 @@ public class BotInventoryGenerator( return false; } - var chosenItemTpl = _weightedRandomHelper.GetWeightedValue( + var chosenItemTpl = weightedRandomHelper.GetWeightedValue( settings.RootEquipmentPool ); - var dbResult = _itemHelper.GetItem(chosenItemTpl); + var dbResult = itemHelper.GetItem(chosenItemTpl); if (!dbResult.Key) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-missing_item_template", chosenItemTpl ) ); - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug($"EquipmentSlot-> {settings.RootEquipmentSlot}"); + logger.Debug($"EquipmentSlot-> {settings.RootEquipmentSlot}"); } // Remove picked item @@ -549,7 +549,7 @@ public class BotInventoryGenerator( } // Is the chosen item compatible with other items equipped - var compatibilityResult = _botGeneratorHelper.IsItemIncompatibleWithCurrentItems( + var compatibilityResult = botGeneratorHelper.IsItemIncompatibleWithCurrentItems( settings.Inventory.Items, chosenItemTpl, settings.RootEquipmentSlot.ToString() @@ -584,13 +584,13 @@ public class BotInventoryGenerator( Template = pickedItemDb.Id, ParentId = settings.Inventory.Equipment, SlotId = settings.RootEquipmentSlot.ToString(), - Upd = _botGeneratorHelper.GenerateExtraPropertiesForItem( + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( pickedItemDb, settings.BotData.Role ), }; - var botEquipBlacklist = _botEquipmentFilterService.GetBotEquipmentBlacklist( + var botEquipBlacklist = botEquipmentFilterService.GetBotEquipmentBlacklist( settings.BotData.EquipmentRole, settings.GeneratingPlayerLevel.GetValueOrDefault(1) ); @@ -617,7 +617,7 @@ public class BotInventoryGenerator( // Does item have slots for sub-mods to be inserted into if (pickedItemDb.Properties?.Slots?.Count > 0 && !itemIsOnGenerateModBlacklist) { - var childItemsToAdd = _botEquipmentModGenerator.GenerateModsForEquipment( + var childItemsToAdd = botEquipmentModGenerator.GenerateModsForEquipment( [item], id, pickedItemDb, @@ -649,7 +649,7 @@ public class BotInventoryGenerator( Dictionary> equipmentBlacklist ) { - var modPool = _botEquipmentModPoolService.GetModsForGearSlot(itemTpl); + var modPool = botEquipmentModPoolService.GetModsForGearSlot(itemTpl); return modPool.ToDictionary( kvp => kvp.Key, @@ -672,7 +672,7 @@ public class BotInventoryGenerator( return filteredMods; } - _logger.Warning( + logger.Warning( $"Filtering: '{modSlot}' resulted in 0 mods. Reverting to original set for slot" ); @@ -696,7 +696,7 @@ public class BotInventoryGenerator( public void GenerateAndAddWeaponsToBot( BotTypeInventory templateInventory, Chances equipmentChances, - string sessionId, + MongoId sessionId, BotBaseInventory botInventory, string botRole, bool isPmc, @@ -734,7 +734,7 @@ public class BotInventoryGenerator( /// What slots bot should have weapons generated for public List GetDesiredWeaponsForBot(Chances equipmentChances) { - var shouldSpawnPrimary = _randomUtil.GetChance100( + var shouldSpawnPrimary = randomUtil.GetChance100( equipmentChances.EquipmentChances["FirstPrimaryWeapon"] ); return @@ -749,7 +749,7 @@ public class BotInventoryGenerator( Slot = EquipmentSlots.SecondPrimaryWeapon, ShouldSpawn = shouldSpawnPrimary - && _randomUtil.GetChance100( + && randomUtil.GetChance100( equipmentChances.EquipmentChances["SecondPrimaryWeapon"] ), }, @@ -758,7 +758,7 @@ public class BotInventoryGenerator( Slot = EquipmentSlots.Holster, ShouldSpawn = !shouldSpawnPrimary - || _randomUtil.GetChance100(equipmentChances.EquipmentChances["Holster"]), // No primary = force pistol + || randomUtil.GetChance100(equipmentChances.EquipmentChances["Holster"]), // No primary = force pistol }, ]; } @@ -776,7 +776,7 @@ public class BotInventoryGenerator( /// /// public void AddWeaponAndMagazinesToInventory( - string sessionId, + MongoId sessionId, DesiredWeapons weaponSlot, BotTypeInventory templateInventory, BotBaseInventory botInventory, @@ -787,7 +787,7 @@ public class BotInventoryGenerator( int botLevel ) { - var generatedWeapon = _botWeaponGenerator.GenerateRandomWeapon( + var generatedWeapon = botWeaponGenerator.GenerateRandomWeapon( sessionId, weaponSlot.Slot.ToString(), templateInventory, @@ -800,7 +800,7 @@ public class BotInventoryGenerator( botInventory.Items.AddRange(generatedWeapon.Weapon); - _botWeaponGenerator.AddExtraMagazinesToInventory( + botWeaponGenerator.AddExtraMagazinesToInventory( generatedWeapon, itemGenerationWeights.Items.Magazines, botInventory, diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs index 843d5040..aaed1aaf 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs @@ -11,9 +11,9 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class BotLevelGenerator( - ISptLogger _logger, - RandomUtil _randomUtil, - DatabaseService _databaseService + ISptLogger logger, + RandomUtil randomUtil, + DatabaseService databaseService ) { /// @@ -34,7 +34,7 @@ public class BotLevelGenerator( return new RandomisedBotLevelResult { Exp = 0, Level = 1 }; } - var expTable = _databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable; + var expTable = databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable; var botLevelRange = GetRelativePmcBotLevelRange( botGenerationDetails, levelDetails, @@ -54,7 +54,7 @@ public class BotLevelGenerator( // Sprinkle in some random exp within the level, unless we are at max level. if (level < expTable.Length - 1) { - exp += _randomUtil.GetInt(0, expTable[level].Experience.Value - 1); + exp += randomUtil.GetInt(0, expTable[level].Experience.Value - 1); } return new RandomisedBotLevelResult { Level = level, Exp = exp }; @@ -62,7 +62,7 @@ public class BotLevelGenerator( public double ChooseBotLevel(double min, double max, int shift, double number) { - return _randomUtil.GetBiasedRandomNumber(min, max, shift, number); + return randomUtil.GetBiasedRandomNumber(min, max, shift, number); } /// diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs index e406841f..1dc439bb 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs @@ -16,23 +16,23 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class BotLootGenerator( - ISptLogger _logger, - RandomUtil _randomUtil, - ItemHelper _itemHelper, - InventoryHelper _inventoryHelper, - HandbookHelper _handbookHelper, - BotGeneratorHelper _botGeneratorHelper, - BotWeaponGenerator _botWeaponGenerator, - WeightedRandomHelper _weightedRandomHelper, - BotHelper _botHelper, - BotLootCacheService _botLootCacheService, - ServerLocalisationService _serverLocalisationService, - ConfigServer _configServer, - ICloner _cloner + ISptLogger logger, + RandomUtil randomUtil, + ItemHelper itemHelper, + InventoryHelper inventoryHelper, + HandbookHelper handbookHelper, + BotGeneratorHelper botGeneratorHelper, + BotWeaponGenerator botWeaponGenerator, + WeightedRandomHelper weightedRandomHelper, + BotHelper botHelper, + BotLootCacheService botLootCacheService, + ServerLocalisationService serverLocalisationService, + ConfigServer configServer, + ICloner cloner ) { - protected readonly BotConfig _botConfig = _configServer.GetConfig(); - protected readonly PmcConfig _pmcConfig = _configServer.GetConfig(); + protected readonly BotConfig _botConfig = configServer.GetConfig(); + protected readonly PmcConfig _pmcConfig = configServer.GetConfig(); /// /// @@ -43,7 +43,7 @@ public class BotLootGenerator( var limits = GetItemSpawnLimitsForBotType(botRole); // Clone limits and set all values to 0 to use as a running total - var limitsForBotDict = _cloner.Clone(limits); + var limitsForBotDict = cloner.Clone(limits); // Init current count of items we want to limit foreach (var limit in limitsForBotDict) { @@ -67,7 +67,7 @@ public class BotLootGenerator( /// Inventory to add loot to /// Level of bot public void GenerateLoot( - string sessionId, + MongoId sessionId, BotType botJsonTemplate, bool isPmc, string botRole, @@ -92,27 +92,27 @@ public class BotLootGenerator( || itemCounts.Grenades.Weights is null ) { - _logger.Warning( - _serverLocalisationService.GetText("bot-unable_to_generate_bot_loot", botRole) + logger.Warning( + serverLocalisationService.GetText("bot-unable_to_generate_bot_loot", botRole) ); return; } - var backpackLootCount = _weightedRandomHelper.GetWeightedValue( + var backpackLootCount = weightedRandomHelper.GetWeightedValue( itemCounts.BackpackLoot.Weights ); - var pocketLootCount = _weightedRandomHelper.GetWeightedValue(itemCounts.PocketLoot.Weights); - var vestLootCount = _weightedRandomHelper.GetWeightedValue(itemCounts.VestLoot.Weights); - var specialLootItemCount = _weightedRandomHelper.GetWeightedValue( + var pocketLootCount = weightedRandomHelper.GetWeightedValue(itemCounts.PocketLoot.Weights); + var vestLootCount = weightedRandomHelper.GetWeightedValue(itemCounts.VestLoot.Weights); + var specialLootItemCount = weightedRandomHelper.GetWeightedValue( itemCounts.SpecialItems.Weights ); - var healingItemCount = _weightedRandomHelper.GetWeightedValue(itemCounts.Healing.Weights); - var drugItemCount = _weightedRandomHelper.GetWeightedValue(itemCounts.Drugs.Weights); - var foodItemCount = _weightedRandomHelper.GetWeightedValue(itemCounts.Food.Weights); - var drinkItemCount = _weightedRandomHelper.GetWeightedValue(itemCounts.Drink.Weights); - var currencyItemCount = _weightedRandomHelper.GetWeightedValue(itemCounts.Currency.Weights); - var stimItemCount = _weightedRandomHelper.GetWeightedValue(itemCounts.Stims.Weights); - var grenadeCount = _weightedRandomHelper.GetWeightedValue(itemCounts.Grenades.Weights); + var healingItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Healing.Weights); + var drugItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Drugs.Weights); + var foodItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Food.Weights); + var drinkItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Drink.Weights); + var currencyItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Currency.Weights); + var stimItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Stims.Weights); + var grenadeCount = weightedRandomHelper.GetWeightedValue(itemCounts.Grenades.Weights); // If bot has been flagged as not having loot, set below counts to 0 if (_botConfig.DisableLootOnBotTypes.Contains(botRole.ToLowerInvariant())) @@ -139,7 +139,7 @@ public class BotLootGenerator( // Special items AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.Special, @@ -155,7 +155,7 @@ public class BotLootGenerator( // Healing items / Meds AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.HealingItems, @@ -173,7 +173,7 @@ public class BotLootGenerator( // Drugs AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.DrugItems, @@ -191,7 +191,7 @@ public class BotLootGenerator( // Food AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.FoodItems, @@ -209,7 +209,7 @@ public class BotLootGenerator( // Drink AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.DrinkItems, @@ -227,7 +227,7 @@ public class BotLootGenerator( // Currency AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.CurrencyItems, @@ -245,7 +245,7 @@ public class BotLootGenerator( // Stims AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.StimItems, @@ -263,7 +263,7 @@ public class BotLootGenerator( // Grenades AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.GrenadeItems, @@ -285,7 +285,7 @@ public class BotLootGenerator( if (containersBotHasAvailable.Contains(EquipmentSlots.Backpack)) { // Add randomly generated weapon to PMC backpacks - if (isPmc && _randomUtil.GetChance100(_pmcConfig.LooseWeaponInBackpackChancePercent)) + if (isPmc && randomUtil.GetChance100(_pmcConfig.LooseWeaponInBackpackChancePercent)) { AddLooseWeaponsToInventorySlot( sessionId, @@ -302,7 +302,7 @@ public class BotLootGenerator( var backpackLootRoubleTotal = GetBackpackRoubleTotalByLevel(botLevel, isPmc); AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.Backpack, @@ -325,7 +325,7 @@ public class BotLootGenerator( // Vest { AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.Vest, @@ -345,7 +345,7 @@ public class BotLootGenerator( // Pockets AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.Pocket, @@ -368,7 +368,7 @@ public class BotLootGenerator( if (!isPmc || (isPmc && _pmcConfig.AddSecureContainerLootFromBotConfig)) { AddLootFromPool( - _botLootCacheService.GetLootFromCache( + botLootCacheService.GetLootFromCache( botRole, isPmc, LootCacheType.Secure, @@ -458,7 +458,7 @@ public class BotLootGenerator( { // surv12 AddLootFromPool( - new Dictionary { { "5d02797c86f774203f38e30a", 1 } }, + new Dictionary { { ItemTpl.MEDICAL_SURV12_FIELD_SURGICAL_KIT, 1 } }, [EquipmentSlots.SecuredContainer], 1, botInventory, @@ -470,7 +470,10 @@ public class BotLootGenerator( // AFAK AddLootFromPool( - new Dictionary { { "60098ad7c2240c0fe85c570a", 1 } }, + new Dictionary + { + { ItemTpl.MEDKIT_AFAK_TACTICAL_INDIVIDUAL_FIRST_AID_KIT, 1 }, + }, [EquipmentSlots.SecuredContainer], 10, botInventory, @@ -524,12 +527,12 @@ public class BotLootGenerator( return; } - var weightedItemTpl = _weightedRandomHelper.GetWeightedValue(pool); - var (key, itemToAddTemplate) = _itemHelper.GetItem(weightedItemTpl); + var weightedItemTpl = weightedRandomHelper.GetWeightedValue(pool); + var (key, itemToAddTemplate) = itemHelper.GetItem(weightedItemTpl); if (!key) { - _logger.Warning( + logger.Warning( $"Unable to process item tpl: {weightedItemTpl} for slots: {equipmentSlots} on bot: {botRole}" ); @@ -555,7 +558,7 @@ public class BotLootGenerator( { Id = newRootItemId, Template = itemToAddTemplate?.Id ?? string.Empty, - Upd = _botGeneratorHelper.GenerateExtraPropertiesForItem( + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( itemToAddTemplate, botRole ), @@ -565,7 +568,7 @@ public class BotLootGenerator( // Is Simple-Wallet / WZ wallet if (_botConfig.WalletLoot.WalletTplPool.Contains(weightedItemTpl)) { - var addCurrencyToWallet = _randomUtil.GetChance100( + var addCurrencyToWallet = randomUtil.GetChance100( _botConfig.WalletLoot.ChancePercent ); if (addCurrencyToWallet) @@ -574,11 +577,11 @@ public class BotLootGenerator( var itemsToAdd = CreateWalletLoot(newRootItemId); // Get the container grid for the wallet - var containerGrid = _inventoryHelper.GetContainerSlotMap(weightedItemTpl); + var containerGrid = inventoryHelper.GetContainerSlotMap(weightedItemTpl); // Check if all the chosen currency items fit into wallet - var canAddToContainer = _inventoryHelper.CanPlaceItemsInContainer( - _cloner.Clone(containerGrid), // MUST clone grid before passing in as function modifies grid + var canAddToContainer = inventoryHelper.CanPlaceItemsInContainer( + cloner.Clone(containerGrid), // MUST clone grid before passing in as function modifies grid itemsToAdd ); if (canAddToContainer) @@ -586,7 +589,7 @@ public class BotLootGenerator( // Add each currency to wallet foreach (var itemToAdd in itemsToAdd) { - _inventoryHelper.PlaceItemInContainer( + inventoryHelper.PlaceItemInContainer( containerGrid, itemToAdd, itemWithChildrenToAdd[0].Id, @@ -603,7 +606,7 @@ public class BotLootGenerator( AddRequiredChildItemsToParent(itemToAddTemplate, itemWithChildrenToAdd, isPmc, botRole); // Attempt to add item to container(s) - var itemAddedResult = _botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( + var itemAddedResult = botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( equipmentSlots, newRootItemId, itemToAddTemplate.Id, @@ -618,9 +621,9 @@ public class BotLootGenerator( if (itemAddedResult == ItemAddedResult.NO_CONTAINERS) { // Bot has no container to put item in, exit - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Unable to add: {totalItemCount} items to bot as it lacks a container to include them" ); } @@ -631,9 +634,9 @@ public class BotLootGenerator( fitItemIntoContainerAttempts++; if (fitItemIntoContainerAttempts >= 4) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Failed placing item: {itemToAddTemplate.Id} - {itemToAddTemplate.Name}: {i} of: {totalItemCount} items into: {botRole} " + $"containers: {string.Join(",", equipmentSlots)}. Tried: {fitItemIntoContainerAttempts} " + $"times, reason: {itemAddedResult}, skipping" @@ -653,7 +656,7 @@ public class BotLootGenerator( // Stop adding items to bots pool if rolling total is over total limit if (totalValueLimitRub > 0) { - currentTotalRub += _handbookHelper.GetTemplatePrice(itemToAddTemplate.Id); + currentTotalRub += handbookHelper.GetTemplatePrice(itemToAddTemplate.Id); if (currentTotalRub > totalValueLimitRub) { break; @@ -672,14 +675,14 @@ public class BotLootGenerator( List> result = []; // Choose how many stacks of currency will be added to wallet - var itemCount = _randomUtil.GetInt( + var itemCount = randomUtil.GetInt( _botConfig.WalletLoot.ItemCount.Min, _botConfig.WalletLoot.ItemCount.Max ); for (var index = 0; index < itemCount; index++) { // Choose the size of the currency stack - default is 5k, 10k, 15k, 20k, 25k - var chosenStackCount = _weightedRandomHelper.GetWeightedValue( + var chosenStackCount = weightedRandomHelper.GetWeightedValue( _botConfig.WalletLoot.StackSizeWeight ); List items = @@ -687,7 +690,7 @@ public class BotLootGenerator( new() { Id = new MongoId(), - Template = _weightedRandomHelper.GetWeightedValue( + Template = weightedRandomHelper.GetWeightedValue( _botConfig.WalletLoot.CurrencyWeight ), ParentId = walletId, @@ -715,24 +718,24 @@ public class BotLootGenerator( ) { // Fill ammo box - if (_itemHelper.IsOfBaseclass(itemToAddTemplate.Id, BaseClasses.AMMO_BOX)) + if (itemHelper.IsOfBaseclass(itemToAddTemplate.Id, BaseClasses.AMMO_BOX)) { - _itemHelper.AddCartridgesToAmmoBox(itemToAddChildrenTo, itemToAddTemplate); + itemHelper.AddCartridgesToAmmoBox(itemToAddChildrenTo, itemToAddTemplate); } // Make money a stack - else if (_itemHelper.IsOfBaseclass(itemToAddTemplate.Id, BaseClasses.MONEY)) + else if (itemHelper.IsOfBaseclass(itemToAddTemplate.Id, BaseClasses.MONEY)) { RandomiseMoneyStackSize(botRole, itemToAddTemplate, itemToAddChildrenTo[0]); } // Make ammo a stack - else if (_itemHelper.IsOfBaseclass(itemToAddTemplate.Id, BaseClasses.AMMO)) + else if (itemHelper.IsOfBaseclass(itemToAddTemplate.Id, BaseClasses.AMMO)) { RandomiseAmmoStackSize(isPmc, itemToAddTemplate, itemToAddChildrenTo[0]); } // Must add soft inserts/plates - else if (_itemHelper.ItemRequiresSoftInserts(itemToAddTemplate.Id)) + else if (itemHelper.ItemRequiresSoftInserts(itemToAddTemplate.Id)) { - _itemHelper.AddChildSlotItems(itemToAddChildrenTo, itemToAddTemplate); + itemHelper.AddChildSlotItems(itemToAddChildrenTo, itemToAddTemplate); } } @@ -749,7 +752,7 @@ public class BotLootGenerator( /// /// public void AddLooseWeaponsToInventorySlot( - string sessionId, + MongoId sessionId, BotBaseInventory botInventory, EquipmentSlots equipmentSlot, BotTypeInventory? templateInventory, @@ -760,7 +763,7 @@ public class BotLootGenerator( HashSet? containersIdFull ) { - var chosenWeaponType = _randomUtil.GetArrayValue( + var chosenWeaponType = randomUtil.GetArrayValue( [ EquipmentSlots.FirstPrimaryWeapon.ToString(), EquipmentSlots.FirstPrimaryWeapon.ToString(), @@ -768,7 +771,7 @@ public class BotLootGenerator( EquipmentSlots.Holster.ToString(), ] ); - var randomisedWeaponCount = _randomUtil.GetInt( + var randomisedWeaponCount = randomUtil.GetInt( _pmcConfig.LooseWeaponInBackpackLootMinMax.Min, _pmcConfig.LooseWeaponInBackpackLootMinMax.Max ); @@ -780,7 +783,7 @@ public class BotLootGenerator( for (var i = 0; i < randomisedWeaponCount; i++) { - var generatedWeapon = _botWeaponGenerator.GenerateRandomWeapon( + var generatedWeapon = botWeaponGenerator.GenerateRandomWeapon( sessionId, chosenWeaponType, templateInventory, @@ -794,13 +797,13 @@ public class BotLootGenerator( var weaponRootItem = generatedWeapon.Weapon?.FirstOrDefault(); if (weaponRootItem is null) { - _logger.Error( + logger.Error( $"Generated loose weapon: {chosenWeaponType} for: {botRole} level: {botLevel} was null, skipping" ); continue; } - var result = _botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( + var result = botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( [equipmentSlot], weaponRootItem.Id, weaponRootItem.Template, @@ -811,9 +814,9 @@ public class BotLootGenerator( if (result != ItemAddedResult.SUCCESS) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Failed to add additional weapon: {weaponRootItem.Id} to bot backpack, reason: {result.ToString()}" ); } @@ -855,26 +858,26 @@ public class BotLootGenerator( } // Use tryAdd to see if it exists, and automatically add 1 - if (!itemSpawnLimits.CurrentLimits.TryAdd(idToCheckFor, 1)) - // if it does exist, come in here and increment - // Increment item count with this bot type + if (!itemSpawnLimits.CurrentLimits.TryAdd(idToCheckFor.Value, 1)) + // if it does exist, come in here and increment item count with this bot type { - itemSpawnLimits.CurrentLimits[idToCheckFor]++; + itemSpawnLimits.CurrentLimits[idToCheckFor.Value]++; } // Check if over limit - var currentLimitCount = itemSpawnLimits.CurrentLimits[idToCheckFor]; + var currentLimitCount = itemSpawnLimits.CurrentLimits[idToCheckFor.Value]; if ( - itemSpawnLimits.CurrentLimits[idToCheckFor] > itemSpawnLimits.GlobalLimits[idToCheckFor] + itemSpawnLimits.CurrentLimits[idToCheckFor.Value] + > itemSpawnLimits.GlobalLimits[idToCheckFor.Value] ) { // Prevent edge-case of small loot pools + code trying to add limited item over and over infinitely if (currentLimitCount > currentLimitCount * 10) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - _serverLocalisationService.GetText( + logger.Debug( + serverLocalisationService.GetText( "bot-item_spawn_limit_reached_skipping_item", new { @@ -911,10 +914,10 @@ public class BotLootGenerator( var currencyWeight = currencyWeights[moneyItem.Template]; - _itemHelper.AddUpdObjectToItem(moneyItem); + itemHelper.AddUpdObjectToItem(moneyItem); moneyItem.Upd.StackObjectsCount = int.Parse( - _weightedRandomHelper.GetWeightedValue(currencyWeight) + weightedRandomHelper.GetWeightedValue(currencyWeight) ); } @@ -926,8 +929,8 @@ public class BotLootGenerator( /// Ammo item to randomise public void RandomiseAmmoStackSize(bool isPmc, TemplateItem itemTemplate, Item ammoItem) { - var randomSize = _itemHelper.GetRandomisedAmmoStackSize(itemTemplate); - _itemHelper.AddUpdObjectToItem(ammoItem); + var randomSize = itemHelper.GetRandomisedAmmoStackSize(itemTemplate); + itemHelper.AddUpdObjectToItem(ammoItem); ammoItem.Upd.StackObjectsCount = randomSize; } @@ -938,9 +941,9 @@ public class BotLootGenerator( /// /// what role does the bot have /// Dictionary of tplIds and limit - public Dictionary GetItemSpawnLimitsForBotType(string botRole) + public Dictionary GetItemSpawnLimitsForBotType(string botRole) { - if (_botHelper.IsBotPmc(botRole)) + if (botHelper.IsBotPmc(botRole)) { return _botConfig.ItemSpawnLimits["pmc"]; } @@ -950,14 +953,14 @@ public class BotLootGenerator( return _botConfig.ItemSpawnLimits[botRole.ToLowerInvariant()]; } - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-unable_to_find_spawn_limits_fallback_to_defaults", botRole ) ); - return new Dictionary(); + return []; } /// @@ -966,9 +969,9 @@ public class BotLootGenerator( /// item we want to look for in spawn limits /// Limits to check for item /// id as string, otherwise undefined - public string? GetMatchingIdFromSpawnLimits( + public MongoId? GetMatchingIdFromSpawnLimits( TemplateItem itemTemplate, - Dictionary spawnLimits + Dictionary spawnLimits ) { if (spawnLimits.ContainsKey(itemTemplate.Id)) diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotWeaponGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotWeaponGenerator.cs index 73deb67d..51b0b977 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotWeaponGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotWeaponGenerator.cs @@ -19,29 +19,29 @@ namespace SPTarkov.Server.Core.Generators; [Injectable(InjectionType.Singleton)] public class BotWeaponGenerator( - ISptLogger _logger, - DatabaseService _databaseService, - ItemHelper _itemHelper, - WeightedRandomHelper _weightedRandomHelper, - BotGeneratorHelper _botGeneratorHelper, - RandomUtil _randomUtil, - BotWeaponGeneratorHelper _botWeaponGeneratorHelper, - BotWeaponModLimitService _botWeaponModLimitService, - BotEquipmentModGenerator _botEquipmentModGenerator, - ServerLocalisationService _serverLocalisationService, - RepairService _repairService, - ICloner _cloner, - ConfigServer _configServer, + ISptLogger logger, + DatabaseService databaseService, + ItemHelper itemHelper, + WeightedRandomHelper weightedRandomHelper, + BotGeneratorHelper botGeneratorHelper, + RandomUtil randomUtil, + BotWeaponGeneratorHelper botWeaponGeneratorHelper, + BotWeaponModLimitService botWeaponModLimitService, + BotEquipmentModGenerator botEquipmentModGenerator, + ServerLocalisationService serverLocalisationService, + RepairService repairService, + ICloner cloner, + ConfigServer configServer, IEnumerable inventoryMagGenComponents ) { protected const string _modMagazineSlotId = "mod_magazine"; - protected readonly BotConfig _botConfig = _configServer.GetConfig(); + protected readonly BotConfig _botConfig = configServer.GetConfig(); protected readonly IEnumerable _inventoryMagGenComponents = MagGenSetUp( inventoryMagGenComponents ); - protected readonly PmcConfig _pmcConfig = _configServer.GetConfig(); - protected readonly RepairConfig _repairConfig = _configServer.GetConfig(); + protected readonly PmcConfig _pmcConfig = configServer.GetConfig(); + protected readonly RepairConfig _repairConfig = configServer.GetConfig(); protected static List MagGenSetUp(IEnumerable components) { @@ -62,8 +62,8 @@ public class BotWeaponGenerator( /// Is weapon generated for a pmc /// /// GenerateWeaponResult object - public GenerateWeaponResult GenerateRandomWeapon( - string sessionId, + public GenerateWeaponResult? GenerateRandomWeapon( + MongoId sessionId, string equipmentSlot, BotTypeInventory botTemplateInventory, string weaponParentId, @@ -100,11 +100,11 @@ public class BotWeaponGenerator( { if (!Enum.TryParse(equipmentSlot, out EquipmentSlots key)) { - _logger.Error($"Unable to parse equipment slot: {equipmentSlot}"); + logger.Error($"Unable to parse equipment slot: {equipmentSlot}"); } var weaponPool = botTemplateInventory.Equipment[key]; - return _weightedRandomHelper.GetWeightedValue(weaponPool); + return weightedRandomHelper.GetWeightedValue(weaponPool); } /// @@ -121,8 +121,8 @@ public class BotWeaponGenerator( /// The level of the bot. /// GenerateWeaponResult object. public GenerateWeaponResult? GenerateWeaponByTpl( - string sessionId, - string weaponTpl, + MongoId sessionId, + MongoId weaponTpl, string slotName, BotTypeInventory botTemplateInventory, string weaponParentId, @@ -133,14 +133,12 @@ public class BotWeaponGenerator( ) { var modPool = botTemplateInventory.Mods; - var weaponItemTemplate = _itemHelper.GetItem(weaponTpl).Value; + var weaponItemTemplate = itemHelper.GetItem(weaponTpl).Value; if (weaponItemTemplate is null) { - _logger.Error( - _serverLocalisationService.GetText("bot-missing_item_template", weaponTpl) - ); - _logger.Error($"WeaponSlot -> {slotName}"); + logger.Error(serverLocalisationService.GetText("bot-missing_item_template", weaponTpl)); + logger.Error($"WeaponSlot -> {slotName}"); return null; } @@ -148,10 +146,10 @@ public class BotWeaponGenerator( // Find ammo to use when filling magazines/chamber if (botTemplateInventory.Ammo is null) { - _logger.Error( - _serverLocalisationService.GetText("bot-no_ammo_found_in_bot_json", botRole) + logger.Error( + serverLocalisationService.GetText("bot-no_ammo_found_in_bot_json", botRole) ); - _logger.Error(_serverLocalisationService.GetText("bot-generation_failed")); + logger.Error(serverLocalisationService.GetText("bot-generation_failed")); } var ammoTpl = GetWeightedCompatibleAmmo(botTemplateInventory.Ammo, weaponItemTemplate); @@ -166,20 +164,20 @@ public class BotWeaponGenerator( ); // Chance to add randomised weapon enhancement - if (isPmc && _randomUtil.GetChance100(_pmcConfig.WeaponHasEnhancementChancePercent)) + if (isPmc && randomUtil.GetChance100(_pmcConfig.WeaponHasEnhancementChancePercent)) // Add buff to weapon root { - _repairService.AddBuff(_repairConfig.RepairKit.Weapon, weaponWithModsArray[0]); + repairService.AddBuff(_repairConfig.RepairKit.Weapon, weaponWithModsArray[0]); } // Add mods to weapon base if (modPool.ContainsKey(weaponTpl)) { // Role to treat bot as e.g. pmc/scav/boss - var botEquipmentRole = _botGeneratorHelper.GetBotEquipmentRole(botRole); + var botEquipmentRole = botGeneratorHelper.GetBotEquipmentRole(botRole); // Different limits if bot is boss vs scav - var modLimits = _botWeaponModLimitService.GetWeaponModLimits(botEquipmentRole); + var modLimits = botWeaponModLimitService.GetWeaponModLimits(botEquipmentRole); GenerateWeaponRequest generateWeaponModsRequest = new() { @@ -199,7 +197,7 @@ public class BotWeaponGenerator( WeaponStats = new WeaponStats(), ConflictingItemTpls = [], }; - weaponWithModsArray = _botEquipmentModGenerator.GenerateModsForWeapon( + weaponWithModsArray = botEquipmentModGenerator.GenerateModsForWeapon( sessionId, generateWeaponModsRequest ); @@ -218,7 +216,7 @@ public class BotWeaponGenerator( ); } - var tempList = _cloner.Clone( + var tempList = cloner.Clone( weaponWithModsArray.Where(item => item.SlotId == _modMagazineSlotId) ); // Fill existing magazines to full and sync ammo type @@ -248,7 +246,7 @@ public class BotWeaponGenerator( string? ubglAmmoTpl = null; if (ubglMod is not null) { - var ubglTemplate = _itemHelper.GetItem(ubglMod.Template).Value; + var ubglTemplate = itemHelper.GetItem(ubglMod.Template).Value; ubglAmmoTpl = GetWeightedCompatibleAmmo(botTemplateInventory.Ammo, ubglTemplate); // this can be null - example - FollowerBoarClose2 can have an UBGL but doesn't have the ammo caliber defined in its json // the default ammo passed from GetWeightCompatibleAmmo can be null @@ -277,7 +275,7 @@ public class BotWeaponGenerator( /// Name of slots to create or add ammo to protected void AddCartridgeToChamber( List weaponWithModsList, - string ammoTemplate, + MongoId ammoTemplate, List chamberSlotIds ) { @@ -318,7 +316,7 @@ public class BotWeaponGenerator( /// For durability values /// Base weapon item in a list protected List ConstructWeaponBaseList( - string weaponTemplate, + MongoId weaponTemplate, string weaponParentId, string equipmentSlot, TemplateItem weaponItemTemplate, @@ -333,7 +331,7 @@ public class BotWeaponGenerator( Template = weaponTemplate, ParentId = weaponParentId, SlotId = equipmentSlot, - Upd = _botGeneratorHelper.GenerateExtraPropertiesForItem( + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( weaponItemTemplate, botRole ), @@ -351,7 +349,7 @@ public class BotWeaponGenerator( /// Bot role /// List of weapon mods protected List GetPresetWeaponMods( - string weaponTemplate, + MongoId weaponTemplate, string equipmentSlot, string weaponParentId, TemplateItem itemTemplate, @@ -359,8 +357,8 @@ public class BotWeaponGenerator( ) { // Invalid weapon generated, fallback to preset - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-weapon_generated_incorrect_using_default", $"{weaponTemplate} - {itemTemplate.Name}" ) @@ -369,11 +367,11 @@ public class BotWeaponGenerator( // TODO: Preset weapons trigger a lot of warnings regarding missing ammo in magazines & such Preset? preset = null; - foreach (var (_, itemPreset) in _databaseService.GetGlobals().ItemPresets) + foreach (var (_, itemPreset) in databaseService.GetGlobals().ItemPresets) { if (itemPreset.Items[0].Template == weaponTemplate) { - preset = _cloner.Clone(itemPreset); + preset = cloner.Clone(itemPreset); break; } @@ -384,7 +382,7 @@ public class BotWeaponGenerator( var parentItem = preset.Items[0]; parentItem.ParentId = weaponParentId; parentItem.SlotId = equipmentSlot; - parentItem.Upd = _botGeneratorHelper.GenerateExtraPropertiesForItem( + parentItem.Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( itemTemplate, botRole ); @@ -393,8 +391,8 @@ public class BotWeaponGenerator( } else { - _logger.Error( - _serverLocalisationService.GetText("bot-missing_weapon_preset", weaponTemplate) + logger.Error( + serverLocalisationService.GetText("bot-missing_weapon_preset", weaponTemplate) ); } @@ -411,7 +409,7 @@ public class BotWeaponGenerator( { foreach (var mod in weaponItemList) { - var modTemplate = _itemHelper.GetItem(mod.Template).Value; + var modTemplate = itemHelper.GetItem(mod.Template).Value; if (!modTemplate.Properties.Slots?.Any() ?? false) { continue; @@ -430,8 +428,8 @@ public class BotWeaponGenerator( ); if (!hasWeaponSlotItem) { - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-weapons_required_slot_missing_item", new { @@ -474,22 +472,22 @@ public class BotWeaponGenerator( botRole ); - var magTemplate = _itemHelper.GetItem(magazineTpl).Value; + var magTemplate = itemHelper.GetItem(magazineTpl.Value).Value; if (magTemplate is null) { - _logger.Error( - _serverLocalisationService.GetText("bot-unable_to_find_magazine_item", magazineTpl) + logger.Error( + serverLocalisationService.GetText("bot-unable_to_find_magazine_item", magazineTpl) ); return; } //var isInternalMag = magTemplate.Properties.ReloadMagType == ReloadMode.InternalMagazine; - var ammoTemplate = _itemHelper.GetItem(generatedWeaponResult.ChosenAmmoTemplate); + var ammoTemplate = itemHelper.GetItem(generatedWeaponResult.ChosenAmmoTemplate); if (!ammoTemplate.Key) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-unable_to_find_ammo_item", generatedWeaponResult.ChosenAmmoTemplate ) @@ -539,7 +537,7 @@ public class BotWeaponGenerator( { // Find ubgl mod item + get details of it from db var ubglMod = weaponMods.FirstOrDefault(x => x.SlotId == "mod_launcher"); - var ubglDbTemplate = _itemHelper.GetItem(ubglMod.Template).Value; + var ubglDbTemplate = itemHelper.GetItem(ubglMod.Template).Value; // Define min/max of how many grenades bot will have GenerationData ubglMinMax = new() @@ -549,7 +547,7 @@ public class BotWeaponGenerator( }; // get ammo template from db - var ubglAmmoDbTemplate = _itemHelper + var ubglAmmoDbTemplate = itemHelper .GetItem(generatedWeaponResult.ChosenUbglAmmoTemplate) .Value; @@ -578,7 +576,7 @@ public class BotWeaponGenerator( /// Player inventory. protected void AddAmmoToSecureContainer( int stackCount, - string ammoTpl, + MongoId ammoTpl, int stackSize, BotBaseInventory inventory ) @@ -586,7 +584,7 @@ public class BotWeaponGenerator( for (var i = 0; i < stackCount; i++) { var id = new MongoId(); - _botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( + botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( new HashSet { EquipmentSlots.SecuredContainer }, id, ammoTpl, @@ -611,7 +609,7 @@ public class BotWeaponGenerator( /// Weapon to get magazine template for. /// The bot type we are getting the magazine for. /// Magazine template string. - protected string GetMagazineTemplateFromWeaponTemplate( + protected MongoId? GetMagazineTemplateFromWeaponTemplate( List weaponMods, TemplateItem weaponTemplate, string botRole @@ -631,8 +629,8 @@ public class BotWeaponGenerator( if (!weaponTemplate.Properties.IsChamberLoad ?? false) // Shouldn't happen { - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "bot-weapon_missing_magazine_or_chamber", new { weaponId = weaponTemplate.Id, botRole } ) @@ -641,9 +639,9 @@ public class BotWeaponGenerator( var defaultMagTplId = weaponTemplate.GetWeaponsDefaultMagazineTpl(); - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"[{botRole}] Unable to find magazine for weapon: {weaponTemplate.Id} {weaponTemplate.Name}, using mag template default: {defaultMagTplId}." ); } @@ -671,10 +669,10 @@ public class BotWeaponGenerator( || cartridgePoolForWeapon?.Count == 0 ) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - _serverLocalisationService.GetText( + logger.Debug( + serverLocalisationService.GetText( "bot-no_caliber_data_for_weapon_falling_back_to_default", new { @@ -725,7 +723,7 @@ public class BotWeaponGenerator( } // Get the caliber data from the first compatible round in the magazine - var magazineCaliberData = _itemHelper + var magazineCaliberData = itemHelper .GetItem(compatibleCartridgesInMagazine.FirstOrDefault()) .Value.Properties.Caliber; cartridgePoolForWeapon = cartridgePool[magazineCaliberData]; @@ -745,7 +743,7 @@ public class BotWeaponGenerator( } } - return _weightedRandomHelper.GetWeightedValue(compatibleCartridges); + return weightedRandomHelper.GetWeightedValue(compatibleCartridges); } /// @@ -792,7 +790,7 @@ public class BotWeaponGenerator( return []; } - var magazineTemplate = _itemHelper.GetItem( + var magazineTemplate = itemHelper.GetItem( magazineSlot.Props?.Filters.FirstOrDefault()?.Filter?.FirstOrDefault() ?? new MongoId(null) ); @@ -837,7 +835,7 @@ public class BotWeaponGenerator( if (!string.IsNullOrEmpty(weaponTemplate.Properties.LinkedWeapon)) { - var ammoInChamber = _itemHelper.GetItem( + var ammoInChamber = itemHelper.GetItem( weaponTemplate.Properties.Chambers[0].Props.Filters[0].Filter.FirstOrDefault() ); return !ammoInChamber.Key ? null : ammoInChamber.Value.Properties.Caliber; @@ -855,14 +853,14 @@ public class BotWeaponGenerator( protected void FillExistingMagazines( List weaponMods, Item magazine, - string cartridgeTemplate + MongoId cartridgeTemplate ) { - var magazineTemplate = _itemHelper.GetItem(magazine.Template).Value; + var magazineTemplate = itemHelper.GetItem(magazine.Template).Value; if (magazineTemplate is null) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-unable_to_find_magazine_item", magazine.Template ) @@ -872,12 +870,12 @@ public class BotWeaponGenerator( } // Magazine, usually - var parentItem = _itemHelper.GetItem(magazineTemplate.Parent).Value; + var parentItem = itemHelper.GetItem(magazineTemplate.Parent).Value; // Revolver shotgun (MTs-255-12) uses a magazine with chambers, not cartridges ("camora_xxx") // Exchange of the camora ammo is not necessary we could also just check for stackSize > 0 here // and remove the else - if (_botWeaponGeneratorHelper.MagazineIsCylinderRelated(parentItem.Name)) + if (botWeaponGeneratorHelper.MagazineIsCylinderRelated(parentItem.Name)) { FillCamorasWithAmmo(weaponMods, magazine.Id, cartridgeTemplate); } @@ -898,7 +896,7 @@ public class BotWeaponGenerator( /// Weapon with children. /// Underbarrrel grenade launcher item. /// Grenade ammo template. - protected void FillUbgl(List weaponMods, Item ubglMod, string ubglAmmoTpl) + protected void FillUbgl(List weaponMods, Item ubglMod, MongoId ubglAmmoTpl) { weaponMods.Add( new Item @@ -922,7 +920,7 @@ public class BotWeaponGenerator( protected void AddOrUpdateMagazinesChildWithAmmo( List weaponWithMods, Item magazine, - string chosenAmmoTpl, + MongoId chosenAmmoTpl, TemplateItem magazineTemplate ) { @@ -939,7 +937,7 @@ public class BotWeaponGenerator( List magazineWithCartridges = [magazine]; // Add cartridges as children to above mag array - _itemHelper.FillMagazineWithCartridge( + itemHelper.FillMagazineWithCartridge( magazineWithCartridges, magazineTemplate, chosenAmmoTpl, @@ -950,7 +948,7 @@ public class BotWeaponGenerator( var magazineIndex = weaponWithMods.FindIndex(i => i.Id == magazine.Id); // magazineWithCartridges if (magazineIndex == -1) { - _logger.Error( + logger.Error( $"Unable to add cartridges: {chosenAmmoTpl} to magazine: {magazine.Id} as none found" ); @@ -969,7 +967,7 @@ public class BotWeaponGenerator( /// Weapon mods to find and update camora mod(s) from /// Magazine id to find and add to /// Ammo template id to hydrate with - protected void FillCamorasWithAmmo(List weaponMods, string magazineId, string ammoTpl) + protected void FillCamorasWithAmmo(List weaponMods, MongoId magazineId, MongoId ammoTpl) { // for CylinderMagazine we exchange the ammo in the "camoras". // This might not be necessary since we already filled the camoras with a random whitelisted and compatible ammo type, diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/CompletionQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/CompletionQuestGenerator.cs index a0311145..35ce1510 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/CompletionQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/CompletionQuestGenerator.cs @@ -40,7 +40,7 @@ public class CompletionQuestGenerator( /// /// quest type format for "Completion" (see assets/database/templates/repeatableQuests.json) public RepeatableQuest? Generate( - string sessionId, + MongoId sessionId, int pmcLevel, MongoId traderId, QuestTypePool questTypePool, @@ -289,7 +289,7 @@ public class CompletionQuestGenerator( /// Filtered item selection /// Budget in roubles /// Chosen item template Ids - protected List GenerateAvailableForFinish( + protected List GenerateAvailableForFinish( RepeatableQuest quest, Completion completionConfig, RepeatableQuestConfig repeatableConfig, @@ -299,7 +299,7 @@ public class CompletionQuestGenerator( { // Store the indexes of items we are asking player to supply var distinctItemsToRetrieveCount = randomUtil.GetInt(1, completionConfig.UniqueItemCount); - var chosenRequirementItemsTpls = new List(); + var chosenRequirementItemsTpls = new List(); var usedItemIndexes = new HashSet(); for (var i = 0; i < distinctItemsToRetrieveCount; i++) diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/EliminationQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/EliminationQuestGenerator.cs index a98462da..77540e58 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/EliminationQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/EliminationQuestGenerator.cs @@ -71,7 +71,7 @@ public class EliminationQuestGenerator( /// /// Object of quest type format for "Elimination" (see assets/database/templates/repeatableQuests.json) public RepeatableQuest? Generate( - string sessionId, + MongoId sessionId, int pmcLevel, MongoId traderId, QuestTypePool questTypePool, diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/ExplorationQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/ExplorationQuestGenerator.cs index 8ac2f873..8beb2e67 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/ExplorationQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/ExplorationQuestGenerator.cs @@ -44,7 +44,7 @@ public class ExplorationQuestGenerator( /// /// object of quest type format for "Exploration" (see assets/database/templates/repeatableQuests.json) public RepeatableQuest? Generate( - string sessionId, + MongoId sessionId, int pmcLevel, MongoId traderId, QuestTypePool questTypePool, diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/IRepeatableQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/IRepeatableQuestGenerator.cs index 641c2398..26968bfe 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/IRepeatableQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/IRepeatableQuestGenerator.cs @@ -8,7 +8,7 @@ namespace SPTarkov.Server.Core.Generators.RepeatableQuestGeneration; public interface IRepeatableQuestGenerator { public RepeatableQuest? Generate( - string sessionId, + MongoId sessionId, int pmcLevel, MongoId traderId, QuestTypePool questTypePool, diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/PickupQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/PickupQuestGenerator.cs index 0e48e8e5..b0ba4fd1 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/PickupQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/PickupQuestGenerator.cs @@ -24,9 +24,9 @@ public class PickupQuestGenerator( HashUtil hashUtil ) : IRepeatableQuestGenerator { - // TODO: This isn't really implemented well at all, what even is this. + // TODO: This isn't really implemented, not in the current pool. public RepeatableQuest? Generate( - string sessionId, + MongoId sessionId, int pmcLevel, MongoId traderId, QuestTypePool questTypePool, diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/RepeatableQuestRewardGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/RepeatableQuestRewardGenerator.cs index 88deb6cf..4ddccb51 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/RepeatableQuestRewardGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/RepeatableQuestRewardGenerator.cs @@ -64,7 +64,7 @@ public class RepeatableQuestRewardGenerator( MongoId traderId, RepeatableQuestConfig repeatableConfig, BaseQuestConfig eliminationConfig, - List? rewardTplBlacklist = null + List? rewardTplBlacklist = null ) { // Get vars to configure rewards with diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInvetoryMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInventoryMagGen.cs similarity index 80% rename from Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInvetoryMagGen.cs rename to Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInventoryMagGen.cs index 013d94cc..c5ecebaa 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInvetoryMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInventoryMagGen.cs @@ -6,9 +6,9 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Generators.WeaponGen.Implementations; [Injectable] -public class BarrelInvetoryMagGen( - RandomUtil _randomUtil, - BotWeaponGeneratorHelper _botWeaponGeneratorHelper +public class BarrelInventoryMagGen( + RandomUtil randomUtil, + BotWeaponGeneratorHelper botWeaponGeneratorHelper ) : InventoryMagGen, IInventoryMagGen { public int GetPriority() @@ -28,17 +28,17 @@ public class BarrelInvetoryMagGen( if (inventoryMagGen.GetAmmoTemplate().Properties.StackMaxRandom == 1) // Doesn't stack { - randomisedAmmoStackSize = _randomUtil.GetInt(3, 6); + randomisedAmmoStackSize = randomUtil.GetInt(3, 6); } else { - randomisedAmmoStackSize = _randomUtil.GetInt( + randomisedAmmoStackSize = randomUtil.GetInt( inventoryMagGen.GetAmmoTemplate().Properties.StackMinRandom.Value, inventoryMagGen.GetAmmoTemplate().Properties.StackMaxRandom.Value ); } - _botWeaponGeneratorHelper.AddAmmoIntoEquipmentSlots( + botWeaponGeneratorHelper.AddAmmoIntoEquipmentSlots( inventoryMagGen.GetAmmoTemplate().Id, (int)randomisedAmmoStackSize, inventoryMagGen.GetPmcInventory(), diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/ExternalInventoryMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/ExternalInventoryMagGen.cs index 3392c2d3..99368c61 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/ExternalInventoryMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/ExternalInventoryMagGen.cs @@ -1,6 +1,7 @@ using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Extensions; using SPTarkov.Server.Core.Helpers; +using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common.Tables; using SPTarkov.Server.Core.Models.Enums; using SPTarkov.Server.Core.Models.Utils; @@ -12,12 +13,12 @@ namespace SPTarkov.Server.Core.Generators.WeaponGen.Implementations; [Injectable] public class ExternalInventoryMagGen( - ISptLogger _logger, - ItemHelper _itemHelper, - ServerLocalisationService _serverLocalisationService, - BotWeaponGeneratorHelper _botWeaponGeneratorHelper, - BotGeneratorHelper _botGeneratorHelper, - RandomUtil _randomUtil + ISptLogger logger, + ItemHelper itemHelper, + ServerLocalisationService serverLocalisationService, + BotWeaponGeneratorHelper botWeaponGeneratorHelper, + BotGeneratorHelper botGeneratorHelper, + RandomUtil randomUtil ) : InventoryMagGen, IInventoryMagGen { public int GetPriority() @@ -39,22 +40,22 @@ public class ExternalInventoryMagGen( var magTemplate = inventoryMagGen.GetMagazineTemplate(); var magazineTpl = magTemplate.Id; var weapon = inventoryMagGen.GetWeaponTemplate(); - List attemptedMagBlacklist = []; + List attemptedMagBlacklist = []; var defaultMagazineTpl = weapon.GetWeaponsDefaultMagazineTpl(); - var isShotgun = _itemHelper.IsOfBaseclass(weapon.Id, BaseClasses.SHOTGUN); + var isShotgun = itemHelper.IsOfBaseclass(weapon.Id, BaseClasses.SHOTGUN); - var randomizedMagazineCount = _botWeaponGeneratorHelper.GetRandomizedMagazineCount( + var randomizedMagazineCount = botWeaponGeneratorHelper.GetRandomizedMagazineCount( inventoryMagGen.GetMagCount() ); for (var i = 0; i < randomizedMagazineCount; i++) { - var magazineWithAmmo = _botWeaponGeneratorHelper.CreateMagazineWithAmmo( + var magazineWithAmmo = botWeaponGeneratorHelper.CreateMagazineWithAmmo( magazineTpl, inventoryMagGen.GetAmmoTemplate().Id, magTemplate ); - var fitsIntoInventory = _botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( + var fitsIntoInventory = botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( [EquipmentSlots.TacticalVest, EquipmentSlots.Pockets], magazineWithAmmo[0].Id, magazineTpl, @@ -74,9 +75,9 @@ public class ExternalInventoryMagGen( // Prevent infinite loop by only allowing 5 attempts at fitting a magazine into inventory if (fitAttempts > 5) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Failed {fitAttempts} times to add magazine {magazineTpl} to bot inventory, stopping" ); } @@ -110,12 +111,12 @@ public class ExternalInventoryMagGen( } // Set chosen magazine tpl to the weapons default magazine tpl and try to fit into inventory next loop - magazineTpl = defaultMagazineTpl; - magTemplate = _itemHelper.GetItem(magazineTpl).Value; + magazineTpl = defaultMagazineTpl.Value; + magTemplate = itemHelper.GetItem(magazineTpl).Value; if (magTemplate is null) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "bot-unable_to_find_default_magazine_item", magazineTpl ) @@ -140,9 +141,9 @@ public class ExternalInventoryMagGen( break; } - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"Unable to add additional magazine into bot inventory: vest/pockets for weapon: {weapon.Name}, attempted: {fitAttempts} times. Reason: {fitsIntoInventory}" ); } @@ -174,12 +175,12 @@ public class ExternalInventoryMagGen( /// Blacklisted magazines /// Item of chosen magazine public TemplateItem? GetRandomExternalMagazineForInternalMagazineGun( - string weaponTpl, - List magazineBlacklist + MongoId weaponTpl, + List magazineBlacklist ) { // The mag Slot data for the weapon - var magSlot = _itemHelper + var magSlot = itemHelper .GetItem(weaponTpl) .Value.Properties.Slots.FirstOrDefault(x => x.Name == "mod_magazine"); if (magSlot is null) @@ -191,7 +192,7 @@ public class ExternalInventoryMagGen( var magazinePool = magSlot .Props.Filters[0] .Filter.Where(x => !magazineBlacklist.Contains(x)) - .Select(x => _itemHelper.GetItem(x).Value); + .Select(x => itemHelper.GetItem(x).Value); if (magazinePool is null) { return null; @@ -207,6 +208,6 @@ public class ExternalInventoryMagGen( } // Randomly chosen external magazine - return _randomUtil.GetArrayValue(externalMagazineOnlyPool); + return randomUtil.GetArrayValue(externalMagazineOnlyPool); } } diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/InternalMagazineInventoryMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/InternalMagazineInventoryMagGen.cs index 4767b80c..bed0238e 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/InternalMagazineInventoryMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/InternalMagazineInventoryMagGen.cs @@ -5,7 +5,7 @@ using SPTarkov.Server.Core.Models.Enums; namespace SPTarkov.Server.Core.Generators.WeaponGen.Implementations; [Injectable] -public class InternalMagazineInventoryMagGen(BotWeaponGeneratorHelper _botWeaponGeneratorHelper) +public class InternalMagazineInventoryMagGen(BotWeaponGeneratorHelper botWeaponGeneratorHelper) : InventoryMagGen, IInventoryMagGen { @@ -22,11 +22,11 @@ public class InternalMagazineInventoryMagGen(BotWeaponGeneratorHelper _botWeapon public void Process(InventoryMagGen inventoryMagGen) { - var bulletCount = _botWeaponGeneratorHelper.GetRandomizedBulletCount( + var bulletCount = botWeaponGeneratorHelper.GetRandomizedBulletCount( inventoryMagGen.GetMagCount(), inventoryMagGen.GetMagazineTemplate() ); - _botWeaponGeneratorHelper.AddAmmoIntoEquipmentSlots( + botWeaponGeneratorHelper.AddAmmoIntoEquipmentSlots( inventoryMagGen.GetAmmoTemplate().Id, (int)bulletCount, inventoryMagGen.GetPmcInventory(), diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/UbglExternalMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/UbglExternalMagGen.cs index 30c71db4..db8a4739 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/UbglExternalMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/UbglExternalMagGen.cs @@ -5,7 +5,7 @@ using SPTarkov.Server.Core.Models.Enums; namespace SPTarkov.Server.Core.Generators.WeaponGen.Implementations; [Injectable] -public class UbglExternalMagGen(BotWeaponGeneratorHelper _botWeaponGeneratorHelper) +public class UbglExternalMagGen(BotWeaponGeneratorHelper botWeaponGeneratorHelper) : InventoryMagGen, IInventoryMagGen { @@ -21,11 +21,11 @@ public class UbglExternalMagGen(BotWeaponGeneratorHelper _botWeaponGeneratorHelp public void Process(InventoryMagGen inventoryMagGen) { - var bulletCount = _botWeaponGeneratorHelper.GetRandomizedBulletCount( + var bulletCount = botWeaponGeneratorHelper.GetRandomizedBulletCount( inventoryMagGen.GetMagCount(), inventoryMagGen.GetMagazineTemplate() ); - _botWeaponGeneratorHelper.AddAmmoIntoEquipmentSlots( + botWeaponGeneratorHelper.AddAmmoIntoEquipmentSlots( inventoryMagGen.GetAmmoTemplate().Id, (int)bulletCount, inventoryMagGen.GetPmcInventory(), diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/InventoryMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/InventoryMagGen.cs index 361bb33f..48f2f184 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/InventoryMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/InventoryMagGen.cs @@ -6,11 +6,11 @@ namespace SPTarkov.Server.Core.Generators.WeaponGen; [Injectable] public class InventoryMagGen() { - private readonly TemplateItem _ammoTemplate; - private readonly TemplateItem _magazineTemplate; - private readonly GenerationData _magCounts; - private readonly BotBaseInventory _pmcInventory; - private readonly TemplateItem _weaponTemplate; + private readonly TemplateItem? _ammoTemplate; + private readonly TemplateItem? _magazineTemplate; + private readonly GenerationData? _magCounts; + private readonly BotBaseInventory? _pmcInventory; + private readonly TemplateItem? _weaponTemplate; public InventoryMagGen( GenerationData magCounts, @@ -30,26 +30,26 @@ public class InventoryMagGen() public GenerationData GetMagCount() { - return _magCounts; + return _magCounts!; } public TemplateItem GetMagazineTemplate() { - return _magazineTemplate; + return _magazineTemplate!; } public TemplateItem GetWeaponTemplate() { - return _weaponTemplate; + return _weaponTemplate!; } public TemplateItem GetAmmoTemplate() { - return _ammoTemplate; + return _ammoTemplate!; } public BotBaseInventory GetPmcInventory() { - return _pmcInventory; + return _pmcInventory!; } } diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/GlobalTablesUsings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/GlobalTablesUsings.cs index 6ed99ea8..f750762b 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/GlobalTablesUsings.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/GlobalTablesUsings.cs @@ -3,7 +3,7 @@ global using GlobalAmmo = System.Collections.Generic.Dictionary< System.Collections.Generic.Dictionary >; global using GlobalMods = System.Collections.Generic.Dictionary< - string, + SPTarkov.Server.Core.Models.Common.MongoId, System.Collections.Generic.Dictionary< string, System.Collections.Generic.HashSet diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/TemplateItem.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/TemplateItem.cs index 0a84df98..a3217fcd 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/TemplateItem.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/TemplateItem.cs @@ -786,7 +786,7 @@ public record Props public bool? IsBoltCatch { get; set; } [JsonPropertyName("defMagType")] - public string? DefMagType { get; set; } + public MongoId? DefMagType { get; set; } [JsonPropertyName("defAmmo")] public string? DefAmmo { get; set; } diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/ItemSpawnLimitSettings.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/ItemSpawnLimitSettings.cs index 86e8fd9f..9be76131 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/ItemSpawnLimitSettings.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/ItemSpawnLimitSettings.cs @@ -1,4 +1,5 @@ using System.Text.Json.Serialization; +using SPTarkov.Server.Core.Models.Common; namespace SPTarkov.Server.Core.Models.Spt.Bots; @@ -8,8 +9,8 @@ public record ItemSpawnLimitSettings public Dictionary? ExtensionData { get; set; } [JsonPropertyName("currentLimits")] - public Dictionary? CurrentLimits { get; set; } + public Dictionary? CurrentLimits { get; set; } [JsonPropertyName("globalLimits")] - public Dictionary? GlobalLimits { get; set; } + public Dictionary? GlobalLimits { get; set; } } diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/BotConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/BotConfig.cs index cb3be53b..232ac256 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/BotConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/BotConfig.cs @@ -51,7 +51,7 @@ public record BotConfig : BaseConfig /// key: itemTpl: value: max item count> /// [JsonPropertyName("itemSpawnLimits")] - public required Dictionary> ItemSpawnLimits { get; set; } + public required Dictionary> ItemSpawnLimits { get; set; } /// /// Blacklist/whitelist items on a bot