diff options
author | QAston <qaston@gmail.com> | 2011-09-03 20:16:15 +0200 |
---|---|---|
committer | QAston <qaston@gmail.com> | 2011-09-03 20:16:15 +0200 |
commit | ddacd0de9442897ec2e11b49b4f3ae548797d575 (patch) | |
tree | 2736579c85ae842f05838c42041cafbec499c0ca | |
parent | 43052a47e1ed941d6eddb5e29cc5c66376ca830b (diff) | |
parent | 2d4e4644a49356e76f759246e469c762ccb74bcf (diff) |
Core/Spells: Fix pick lock - thanks to cyberbrest for pointing the reason of this issue.
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.h | 3 |
3 files changed, 6 insertions, 4 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index bae14ed26bf..875b3a0ba3b 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4756,7 +4756,7 @@ SpellCastResult Spell::CheckCast(bool strict) } { - SpellCastResult castResult = m_spellInfo->CheckExplicitTarget(m_caster, m_targets.GetObjectTarget()); + SpellCastResult castResult = m_spellInfo->CheckExplicitTarget(m_caster, m_targets.GetObjectTarget(), m_targets.GetItemTarget()); if (castResult != SPELL_CAST_OK) return castResult; } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 04e90d2083b..3e374b62cd1 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1721,13 +1721,14 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, Unit const* target, b return SPELL_CAST_OK; } -SpellCastResult SpellInfo::CheckExplicitTarget(Unit const* caster, WorldObject const* target) const +SpellCastResult SpellInfo::CheckExplicitTarget(Unit const* caster, WorldObject const* target, Item const* itemTarget) const { uint32 neededTargets = GetExplicitTargetMask(); if (!target) { if (neededTargets & (TARGET_FLAG_UNIT_MASK | TARGET_FLAG_GAMEOBJECT_MASK | TARGET_FLAG_CORPSE_MASK)) - return SPELL_FAILED_BAD_TARGETS; + if (!(neededTargets & TARGET_FLAG_GAMEOBJECT_ITEM) || !itemTarget) + return SPELL_FAILED_BAD_TARGETS; return SPELL_CAST_OK; } diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 584c41fdddd..b79e50db001 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -24,6 +24,7 @@ class Unit; class Player; +class Item; class Spell; class SpellInfo; struct SpellChainNode; @@ -442,7 +443,7 @@ public: SpellCastResult CheckShapeshift(uint32 form) const; SpellCastResult CheckLocation(uint32 map_id, uint32 zone_id, uint32 area_id, Player const* player = NULL) const; SpellCastResult CheckTarget(Unit const* caster, Unit const* target, bool implicit = true) const; - SpellCastResult CheckExplicitTarget(Unit const* caster, WorldObject const* target) const; + SpellCastResult CheckExplicitTarget(Unit const* caster, WorldObject const* target, Item const* itemTarget = NULL) const; bool CheckTargetCreatureType(Unit const* target) const; SpellSchoolMask GetSchoolMask() const; |