diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-06-18 11:37:07 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-06-18 11:37:07 +0200 |
commit | ceb8d561b44579118b109a9ff71ba415df53bbdc (patch) | |
tree | b2a6b87afa6a2b83b8040b8632a87cb9a8308775 /src/server/game/Conditions/ConditionMgr.cpp | |
parent | e02e8a474244c229cc34c4efb987e24b6dd417f5 (diff) |
Core: Updated to 11.1.7
Diffstat (limited to 'src/server/game/Conditions/ConditionMgr.cpp')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index d954214506f..a3d603474e3 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -21,6 +21,7 @@ #include "AreaTriggerDataStore.h" #include "BattlePetMgr.h" #include "BattlegroundScript.h" +#include "CollectionMgr.h" #include "Containers.h" #include "ConversationDataStore.h" #include "DB2Stores.h" @@ -3062,8 +3063,32 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio std::array<bool, std::tuple_size_v<decltype(condition->ItemID)>> results; results.fill(true); for (std::size_t i = 0; i < condition->ItemID.size(); ++i) + { if (condition->ItemID[i]) - results[i] = player->GetItemCount(condition->ItemID[i], condition->ItemFlags != 0) >= condition->ItemCount[i]; + { + EnumFlag<ItemSearchLocation> where = ItemSearchLocation::Equipment; + if ((condition->ItemFlags & 1) != 0) // include banks + where |= ItemSearchLocation::Bank | ItemSearchLocation::ReagentBank | ItemSearchLocation::AccountBank; + if ((condition->ItemFlags & 2) == 0) // ignore inventory + where |= ItemSearchLocation::Inventory; + + uint32 foundCount = 0; + results[i] = !player->ForEachItem(where, [&](Item const* item) + { + if (item->GetEntry() == uint32(condition->ItemID[i])) + { + foundCount += item->GetCount(); + if (foundCount >= condition->ItemCount[i]) + return ItemSearchCallbackResult::Stop; + } + + return ItemSearchCallbackResult::Continue; + }); + + if (!results[i] && condition->ItemCount[i] == 1 && sDB2Manager.IsToyItem(condition->ItemID[i])) + results[i] = player->GetSession()->GetCollectionMgr()->HasToy(condition->ItemID[i]); + } + } if (!PlayerConditionLogic(condition->ItemLogic, results)) return false; |