From 2e0d59090194289adb78c6aa28c3b294e646a584 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Tue, 19 Aug 2025 18:50:20 -0400 Subject: [PATCH] Core/Quests: Allow quest objective items with effect type other than "On Looted" to be put in inventory even when QUEST_OBJECTIVE_FLAG_2_QUEST_BOUND_ITEM is set Port From (https://github.com/TrinityCore/TrinityCore/commit/79347f72db13600a0cc326d9a61c4cf0396777d0) --- Source/Game/Entities/Player/Player.Quest.cs | 23 +++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index c06694e45..36b45d76f 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -2483,10 +2483,25 @@ namespace Game.Entities List updatedObjectives = new(); Func objectiveFilter = null; - if (boundItemFlagRequirement.HasValue) - objectiveFilter = boundItemFlagRequirement.Value ? QuestBoundItemFunc : NotQuestBoundItemFunc; - ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(entry); + if (boundItemFlagRequirement.HasValue) + { + bool ignoresQuestBoundItemFlag = itemTemplate.Effects.Any(itemEffect => + { + return itemEffect.TriggerType != ItemSpelltriggerType.OnLooted && itemEffect.TriggerType != ItemSpelltriggerType.OnLootedForced; + }); + + if (boundItemFlagRequirement.HasValue) + { + if (ignoresQuestBoundItemFlag) + return; + + objectiveFilter = QuestBoundItemFunc; + } + else if (!ignoresQuestBoundItemFlag) + objectiveFilter = NotQuestBoundItemFunc; + } + UpdateQuestObjectiveProgress(QuestObjectiveType.Item, (int)itemTemplate.GetId(), count, ObjectGuid.Empty, updatedObjectives, objectiveFilter); if (itemTemplate.QuestLogItemId != 0 && (updatedObjectives.Count != 1 || !updatedObjectives[0].Flags2.HasFlag(QuestObjectiveFlags2.QuestBoundItem))) UpdateQuestObjectiveProgress(QuestObjectiveType.Item, itemTemplate.QuestLogItemId, count, ObjectGuid.Empty, updatedObjectives, objectiveFilter); @@ -2498,7 +2513,7 @@ namespace Game.Entities if (quest != null && quest.SourceItemId == entry) return; - hadBoundItemObjective = updatedObjectives.Count == 1 && updatedObjectives[0].Flags2.HasFlag(QuestObjectiveFlags2.QuestBoundItem); + hadBoundItemObjective = true; SendQuestUpdateAddItem(itemTemplate, updatedObjectives[0], (ushort)count); }