diff --git a/Libraries/Core/Controllers/HideoutController.cs b/Libraries/Core/Controllers/HideoutController.cs index 661dae5e..a85ea64b 100644 --- a/Libraries/Core/Controllers/HideoutController.cs +++ b/Libraries/Core/Controllers/HideoutController.cs @@ -229,7 +229,7 @@ public class HideoutController( HideoutArea dbHideoutArea, Stage hideoutStage) { // Add key/value to `hideoutAreaStashes` dictionary - used to link hideout area to inventory stash by its id - if (pmcData.Inventory.HideoutAreaStashes.GetValueOrDefault(dbHideoutArea.Type.ToString()) is null) + if (!pmcData.Inventory.HideoutAreaStashes.ContainsKey(dbHideoutArea.Type.ToString())) { pmcData.Inventory.HideoutAreaStashes[dbHideoutArea.Type.ToString()] = dbHideoutArea.Id; } @@ -432,7 +432,7 @@ public class HideoutController( } // Assume only one item in slot - var itemToReturn = hideoutArea.Slots.FirstOrDefault(slot => slot.LocationIndex == slotIndexToRemove)?.Items.FirstOrDefault(); + var itemToReturn = hideoutArea.Slots?.FirstOrDefault(slot => slot.LocationIndex == slotIndexToRemove)?.Items.FirstOrDefault(); if (itemToReturn is null) { _logger.Warning($"Unable to remove resource from area: {removeResourceRequest.AreaType} slot as no item found, RESTART CLIENT IMMEDIATELY"); @@ -440,7 +440,7 @@ public class HideoutController( return output; } - AddItemDirectRequest request = new AddItemDirectRequest + var request = new AddItemDirectRequest { ItemWithModsToAdd = [itemToReturn.ConvertToItem()], FoundInRaid = itemToReturn.Upd?.SpawnedInSession, @@ -451,7 +451,7 @@ public class HideoutController( _inventoryHelper.AddItemToStash(sessionID, request, pmcData, output); if (output.Warnings?.Count > 0) { - // Adding to stash failed, drop out - dont remove item from hideout area slot + // Adding to stash failed, drop out - don't remove item from hideout area slot return output; } @@ -555,7 +555,7 @@ public class HideoutController( } } - var recipe = _databaseService.GetHideout().Production.ScavRecipes.FirstOrDefault(r => r.Id == body.RecipeId); + var recipe = _databaseService.GetHideout().Production?.ScavRecipes?.FirstOrDefault(r => r.Id == body.RecipeId); if (recipe is null) { _logger.Error( @@ -1015,9 +1015,9 @@ public class HideoutController( var hasSeverePain = pmcData.Health.BodyParts["Chest"].Effects?.ContainsKey("SevereMusclePain"); // Has no muscle pain at all, add mild - if (hasMildPain is null && hasSeverePain is null) + if (!hasMildPain.GetValueOrDefault(false) && !hasSeverePain.GetValueOrDefault(false)) { - // nullguard + // Nullguard pmcData.Health.BodyParts["Chest"].Effects ??= new Dictionary(); pmcData.Health.BodyParts["Chest"].Effects["MildMusclePain"] = new BodyPartEffectProperties { @@ -1027,7 +1027,7 @@ public class HideoutController( return; } - if (hasMildPain is not null) + if (hasMildPain.GetValueOrDefault(false)) { // Already has mild pain, remove mild and add severe pmcData.Health.BodyParts["Chest"].Effects.Remove("MildMusclePain"); @@ -1041,7 +1041,7 @@ public class HideoutController( public void RecordShootingRangePoints(string sessionId, PmcData pmcData, RecordShootingRangePoints request) { - var shootingRangeKey = "ShootingRangePoints"; + const string shootingRangeKey = "ShootingRangePoints"; var overallCounterItems = pmcData.Stats.Eft.OverallCounters.Items; // Find counter by key @@ -1218,7 +1218,7 @@ public class HideoutController( var slots = _itemHelper.GetItem(equipmentPresetStage.Container).Value.Properties.Slots; foreach (var mannequinSlot in slots) { - // Chek if we've already added this manniquin + // Check if we've already added this mannequin var existingMannequin = pmcData.Inventory.Items.FirstOrDefault( (item) => item.ParentId == equipmentPresetHideoutArea.Id && item.SlotId == mannequinSlot.Name ); diff --git a/Libraries/Core/Controllers/QuestController.cs b/Libraries/Core/Controllers/QuestController.cs index cbeea0f7..4d29b6f6 100644 --- a/Libraries/Core/Controllers/QuestController.cs +++ b/Libraries/Core/Controllers/QuestController.cs @@ -169,11 +169,8 @@ public class QuestController( if (repeatableQuestProfile.Side == "Scav" && _questTypes.Contains(repeatableQuestProfile.Type.ToString())) { var fullProfile = _profileHelper.GetFullProfile(sessionID); - if (fullProfile.CharacterData.ScavData.Quests is null) - { - fullProfile.CharacterData.ScavData.Quests = []; - } + fullProfile.CharacterData.ScavData.Quests ??= []; fullProfile.CharacterData.ScavData.Quests.Add(newRepeatableQuest); } diff --git a/Libraries/Core/Controllers/RagfairController.cs b/Libraries/Core/Controllers/RagfairController.cs index c5eda5ac..fb9a213a 100644 --- a/Libraries/Core/Controllers/RagfairController.cs +++ b/Libraries/Core/Controllers/RagfairController.cs @@ -199,7 +199,7 @@ public class RagfairController var firstItem = offer.Items[0]; var traderAssorts = _traderHelper.GetTraderAssortsByTraderId(offer.User.Id).Items; - var assortPurchased = traderAssorts.FirstOrDefault(x => x.Id == offer.Items.First().Id); + var assortPurchased = traderAssorts?.FirstOrDefault(x => x.Id == offer.Items.First().Id); if (assortPurchased is null) { _logger.Warning( @@ -939,7 +939,7 @@ public class RagfairController // Count how many items are being sold and multiply the requested amount accordingly foreach (var itemId in itemIdsFromFleaOfferRequest) { - var item = pmcData.Inventory.Items.FirstOrDefault((i) => i.Id == itemId); + var item = pmcData.Inventory?.Items?.FirstOrDefault((i) => i.Id == itemId); if (item is null) { errorMessage = _localisationService.GetText("ragfair-unable_to_find_item_in_inventory", new { id = itemId }); diff --git a/Libraries/Core/Controllers/RepeatableQuestController.cs b/Libraries/Core/Controllers/RepeatableQuestController.cs index 90a483d0..2b0a9722 100644 --- a/Libraries/Core/Controllers/RepeatableQuestController.cs +++ b/Libraries/Core/Controllers/RepeatableQuestController.cs @@ -238,7 +238,7 @@ public class RepeatableQuestController( } } - private RepeatableQuest AttemptToGenerateRepeatableQuest(string sessionId, PmcData pmcData, + private RepeatableQuest? AttemptToGenerateRepeatableQuest(string sessionId, PmcData pmcData, QuestTypePool questTypePool, RepeatableQuestConfig repeatableConfig) { const int maxAttempts = 10; diff --git a/Libraries/Core/Generators/BotEquipmentModGenerator.cs b/Libraries/Core/Generators/BotEquipmentModGenerator.cs index cbae754f..30bacb89 100644 --- a/Libraries/Core/Generators/BotEquipmentModGenerator.cs +++ b/Libraries/Core/Generators/BotEquipmentModGenerator.cs @@ -1576,10 +1576,7 @@ public class BotEquipmentModGenerator( ); } - if (!modPool.ContainsKey(modTemplate.Id)) - { - modPool[modTemplate.Id] = new(); - } + modPool.TryAdd(modTemplate.Id, new Dictionary>()); modPool[modTemplate.Id][desiredSlotObject.Name] = supportedSubMods.ToHashSet(); } @@ -1646,8 +1643,7 @@ public class BotEquipmentModGenerator( public void FillCamora(List items, Dictionary>> modPool, string cylinderMagParentId, TemplateItem cylinderMagTemplate) { - var itemModPool = modPool[cylinderMagTemplate.Id]; - if (itemModPool is null) + if (!modPool.TryGetValue(cylinderMagTemplate.Id, out var itemModPool)) { _logger.Warning( _localisationService.GetText( @@ -1672,8 +1668,8 @@ public class BotEquipmentModGenerator( } ExhaustableArray exhaustableModPool = null; - var modSlot = "cartridges"; - var camoraFirstSlot = "camora_000"; + string modSlot = "cartridges"; + const string camoraFirstSlot = "camora_000"; if (itemModPool.TryGetValue(modSlot, out var value)) { exhaustableModPool = CreateExhaustableArray(value.ToList()); @@ -1690,7 +1686,7 @@ public class BotEquipmentModGenerator( return; } - string modTpl = null; + string? modTpl = null; var found = false; while (exhaustableModPool.HasValues()) { @@ -1713,7 +1709,13 @@ public class BotEquipmentModGenerator( { var modSlotId = slot.Name; var modId = _hashUtil.Generate(); - items.Add(new() { Id = modId, Template = modTpl, ParentId = cylinderMagParentId, SlotId = modSlotId }); + items.Add(new() + { + Id = modId, + Template = modTpl, + ParentId = cylinderMagParentId, + SlotId = modSlotId + }); } } @@ -1744,8 +1746,7 @@ public class BotEquipmentModGenerator( var weaponDetails = _itemHelper.GetItem(weapon.Template); // Return original scopes array if whitelist not found - var whitelistedSightTypes = botWeaponSightWhitelist[weaponDetails.Value.Parent]; - if (whitelistedSightTypes is null) + if (!botWeaponSightWhitelist.TryGetValue(weaponDetails.Value.Parent, out var whitelistedSightTypes)) { if (_logger.IsLogEnabled(LogLevel.Debug)) { diff --git a/Libraries/Core/Generators/BotWeaponGenerator.cs b/Libraries/Core/Generators/BotWeaponGenerator.cs index 5ae6cd7f..04d803bc 100644 --- a/Libraries/Core/Generators/BotWeaponGenerator.cs +++ b/Libraries/Core/Generators/BotWeaponGenerator.cs @@ -394,9 +394,9 @@ public class BotWeaponGenerator( return; } - var isInternalMag = magTemplate.Properties.ReloadMagType == ReloadMode.InternalMagazine; - var ammoTemplate = _itemHelper.GetItem(generatedWeaponResult.ChosenAmmoTemplate).Value; - if (ammoTemplate is null) + //var isInternalMag = magTemplate.Properties.ReloadMagType == ReloadMode.InternalMagazine; + var ammoTemplate = _itemHelper.GetItem(generatedWeaponResult.ChosenAmmoTemplate); + if (!ammoTemplate.Key) { _logger.Error( _localisationService.GetText("bot-unable_to_find_ammo_item", generatedWeaponResult.ChosenAmmoTemplate) @@ -415,7 +415,7 @@ public class BotWeaponGenerator( magWeights, magTemplate, weaponTemplate, - ammoTemplate, + ammoTemplate.Value, inventory ); @@ -426,7 +426,7 @@ public class BotWeaponGenerator( AddAmmoToSecureContainer( _botConfig.SecureContainerAmmoStackCount, generatedWeaponResult.ChosenAmmoTemplate, - ammoTemplate.Properties.StackMaxSize ?? 0, + ammoTemplate.Value.Properties.StackMaxSize ?? 0, inventory ); } @@ -605,7 +605,7 @@ public class BotWeaponGenerator( /// /// Weapon db template to get cartridges for /// List of cartridge tpls - protected List GetCompatibleCartridgesFromWeaponTemplate(TemplateItem weaponTemplate) + protected List? GetCompatibleCartridgesFromWeaponTemplate(TemplateItem weaponTemplate) { var cartridges = weaponTemplate.Properties?.Chambers.FirstOrDefault()?.Props?.Filters?[0].Filter; if (cartridges is not null)