From b12c7ddbd05efc5aa1b3d39338a952d4f9591cad Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Thu, 15 Jan 2026 20:56:05 +0100 Subject: [PATCH] Harden AddTaskItemRequirementsToRewardPool against NullReferenceExceptions (#729) * Sanitize AddTaskItemRequirementsToRewardPool * add log --------- Co-authored-by: rootdarkarchon --- .../Services/CircleOfCultistService.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs b/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs index d0d38f71..d0fde891 100644 --- a/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs @@ -683,14 +683,19 @@ public class CircleOfCultistService( /// Pool to add items to protected void AddTaskItemRequirementsToRewardPool(PmcData pmcData, HashSet itemRewardBlacklist, HashSet rewardPool) { - var activeTasks = pmcData.Quests.Where(quest => quest.Status == QuestStatusEnum.Started); - foreach (var task in activeTasks) + var activeTasks = pmcData.Quests?.Where(quest => quest.Status == QuestStatusEnum.Started); + foreach (var task in activeTasks ?? []) { var questData = questHelper.GetQuestFromDb(task.QId, pmcData); - var handoverConditions = questData.Conditions.AvailableForFinish.Where(condition => condition.ConditionType == "HandoverItem"); - foreach (var condition in handoverConditions) + if (questData is null) { - foreach (var neededItem in condition.Target.List) + logger.Warning($"Could not get quest data for QId {task.QId}."); + continue; + } + var handoverConditions = questData.Conditions.AvailableForFinish?.Where(condition => condition.ConditionType == "HandoverItem"); + foreach (var condition in handoverConditions ?? []) + { + foreach (var neededItem in condition?.Target?.List ?? []) { if (itemRewardBlacklist.Contains(neededItem) || !itemHelper.IsValidItem(neededItem)) {