mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
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
Closes #29579
This commit is contained in:
@@ -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;
|
||||
if (boundItemFlagRequirement)
|
||||
objectiveFilter = *boundItemFlagRequirement ? &ItemQuestObjectiveFilters.QuestBoundItem : &ItemQuestObjectiveFilters.NotQuestBoundItem;
|
||||
|
||||
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(entry);
|
||||
if (boundItemFlagRequirement)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user