aboutsummaryrefslogtreecommitdiff
path: root/src/game/Item.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-06-08 17:25:02 -0500
committermegamage <none@none>2009-06-08 17:25:02 -0500
commit4e130dcdfdd30b84fb5e0b0531c817c7b6c64ff9 (patch)
tree09f871f8eab58afe981e99fa74cef6bcf0777e7c /src/game/Item.cpp
parent6578cce47133eb017a7ab6b14c91d6c5b80b226a (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.cpp30
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;
+ }
+}