Core/Spells: Fix logic in AnyDeadUnitSpellTargetInRangeCheck - spells using this should now correctly check target requirements. This is an alternative fix to #4112.

This commit is contained in:
QAston
2011-12-24 08:40:30 +01:00
parent eecc4b58a7
commit 15bd8f3cd5
2 changed files with 5 additions and 4 deletions
@@ -344,7 +344,7 @@ bool AnyDeadUnitObjectInRangeCheck::operator()(Creature* u)
bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Player* u) bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Player* u)
{ {
return AnyDeadUnitObjectInRangeCheck::operator()(u) return AnyDeadUnitObjectInRangeCheck::operator()(u)
&& i_spellInfo->CheckTarget(i_searchObj, u, true) && (i_spellInfo->CheckTarget(i_searchObj, u, true) == SPELL_CAST_OK)
&& i_searchObj->IsTargetMatchingCheck(u, i_check); && i_searchObj->IsTargetMatchingCheck(u, i_check);
} }
@@ -352,14 +352,14 @@ bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Corpse* u)
{ {
Player* owner = ObjectAccessor::FindPlayer(u->GetOwnerGUID()); Player* owner = ObjectAccessor::FindPlayer(u->GetOwnerGUID());
return owner && AnyDeadUnitObjectInRangeCheck::operator()(u) return owner && AnyDeadUnitObjectInRangeCheck::operator()(u)
&& i_spellInfo->CheckTarget(i_searchObj, owner, true) && (i_spellInfo->CheckTarget(i_searchObj, owner, true) == SPELL_CAST_OK)
&& i_searchObj->IsTargetMatchingCheck(owner, i_check); && i_searchObj->IsTargetMatchingCheck(owner, i_check);
} }
bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Creature* u) bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Creature* u)
{ {
return AnyDeadUnitObjectInRangeCheck::operator()(u) return AnyDeadUnitObjectInRangeCheck::operator()(u)
&& i_spellInfo->CheckTarget(i_searchObj, u, true) && (i_spellInfo->CheckTarget(i_searchObj, u, true) == SPELL_CAST_OK)
&& i_searchObj->IsTargetMatchingCheck(u, i_check); && i_searchObj->IsTargetMatchingCheck(u, i_check);
} }
+2 -1
View File
@@ -5653,7 +5653,8 @@ SpellCastResult Spell::CheckRange(bool strict)
if (m_spellInfo->RangeEntry) if (m_spellInfo->RangeEntry)
{ {
// self cast is used for triggered spells, no range checking needed // check needed by 68766 51693 - both spells are cast on enemies and have 0 max range
// these are triggered by other spells - possibly we should omit range check in that case?
if (m_spellInfo->RangeEntry->ID == 1) if (m_spellInfo->RangeEntry->ID == 1)
return SPELL_CAST_OK; return SPELL_CAST_OK;