diff options
author | megamage <none@none> | 2009-06-08 17:25:02 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-08 17:25:02 -0500 |
commit | 4e130dcdfdd30b84fb5e0b0531c817c7b6c64ff9 (patch) | |
tree | 09f871f8eab58afe981e99fa74cef6bcf0777e7c /src/game/Item.cpp | |
parent | 6578cce47133eb017a7ab6b14c91d6c5b80b226a (diff) |
[7980] Implement item use target requirements store and check (new table `item_required_target`). Author: NoFantasy
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
* Also implement this table reload
* Static Spell::SendCastResult function for call not from spell code.
Can be also used in scripts where need send explicitly spell cast error to client.
--HG--
branch : trunk
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; + } +} |