From adf65f497c041127d52ca9aca73a4df07b752bcd Mon Sep 17 00:00:00 2001 From: Chomp Date: Wed, 4 Jun 2025 15:53:12 +0100 Subject: [PATCH] Fixed quests not failing other quests #345 --- .../Helpers/QuestHelper.cs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs index 4d81b09f..5889b013 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs @@ -1227,18 +1227,33 @@ public class QuestHelper( return questsInDb.Where(quest => { // No fail conditions, skip - if (quest.Conditions.Fail is null || quest.Conditions.Fail.Count == 0) + if (quest.Conditions?.Fail is null || quest.Conditions.Fail.Count == 0) { return false; } - // Quest already failed in profile, skip + // Quest already exists in profile and is failed, skip if (pmcProfile.Quests.Any(profileQuest => profileQuest.QId == quest.Id && profileQuest.Status == QuestStatusEnum.Fail)) { return false; } - return quest.Conditions.Fail.Any(condition => condition.Target?.List?.Contains(completedQuestId) ?? false); + // Check if completed quest is inside iterated quests fail conditions + foreach (var condition in quest.Conditions.Fail) + { + // No target, cant be failed by our completed quest + if (condition?.Target is null) + { + return false; + } + + // 'Target' property can be Collection or string, handle each differently + return condition.Target.IsList + ? condition.Target.List.Contains(completedQuestId) // Check if completed quest id exists in fail condition + : string.Equals(condition.Target.Item, completedQuestId, StringComparison.InvariantCultureIgnoreCase); // Not a list, plain string + } + + return false; } ) .ToList();