aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 65e24aa3639..f33d76ee8d4 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -16590,10 +16590,25 @@ void Player::ItemAddedQuestCheck(uint32 entry, uint32 count, Optional<bool> boun
{
std::vector<QuestObjective const*> updatedObjectives;
std::function<bool(QuestObjective const*)> const* objectiveFilter = nullptr;
+ ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(entry);
if (boundItemFlagRequirement)
- objectiveFilter = *boundItemFlagRequirement ? &ItemQuestObjectiveFilters.QuestBoundItem : &ItemQuestObjectiveFilters.NotQuestBoundItem;
+ {
+ bool ignoresQuestBoundItemFlag = std::ranges::any_of(itemTemplate->Effects, [](int8 triggerType)
+ {
+ return triggerType != ITEM_SPELLTRIGGER_ON_LOOTED && triggerType != ITEM_SPELLTRIGGER_ON_LOOTED_FORCED;
+ }, &ItemEffectEntry::TriggerType);
+
+ if (*boundItemFlagRequirement)
+ {
+ if (ignoresQuestBoundItemFlag)
+ return;
+
+ objectiveFilter = &ItemQuestObjectiveFilters.QuestBoundItem;
+ }
+ else if (!ignoresQuestBoundItemFlag)
+ objectiveFilter = &ItemQuestObjectiveFilters.NotQuestBoundItem;
+ }
- ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(entry);
UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_ITEM, itemTemplate->GetId(), count, ObjectGuid::Empty, &updatedObjectives, objectiveFilter);
if (itemTemplate->QuestLogItemId && (updatedObjectives.size() != 1 || !(updatedObjectives[0]->Flags2 & QUEST_OBJECTIVE_FLAG_2_QUEST_BOUND_ITEM)))
UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_ITEM, itemTemplate->QuestLogItemId, count, ObjectGuid::Empty, &updatedObjectives, objectiveFilter);
@@ -16606,7 +16621,7 @@ void Player::ItemAddedQuestCheck(uint32 entry, uint32 count, Optional<bool> boun
return;
if (hadBoundItemObjective)
- *hadBoundItemObjective = updatedObjectives.size() == 1 && updatedObjectives[0]->Flags2 & QUEST_OBJECTIVE_FLAG_2_QUEST_BOUND_ITEM;
+ *hadBoundItemObjective = true;
SendQuestUpdateAddItem(itemTemplate, *updatedObjectives[0], count);
}