From 448c258600d2c65b718648b6f4c9a4dfa2465c9d Mon Sep 17 00:00:00 2001 From: Cj <161484149+CJ-SPT@users.noreply.github.com> Date: Mon, 7 Jul 2025 04:46:51 -0400 Subject: [PATCH] update mongoIds, remove underscores from injections in generators (#460) --- .../Controllers/RagfairController.cs | 2 +- .../Generators/LootGenerator.cs | 160 +++++++++--------- .../Generators/PlayerScavGenerator.cs | 91 +++++----- .../Generators/RagfairOfferGenerator.cs | 38 ++--- .../Generators/ScavCaseRewardGenerator.cs | 94 +++++----- .../Generators/WeatherGenerator.cs | 44 ++--- .../Helpers/RagfairOfferHelper.cs | 8 +- .../Helpers/RagfairSortHelper.cs | 4 +- .../Models/Eft/Ragfair/RagfairOffer.cs | 9 +- .../Models/Spt/Config/PlayerScavConfig.cs | 2 +- .../Services/RagfairCategoriesService.cs | 2 +- .../Services/RagfairRequiredItemsService.cs | 6 +- 12 files changed, 224 insertions(+), 236 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs b/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs index d0723103..46e494e7 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs @@ -481,7 +481,7 @@ public class RagfairController foreach (var offer in offers) { // Exclude barter items, they tend to have outrageous equivalent prices - if (offer.Requirements.Any(req => !_paymentHelper.IsMoneyTpl(req.Template))) + if (offer.Requirements.Any(req => !_paymentHelper.IsMoneyTpl(req.TemplateId))) { continue; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/LootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/LootGenerator.cs index 685d5896..230419bf 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/LootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/LootGenerator.cs @@ -18,17 +18,17 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class LootGenerator( - ISptLogger _logger, - RandomUtil _randomUtil, - ItemHelper _itemHelper, - PresetHelper _presetHelper, - DatabaseService _databaseService, - ItemFilterService _itemFilterService, - ServerLocalisationService _serverLocalisationService, - WeightedRandomHelper _weightedRandomHelper, - RagfairLinkedItemService _ragfairLinkedItemService, - SeasonalEventService _seasonalEventService, - ICloner _cloner + ISptLogger logger, + RandomUtil randomUtil, + ItemHelper itemHelper, + PresetHelper presetHelper, + DatabaseService databaseService, + ItemFilterService itemFilterService, + ServerLocalisationService serverLocalisationService, + WeightedRandomHelper weightedRandomHelper, + RagfairLinkedItemService ragfairLinkedItemService, + SeasonalEventService seasonalEventService, + ICloner cloner ) { /// @@ -42,14 +42,14 @@ public class LootGenerator( var itemTypeCounts = InitItemLimitCounter(options.ItemLimits); // Handle sealed weapon containers - var sealedWeaponCrateCount = _randomUtil.GetInt( + var sealedWeaponCrateCount = randomUtil.GetInt( options.WeaponCrateCount.Min, options.WeaponCrateCount.Max ); if (sealedWeaponCrateCount > 0) { // Get list of all sealed containers from db - they're all the same, just for flavor - var itemsDb = _itemHelper.GetItems(); + var itemsDb = itemHelper.GetItems(); var sealedWeaponContainerPool = itemsDb.Where(item => item.Name.Contains("event_container_airdrop") ); @@ -57,7 +57,7 @@ public class LootGenerator( for (var index = 0; index < sealedWeaponCrateCount; index++) { // Choose one at random + add to results array - var chosenSealedContainer = _randomUtil.GetArrayValue(sealedWeaponContainerPool); + var chosenSealedContainer = randomUtil.GetArrayValue(sealedWeaponContainerPool); result.Add( [ new Item @@ -83,7 +83,7 @@ public class LootGenerator( // Pool has items we could add as loot, proceed if (rewardPoolResults.ItemPool.Count > 0) { - var randomisedItemCount = _randomUtil.GetInt( + var randomisedItemCount = randomUtil.GetInt( options.ItemCount.Min, options.ItemCount.Max ); @@ -104,17 +104,17 @@ public class LootGenerator( } } - var globalDefaultPresets = _presetHelper.GetDefaultPresets().Values; + var globalDefaultPresets = presetHelper.GetDefaultPresets().Values; // Filter default presets to just weapons - var randomisedWeaponPresetCount = _randomUtil.GetInt( + var randomisedWeaponPresetCount = randomUtil.GetInt( options.WeaponPresetCount.Min, options.WeaponPresetCount.Max ); if (randomisedWeaponPresetCount > 0) { var weaponDefaultPresets = globalDefaultPresets - .Where(preset => _itemHelper.IsOfBaseclass(preset.Encyclopedia, BaseClasses.WEAPON)) + .Where(preset => itemHelper.IsOfBaseclass(preset.Encyclopedia, BaseClasses.WEAPON)) .ToList(); if (weaponDefaultPresets.Any()) @@ -138,14 +138,14 @@ public class LootGenerator( } // Filter default presets to just armors and then filter again by protection level - var randomisedArmorPresetCount = _randomUtil.GetInt( + var randomisedArmorPresetCount = randomUtil.GetInt( options.ArmorPresetCount.Min, options.ArmorPresetCount.Max ); if (randomisedArmorPresetCount > 0) { var armorDefaultPresets = globalDefaultPresets.Where(preset => - _itemHelper.ArmorItemCanHoldMods(preset.Encyclopedia) + itemHelper.ArmorItemCanHoldMods(preset.Encyclopedia) ); var levelFilteredArmorPresets = armorDefaultPresets .Where(armor => IsArmorOfDesiredProtectionLevel(armor, options)) @@ -185,11 +185,11 @@ public class LootGenerator( { var result = new List>(); - var defaultPresets = _presetHelper.GetDefaultPresetsByTplKey(); + var defaultPresets = presetHelper.GetDefaultPresetsByTplKey(); foreach (var (itemTpl, details) in forcedLootToAdd) { // How many of this item we want - var randomisedItemCount = _randomUtil.GetInt(details.Min, details.Max); + var randomisedItemCount = randomUtil.GetInt(details.Min, details.Max); // Check if item being added has a preset and use that instead if (defaultPresets.ContainsKey(itemTpl)) @@ -201,7 +201,7 @@ public class LootGenerator( for (var i = 0; i < randomisedItemCount; i++) { // Clone preset and alter Ids to be unique - var presetWithUniqueIdsClone = _cloner + var presetWithUniqueIdsClone = cloner .Clone(preset.Items) .ReplaceIDs() .ToList(); @@ -221,7 +221,7 @@ public class LootGenerator( Template = itemTpl, Upd = new Upd { StackObjectsCount = randomisedItemCount, SpawnedInSession = true }, }; - var splitResults = _itemHelper.SplitStack(newLootItem); + var splitResults = itemHelper.SplitStack(newLootItem); foreach (var splitItem in splitResults) { // Add as separate lists @@ -249,20 +249,20 @@ public class LootGenerator( bool blockSeasonalItemsOutOfSeason ) { - var itemsDb = _databaseService.GetItems().Values; + var itemsDb = databaseService.GetItems().Values; var itemBlacklist = new HashSet(); - itemBlacklist.UnionWith([.. _itemFilterService.GetBlacklistedItems(), .. itemTplBlacklist]); + itemBlacklist.UnionWith([.. itemFilterService.GetBlacklistedItems(), .. itemTplBlacklist]); if (useRewardItemBlacklist) { - var rewardItemBlacklist = _itemFilterService.GetItemRewardBlacklist(); + var rewardItemBlacklist = itemFilterService.GetItemRewardBlacklist(); // Get all items that match the blacklisted types and fold into item blacklist - var itemTypeBlacklist = _itemFilterService.GetItemRewardBaseTypeBlacklist(); + var itemTypeBlacklist = itemFilterService.GetItemRewardBaseTypeBlacklist(); var itemsMatchingTypeBlacklist = itemsDb .Where(templateItem => !string.IsNullOrEmpty(templateItem.Parent)) // Ignore items without parents .Where(templateItem => - _itemHelper.IsOfBaseclasses(templateItem.Parent, itemTypeBlacklist) + itemHelper.IsOfBaseclasses(templateItem.Parent, itemTypeBlacklist) ) .Select(templateItem => templateItem.Id); @@ -271,12 +271,12 @@ public class LootGenerator( if (!allowBossItems) { - itemBlacklist.UnionWith(_itemFilterService.GetBossItems()); + itemBlacklist.UnionWith(itemFilterService.GetBossItems()); } if (blockSeasonalItemsOutOfSeason) { - itemBlacklist.UnionWith(_seasonalEventService.GetInactiveSeasonalEventItems()); + itemBlacklist.UnionWith(seasonalEventService.GetInactiveSeasonalEventItems()); } var items = itemsDb @@ -308,7 +308,7 @@ public class LootGenerator( continue; } - var armorDetails = _itemHelper.GetItem(armorItem.Template).Value; + var armorDetails = itemHelper.GetItem(armorItem.Template).Value; var armorClass = armorDetails.Properties.ArmorClass; return options.ArmorLevelWhitelist.Contains(armorClass.Value); @@ -352,7 +352,7 @@ public class LootGenerator( List> result ) { - var randomItem = _randomUtil.GetArrayValue(items); + var randomItem = randomUtil.GetArrayValue(items); var itemLimitCount = itemTypeCounts.TryGetValue( randomItem.Parent, @@ -364,7 +364,7 @@ public class LootGenerator( } // Skip armors as they need to come from presets - if (_itemHelper.ArmorItemCanHoldMods(randomItem.Id)) + if (itemHelper.ArmorItemCanHoldMods(randomItem.Id)) { return false; } @@ -412,7 +412,7 @@ public class LootGenerator( max = itemLimits.Max; } - return _randomUtil.GetInt(min ?? 1, max ?? 1); + return randomUtil.GetInt(min ?? 1, max ?? 1); } /// @@ -432,21 +432,21 @@ public class LootGenerator( { if (presetPool.Count == 0) { - _logger.Warning(_serverLocalisationService.GetText("loot-preset_pool_is_empty")); + logger.Warning(serverLocalisationService.GetText("loot-preset_pool_is_empty")); return false; } // Choose random preset and get details from item db using encyclopedia value (encyclopedia === tplId) - var chosenPreset = _randomUtil.GetArrayValue(presetPool); + var chosenPreset = randomUtil.GetArrayValue(presetPool); // No `_encyclopedia` property, not possible to reliably get root item tpl if (chosenPreset?.Encyclopedia is null) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "loot-chosen_preset_missing_encyclopedia_value", chosenPreset?.Id ) @@ -457,12 +457,12 @@ public class LootGenerator( } // Get preset root item db details via its `_encyclopedia` property - var itemDbDetails = _itemHelper.GetItem(chosenPreset.Encyclopedia); + var itemDbDetails = itemHelper.GetItem(chosenPreset.Encyclopedia); if (!itemDbDetails.Key) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"$Unable to find preset with tpl: {chosenPreset.Encyclopedia}, skipping" ); } @@ -479,8 +479,8 @@ public class LootGenerator( // Some custom mod items lack a parent property if (itemDbDetails.Value?.Parent is null) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "loot-item_missing_parentid", itemDbDetails.Value?.Name ) @@ -499,10 +499,10 @@ public class LootGenerator( return false; } - var presetAndModsClone = _cloner.Clone(chosenPreset.Items).ReplaceIDs().ToList(); + var presetAndModsClone = cloner.Clone(chosenPreset.Items).ReplaceIDs().ToList(); presetAndModsClone.RemapRootItemId(); - _itemHelper.SetFoundInRaid(presetAndModsClone); + itemHelper.SetFoundInRaid(presetAndModsClone); // Add chosen preset tpl to result array result.Add(presetAndModsClone); @@ -529,16 +529,16 @@ public class LootGenerator( List> itemsToReturn = []; // Choose a weapon to give to the player (weighted) - var chosenWeaponTpl = _weightedRandomHelper.GetWeightedValue( + var chosenWeaponTpl = weightedRandomHelper.GetWeightedValue( containerSettings.WeaponRewardWeight ); // Get itemDb details of weapon - var weaponDetailsDb = _itemHelper.GetItem(chosenWeaponTpl); + var weaponDetailsDb = itemHelper.GetItem(chosenWeaponTpl); if (!weaponDetailsDb.Key) { - _logger.Error( - _serverLocalisationService.GetText( + logger.Error( + serverLocalisationService.GetText( "loot-non_item_picked_as_sealed_weapon_crate_reward", chosenWeaponTpl ) @@ -549,32 +549,30 @@ public class LootGenerator( // Get weapon preset - default or choose a random one from globals.json preset pool var chosenWeaponPreset = containerSettings.DefaultPresetsOnly - ? _presetHelper.GetDefaultPreset(chosenWeaponTpl) - : _randomUtil.GetArrayValue(_presetHelper.GetPresets(chosenWeaponTpl)); + ? presetHelper.GetDefaultPreset(chosenWeaponTpl) + : randomUtil.GetArrayValue(presetHelper.GetPresets(chosenWeaponTpl)); // No default preset found for weapon, choose a random one if (chosenWeaponPreset is null) { - _logger.Warning( - _serverLocalisationService.GetText( + logger.Warning( + serverLocalisationService.GetText( "loot-default_preset_not_found_using_random", chosenWeaponTpl ) ); - chosenWeaponPreset = _randomUtil.GetArrayValue( - _presetHelper.GetPresets(chosenWeaponTpl) - ); + chosenWeaponPreset = randomUtil.GetArrayValue(presetHelper.GetPresets(chosenWeaponTpl)); } // Clean up Ids to ensure they're all unique and prevent collisions - var presetAndModsClone = _cloner.Clone(chosenWeaponPreset.Items).ReplaceIDs().ToList(); + var presetAndModsClone = cloner.Clone(chosenWeaponPreset.Items).ReplaceIDs().ToList(); presetAndModsClone.RemapRootItemId(); // Add preset to return object itemsToReturn.Add(presetAndModsClone); // Get a random collection of weapon mods related to chosen weapon and add them to result array - var linkedItemsToWeapon = _ragfairLinkedItemService.GetLinkedDbItems(chosenWeaponTpl); + var linkedItemsToWeapon = ragfairLinkedItemService.GetLinkedDbItems(chosenWeaponTpl); itemsToReturn.AddRange( GetSealedContainerWeaponModRewards( containerSettings, @@ -606,7 +604,7 @@ public class LootGenerator( foreach (var (rewardKey, settings) in containerSettings.RewardTypeLimits) { - var rewardCount = _randomUtil.GetInt(settings.Min, settings.Max); + var rewardCount = randomUtil.GetInt(settings.Min, settings.Max); if (rewardCount == 0) { continue; @@ -618,7 +616,7 @@ public class LootGenerator( // Get ammo boxes from db var ammoBoxesDetails = containerSettings.AmmoBoxWhitelist.Select(tpl => { - var itemDetails = _itemHelper.GetItem(tpl); + var itemDetails = itemHelper.GetItem(tpl); return itemDetails.Value; }); @@ -629,9 +627,9 @@ public class LootGenerator( ); if (!ammoBoxesMatchingCaliber.Any()) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug($"No ammo box with caliber {weaponCaliber} found, skipping"); + logger.Debug($"No ammo box with caliber {weaponCaliber} found, skipping"); } continue; @@ -639,12 +637,12 @@ public class LootGenerator( for (var index = 0; index < rewardCount; index++) { - var chosenAmmoBox = _randomUtil.GetArrayValue(ammoBoxesMatchingCaliber); + var chosenAmmoBox = randomUtil.GetArrayValue(ammoBoxesMatchingCaliber); var ammoBoxReward = new List { new() { Id = new MongoId(), Template = chosenAmmoBox.Id }, }; - _itemHelper.AddCartridgesToAmmoBox(ammoBoxReward, chosenAmmoBox); + itemHelper.AddCartridgesToAmmoBox(ammoBoxReward, chosenAmmoBox); rewards.Add(ammoBoxReward); } @@ -652,21 +650,21 @@ public class LootGenerator( } // Get all items of the desired type + not quest items + not globally blacklisted - var rewardItemPool = _databaseService + var rewardItemPool = databaseService .GetItems() .Values.Where(item => item.Parent == rewardKey && string.Equals(item.Type, "item", StringComparison.OrdinalIgnoreCase) - && _itemFilterService.IsItemBlacklisted(item.Id) - && !(containerSettings.AllowBossItems || _itemFilterService.IsBossItem(item.Id)) + && itemFilterService.IsItemBlacklisted(item.Id) + && !(containerSettings.AllowBossItems || itemFilterService.IsBossItem(item.Id)) && item.Properties.QuestItem is null ); if (!rewardItemPool.Any()) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug($"No items with base type of {rewardKey} found, skipping"); + logger.Debug($"No items with base type of {rewardKey} found, skipping"); } continue; @@ -675,7 +673,7 @@ public class LootGenerator( for (var index = 0; index < rewardCount; index++) { // Choose a random item from pool - var chosenRewardItem = _randomUtil.GetArrayValue(rewardItemPool); + var chosenRewardItem = randomUtil.GetArrayValue(rewardItemPool); var rewardItem = new List { new() { Id = new MongoId(), Template = chosenRewardItem.Id }, @@ -705,7 +703,7 @@ public class LootGenerator( foreach (var (rewardKey, settings) in containerSettings.WeaponModRewardLimits) { - var rewardCount = _randomUtil.GetInt(settings.Min, settings.Max); + var rewardCount = randomUtil.GetInt(settings.Min, settings.Max); // Nothing to add, skip reward type if (rewardCount == 0) @@ -715,13 +713,13 @@ public class LootGenerator( // Get items that fulfil reward type criteria from items that fit on gun var relatedItems = linkedItemsToWeapon?.Where(item => - item?.Parent == rewardKey && !_itemFilterService.IsItemBlacklisted(item.Id) + item?.Parent == rewardKey && !itemFilterService.IsItemBlacklisted(item.Id) ); if (relatedItems is null || !relatedItems.Any()) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( + logger.Debug( $"No items found to fulfil reward type: {rewardKey} for weapon: {chosenWeaponPreset.Name}, skipping type" ); } @@ -732,7 +730,7 @@ public class LootGenerator( // Find a random item of the desired type and add as reward for (var index = 0; index < rewardCount; index++) { - var chosenItem = _randomUtil.DrawRandomFromList(relatedItems.ToList()); + var chosenItem = randomUtil.DrawRandomFromList(relatedItems.ToList()); var reward = new List { new() { Id = new MongoId(), Template = chosenItem[0].Id }, @@ -760,9 +758,9 @@ public class LootGenerator( // Pick random reward from pool, add to request object var chosenRewardItemTpl = PickRewardItem(rewardContainerDetails); - if (_presetHelper.HasPreset(chosenRewardItemTpl)) + if (presetHelper.HasPreset(chosenRewardItemTpl)) { - var preset = _presetHelper.GetDefaultPreset(chosenRewardItemTpl); + var preset = presetHelper.GetDefaultPreset(chosenRewardItemTpl); // Ensure preset has unique ids and is cloned so we don't alter the preset data stored in memory var presetAndMods = preset.Items.ReplaceIDs().ToList(); @@ -792,10 +790,10 @@ public class LootGenerator( && rewardContainerDetails.RewardTplPool.Count > 0 ) { - return _weightedRandomHelper.GetWeightedValue(rewardContainerDetails.RewardTplPool); + return weightedRandomHelper.GetWeightedValue(rewardContainerDetails.RewardTplPool); } - return _randomUtil.GetArrayValue( + return randomUtil.GetArrayValue( GetItemRewardPool([], rewardContainerDetails.RewardTypePool, true, true, false) .ItemPool.Select(item => item.Id) ); diff --git a/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs index 6f458e2b..5f1b4dc7 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs @@ -20,25 +20,25 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class PlayerScavGenerator( - ISptLogger _logger, - RandomUtil _randomUtil, - DatabaseService _databaseService, - ItemHelper _itemHelper, - BotGeneratorHelper _botGeneratorHelper, - SaveServer _saveServer, - ProfileHelper _profileHelper, - BotHelper _botHelper, - FenceService _fenceService, - BotLootCacheService _botLootCacheService, - ServerLocalisationService _serverLocalisationService, - BotGenerator _botGenerator, - ConfigServer _configServer, - ICloner _cloner, - TimeUtil _timeUtil + ISptLogger logger, + RandomUtil randomUtil, + DatabaseService databaseService, + ItemHelper itemHelper, + BotGeneratorHelper botGeneratorHelper, + SaveServer saveServer, + ProfileHelper profileHelper, + BotHelper botHelper, + FenceService fenceService, + BotLootCacheService botLootCacheService, + ServerLocalisationService serverLocalisationService, + BotGenerator botGenerator, + ConfigServer configServer, + ICloner cloner, + TimeUtil timeUtil ) { protected readonly PlayerScavConfig _playerScavConfig = - _configServer.GetConfig(); + configServer.GetConfig(); /// /// Update a player profile to include a new player scav profile @@ -48,10 +48,10 @@ public class PlayerScavGenerator( public PmcData Generate(MongoId sessionID) { // get karma level from profile - var profile = _saveServer.GetProfile(sessionID); - var profileCharactersClone = _cloner.Clone(profile.CharacterData); - var pmcDataClone = _cloner.Clone(profileCharactersClone.PmcData); - var existingScavDataClone = _cloner.Clone(profileCharactersClone.ScavData); + var profile = saveServer.GetProfile(sessionID); + var profileCharactersClone = cloner.Clone(profile.CharacterData); + var pmcDataClone = cloner.Clone(profileCharactersClone.PmcData); + var existingScavDataClone = cloner.Clone(profileCharactersClone.ScavData); var scavKarmaLevel = pmcDataClone.GetScavKarmaLevel(); @@ -63,12 +63,12 @@ public class PlayerScavGenerator( ) ) { - _logger.Error( - _serverLocalisationService.GetText("scav-missing_karma_settings", scavKarmaLevel) + logger.Error( + serverLocalisationService.GetText("scav-missing_karma_settings", scavKarmaLevel) ); } - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { _logger.Debug($"Generated player scav load out with karma level: {scavKarmaLevel}"); } @@ -78,7 +78,7 @@ public class PlayerScavGenerator( AdjustBotTemplateWithKarmaSpecificSettings(playerScavKarmaSettings, baseBotNode); - var scavData = _botGenerator.GeneratePlayerScav( + var scavData = botGenerator.GeneratePlayerScav( sessionID, playerScavKarmaSettings.BotTypeForLoot.ToLowerInvariant(), "easy", @@ -87,7 +87,7 @@ public class PlayerScavGenerator( ); // Remove cached bot data after scav was generated - _botLootCacheService.ClearCache(); + botLootCacheService.ClearCache(); // Add scav metadata scavData.Savage = null; @@ -128,13 +128,13 @@ public class PlayerScavGenerator( ); // Remove secure container - scavData = _profileHelper.RemoveSecureContainer(scavData); + scavData = profileHelper.RemoveSecureContainer(scavData); // set cooldown timer scavData = SetScavCooldownTimer(scavData, pmcDataClone); // add scav to profile - _saveServer.GetProfile(sessionID).CharacterData.ScavData = scavData; + saveServer.GetProfile(sessionID).CharacterData.ScavData = scavData; return scavData; } @@ -146,27 +146,24 @@ public class PlayerScavGenerator( /// /// Possible slotIds to add loot to protected void AddAdditionalLootToPlayerScavContainers( - Dictionary possibleItemsToAdd, + Dictionary possibleItemsToAdd, BotBase scavData, HashSet containersToAddTo ) { foreach (var tpl in possibleItemsToAdd) { - var shouldAdd = _randomUtil.GetChance100(tpl.Value); + var shouldAdd = randomUtil.GetChance100(tpl.Value); if (!shouldAdd) { continue; } - var itemResult = _itemHelper.GetItem(tpl.Key); + var itemResult = itemHelper.GetItem(tpl.Key); if (!itemResult.Key) { - _logger.Warning( - _serverLocalisationService.GetText( - "scav-unable_to_add_item_to_player_scav", - tpl - ) + logger.Warning( + serverLocalisationService.GetText("scav-unable_to_add_item_to_player_scav", tpl) ); continue; } @@ -178,11 +175,11 @@ public class PlayerScavGenerator( { Id = new MongoId(), Template = itemTemplate.Id, - Upd = _botGeneratorHelper.GenerateExtraPropertiesForItem(itemTemplate), + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem(itemTemplate), }, }; - var result = _botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( + var result = botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( containersToAddTo, itemsToAdd[0].Id, itemTemplate.Id, @@ -192,9 +189,9 @@ public class PlayerScavGenerator( if (result != ItemAddedResult.SUCCESS) { - if (_logger.IsLogEnabled(LogLevel.Debug)) + if (logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug($"Unable to add keycard to bot. Reason: {result.ToString()}"); + logger.Debug($"Unable to add keycard to bot. Reason: {result.ToString()}"); } } } @@ -209,7 +206,7 @@ public class PlayerScavGenerator( protected BotType ConstructBotBaseTemplate(string botTypeForLoot) { const string baseScavType = "assault"; - var asssaultBase = _cloner.Clone(_botHelper.GetBotTemplate(baseScavType)); + var asssaultBase = cloner.Clone(botHelper.GetBotTemplate(baseScavType)); // Loot bot is same as base bot, return base with no modification if (botTypeForLoot == baseScavType) @@ -217,7 +214,7 @@ public class PlayerScavGenerator( return asssaultBase; } - var lootBase = _cloner.Clone(_botHelper.GetBotTemplate(botTypeForLoot)); + var lootBase = cloner.Clone(botHelper.GetBotTemplate(botTypeForLoot)); asssaultBase.BotInventory = lootBase.BotInventory; asssaultBase.BotChances = lootBase.BotChances; asssaultBase.BotGeneration = lootBase.BotGeneration; @@ -314,7 +311,7 @@ public class PlayerScavGenerator( case "specialItems": return botItemWeights.SpecialItems; default: - _logger.Error($"Subtype: {key} not found"); + logger.Error($"Subtype: {key} not found"); return null; } } @@ -387,7 +384,7 @@ public class PlayerScavGenerator( return scavProfile.Stats; } - return _profileHelper.GetDefaultCounters(); + return profileHelper.GetDefaultCounters(); } protected int GetScavLevel(PmcData scavProfile) @@ -428,14 +425,14 @@ public class PlayerScavGenerator( .Bonuses.Where(x => x.Type == BonusType.ScavCooldownTimer) .Sum(bonus => (bonus?.Value ?? 1) / 100); - var fenceInfo = _fenceService.GetFenceInfo(pmcData); + var fenceInfo = fenceService.GetFenceInfo(pmcData); modifier *= fenceInfo.SavageCooldownModifier ?? 1d; // Make sure to apply ScavCooldownTimer bonus from Hideout if the player has it. var scavLockDuration = - _databaseService.GetGlobals().Configuration.SavagePlayCooldown * modifier; + databaseService.GetGlobals().Configuration.SavagePlayCooldown * modifier; - var fullProfile = _profileHelper.GetFullProfile(pmcData?.SessionId); + var fullProfile = profileHelper.GetFullProfile(pmcData?.SessionId); if ( fullProfile?.ProfileInfo?.Edition?.StartsWith( AccountTypes.SPT_DEVELOPER, @@ -450,7 +447,7 @@ public class PlayerScavGenerator( if (scavData?.Info != null) { scavData.Info.SavageLockTime = Math.Round( - _timeUtil.GetTimeStamp() + (scavLockDuration ?? 0) + timeUtil.GetTimeStamp() + (scavLockDuration ?? 0) ); } diff --git a/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs index 39391472..b9291d5f 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs @@ -109,7 +109,7 @@ public class RagfairOfferGenerator( { var offerRequirement = new OfferRequirement { - Template = barter.Template, + TemplateId = barter.Template, Count = Math.Round(barter.Count.Value, 2), OnlyFunctional = barter.OnlyFunctional ?? false, }; @@ -230,9 +230,9 @@ public class RagfairOfferGenerator( var roublePrice = 0d; foreach (var requirement in offerRequirements) { - roublePrice += paymentHelper.IsMoneyTpl(requirement.Template) - ? Math.Round(CalculateRoublePrice(requirement.Count.Value, requirement.Template)) - : ragfairPriceService.GetFleaPriceForItem(requirement.Template) + roublePrice += paymentHelper.IsMoneyTpl(requirement.TemplateId) + ? Math.Round(CalculateRoublePrice(requirement.Count.Value, requirement.TemplateId)) + : ragfairPriceService.GetFleaPriceForItem(requirement.TemplateId) * requirement.Count.Value; // Get flea price for barter offer items } @@ -245,7 +245,7 @@ public class RagfairOfferGenerator( /// Is user we're getting avatar for a trader /// Persons id to get avatar of /// Url of avatar as String - protected string GetAvatarUrl(bool isTrader, string userId) + protected string GetAvatarUrl(bool isTrader, MongoId userId) { if (isTrader) { @@ -261,7 +261,7 @@ public class RagfairOfferGenerator( /// Amount of currency to convert into roubles /// Type of currency (euro/dollar/rouble) /// Count of roubles - protected double CalculateRoublePrice(double currencyCount, string currencyType) + protected double CalculateRoublePrice(double currencyCount, MongoId currencyType) { if (currencyType == Money.ROUBLES) { @@ -276,7 +276,7 @@ public class RagfairOfferGenerator( /// /// Users ID to check /// Users ID - protected string GetTraderId(string userId) + protected string GetTraderId(MongoId userId) { if (profileHelper.IsPlayer(userId)) { @@ -291,7 +291,7 @@ public class RagfairOfferGenerator( /// /// User to get flea rating of /// Flea rating value - protected double? GetRating(string userId) + protected double? GetRating(MongoId userId) { // Player offer if (profileHelper.IsPlayer(userId)) @@ -317,7 +317,7 @@ public class RagfairOfferGenerator( /// /// User to check rating of /// True if growing - protected bool GetRatingGrowing(string userID) + protected bool GetRatingGrowing(MongoId userID) { if (profileHelper.IsPlayer(userID)) // player offer @@ -344,7 +344,7 @@ public class RagfairOfferGenerator( /// ID of the offer owner /// Time the offer is posted in seconds /// Number of seconds until offer expires - protected long GetOfferEndTime(string userID, long time) + protected long GetOfferEndTime(MongoId userID, long time) { if (profileHelper.IsPlayer(userID)) { @@ -364,15 +364,13 @@ public class RagfairOfferGenerator( return (long)databaseService.GetTrader(userID).Base.NextResupply; } + var randomSpread = randomUtil.GetDouble( + ragfairConfig.Dynamic.EndTimeSeconds.Min, + ragfairConfig.Dynamic.EndTimeSeconds.Max + ); + // Generated fake-player offer - return (long) - Math.Round( - time - + randomUtil.GetDouble( - ragfairConfig.Dynamic.EndTimeSeconds.Min, - ragfairConfig.Dynamic.EndTimeSeconds.Max - ) - ); + return (long)Math.Round(time + randomSpread); } /// @@ -534,7 +532,7 @@ public class RagfairOfferGenerator( /// Raw DB item details /// Offer being created is to replace an expired, existing offer protected void CreateSingleOfferForItem( - string sellerId, + MongoId sellerId, List itemWithChildren, bool isPreset, TemplateItem itemToSellDetails, @@ -752,7 +750,7 @@ public class RagfairOfferGenerator( /// Item and mods, get condition of first item (only first array item is modified) /// DB details of first item protected void RandomiseOfferItemUpdProperties( - string userID, + MongoId userID, List itemWithMods, TemplateItem itemDetails ) diff --git a/Libraries/SPTarkov.Server.Core/Generators/ScavCaseRewardGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/ScavCaseRewardGenerator.cs index 9b95cf82..806afb3c 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/ScavCaseRewardGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/ScavCaseRewardGenerator.cs @@ -18,34 +18,34 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class ScavCaseRewardGenerator( - ISptLogger _logger, - RandomUtil _randomUtil, - ItemHelper _itemHelper, - PresetHelper _presetHelper, - DatabaseService _databaseService, - RagfairPriceService _ragfairPriceService, - SeasonalEventService _seasonalEventService, - ItemFilterService _itemFilterService, + ISptLogger logger, + RandomUtil randomUtil, + ItemHelper itemHelper, + PresetHelper presetHelper, + DatabaseService databaseService, + RagfairPriceService ragfairPriceService, + SeasonalEventService seasonalEventService, + ItemFilterService itemFilterService, ServerLocalisationService localisationService, - ConfigServer _configServer, - ICloner _cloner + ConfigServer configServer, + ICloner cloner ) { protected List _dbAmmoItemsCache = []; protected List _dbItemsCache = []; - protected readonly ScavCaseConfig _scavCaseConfig = _configServer.GetConfig(); + protected readonly ScavCaseConfig _scavCaseConfig = configServer.GetConfig(); /// /// Create an array of rewards that will be given to the player upon completing their scav case build /// /// recipe of the scav case craft /// Product array - public List> Generate(string recipeId) + public List> Generate(MongoId recipeId) { CacheDbItems(); // Get scavcase details from hideout/scavcase.json - var scavCaseDetails = _databaseService + var scavCaseDetails = databaseService .GetHideout() .Production.ScavRecipes.FirstOrDefault(r => r.Id == recipeId); var rewardItemCounts = GetScavCaseRewardCountsAndPrices(scavCaseDetails); @@ -107,10 +107,10 @@ public class ScavCaseRewardGenerator( protected void CacheDbItems() { // Get an array of seasonal items that should not be shown right now as seasonal event is not active - var inactiveSeasonalItems = _seasonalEventService.GetInactiveSeasonalEventItems(); + var inactiveSeasonalItems = seasonalEventService.GetInactiveSeasonalEventItems(); if (!_dbItemsCache.Any()) { - _dbItemsCache = _databaseService + _dbItemsCache = databaseService .GetItems() .Values.Where(item => { @@ -134,21 +134,21 @@ public class ScavCaseRewardGenerator( if ( item.Type != "Item" || _scavCaseConfig.RewardItemBlacklist.Contains(item.Id) - || _itemFilterService.IsItemBlacklisted(item.Id) + || itemFilterService.IsItemBlacklisted(item.Id) ) { return false; } // Globally reward-blacklisted - if (_itemFilterService.IsItemRewardBlacklisted(item.Id)) + if (itemFilterService.IsItemRewardBlacklisted(item.Id)) { return false; } if ( !_scavCaseConfig.AllowBossItemsAsRewards - && _itemFilterService.IsBossItem(item.Id) + && itemFilterService.IsBossItem(item.Id) ) { return false; @@ -156,7 +156,7 @@ public class ScavCaseRewardGenerator( // Skip item if parent id is blacklisted if ( - _itemHelper.IsOfBaseclasses( + itemHelper.IsOfBaseclasses( item.Id, _scavCaseConfig.RewardItemParentBlacklist ) @@ -177,7 +177,7 @@ public class ScavCaseRewardGenerator( if (!_dbAmmoItemsCache.Any()) { - _dbAmmoItemsCache = _databaseService + _dbAmmoItemsCache = databaseService .GetItems() .Values.Where(item => { @@ -193,7 +193,7 @@ public class ScavCaseRewardGenerator( } // Not ammo, skip - if (!_itemHelper.IsOfBaseclass(item.Id, BaseClasses.AMMO)) + if (!itemHelper.IsOfBaseclass(item.Id, BaseClasses.AMMO)) { return false; } @@ -201,21 +201,21 @@ public class ScavCaseRewardGenerator( // Skip item if item id is on blacklist if ( _scavCaseConfig.RewardItemBlacklist.Contains(item.Id) - || _itemFilterService.IsItemBlacklisted(item.Id) + || itemFilterService.IsItemBlacklisted(item.Id) ) { return false; } // Globally reward-blacklisted - if (_itemFilterService.IsItemRewardBlacklisted(item.Id)) + if (itemFilterService.IsItemRewardBlacklisted(item.Id)) { return false; } if ( !_scavCaseConfig.AllowBossItemsAsRewards - && _itemFilterService.IsBossItem(item.Id) + && itemFilterService.IsBossItem(item.Id) ) { return false; @@ -255,7 +255,7 @@ public class ScavCaseRewardGenerator( var rewardWasMoney = false; var rewardWasAmmo = false; - var randomCount = _randomUtil.GetInt((int)itemFilters.MinCount, (int)itemFilters.MaxCount); + var randomCount = randomUtil.GetInt((int)itemFilters.MinCount, (int)itemFilters.MaxCount); for (var i = 0; i < randomCount; i++) { if (RewardShouldBeMoney() && !rewardWasMoney) @@ -278,7 +278,7 @@ public class ScavCaseRewardGenerator( } else { - result.Add(_randomUtil.GetArrayValue(items)); + result.Add(randomUtil.GetArrayValue(items)); } } @@ -291,7 +291,7 @@ public class ScavCaseRewardGenerator( /// true if reward should be money protected bool RewardShouldBeMoney() { - return _randomUtil.GetChance100(_scavCaseConfig.MoneyRewards.MoneyRewardChancePercent); + return randomUtil.GetChance100(_scavCaseConfig.MoneyRewards.MoneyRewardChancePercent); } /// @@ -300,7 +300,7 @@ public class ScavCaseRewardGenerator( /// true if reward should be ammo protected bool RewardShouldBeAmmo() { - return _randomUtil.GetChance100(_scavCaseConfig.AmmoRewards.AmmoRewardChancePercent); + return randomUtil.GetChance100(_scavCaseConfig.AmmoRewards.AmmoRewardChancePercent); } /// @@ -309,13 +309,13 @@ public class ScavCaseRewardGenerator( protected TemplateItem GetRandomMoney() { List money = []; - var items = _databaseService.GetItems(); + var items = databaseService.GetItems(); money.Add(items[Money.ROUBLES]); money.Add(items[Money.EUROS]); money.Add(items[Money.DOLLARS]); money.Add(items[Money.GP]); - return _randomUtil.GetArrayValue(money); + return randomUtil.GetArrayValue(money); } /// @@ -328,7 +328,7 @@ public class ScavCaseRewardGenerator( var possibleAmmoPool = _dbAmmoItemsCache.Where(ammo => { // Is ammo handbook price between desired range - var handbookPrice = _ragfairPriceService.GetStaticPriceForItem(ammo.Id); + var handbookPrice = ragfairPriceService.GetStaticPriceForItem(ammo.Id); if ( _scavCaseConfig.AmmoRewards.AmmoRewardValueRangeRub.TryGetValue( rarity, @@ -347,13 +347,13 @@ public class ScavCaseRewardGenerator( if (!possibleAmmoPool.Any()) { // Filtered pool is empty - _logger.Warning( + logger.Warning( localisationService.GetText("scavcase-no_cartridges_found_matching_price") ); } // Get a random ammo and return it - return _randomUtil.GetArrayValue(possibleAmmoPool); + return randomUtil.GetArrayValue(possibleAmmoPool); } /// @@ -383,20 +383,20 @@ public class ScavCaseRewardGenerator( ]; var rootItem = resultItem.FirstOrDefault(); - if (_itemHelper.IsOfBaseclass(rewardItemDb.Id, BaseClasses.AMMO_BOX)) + if (itemHelper.IsOfBaseclass(rewardItemDb.Id, BaseClasses.AMMO_BOX)) { - _itemHelper.AddCartridgesToAmmoBox(resultItem, rewardItemDb); + itemHelper.AddCartridgesToAmmoBox(resultItem, rewardItemDb); } // Armor or weapon = use default preset from globals.json else if ( - _itemHelper.ArmorItemHasRemovableOrSoftInsertSlots(rewardItemDb.Id) - || _itemHelper.IsOfBaseclass(rewardItemDb.Id, BaseClasses.WEAPON) + itemHelper.ArmorItemHasRemovableOrSoftInsertSlots(rewardItemDb.Id) + || itemHelper.IsOfBaseclass(rewardItemDb.Id, BaseClasses.WEAPON) ) { - var preset = _presetHelper.GetDefaultPreset(rewardItemDb.Id); + var preset = presetHelper.GetDefaultPreset(rewardItemDb.Id); if (preset is null) { - _logger.Warning( + logger.Warning( $"No preset for item: {rewardItemDb.Id} {rewardItemDb.Name}, skipping" ); @@ -404,13 +404,13 @@ public class ScavCaseRewardGenerator( } // Ensure preset has unique ids and is cloned so we don't alter the preset data stored in memory - var presetAndMods = _cloner.Clone(preset.Items).ReplaceIDs().ToList(); + var presetAndMods = cloner.Clone(preset.Items).ReplaceIDs().ToList(); presetAndMods.RemapRootItemId(); resultItem = presetAndMods; } else if ( - _itemHelper.IsOfBaseclasses(rewardItemDb.Id, [BaseClasses.AMMO, BaseClasses.MONEY]) + itemHelper.IsOfBaseclasses(rewardItemDb.Id, [BaseClasses.AMMO, BaseClasses.MONEY]) ) { rootItem.Upd = new Upd @@ -438,7 +438,7 @@ public class ScavCaseRewardGenerator( return dbItems .Where(item => { - var handbookPrice = _ragfairPriceService.GetStaticPriceForItem(item.Id); + var handbookPrice = ragfairPriceService.GetStaticPriceForItem(item.Id); if ( handbookPrice >= itemFilters.MinPriceRub && handbookPrice <= itemFilters.MaxPriceRub @@ -519,7 +519,7 @@ public class ScavCaseRewardGenerator( /// value to set stack count to protected int GetRandomisedAmmoRewardStackSize(TemplateItem itemToCalculate) { - return _randomUtil.GetInt( + return randomUtil.GetInt( _scavCaseConfig.AmmoRewards.MinStackSize, itemToCalculate.Properties.StackMaxSize ?? 0 ); @@ -537,28 +537,28 @@ public class ScavCaseRewardGenerator( if (id == Money.ROUBLES) { - return _randomUtil.GetInt( + return randomUtil.GetInt( _scavCaseConfig.MoneyRewards.RubCount.GetByJsonProp>(rarity).Min, _scavCaseConfig.MoneyRewards.RubCount.GetByJsonProp>(rarity).Max ); } else if (id == Money.EUROS) { - return _randomUtil.GetInt( + return randomUtil.GetInt( _scavCaseConfig.MoneyRewards.EurCount.GetByJsonProp>(rarity).Min, _scavCaseConfig.MoneyRewards.EurCount.GetByJsonProp>(rarity).Max ); } else if (id == Money.DOLLARS) { - return _randomUtil.GetInt( + return randomUtil.GetInt( _scavCaseConfig.MoneyRewards.UsdCount.GetByJsonProp>(rarity).Min, _scavCaseConfig.MoneyRewards.UsdCount.GetByJsonProp>(rarity).Max ); } else if (id == Money.GP) { - return _randomUtil.GetInt( + return randomUtil.GetInt( _scavCaseConfig.MoneyRewards.GpCount.GetByJsonProp>(rarity).Min, _scavCaseConfig.MoneyRewards.GpCount.GetByJsonProp>(rarity).Max ); diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeatherGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/WeatherGenerator.cs index 7e017d20..f1a1a929 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeatherGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeatherGenerator.cs @@ -12,15 +12,15 @@ namespace SPTarkov.Server.Core.Generators; [Injectable] public class WeatherGenerator( - TimeUtil _timeUtil, - SeasonalEventService _seasonalEventService, - WeatherHelper _weatherHelper, - ConfigServer _configServer, - WeightedRandomHelper _weightedRandomHelper, - RandomUtil _randomUtil + TimeUtil timeUtil, + SeasonalEventService seasonalEventService, + WeatherHelper weatherHelper, + ConfigServer configServer, + WeightedRandomHelper weightedRandomHelper, + RandomUtil randomUtil ) { - protected readonly WeatherConfig _weatherConfig = _configServer.GetConfig(); + protected readonly WeatherConfig _weatherConfig = configServer.GetConfig(); /// /// Get current + raid datetime and format into correct BSG format. @@ -29,14 +29,14 @@ public class WeatherGenerator( /// WeatherData public void CalculateGameTime(WeatherData data) { - var computedDate = _timeUtil.GetDateTimeNow(); + var computedDate = timeUtil.GetDateTimeNow(); var formattedDate = computedDate.FormatToBsgDate(); data.Date = formattedDate; data.Time = GetBsgFormattedInRaidTime(); data.Acceleration = _weatherConfig.Acceleration; - data.Season = _seasonalEventService.GetActiveWeatherSeason(); + data.Season = seasonalEventService.GetActiveWeatherSeason(); } /// @@ -46,7 +46,7 @@ public class WeatherGenerator( /// Formatted time as String protected string GetBsgFormattedInRaidTime() { - return _weatherHelper.GetInRaidTime().GetBsgFormattedWeatherTime(); + return weatherHelper.GetInRaidTime().GetBsgFormattedWeatherTime(); } /// @@ -122,11 +122,11 @@ public class WeatherGenerator( { // Convert timestamp to date so we can get current hour and check if its day or night var currentRaidTime = new DateTime(inRaidTimestamp); - var minMax = _weatherHelper.IsHourAtNightTime(currentRaidTime.Hour) + var minMax = weatherHelper.IsHourAtNightTime(currentRaidTime.Hour) ? weather.Temp.Night : weather.Temp.Day; - return Math.Round(_randomUtil.GetDouble(minMax.Min, minMax.Max), 2); + return Math.Round(randomUtil.GetDouble(minMax.Min, minMax.Max), 2); } /// @@ -137,17 +137,17 @@ public class WeatherGenerator( protected void SetCurrentDateTime(Weather weather, long? timestamp = null) { var inRaidTime = timestamp is null - ? _weatherHelper.GetInRaidTime() - : _weatherHelper.GetInRaidTime(timestamp.Value); + ? weatherHelper.GetInRaidTime() + : weatherHelper.GetInRaidTime(timestamp.Value); var normalTime = inRaidTime.GetBsgFormattedWeatherTime(); var formattedDate = ( timestamp.HasValue - ? _timeUtil.GetDateTimeFromTimeStamp(timestamp.Value) + ? timeUtil.GetDateTimeFromTimeStamp(timestamp.Value) : DateTime.UtcNow ).FormatToBsgDate(); var datetimeBsgFormat = $"{formattedDate} {normalTime}"; - weather.Timestamp = timestamp ?? _timeUtil.GetTimeStamp(); // matches weather.date + weather.Timestamp = timestamp ?? timeUtil.GetTimeStamp(); // matches weather.date weather.Date = formattedDate; // matches weather.timestamp weather.Time = datetimeBsgFormat; // matches weather.timestamp weather.SptInRaidTimestamp = weather.Timestamp; @@ -155,37 +155,37 @@ public class WeatherGenerator( protected WindDirection GetWeightedWindDirection(SeasonalValues weather) { - return _weightedRandomHelper + return weightedRandomHelper .WeightedRandom(weather.WindDirection.Values, weather.WindDirection.Weights) .Item; } protected double GetWeightedClouds(SeasonalValues weather) { - return _weightedRandomHelper + return weightedRandomHelper .WeightedRandom(weather.Clouds.Values, weather.Clouds.Weights) .Item; } protected double GetWeightedWindSpeed(SeasonalValues weather) { - return _weightedRandomHelper + return weightedRandomHelper .WeightedRandom(weather.WindSpeed.Values, weather.WindSpeed.Weights) .Item; } protected double GetWeightedFog(SeasonalValues weather) { - return _weightedRandomHelper.WeightedRandom(weather.Fog.Values, weather.Fog.Weights).Item; + return weightedRandomHelper.WeightedRandom(weather.Fog.Values, weather.Fog.Weights).Item; } protected double GetWeightedRain(SeasonalValues weather) { - return _weightedRandomHelper.WeightedRandom(weather.Rain.Values, weather.Rain.Weights).Item; + return weightedRandomHelper.WeightedRandom(weather.Rain.Values, weather.Rain.Weights).Item; } protected double GetRandomDouble(double min, double max, int precision = 3) { - return Math.Round(_randomUtil.GetDouble(min, max), precision); + return Math.Round(randomUtil.GetDouble(min, max), precision); } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs index 1f7347d1..e1948fac 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs @@ -373,7 +373,7 @@ public class RagfairOfferHelper( var offerRootItem = offer.Items.FirstOrDefault(); // Currency offer is sold for - var moneyTypeTpl = offer.Requirements.FirstOrDefault().Template; + var moneyTypeTpl = offer.Requirements.FirstOrDefault().TemplateId; var isTraderOffer = databaseService.GetTraders().ContainsKey(offer.User.Id); if (!isTraderOffer && playerIsFleaBanned) @@ -392,7 +392,7 @@ public class RagfairOfferHelper( if ( !string.IsNullOrEmpty(searchRequest.NeededSearchId) && !offer.Requirements.Any(requirement => - requirement.Template == searchRequest.NeededSearchId + requirement.TemplateId == searchRequest.NeededSearchId ) ) { @@ -820,7 +820,7 @@ public class RagfairOfferHelper( var requestedItem = new Item { Id = new MongoId(), - Template = requirement.Template, + Template = requirement.TemplateId, Upd = new Upd { StackObjectsCount = requirement.Count * boughtAmount }, }; @@ -939,7 +939,7 @@ public class RagfairOfferHelper( { var isDefaultUserOffer = offer.User.MemberType == MemberCategory.Default; var offerRootItem = offer.Items.FirstOrDefault(); - var offerMoneyTypeTpl = offer.Requirements.FirstOrDefault().Template; + var offerMoneyTypeTpl = offer.Requirements.FirstOrDefault().TemplateId; if ( pmcData.Info.Level < databaseService.GetGlobals().Configuration.RagFair.MinUserLevel diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs index 6a954612..4d6331ac 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs @@ -66,11 +66,11 @@ public class RagfairSortHelper(LocaleService localeService) protected int SortOffersByBarter(RagfairOffer a, RagfairOffer b) { var aIsOnlyMoney = - a.Requirements.Count == 1 && Money.GetMoneyTpls().Contains(a.Requirements[0].Template) + a.Requirements.Count == 1 && Money.GetMoneyTpls().Contains(a.Requirements[0].TemplateId) ? 1 : 0; var bIsOnlyMoney = - b.Requirements.Count == 1 && Money.GetMoneyTpls().Contains(b.Requirements[0].Template) + b.Requirements.Count == 1 && Money.GetMoneyTpls().Contains(b.Requirements[0].TemplateId) ? 1 : 0; diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Ragfair/RagfairOffer.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Ragfair/RagfairOffer.cs index 31e368b5..43bbad0c 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Ragfair/RagfairOffer.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Ragfair/RagfairOffer.cs @@ -1,4 +1,5 @@ using System.Text.Json.Serialization; +using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common.Tables; using SPTarkov.Server.Core.Models.Enums; @@ -103,14 +104,8 @@ public record OfferRequirement [JsonExtensionData] public Dictionary? ExtensionData { get; set; } - private string? _tpl; - [JsonPropertyName("_tpl")] - public string? Template - { - get { return _tpl; } - set { _tpl = string.Intern(value); } - } + public required MongoId TemplateId { get; set; } [JsonPropertyName("count")] public double? Count { get; set; } diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/PlayerScavConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/PlayerScavConfig.cs index 9e1729e3..eb07f6ef 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/PlayerScavConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/PlayerScavConfig.cs @@ -35,7 +35,7 @@ public record KarmaLevel public double? LabsAccessCardChancePercent { get; set; } [JsonPropertyName("lootItemsToAddChancePercent")] - public required Dictionary LootItemsToAddChancePercent { get; set; } + public required Dictionary LootItemsToAddChancePercent { get; set; } } public record Modifiers diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairCategoriesService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairCategoriesService.cs index a3f13054..ac217c8e 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairCategoriesService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairCategoriesService.cs @@ -47,7 +47,7 @@ public class RagfairCategoriesService( && searchRequestData.RemoveBartering.GetValueOrDefault(false) && ( offer.Requirements.Count > 1 - || !paymentHelper.IsMoneyTpl(offer.Requirements.FirstOrDefault().Template) + || !paymentHelper.IsMoneyTpl(offer.Requirements.FirstOrDefault().TemplateId) ) ) { diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairRequiredItemsService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairRequiredItemsService.cs index eb633264..bedbb71f 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairRequiredItemsService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairRequiredItemsService.cs @@ -40,17 +40,17 @@ public class RagfairRequiredItemsService( foreach (var offer in ragfairOfferService.GetOffers()) foreach (var requirement in offer.Requirements) { - if (paymentHelper.IsMoneyTpl(requirement.Template)) + if (paymentHelper.IsMoneyTpl(requirement.TemplateId)) // This would just be too noisy { continue; } // Ensure key is init - _requiredItemsCache.TryAdd(requirement.Template, []); + _requiredItemsCache.TryAdd(requirement.TemplateId, []); // Add matching offer - _requiredItemsCache.GetValueOrDefault(requirement.Template)?.Add(offer.Id); + _requiredItemsCache.GetValueOrDefault(requirement.TemplateId)?.Add(offer.Id); } } }