diff options
Diffstat (limited to 'src/game/Item.cpp')
-rw-r--r-- | src/game/Item.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/game/Item.cpp b/src/game/Item.cpp index 36ddcd16828..06268f2fef7 100644 --- a/src/game/Item.cpp +++ b/src/game/Item.cpp @@ -776,6 +776,23 @@ bool Item::IsFitToSpellRequirements(SpellEntry const* spellInfo) const return true; } +bool Item::IsTargetValidForItemUse(Unit* pUnitTarget) +{ + ItemRequiredTargetMapBounds bounds = objmgr.GetItemRequiredTargetMapBounds(GetProto()->ItemId); + + if (bounds.first == bounds.second) + return true; + + if (!pUnitTarget) + return false; + + for(ItemRequiredTargetMap::const_iterator itr = bounds.first; itr != bounds.second; ++itr) + if(itr->second.IsFitToRequirements(pUnitTarget)) + return true; + + return false; +} + void Item::SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges) { // Better lost small time at check in comparison lost time at item save to DB. @@ -982,3 +999,16 @@ bool Item::IsBindedNotWith( Player const* player ) const return objmgr.GetPlayerAccountIdByGUID(GetOwnerGUID()) != player->GetSession()->GetAccountId(); } } + +bool ItemRequiredTarget::IsFitToRequirements( Unit* pUnitTarget ) const +{ + switch(m_uiType) + { + case ITEM_TARGET_TYPE_CREATURE: + return pUnitTarget->isAlive(); + case ITEM_TARGET_TYPE_DEAD: + return !pUnitTarget->isAlive(); + default: + return false; + } +} |