diff --git a/Core/Helpers/BotGeneratorHelper.cs b/Core/Helpers/BotGeneratorHelper.cs index ca8365c3..d64621ba 100644 --- a/Core/Helpers/BotGeneratorHelper.cs +++ b/Core/Helpers/BotGeneratorHelper.cs @@ -13,47 +13,20 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class BotGeneratorHelper +public class BotGeneratorHelper( + ISptLogger _logger, + RandomUtil _randomUtil, + DurabilityLimitsHelper _durabilityLimitsHelper, + ItemHelper _itemHelper, + InventoryHelper _inventoryHelper, + ContainerHelper _containerHelper, + ApplicationContext _applicationContext, + LocalisationService _localisationService, + ConfigServer _configServer +) { - private readonly ISptLogger _logger; - private readonly RandomUtil _randomUtil; - private readonly DurabilityLimitsHelper _durabilityLimitsHelper; - private readonly ItemHelper _itemHelper; - private readonly InventoryHelper _inventoryHelper; - private readonly ContainerHelper _containerHelper; - private readonly ApplicationContext _applicationContext; - private readonly LocalisationService _localisationService; - private readonly ConfigServer _configServer; - - private readonly BotConfig _botConfig; - private readonly PmcConfig _pmcConfig; - - public BotGeneratorHelper - ( - ISptLogger logger, - RandomUtil randomUtil, - DurabilityLimitsHelper durabilityLimitsHelper, - ItemHelper itemHelper, - InventoryHelper inventoryHelper, - ContainerHelper containerHelper, - ApplicationContext applicationContext, - LocalisationService localisationService, - ConfigServer configServer - ) - { - _logger = logger; - _randomUtil = randomUtil; - _durabilityLimitsHelper = durabilityLimitsHelper; - _itemHelper = itemHelper; - _inventoryHelper = inventoryHelper; - _containerHelper = containerHelper; - _applicationContext = applicationContext; - _localisationService = localisationService; - _configServer = configServer; - - _botConfig = _configServer.GetConfig(); - _pmcConfig = _configServer.GetConfig(); - } + protected BotConfig _botConfig = _configServer.GetConfig(); + protected PmcConfig _pmcConfig = _configServer.GetConfig(); /// /// Adds properties to an item @@ -98,8 +71,8 @@ public class BotGeneratorHelper if (itemTemplate?.Properties?.WeapFireType?.Count == 0) { - itemProperties.FireMode = itemTemplate.Properties.WeapFireType.Contains("fullauto") - ? new UpdFireMode { FireMode = "fullauto" } + itemProperties.FireMode = itemTemplate.Properties.WeapFireType.Contains("fullauto") + ? new UpdFireMode { FireMode = "fullauto" } : new UpdFireMode { FireMode = _randomUtil.GetArrayValue(itemTemplate.Properties.WeapFireType) }; } @@ -159,7 +132,7 @@ public class BotGeneratorHelper // Togglable face shield if (!(itemTemplate?.Properties?.HasHinge ?? false) || !(itemTemplate.Properties.FaceShieldComponent ?? false)) return itemProperties; - + // Get chance from botconfig for bot type, use 75% if no value found var faceShieldActiveChance = GetBotEquipmentSettingFromConfig( botRole, diff --git a/Core/Helpers/BotHelper.cs b/Core/Helpers/BotHelper.cs index 49a38c0a..c9e3f16e 100644 --- a/Core/Helpers/BotHelper.cs +++ b/Core/Helpers/BotHelper.cs @@ -13,34 +13,17 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class BotHelper +public class BotHelper( + ISptLogger _logger, + DatabaseService _databaseService, + RandomUtil _randomUtil, + ConfigServer _configServer +) { - protected ISptLogger _logger; - protected DatabaseService _databaseService; - protected RandomUtil _randomUtil; - protected ConfigServer _configServer; - - protected BotConfig _botConfig; - protected PmcConfig _pmcConfig; - + protected BotConfig _botConfig = _configServer.GetConfig(); + protected PmcConfig _pmcConfig = _configServer.GetConfig(); protected List _pmcNames = ["usec", "bear", "pmc", "pmcbear", "pmcusec"]; - public BotHelper - ( - ISptLogger logger, - DatabaseService databaseService, - RandomUtil randomUtil, - ConfigServer configServer - ) - { - _logger = logger; - _databaseService = databaseService; - _randomUtil = randomUtil; - _configServer = configServer; - _botConfig = configServer.GetConfig(); - _pmcConfig = configServer.GetConfig(); - } - /// /// Get a template object for the specified botRole from bots.types db /// @@ -193,7 +176,7 @@ public class BotHelper { if (_pmcConfig.BearType.ToLower() == botRole.ToLower()) return "Bear"; - + if (_pmcConfig.UsecType.ToLower() == botRole.ToLower()) return "Usec"; @@ -220,8 +203,11 @@ public class BotHelper var randomType = (side is not null) ? side : (_randomUtil.GetInt(0, 1) == 0) ? "usec" : "bear"; var allNames = _databaseService.GetBots().Types[randomType.ToLower()].FirstNames; var filteredNames = allNames.Where((name) => name.Length <= maxLength); - if (filteredNames.Count() == 0) { - _logger.Warning($"Unable to filter: {randomType} PMC names to only those under: {maxLength}, none found that match that criteria, selecting from entire name pool instead`,\n"); + if (filteredNames.Count() == 0) + { + _logger.Warning( + $"Unable to filter: {randomType} PMC names to only those under: {maxLength}, none found that match that criteria, selecting from entire name pool instead`,\n" + ); return _randomUtil.GetStringCollectionValue(allNames); } diff --git a/Core/Helpers/BotWeaponGeneratorHelper.cs b/Core/Helpers/BotWeaponGeneratorHelper.cs index 60c9b557..c551fbca 100644 --- a/Core/Helpers/BotWeaponGeneratorHelper.cs +++ b/Core/Helpers/BotWeaponGeneratorHelper.cs @@ -10,41 +10,19 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class BotWeaponGeneratorHelper +public class BotWeaponGeneratorHelper( + ISptLogger _logger, + DatabaseServer _databaseServer, + ItemHelper _itemHelper, + RandomUtil _randomUtil, + HashUtil _hashUtil, + WeightedRandomHelper _weightedRandomHelper, + BotGeneratorHelper _botGeneratorHelper, + LocalisationService _localisationService +) { - private readonly ISptLogger _logger; - private readonly DatabaseServer _databaseServer; - private readonly ItemHelper _itemHelper; - private readonly RandomUtil _randomUtil; - private readonly HashUtil _hashUtil; - private readonly WeightedRandomHelper _weightedRandomHelper; - private readonly BotGeneratorHelper _botGeneratorHelper; - private readonly LocalisationService _localisationService; - private readonly List _magCheck = ["CylinderMagazine", "SpringDrivenCylinder"]; - public BotWeaponGeneratorHelper - ( - ISptLogger logger, - DatabaseServer databaseServer, - ItemHelper itemHelper, - RandomUtil randomUtil, - HashUtil hashUtil, - WeightedRandomHelper weightedRandomHelper, - BotGeneratorHelper botGeneratorHelper, - LocalisationService localisationService - ) - { - _logger = logger; - _databaseServer = databaseServer; - _itemHelper = itemHelper; - _randomUtil = randomUtil; - _hashUtil = hashUtil; - _weightedRandomHelper = weightedRandomHelper; - _botGeneratorHelper = botGeneratorHelper; - _localisationService = localisationService; - } - /// /// Get a randomized number of bullets for a specific magazine /// @@ -134,14 +112,18 @@ public class BotWeaponGeneratorHelper { if (equipmentSlotsToAddTo is null) equipmentSlotsToAddTo = [EquipmentSlots.TacticalVest, EquipmentSlots.Pockets]; - - var ammoItems = _itemHelper.SplitStack(new () { - Id = _hashUtil.Generate(), - Template = ammoTpl, - Upd = new () { StackObjectsCount = cartridgeCount }, - }); - foreach (var ammoItem in ammoItems) { + var ammoItems = _itemHelper.SplitStack( + new() + { + Id = _hashUtil.Generate(), + Template = ammoTpl, + Upd = new() { StackObjectsCount = cartridgeCount }, + } + ); + + foreach (var ammoItem in ammoItems) + { var result = _botGeneratorHelper.AddItemWithChildrenToEquipmentSlot( equipmentSlotsToAddTo, ammoItem.Id, @@ -150,10 +132,12 @@ public class BotWeaponGeneratorHelper inventory ); - if (result != ItemAddedResult.SUCCESS) { + if (result != ItemAddedResult.SUCCESS) + { _logger.Debug($"Unable to add ammo: {ammoItem.Template} to bot inventory, {result.ToString()}"); - if (result == ItemAddedResult.NO_SPACE || result == ItemAddedResult.NO_CONTAINERS) { + if (result == ItemAddedResult.NO_SPACE || result == ItemAddedResult.NO_CONTAINERS) + { // If there's no space for 1 stack or no containers to hold item, there's no space for the others break; } diff --git a/Core/Helpers/Dialogue/AbstractDialogChatBot.cs b/Core/Helpers/Dialogue/AbstractDialogChatBot.cs index 4bdfda59..6fd4498c 100644 --- a/Core/Helpers/Dialogue/AbstractDialogChatBot.cs +++ b/Core/Helpers/Dialogue/AbstractDialogChatBot.cs @@ -7,21 +7,13 @@ using Core.Services; namespace Core.Helpers.Dialogue; -public abstract class AbstractDialogChatBot : IDialogueChatBot +public abstract class AbstractDialogChatBot( + ISptLogger _logger, + MailSendService _mailSendService, + IEnumerable chatCommands +) : IDialogueChatBot { - protected ISptLogger _logger; - protected MailSendService _mailSendService; - private readonly List _chatCommands; - - public AbstractDialogChatBot( - ISptLogger logger, - MailSendService mailSendService, - IEnumerable chatCommands) - { - _logger = logger; - _mailSendService = mailSendService; - _chatCommands = chatCommands.ToList(); - } + protected List _chatCommands = chatCommands.ToList(); public abstract UserDialogInfo GetChatBot(); diff --git a/Core/Helpers/Dialogue/CommandoDialogChatBot.cs b/Core/Helpers/Dialogue/CommandoDialogChatBot.cs index 626e2970..061472ba 100644 --- a/Core/Helpers/Dialogue/CommandoDialogChatBot.cs +++ b/Core/Helpers/Dialogue/CommandoDialogChatBot.cs @@ -10,20 +10,14 @@ using Core.Services; namespace Core.Helpers.Dialogue; [Injectable] -public class CommandoDialogChatBot : AbstractDialogChatBot +public class CommandoDialogChatBot( + ISptLogger logger, + MailSendService mailSendService, + ConfigServer _configServer, + IEnumerable chatCommands +) : AbstractDialogChatBot(logger, mailSendService, chatCommands) { - protected ConfigServer _configServer; - protected CoreConfig _coreConfig; - - public CommandoDialogChatBot( - ISptLogger logger, - MailSendService mailSendService, - ConfigServer configServer, - IEnumerable chatCommands): base(logger, mailSendService, chatCommands) - { - _configServer = configServer; - _coreConfig = _configServer.GetConfig(); - } + protected CoreConfig _coreConfig = _configServer.GetConfig(); public override UserDialogInfo GetChatBot() { diff --git a/Core/Helpers/Dialogue/SptDialogueChatBot.cs b/Core/Helpers/Dialogue/SptDialogueChatBot.cs index c67ebad9..812f603c 100644 --- a/Core/Helpers/Dialogue/SptDialogueChatBot.cs +++ b/Core/Helpers/Dialogue/SptDialogueChatBot.cs @@ -11,24 +11,14 @@ using Core.Services; namespace Core.Helpers.Dialogue; [Injectable] -public class SptDialogueChatBot : AbstractDialogChatBot +public class SptDialogueChatBot( + ISptLogger _logger, + MailSendService mailSendService, + IEnumerable chatCommands, + ConfigServer configServer +) : AbstractDialogChatBot(_logger, mailSendService, chatCommands) { - protected ISptLogger _logger; - protected ConfigServer _configServer; - protected CoreConfig _coreConfig; - - public SptDialogueChatBot( - ISptLogger logger, - MailSendService mailSendService, - IEnumerable chatCommands, - ConfigServer configServer - ) : base(logger, mailSendService, chatCommands) - { - _logger = logger; - _configServer = configServer; - - _coreConfig = configServer.GetConfig(); - } + protected CoreConfig _coreConfig = configServer.GetConfig(); public override UserDialogInfo GetChatBot() { diff --git a/Core/Helpers/DialogueHelper.cs b/Core/Helpers/DialogueHelper.cs index 7415cfcf..6ad7f7c6 100644 --- a/Core/Helpers/DialogueHelper.cs +++ b/Core/Helpers/DialogueHelper.cs @@ -10,38 +10,17 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class DialogueHelper +public class DialogueHelper( + ISptLogger _logger, + HashUtil _hashUtil, + SaveServer _saveServer, + DatabaseServer _databaseServer, + NotifierHelper _notifierHelper, + NotificationSendHelper _notificationSendHelper, + LocalisationService _localisationService, + ItemHelper _itemHelper +) { - protected ISptLogger _logger; - protected HashUtil _hashUtil; - protected SaveServer _saveServer; - protected DatabaseServer _databaseServer; - protected NotifierHelper _notifierHelper; - protected NotificationSendHelper _notificationSendHelper; - protected LocalisationService _localisationService; - protected ItemHelper _itemHelper; - - public DialogueHelper - ( - ISptLogger logger, - HashUtil hashUtil, - SaveServer saveServer, - DatabaseServer databaseServer, - NotifierHelper notifierHelper, - NotificationSendHelper notificationSendHelper, - LocalisationService localisationService, - ItemHelper itemHelper - ) - { - _logger = logger; - _hashUtil = hashUtil; - _saveServer = saveServer; - _databaseServer = databaseServer; - _notifierHelper = notifierHelper; - _localisationService = localisationService; - _itemHelper = itemHelper; - } - /// /// Get the preview contents of the last message in a dialogue. /// @@ -58,13 +37,13 @@ public class DialogueHelper TemplateId = message?.TemplateId, UserId = dialogue?.Id }; - + if (message?.Text is not null) result.Text = message.Text; - + if (message?.SystemData is not null) result.SystemData = message?.SystemData; - + return result; } @@ -89,7 +68,7 @@ public class DialogueHelper var attachmentsNew = _saveServer.GetProfile(sessionID).DialogueRecords[dialogue.Key].AttachmentsNew; if (attachmentsNew > 0) _saveServer.GetProfile(sessionID).DialogueRecords[dialogue.Key].AttachmentsNew = attachmentsNew - 1; - + // Check reward count when item being moved isn't in reward list // If count is 0, it means after this move occurs the reward array will be empty and all rewards collected if (message.Items.Data is null) @@ -101,11 +80,11 @@ public class DialogueHelper message.RewardCollected = true; message.HasRewards = false; } - + return message.Items.Data; } } - + return new List(); } @@ -119,7 +98,7 @@ public class DialogueHelper var profile = _saveServer.GetProfile(sessionId); if (profile.DialogueRecords is null) profile.DialogueRecords = new(); - + return profile.DialogueRecords; } @@ -132,10 +111,10 @@ public class DialogueHelper { if (dialogue.Id == dialogueId) returnDialogue = dialogue; - + break; } - + return returnDialogue; } } diff --git a/Core/Helpers/HideoutHelper.cs b/Core/Helpers/HideoutHelper.cs index ea26eac3..4b8e255f 100644 --- a/Core/Helpers/HideoutHelper.cs +++ b/Core/Helpers/HideoutHelper.cs @@ -11,22 +11,12 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class HideoutHelper +public class HideoutHelper( + ISptLogger _logger, + TimeUtil _timeUtil, + LocalisationService _localisationService +) { - private readonly ISptLogger _logger; - protected TimeUtil _timeUtil; - private readonly LocalisationService _localisationService; - - public HideoutHelper( - ISptLogger logger, - TimeUtil timeUtil, - LocalisationService localisationService) - { - _logger = logger; - _timeUtil = timeUtil; - _localisationService = localisationService; - } - /// /// Add production to profiles' Hideout.Production array /// @@ -510,9 +500,8 @@ public class HideoutHelper continue; } - if (improvementDetails.Completed == false - && improvementDetails.ImproveCompleteTimestamp < _timeUtil.GetTimeStamp() - ) + if (improvementDetails.Completed == false && improvementDetails.ImproveCompleteTimestamp < _timeUtil.GetTimeStamp() + ) { improvementDetails.Completed = true; } diff --git a/Core/Helpers/HttpServerHelper.cs b/Core/Helpers/HttpServerHelper.cs index 5c185eb8..6f23ca96 100644 --- a/Core/Helpers/HttpServerHelper.cs +++ b/Core/Helpers/HttpServerHelper.cs @@ -7,9 +7,9 @@ using Core.Servers; namespace Core.Helpers; [Injectable(InjectionType.Singleton)] -public class HttpServerHelper +public class HttpServerHelper(ConfigServer configServer) { - protected HttpConfig _httpConfig; + protected HttpConfig _httpConfig = configServer.GetConfig(); protected Dictionary mime = new() { @@ -24,11 +24,6 @@ public class HttpServerHelper { "txt", "text/plain" } }; - public HttpServerHelper(ConfigServer configServer) - { - _httpConfig = configServer.GetConfig(); - } - public string GetMimeText(string key) { return mime[key]; diff --git a/Core/Helpers/InventoryHelper.cs b/Core/Helpers/InventoryHelper.cs index f76107c9..c29c1118 100644 --- a/Core/Helpers/InventoryHelper.cs +++ b/Core/Helpers/InventoryHelper.cs @@ -12,26 +12,13 @@ using Core.Services; namespace Core.Helpers; [Injectable] -public class InventoryHelper +public class InventoryHelper( + ISptLogger _logger, + ProfileHelper _profileHelper, + DialogueHelper _dialogueHelper, + LocalisationService _localisationService +) { - protected ISptLogger _logger; - protected ProfileHelper _profileHelper; - protected DialogueHelper _dialogueHelper; - protected LocalisationService _localisationService; - - public InventoryHelper( - ISptLogger logger, - ProfileHelper profileHelper, - DialogueHelper dialogueHelper, - LocalisationService localisationService - ) - { - _logger = logger; - _profileHelper = profileHelper; - _dialogueHelper = dialogueHelper; - _localisationService = localisationService; - } - /// /// Add multiple items to player stash (assuming they all fit) /// @@ -299,7 +286,8 @@ public class InventoryHelper // From and To types match, same inventory var movingToSameInventory = fromType == toType; - return new OwnerInventoryItems{ + return new OwnerInventoryItems + { From = fromInventoryItems, To = toInventoryItems, SameInventory = movingToSameInventory, @@ -391,24 +379,30 @@ public class InventoryHelper var matchingInventoryItem = inventoryItems.FirstOrDefault((item) => item.Id == moveRequest.Item); if (matchingInventoryItem is null) { - var noMatchingItemMesage = $"Unable to move item: { moveRequest.Item}, cannot find in inventory"; + var noMatchingItemMesage = $"Unable to move item: {moveRequest.Item}, cannot find in inventory"; _logger.Error(noMatchingItemMesage); errorMessage = noMatchingItemMesage; return false; } - _logger.Debug("${ moveRequest.Action} item: ${ moveRequest.item} from slotid: ${ matchingInventoryItem.slotId} to container: ${ moveRequest.to.container}"); + _logger.Debug( + "${ moveRequest.Action} item: ${ moveRequest.item} from slotid: ${ matchingInventoryItem.slotId} to container: ${ moveRequest.to.container}" + ); // Don't move shells from camora to cartridges (happens when loading shells into mts-255 revolver shotgun) if (matchingInventoryItem.SlotId?.Contains("camora_") is null && moveRequest.To.Container == "cartridges") { _logger.Warning( - _localisationService.GetText("inventory-invalid_move_to_container", - new { + _localisationService.GetText( + "inventory-invalid_move_to_container", + new + { slotId = matchingInventoryItem.SlotId, container = moveRequest.To.Container, - })); + } + ) + ); return true; } @@ -421,9 +415,11 @@ public class InventoryHelper UpdateFastPanelBinding(pmcData, matchingInventoryItem); // Item has location property, ensure its value is handled - if (moveRequest.To.Location is not null) { + if (moveRequest.To.Location is not null) + { matchingInventoryItem.Location = moveRequest.To.Location; - } else + } + else { // Moved from slot with location to one without, clean up if (matchingInventoryItem.Location is not null) @@ -443,7 +439,7 @@ public class InventoryHelper protected void UpdateFastPanelBinding(PmcData pmcData, Item itemBeingMoved) { // Find matching _id in fast panel - + if (!pmcData.Inventory.FastPanel.TryGetValue(itemBeingMoved.Id, out var fastPanelSlot)) { return; @@ -459,7 +455,8 @@ public class InventoryHelper // Reset fast panel value if item was moved to a container other than pocket/rig (cant be used from fastpanel) List slots = ["pockets", "tacticalvest"]; var wasMovedToFastPanelAccessibleContainer = slots.Contains( - itemParent?.SlotId?.ToLower() ?? ""); + itemParent?.SlotId?.ToLower() ?? "" + ); if (!wasMovedToFastPanelAccessibleContainer) { pmcData.Inventory.FastPanel[fastPanelSlot[0].ToString()] = ""; diff --git a/Core/Helpers/ItemHelper.cs b/Core/Helpers/ItemHelper.cs index 24250cc7..65cd4546 100644 --- a/Core/Helpers/ItemHelper.cs +++ b/Core/Helpers/ItemHelper.cs @@ -13,22 +13,22 @@ using Core.Utils.Cloners; namespace Core.Helpers; [Injectable] -public class ItemHelper +public class ItemHelper( + ISptLogger _logger, + HashUtil _hashUtil, + JsonUtil _jsonUtil, + RandomUtil _randomUtil, + MathUtil _mathUtil, + DatabaseService _databaseService, + HandbookHelper _handbookHelper, + ItemBaseClassService _itemBaseClassService, + ItemFilterService _itemFilterService, + LocalisationService _localisationService, + LocaleService _localeService, + CompareUtil _compareUtil, + ICloner _cloner +) { - protected ISptLogger _logger; - protected HashUtil _hashUtil; - protected JsonUtil _jsonUtil; - protected RandomUtil _randomUtil; - protected MathUtil _mathUtil; - protected DatabaseService _databaseService; - protected HandbookHelper _handbookHelper; - protected ItemBaseClassService _itemBaseClassService; - protected ItemFilterService _itemFilterService; - protected LocalisationService _localisationService; - protected LocaleService _localeService; - protected CompareUtil _compareUtil; - protected ICloner _cloner; - protected List _defaultInvalidBaseTypes = [ BaseClasses.LOOT_CONTAINER, @@ -58,38 +58,6 @@ public class ItemHelper EquipmentSlots.Scabbard.ToString() ]; - public ItemHelper - ( - ISptLogger logger, - HashUtil hashUtil, - JsonUtil jsonUtil, - RandomUtil randomUtil, - MathUtil mathUtil, - DatabaseService databaseService, - HandbookHelper handbookHelper, - ItemBaseClassService itemBaseClassService, - ItemFilterService itemFilterService, - LocalisationService localisationService, - LocaleService localeService, - CompareUtil compareUtil, - ICloner cloner - ) - { - _logger = logger; - _hashUtil = hashUtil; - _jsonUtil = jsonUtil; - _randomUtil = randomUtil; - _mathUtil = mathUtil; - _databaseService = databaseService; - _handbookHelper = handbookHelper; - _itemBaseClassService = itemBaseClassService; - _itemFilterService = itemFilterService; - _localisationService = localisationService; - _localeService = localeService; - _compareUtil = compareUtil; - _cloner = cloner; - } - /** * Does the provided pool of items contain the desired item * @param itemPool Item collection to check @@ -1836,29 +1804,34 @@ public class ItemHelper public List ReparentItemAndChildren(Item rootItem, List itemWithChildren) { var oldRootId = itemWithChildren[0].Id; - Dictionary idMappings = new (); + Dictionary idMappings = new(); idMappings[oldRootId] = rootItem.Id; - foreach (var mod in itemWithChildren) { - if (idMappings[mod.Id] is null) { + foreach (var mod in itemWithChildren) + { + if (idMappings[mod.Id] is null) + { idMappings[mod.Id] = _hashUtil.Generate(); } // Has parentId + no remapping exists for its parent - if (mod.ParentId is not null && idMappings[mod.ParentId] is null) { + if (mod.ParentId is not null && idMappings[mod.ParentId] is null) + { // Make remapping for items parentId idMappings[mod.ParentId] = _hashUtil.Generate(); } mod.Id = idMappings[mod.Id]; - if (mod.ParentId is not null) { + if (mod.ParentId is not null) + { mod.ParentId = idMappings[mod.ParentId]; } } // Force item's details into first location of presetItems - if (itemWithChildren[0].Template != rootItem.Template) { + if (itemWithChildren[0].Template != rootItem.Template) + { _logger.Warning($"Reassigning root item from {itemWithChildren[0].Template} to {rootItem.Template}"); } @@ -1878,19 +1851,22 @@ public class ItemHelper { newId = _hashUtil.Generate(); } - + var rootItemExistingId = itemWithChildren[0].Id; - foreach (var item in itemWithChildren) { + foreach (var item in itemWithChildren) + { // Root, update id - if (item.Id == rootItemExistingId) { + if (item.Id == rootItemExistingId) + { item.Id = newId; continue; } // Child with parent of root, update - if (item.ParentId == rootItemExistingId) { + if (item.ParentId == rootItemExistingId) + { item.ParentId = newId; } } @@ -1907,13 +1883,15 @@ public class ItemHelper // Returns Array of Items that have been adopted. public List AdoptOrphanedItems(string rootId, List items) { - foreach (var item in items) { + foreach (var item in items) + { // Check if the item's parent exists. var parentExists = items.Any((parentItem) => parentItem.Id == item.ParentId); // If the parent does not exist and the item is not already a 'hideout' item, adopt the orphaned item by // setting the parent ID to the PMCs inventory equipment ID, the slot ID to 'hideout', and remove the location. - if (!parentExists && item.ParentId != rootId && item.SlotId != "hideout") { + if (!parentExists && item.ParentId != rootId && item.SlotId != "hideout") + { item.ParentId = rootId; item.SlotId = "hideout"; item.Location = null; @@ -1929,10 +1907,12 @@ public class ItemHelper // Returns A Map where the keys are the item IDs and the values are the corresponding Item objects. public Dictionary GenerateItemsMap(List items) { - Dictionary itemsMap = new (); - foreach (var item in items) { + Dictionary itemsMap = new(); + foreach (var item in items) + { itemsMap.Add(item.Id, item); } + return itemsMap; } @@ -1942,10 +1922,12 @@ public class ItemHelper // Returns True when upd object was added public bool AddUpdObjectToItem(Item item, string warningMessageWhenMissing = null) { - if (item.Upd is null) { - item.Upd = new (); + if (item.Upd is null) + { + item.Upd = new(); - if (warningMessageWhenMissing is not null) { + if (warningMessageWhenMissing is not null) + { _logger.Debug(warningMessageWhenMissing); } @@ -1979,19 +1961,23 @@ public class ItemHelper public string? GetItemBaseType(string tpl, bool rootOnly = true) { var result = GetItem(tpl); - if (!result.Key) { + if (!result.Key) + { // Not an item return null; } var currentItem = result.Value; - while (currentItem is not null) { - if (currentItem.Type == "Node" && !rootOnly) { + while (currentItem is not null) + { + if (currentItem.Type == "Node" && !rootOnly) + { // Hit first base type return currentItem.Id; } - if (currentItem.Parent is null) { + if (currentItem.Parent is null) + { // No parent, reached root return currentItem.Id; } @@ -2007,8 +1993,10 @@ public class ItemHelper // Items to update FiR status of public void RemoveSpawnedInSessionPropertyFromItems(List items) { - foreach (var item in items) { - if (item.Upd is not null) { + foreach (var item in items) + { + if (item.Upd is not null) + { item.Upd.SpawnedInSession = null; } } diff --git a/Core/Helpers/NotificationSendHelper.cs b/Core/Helpers/NotificationSendHelper.cs index 24bd88df..6d9467aa 100644 --- a/Core/Helpers/NotificationSendHelper.cs +++ b/Core/Helpers/NotificationSendHelper.cs @@ -10,26 +10,13 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class NotificationSendHelper +public class NotificationSendHelper( + IWebSocketConnectionHandler _sptWebSocketConnectionHandler, + HashUtil _hashUtil, + SaveServer _saveServer, + NotificationService _notificationService +) { - private readonly IWebSocketConnectionHandler _sptWebSocketConnectionHandler; - private readonly HashUtil _hashUtil; - private readonly SaveServer _saveServer; - private readonly NotificationService _notificationService; - - public NotificationSendHelper( - IWebSocketConnectionHandler sptWebSocketConnectionHandler, - HashUtil hashUtil, - SaveServer saveServer, - NotificationService notificationService - ) - { - _sptWebSocketConnectionHandler = sptWebSocketConnectionHandler; - _hashUtil = hashUtil; - _saveServer = saveServer; - _notificationService = notificationService; - } - /// /// Send notification message to the appropriate channel /// diff --git a/Core/Helpers/NotifierHelper.cs b/Core/Helpers/NotifierHelper.cs index d67f857b..2a0d4ab2 100644 --- a/Core/Helpers/NotifierHelper.cs +++ b/Core/Helpers/NotifierHelper.cs @@ -5,17 +5,9 @@ using Core.Models.Eft.Ws; namespace Core.Helpers; [Injectable(InjectionType.Singleton)] -public class NotifierHelper +public class NotifierHelper(HttpServerHelper _httpServerHelper) { - private readonly HttpServerHelper _httpServerHelper; protected WsPing ping = new WsPing(); - - public NotifierHelper( - HttpServerHelper httpServerHelper) - { - _httpServerHelper = httpServerHelper; - } - public WsNotificationEvent GetDefaultNotification() => ping; /** diff --git a/Core/Helpers/PaymentHelper.cs b/Core/Helpers/PaymentHelper.cs index 40ca5e68..3bf681e8 100644 --- a/Core/Helpers/PaymentHelper.cs +++ b/Core/Helpers/PaymentHelper.cs @@ -6,18 +6,9 @@ using Core.Servers; namespace Core.Helpers; [Injectable] -public class PaymentHelper +public class PaymentHelper(ConfigServer _configServer) { - protected ConfigServer _configServer; - protected InventoryConfig _inventoryConfig; - - public PaymentHelper( - ConfigServer configServer) - { - _configServer = configServer; - - _inventoryConfig = _configServer.GetConfig(); - } + protected InventoryConfig _inventoryConfig = _configServer.GetConfig(); /// /// Is the passed in tpl money (also checks custom currencies in inventoryConfig.customMoneyTpls) diff --git a/Core/Helpers/PresetHelper.cs b/Core/Helpers/PresetHelper.cs index b8b82f32..49a07cf2 100644 --- a/Core/Helpers/PresetHelper.cs +++ b/Core/Helpers/PresetHelper.cs @@ -7,28 +7,16 @@ using Core.Utils.Cloners; namespace Core.Helpers; [Injectable(InjectionType.Singleton)] -public class PresetHelper +public class PresetHelper( + DatabaseService _databaseService, + ItemHelper _itemHelper, + ICloner _cloner +) { - protected DatabaseService _databaseService; - protected ItemHelper _itemHelper; - protected ICloner _cloner; - protected Dictionary> _lookup = new(); protected Dictionary _defaultEquipmentPresets; protected Dictionary _defaultWeaponPresets; - public PresetHelper - ( - DatabaseService databaseService, - ItemHelper itemHelper, - ICloner cloner - ) - { - _databaseService = databaseService; - _itemHelper = itemHelper; - _cloner = cloner; - } - public void HydratePresetStore(Dictionary> input) { _lookup = input; @@ -55,9 +43,12 @@ public class PresetHelper if (_defaultWeaponPresets == null) { var tempPresets = _databaseService.GetGlobals().ItemPresets; - tempPresets = tempPresets.Where(p => - p.Value.Encyclopedia != null && - _itemHelper.IsOfBaseclass(p.Value.Encyclopedia, BaseClasses.WEAPON)).ToDictionary(); + tempPresets = tempPresets.Where( + p => + p.Value.Encyclopedia != null && + _itemHelper.IsOfBaseclass(p.Value.Encyclopedia, BaseClasses.WEAPON) + ) + .ToDictionary(); } return _defaultWeaponPresets; @@ -72,9 +63,12 @@ public class PresetHelper if (_defaultEquipmentPresets == null) { var tempPresets = _databaseService.GetGlobals().ItemPresets; - tempPresets = tempPresets.Where(p => - p.Value.Encyclopedia != null && - _itemHelper.ArmorItemCanHoldMods(p.Value.Encyclopedia)).ToDictionary(); + tempPresets = tempPresets.Where( + p => + p.Value.Encyclopedia != null && + _itemHelper.ArmorItemCanHoldMods(p.Value.Encyclopedia) + ) + .ToDictionary(); } return _defaultEquipmentPresets; @@ -98,7 +92,7 @@ public class PresetHelper public bool HasPreset(string templateId) { - return _lookup.ContainsKey(templateId) ; + return _lookup.ContainsKey(templateId); } public Preset GetPreset(string id) @@ -113,14 +107,16 @@ public class PresetHelper public List GetPresets(string templateId) { - if (!HasPreset(templateId)) { + if (!HasPreset(templateId)) + { return []; } List presets = []; var ids = _lookup[templateId]; - foreach (var id in ids) { + foreach (var id in ids) + { presets.Add(GetPreset(id)); } @@ -134,14 +130,17 @@ public class PresetHelper */ public Preset? GetDefaultPreset(string templateId) { - if (!HasPreset(templateId)) { + if (!HasPreset(templateId)) + { return null; } var allPresets = GetPresets(templateId); - foreach (var preset in allPresets) { - if (preset.Encyclopedia is not null) { + foreach (var preset in allPresets) + { + if (preset.Encyclopedia is not null) + { return preset; } } @@ -151,11 +150,14 @@ public class PresetHelper public string GetBaseItemTpl(string presetId) { - if (IsPreset(presetId)) { + if (IsPreset(presetId)) + { var preset = GetPreset(presetId); - foreach (var item in preset.Items) { - if (preset.Parent == item.Id) { + foreach (var item in preset.Items) + { + if (preset.Parent == item.Id) + { return item.Template; } } diff --git a/Core/Helpers/ProbabilityHelper.cs b/Core/Helpers/ProbabilityHelper.cs index 7a5a275d..a203cba8 100644 --- a/Core/Helpers/ProbabilityHelper.cs +++ b/Core/Helpers/ProbabilityHelper.cs @@ -5,22 +5,11 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class ProbabilityHelper +public class ProbabilityHelper( + ISptLogger _logger, + RandomUtil _randomUtil +) { - private readonly ISptLogger _logger; - private readonly RandomUtil _randomUtil; - - public ProbabilityHelper - ( - ISptLogger logger, - RandomUtil randomUtil - ) - { - _logger = logger; - _randomUtil = randomUtil; - } - - /// /// Chance to roll a number out of 100 /// diff --git a/Core/Helpers/ProfileHelper.cs b/Core/Helpers/ProfileHelper.cs index ddb4a999..19b8a365 100644 --- a/Core/Helpers/ProfileHelper.cs +++ b/Core/Helpers/ProfileHelper.cs @@ -13,44 +13,20 @@ using Core.Utils.Cloners; namespace Core.Helpers; [Injectable] -public class ProfileHelper +public class ProfileHelper( + ISptLogger _logger, + ICloner _cloner, + SaveServer _saveServer, + DatabaseService _databaseService, + Watermark _watermark, + ItemHelper _itemHelper, + TimeUtil _timeUtil, + LocalisationService _localisationService, + HashUtil _hashUtil, + ConfigServer _configServer +) { - protected ISptLogger _logger; - - protected ICloner _cloner; - protected SaveServer _saveServer; - protected DatabaseService _databaseService; - protected Watermark _watermark; - protected ItemHelper _itemHelper; - protected TimeUtil _timeUtil; - protected LocalisationService _localisationService; - protected InventoryConfig _inventoryConfig; - protected HashUtil _hashUtil; - - public ProfileHelper( - ISptLogger logger, - ICloner cloner, - SaveServer saveServer, - DatabaseService databaseService, - Watermark watermark, - ItemHelper itemHelper, - TimeUtil timeUtil, - LocalisationService localisationService, - HashUtil hashUtil, - ConfigServer configServer - ) - { - _logger = logger; - _cloner = cloner; - _saveServer = saveServer; - _databaseService = databaseService; - _watermark = watermark; - _itemHelper = itemHelper; - _timeUtil = timeUtil; - _localisationService = localisationService; - _hashUtil = hashUtil; - _inventoryConfig = configServer.GetConfig(); - } + protected InventoryConfig _inventoryConfig = _configServer.GetConfig(); /// /// Remove/reset a completed quest condtion from players profile quest data @@ -127,9 +103,12 @@ public class ProfileHelper var allProfiles = _saveServer.GetProfiles().Values; // Find a profile that doesn't have same session id but has same name - return allProfiles.Any(p => - ProfileHasInfoProperty(p) && !StringsMatch(p.ProfileInfo.ProfileId, sessionID) && // SessionIds dont match - StringsMatch(p.CharacterData.PmcData.Info.LowerNickname.ToLower(), nicknameRequest.Nickname.ToLower())); // Nicknames do + return allProfiles.Any( + p => + ProfileHasInfoProperty(p) && + !StringsMatch(p.ProfileInfo.ProfileId, sessionID) && // SessionIds dont match + StringsMatch(p.CharacterData.PmcData.Info.LowerNickname.ToLower(), nicknameRequest.Nickname.ToLower()) + ); // Nicknames do } protected bool ProfileHasInfoProperty(SptProfile profile) @@ -389,12 +368,14 @@ public class ProfileHelper } // Player has never received gift, make a new object - profileToUpdate.SptData.ReceivedGifts.Add(new() - { - GiftId = giftId, - TimestampLastAccepted = _timeUtil.GetTimeStamp(), - Current = 1 - }); + profileToUpdate.SptData.ReceivedGifts.Add( + new() + { + GiftId = giftId, + TimestampLastAccepted = _timeUtil.GetTimeStamp(), + Current = 1 + } + ); } /// @@ -539,15 +520,17 @@ public class ProfileHelper var existingBonus = profile?.Bonuses?.FirstOrDefault(b => b.Type == BonusType.StashRows); if (existingBonus != null) { - profile?.Bonuses?.Add(new() - { - Id = _hashUtil.Generate(), - Value = rowsToAdd, - Type = BonusType.StashRows, - IsPassive = true, - IsVisible = true, - IsProduction = false - }); + profile?.Bonuses?.Add( + new() + { + Id = _hashUtil.Generate(), + Value = rowsToAdd, + Type = BonusType.StashRows, + IsPassive = true, + IsVisible = true, + IsProduction = false + } + ); } else { @@ -706,7 +689,7 @@ public class ProfileHelper _logger.Error($"Unhandled customisation unlock type: {matchingCustomisation.Parent} not added to profile"); return; } - + fullProfile.CustomisationUnlocks.Add(rewardToStore); } } diff --git a/Core/Helpers/QuestHelper.cs b/Core/Helpers/QuestHelper.cs index 44b2bba4..98217acf 100644 --- a/Core/Helpers/QuestHelper.cs +++ b/Core/Helpers/QuestHelper.cs @@ -16,69 +16,27 @@ using Product = Core.Models.Eft.ItemEvent.Product; namespace Core.Helpers; [Injectable] -public class QuestHelper +public class QuestHelper( + ISptLogger _logger, + TimeUtil _timeUtil, + HashUtil _hashUtil, + ItemHelper _itemHelper, + DatabaseService _databaseService, + QuestConditionHelper _questConditionHelper, + EventOutputHolder _eventOutputHolder, + LocaleService _localeService, + ProfileHelper _profileHelper, + QuestRewardHelper _questRewardHelper, + LocalisationService _localisationService, + SeasonalEventService _seasonalEventService, + TraderHelper _traderHelper, + MailSendService _mailSendService, + PlayerService _playerService, + ConfigServer _configServer, + ICloner _cloner +) { - protected ISptLogger _logger; - protected TimeUtil _timeUtil; - protected HashUtil _hashUtil; - protected ItemHelper _itemHelper; - protected DatabaseService _databaseService; - protected QuestConditionHelper _questConditionHelper; - protected EventOutputHolder _eventOutputHolder; - protected LocaleService _localeService; - protected ProfileHelper _profileHelper; - protected QuestRewardHelper _questRewardHelper; - protected LocalisationService _localisationService; - protected SeasonalEventService _seasonalEventService; - protected TraderHelper _traderHelper; - protected MailSendService _mailSendService; - protected PlayerService _playerService; - protected ConfigServer _configServer; - protected ICloner _cloner; - - protected QuestConfig _questConfig; - - public QuestHelper - ( - ISptLogger logger, - TimeUtil timeUtil, - HashUtil hashUtil, - ItemHelper itemHelper, - DatabaseService databaseService, - QuestConditionHelper questConditionHelper, - EventOutputHolder eventOutputHolder, - LocaleService localeService, - ProfileHelper profileHelper, - QuestRewardHelper questRewardHelper, - LocalisationService localisationService, - SeasonalEventService seasonalEventService, - TraderHelper traderHelper, - MailSendService mailSendService, - PlayerService playerService, - ConfigServer configServer, - ICloner Cloner - ) - { - _logger = logger; - _timeUtil = timeUtil; - _hashUtil = hashUtil; - _itemHelper = itemHelper; - _databaseService = databaseService; - _questConditionHelper = questConditionHelper; - _eventOutputHolder = eventOutputHolder; - _localeService = localeService; - _profileHelper = profileHelper; - _questRewardHelper = questRewardHelper; - _localisationService = localisationService; - _seasonalEventService = seasonalEventService; - _traderHelper = traderHelper; - _mailSendService = mailSendService; - _playerService = playerService; - _configServer = configServer; - _cloner = Cloner; - - _questConfig = configServer.GetConfig(); - } + protected QuestConfig _questConfig = _configServer.GetConfig(); /// /// Get status of a quest in player profile by its id @@ -359,9 +317,8 @@ public class QuestHelper var acceptedQuestCondition = q.Conditions.AvailableForStart.FirstOrDefault( (c) => { - return (c.ConditionType == "Quest" - && ((List)c.Target).Contains(failedQuestId) && c.Status[0] == QuestStatusEnum.Fail - ); + return (c.ConditionType == "Quest" && ((List)c.Target).Contains(failedQuestId) && c.Status[0] == QuestStatusEnum.Fail + ); } ); @@ -761,14 +718,19 @@ public class QuestHelper public List GetQuestsFailedByCompletingQuest(string completedQuestId) { var questsInDb = GetQuestsFromDb(); - return questsInDb.Where((quest) => { - // No fail conditions, exit early - if (quest.Conditions.Fail is null || quest.Conditions.Fail.Count == 0) { - return false; - } + return questsInDb.Where( + (quest) => + { + // No fail conditions, exit early + if (quest.Conditions.Fail is null || quest.Conditions.Fail.Count == 0) + { + return false; + } - return quest.Conditions.Fail.Any((condition) => (((List)condition.Target)?.Contains(completedQuestId)) ?? false); - }).ToList(); + return quest.Conditions.Fail.Any((condition) => (((List)condition.Target)?.Contains(completedQuestId)) ?? false); + } + ) + .ToList(); } /** @@ -779,7 +741,8 @@ public class QuestHelper public double? GetMailItemRedeemTimeHoursForProfile(PmcData pmcData) { var value = _questConfig.MailRedeemTimeHours.GetValueOrDefault(pmcData.Info.GameVersion); - if (value is null) { + if (value is null) + { return 0; } @@ -808,7 +771,8 @@ public class QuestHelper // Check for linked failed + unrestartable quests (only get quests not already failed var questsToFail = GetQuestsFromProfileFailedByCompletingQuest(completedQuestId, pmcData); - if (questsToFail?.Count > 0) { + if (questsToFail?.Count > 0) + { FailQuests(sessionID, pmcData, questsToFail, completeQuestResponse); } @@ -825,13 +789,16 @@ public class QuestHelper completeQuestResponse.ProfileChanges[sessionID].Quests.AddRange(questDelta); // Check if it's a repeatable quest. If so, remove from Quests - foreach (var currentRepeatable in pmcData.RepeatableQuests) { + foreach (var currentRepeatable in pmcData.RepeatableQuests) + { var repeatableQuest = currentRepeatable.ActiveQuests.FirstOrDefault( (activeRepeatable) => activeRepeatable.Id == completedQuestId ); - if (repeatableQuest is not null) { + if (repeatableQuest is not null) + { // Need to remove redundant scav quest object as its no longer necessary, is tracked in pmc profile - if (repeatableQuest.Side == "Scav") { + if (repeatableQuest.Side == "Scav") + { RemoveQuestFromScavProfile(sessionID, repeatableQuest.Id); } } @@ -839,7 +806,8 @@ public class QuestHelper // Hydrate client response questsStatus array with data var questStatusChanges = GetQuestsWithDifferentStatuses(preCompleteProfileQuests, pmcData.Quests); - if (questStatusChanges is not null) { + if (questStatusChanges is not null) + { completeQuestResponse.ProfileChanges[sessionID].QuestsStatus.AddRange(questStatusChanges); } diff --git a/Core/Helpers/QuestRewardHelper.cs b/Core/Helpers/QuestRewardHelper.cs index f14f6fe4..3cfdeb71 100644 --- a/Core/Helpers/QuestRewardHelper.cs +++ b/Core/Helpers/QuestRewardHelper.cs @@ -15,53 +15,23 @@ using Core.Utils.Cloners; namespace Core.Helpers; [Injectable] -public class QuestRewardHelper +public class QuestRewardHelper( + ISptLogger _logger, + HashUtil _hashUtil, + TimeUtil _timeUtil, + ItemHelper _itemHelper, + PaymentHelper _paymentHelper, + TraderHelper _traderHelper, + DatabaseService _databaseService, + QuestConditionHelper _questConditionHelper, + ProfileHelper _profileHelper, + PresetHelper _presetHelper, + LocalisationService _localisationService, + ICloner _cloner, + ConfigServer _configServer +) { - protected ISptLogger _logger; - protected HashUtil _hashUtil; - protected TimeUtil _timeUtil; - protected ItemHelper _itemHelper; - protected PaymentHelper _paymentHelper; - protected TraderHelper _traderHelper; - protected DatabaseService _databaseService; - protected QuestConditionHelper _questConditionHelper; - protected ProfileHelper _profileHelper; - protected PresetHelper _presetHelper; - protected LocalisationService _localisationService; - protected QuestConfig _questConfig; - protected ICloner _cloner; - - public QuestRewardHelper( - ISptLogger logger, - HashUtil hashUtil, - TimeUtil timeUtil, - ItemHelper itemHelper, - PaymentHelper paymentHelper, - TraderHelper traderHelper, - DatabaseService databaseService, - QuestConditionHelper questConditionHelper, - ProfileHelper profileHelper, - PresetHelper presetHelper, - LocalisationService localisationService, - ConfigServer configServer, - ICloner cloner - ) - { - _logger = logger; - _hashUtil = hashUtil; - _timeUtil = timeUtil; - _itemHelper = itemHelper; - _paymentHelper = paymentHelper; - _traderHelper = traderHelper; - _databaseService = databaseService; - _questConditionHelper = questConditionHelper; - _profileHelper = profileHelper; - _presetHelper = presetHelper; - _localisationService = localisationService; - _cloner = cloner; - - _questConfig = configServer.GetConfig(); - } + protected QuestConfig _questConfig = _configServer.GetConfig(); /** * Give player quest rewards - Skills/exp/trader standing/items/assort unlocks - Returns reward items player earned @@ -99,8 +69,13 @@ public class QuestRewardHelper // e.g. 'Success' or 'AvailableForFinish' var questStateAsString = state.ToString(); var gameVersion = pmcProfile.Info.GameVersion; - var questRewards = (List?)questDetails.Rewards.GetType().GetProperties().FirstOrDefault(p => - p.Name == questStateAsString).GetValue(questDetails.Rewards); + var questRewards = (List?)questDetails.Rewards.GetType() + .GetProperties() + .FirstOrDefault( + p => + p.Name == questStateAsString + ) + .GetValue(questDetails.Rewards); foreach (var reward in questRewards) { if (!QuestRewardIsForGameEdition(reward, gameVersion)) @@ -150,12 +125,17 @@ public class QuestRewardHelper _profileHelper.AddHideoutCustomisationUnlock(fullProfile, reward, CustomisationSource.UNLOCKED_IN_GAME); break; default: - _logger.Error(_localisationService.GetText("quest-reward_type_not_handled", new - { - rewardType = reward.Type, - questId = questId, - questName = questDetails.QuestName - })); + _logger.Error( + _localisationService.GetText( + "quest-reward_type_not_handled", + new + { + rewardType = reward.Type, + questId = questId, + questName = questDetails.QuestName + } + ) + ); break; } } @@ -246,11 +226,16 @@ public class QuestRewardHelper */ public Quest ApplyMoneyBoost(Quest quest, double bonusPercent, QuestStatusEnum questStatus) { - var rewards = (List)quest?.Rewards.GetType().GetProperties().FirstOrDefault(p => p.Name == questStatus.ToString()) - .GetValue(quest.Rewards) ?? new(); - var currencyRewards = rewards.Where(r => - r.Type.ToString() == "Item" && - _paymentHelper.IsMoneyTpl(r.Items[0].Template)); + var rewards = (List)quest?.Rewards.GetType() + .GetProperties() + .FirstOrDefault(p => p.Name == questStatus.ToString()) + .GetValue(quest.Rewards) ?? + new(); + var currencyRewards = rewards.Where( + r => + r.Type.ToString() == "Item" && + _paymentHelper.IsMoneyTpl(r.Items[0].Template) + ); foreach (var reward in currencyRewards) { // Add % bonus to existing StackObjectsCount @@ -278,11 +263,16 @@ public class QuestRewardHelper var matchingProductions = GetRewardProductionMatch(craftUnlockReward, questDetails); if (matchingProductions.Count != 1) { - _logger.Error(_localisationService.GetText("quest-unable_to_find_matching_hideout_production", new - { - questName = questDetails.QuestName, - matchCount = matchingProductions.Count - })); + _logger.Error( + _localisationService.GetText( + "quest-unable_to_find_matching_hideout_production", + new + { + questName = questDetails.QuestName, + matchCount = matchingProductions.Count + } + ) + ); return; } @@ -307,17 +297,23 @@ public class QuestRewardHelper // Area that will be used to craft unlocked item var desiredHideoutAreaType = int.Parse((string)craftUnlockReward.TraderId); - var matchingProductions = craftingRecipes.Where(p => - p.AreaType == desiredHideoutAreaType && - p.Requirements.Any(r => r.Type == "QuestComplete") && - p.Requirements.Any(r => r.RequiredLevel == craftUnlockReward.LoyaltyLevel) && - p.EndProduct == craftUnlockReward.Items[0].Template); + var matchingProductions = craftingRecipes.Where( + p => + p.AreaType == desiredHideoutAreaType && + p.Requirements.Any(r => r.Type == "QuestComplete") && + p.Requirements.Any(r => r.RequiredLevel == craftUnlockReward.LoyaltyLevel) && + p.EndProduct == craftUnlockReward.Items[0].Template + ); // More/less than single match, above filtering wasn't strict enough if (matchingProductions.Count() != 1) - matchingProductions = matchingProductions.Where(p => - p.Requirements.Any(r => - r.QuestId == questDetails.Id)); + matchingProductions = matchingProductions.Where( + p => + p.Requirements.Any( + r => + r.QuestId == questDetails.Id + ) + ); return matchingProductions.ToList(); } @@ -330,18 +326,22 @@ public class QuestRewardHelper */ protected List GetQuestRewardItems(Quest quest, QuestStatusEnum status, string gameVersion) { - var rewards = (List)quest?.Rewards.GetType().GetProperties().FirstOrDefault(p => p.Name == status.ToString()) + var rewards = (List)quest?.Rewards.GetType() + .GetProperties() + .FirstOrDefault(p => p.Name == status.ToString()) .GetValue(quest.Rewards); if (rewards == null) return new(); // Iterate over all rewards with the desired status, flatten out items that have a type of Item - var questRewards = rewards.SelectMany(r => - r.Type.ToString() == "Item" && - QuestRewardIsForGameEdition(r, gameVersion) - ? ProcessReward(r) - : new()); + var questRewards = rewards.SelectMany( + r => + r.Type.ToString() == "Item" && + QuestRewardIsForGameEdition(r, gameVersion) + ? ProcessReward(r) + : new() + ); return questRewards.ToList(); } @@ -416,10 +416,10 @@ public class QuestRewardHelper { itemsClone.Add(_cloner.Clone(mod)); } - + rewardItems.AddRange(_itemHelper.ReparentItemAndChildren(target, itemsClone)); } - + return rewardItems; } @@ -439,24 +439,24 @@ public class QuestRewardHelper var newRootId = _itemHelper.RemapRootItemId(presetAndMods, _hashUtil.Generate()); reward.Items = presetAndMods; - + // Find root item and set its stack count var rootItem = reward.Items.FirstOrDefault(i => i.Id == newRootId); - + // Remap target id to the new presets root id reward.Target = rootItem.Id; - + // Copy over stack count otherwise reward shows as missing in client _itemHelper.AddUpdObjectToItem(rootItem); - + rootItem.Upd.StackObjectsCount = originalRewardRootItem.Upd.StackObjectsCount; return; } - + _logger.Warning($"Unable to find default preset for armor {originalRewardRootItem.Template}, adding mods manually"); var itemDbData = _itemHelper.GetItem(originalRewardRootItem.Template).Value; - + // Hydrate reward with only 'required' mods - necessary for things like helmets otherwise you end up with nvgs/visors etc reward.Items = _itemHelper.AddChildSlotItems(reward.Items, itemDbData, null, true); } diff --git a/Core/Helpers/RepeatableQuestHelper.cs b/Core/Helpers/RepeatableQuestHelper.cs index 8e99551f..a440c23a 100644 --- a/Core/Helpers/RepeatableQuestHelper.cs +++ b/Core/Helpers/RepeatableQuestHelper.cs @@ -8,23 +8,12 @@ using Core.Utils.Collections; namespace Core.Helpers; [Injectable] -public class RepeatableQuestHelper +public class RepeatableQuestHelper( + ISptLogger _logger, + ICloner _cloner, + MathUtil _mathUtil +) { - protected ISptLogger _logger; - protected ICloner _cloner; - protected MathUtil _mathUtil; - - public RepeatableQuestHelper( - ISptLogger logger, - ICloner cloner, - MathUtil mathUtil - ) - { - _logger = logger; - _cloner = cloner; - _mathUtil = mathUtil; - } - /// /// Get the relevant elimination config based on the current players PMC level /// diff --git a/Core/Helpers/TradeHelper.cs b/Core/Helpers/TradeHelper.cs index b5673de4..556e808e 100644 --- a/Core/Helpers/TradeHelper.cs +++ b/Core/Helpers/TradeHelper.cs @@ -7,12 +7,8 @@ using Core.Models.Eft.Trade; namespace Core.Helpers; [Injectable] -public class TradeHelper +public class TradeHelper() { - public TradeHelper() - { - - } /// /// Buy item from flea or trader diff --git a/Core/Helpers/TraderAssortHelper.cs b/Core/Helpers/TraderAssortHelper.cs index 3777c4f0..beeb04a4 100644 --- a/Core/Helpers/TraderAssortHelper.cs +++ b/Core/Helpers/TraderAssortHelper.cs @@ -4,12 +4,8 @@ using Core.Models.Eft.Common.Tables; namespace Core.Helpers; [Injectable] -public class TraderAssortHelper +public class TraderAssortHelper() { - public TraderAssortHelper() - { - - } /// /// Get a traders assorts diff --git a/Core/Helpers/TraderHelper.cs b/Core/Helpers/TraderHelper.cs index 0036621e..5308a3fe 100644 --- a/Core/Helpers/TraderHelper.cs +++ b/Core/Helpers/TraderHelper.cs @@ -14,40 +14,19 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class TraderHelper +public class TraderHelper( + ISptLogger _logger, + TimeUtil _timeUtil, + RandomUtil _randomUtil, + LocalisationService _localisationService, + ConfigServer _configServer, + ProfileHelper _profileHelper, + DatabaseService _databaseService +) { - protected ISptLogger _logger; - protected TimeUtil _timeUtil; - protected RandomUtil _randomUtil; - protected LocalisationService _localisationService; - protected ConfigServer _configServer; - protected TraderConfig _traderConfig; - protected ProfileHelper _profileHelper; - protected DatabaseService _databaseService; - + protected TraderConfig _traderConfig = _configServer.GetConfig(); private Dictionary _highestTraderPriceItems = new(); - public TraderHelper( - ISptLogger logger, - TimeUtil timeUtil, - RandomUtil randomUtil, - LocalisationService localisationService, - ConfigServer configServer, - ProfileHelper profileHelper, - DatabaseService databaseService - ) - { - _logger = logger; - _timeUtil = timeUtil; - _randomUtil = randomUtil; - _localisationService = localisationService; - _configServer = configServer; - _profileHelper = profileHelper; - _databaseService = databaseService; - - _traderConfig = _configServer.GetConfig(); - } - /// /// Get a trader base object, update profile to reflect players current standing in profile /// when trader not found in profile @@ -68,7 +47,7 @@ public class TraderHelper var pmcData = _profileHelper.GetPmcProfile(sessionID); if (pmcData == null) throw new Exception(_localisationService.GetText("trader-unable_to_find_profile_with_id", sessionID)); - + // Profile has traderInfo dict (profile beyond creation stage) but no requested trader in profile if (pmcData?.TradersInfo != null && (pmcData?.TradersInfo?.ContainsKey(traderID) ?? false)) { @@ -80,7 +59,7 @@ public class TraderHelper var traderBase = _databaseService.GetTrader(traderID).Base; if (traderBase == null) _logger.Error(_localisationService.GetText("trader-unable_to_find_trader_by_id", traderID)); - + return traderBase; } @@ -214,18 +193,25 @@ public class TraderHelper var traderDetails = _traderConfig.UpdateTime.FirstOrDefault((x) => x.TraderId == traderId); if (traderDetails is null || traderDetails.Seconds?.Min is null || traderDetails.Seconds.Max is null) { - _logger.Warning(_localisationService.GetText("trader-missing_trader_details_using_default_refresh_time", new - { - traderId = traderId, - updateTime = _traderConfig.UpdateTimeDefault, - })); + _logger.Warning( + _localisationService.GetText( + "trader-missing_trader_details_using_default_refresh_time", + new + { + traderId = traderId, + updateTime = _traderConfig.UpdateTimeDefault, + } + ) + ); - _traderConfig.UpdateTime.Add(new UpdateTime - // create temporary entry to prevent logger spam - { - TraderId = traderId, - Seconds = new MinMax { Min = _traderConfig.UpdateTimeDefault, Max = _traderConfig.UpdateTimeDefault } - }); + _traderConfig.UpdateTime.Add( + new UpdateTime + // create temporary entry to prevent logger spam + { + TraderId = traderId, + Seconds = new MinMax { Min = _traderConfig.UpdateTimeDefault, Max = _traderConfig.UpdateTimeDefault } + } + ); return null; } diff --git a/Core/Helpers/WeatherHelper.cs b/Core/Helpers/WeatherHelper.cs index cff97e08..a974b45b 100644 --- a/Core/Helpers/WeatherHelper.cs +++ b/Core/Helpers/WeatherHelper.cs @@ -9,27 +9,13 @@ using Core.Utils; namespace Core.Helpers; [Injectable] -public class WeatherHelper +public class WeatherHelper( + ISptLogger _logger, + TimeUtil _timeUtil, + ConfigServer _configServer +) { - protected ISptLogger _logger; - protected TimeUtil _timeUtil; - protected ConfigServer _configServer; - - protected WeatherConfig _weatherConfig; - - public WeatherHelper - ( - ISptLogger logger, - TimeUtil timeUtil, - ConfigServer configServer - ) - { - _logger = logger; - _timeUtil = timeUtil; - _configServer = configServer; - - _weatherConfig = _configServer.GetConfig(); - } + protected WeatherConfig _weatherConfig = _configServer.GetConfig(); /// /// Get the current in-raid time - does not include an accurate date, only time @@ -45,9 +31,11 @@ public class WeatherHelper ? timestamp ?? 0 : _timeUtil.GetTimeStampFromEpoch(); - return _timeUtil.GetDateTimeFromTimeStamp((long) + return _timeUtil.GetDateTimeFromTimeStamp( + (long) (russiaOffsetMilliseconds + currentTimestampMilliSeconds * _weatherConfig.Acceleration) % - twentyFourHoursMilliseconds); + twentyFourHoursMilliseconds + ); } /// @@ -58,11 +46,11 @@ public class WeatherHelper public bool IsNightTime(DateTimeEnum timeVariant) { var time = GetInRaidTime(); - + // getInRaidTime() provides left side value, if player chose right side, set ahead 12 hrs if (timeVariant == DateTimeEnum.PAST) time.AddHours(12); - + // Night if after 9pm or before 5am return time.Hour > 21 || time.Hour < 5; } diff --git a/Core/Helpers/WeightedRandomHelper.cs b/Core/Helpers/WeightedRandomHelper.cs index 26da7265..5d6aa6fd 100644 --- a/Core/Helpers/WeightedRandomHelper.cs +++ b/Core/Helpers/WeightedRandomHelper.cs @@ -6,17 +6,10 @@ using Core.Models.Utils; namespace Core.Helpers; [Injectable] -public class WeightedRandomHelper +public class WeightedRandomHelper( + ISptLogger _logger +) { - protected ISptLogger _logger; - - public WeightedRandomHelper( - ISptLogger logger - ) - { - _logger = logger; - } - /// /// Choose an item from the passed in array based on the weightings of each ///