Fix crash in Aura::Update.

Check if target has Invisibility or Stealth aura before checking IsVisibleForOrDetect to allow cast spells on invisible triggers and fix pet linked spells.
Send correct message to client if target is not visible for caster.
Sorry for my previous buging commits.

--HG--
branch : trunk
This commit is contained in:
krz committed 2009-06-07 19:06:51 +02:00
1 parent 18f50212b0
commit 5e87f3144c
2 files changed
+11 -6

No files matched your search

+7 -5
View File
@@ -2241,11 +2241,13 @@ void Spell::cast(bool skipCheck)
// update pointers base at GUIDs to prevent access to non-existed already object
UpdatePointers();
if(m_targets.getUnitTarget() && m_targets.getUnitTarget()->isAlive() && !m_targets.getUnitTarget()->isVisibleForOrDetect(m_caster, true))
{
cancel();
return;
}
if(Unit *pTarget = m_targets.getUnitTarget())
if(pTarget->isAlive() && (pTarget->HasAuraType(SPELL_AURA_MOD_STEALTH) || pTarget->HasAuraType(SPELL_AURA_MOD_INVISIBILITY)) && !pTarget->IsFriendlyTo(m_caster) && !pTarget->isVisibleForOrDetect(m_caster, true))
{
SendCastResult(SPELL_FAILED_BAD_TARGETS);
finish(false);
return;
}
SetExecutedCurrently(true);
uint8 castResult = 0;
+4 -1
View File
@@ -543,7 +543,10 @@ void Aura::Update(uint32 diff)
}
// Channeled aura required check distance from caster except in possessed cases
Unit *pRealTarget = (GetSpellProto()->EffectApplyAuraName[m_effIndex] == SPELL_AURA_PERIODIC_TRIGGER_SPELL && !IsAreaOfEffectSpell(sSpellStore.LookupEntry(GetSpellProto()->EffectTriggerSpell[m_effIndex])) && GetTriggerTarget()) ? GetTriggerTarget() : m_target;
Unit *pRealTarget = (GetSpellProto()->EffectApplyAuraName[m_effIndex] == SPELL_AURA_PERIODIC_TRIGGER_SPELL &&
sSpellStore.LookupEntry(GetSpellProto()->EffectTriggerSpell[m_effIndex]) &&
!IsAreaOfEffectSpell(sSpellStore.LookupEntry(GetSpellProto()->EffectTriggerSpell[m_effIndex])) &&
GetTriggerTarget()) ? GetTriggerTarget() : m_target;
if(IsChanneledSpell(m_spellProto) && !pRealTarget->isPossessed() && pRealTarget->GetGUID() != GetCasterGUID())