Range calculation fix.

Channeled SPELL_AURA_PERIODIC_TRIGGER_SPELL will now not trigger spell if target is out of range.
Channeled periodic damage auras will now not deal damage if target is out of range.

--HG--
branch : trunk
This commit is contained in:
krz
2009-05-24 16:18:19 +02:00
parent dd9d6ecad8
commit 4423ac3194
2 changed files with 7 additions and 6 deletions
+1 -1
View File
@@ -411,7 +411,7 @@ class TRINITY_DLL_SPEC WorldObject : public Object
float GetObjectSize() const
{
return ( m_valuesCount > UNIT_FIELD_BOUNDINGRADIUS ) ? m_floatValues[UNIT_FIELD_BOUNDINGRADIUS] : DEFAULT_WORLD_OBJECT_SIZE;
return ( m_valuesCount > UNIT_FIELD_COMBATREACH ) ? m_floatValues[UNIT_FIELD_COMBATREACH] : DEFAULT_WORLD_OBJECT_SIZE;
}
bool IsPositionValid() const;
void UpdateGroundPositionZ(float x, float y, float &z) const;
+6 -5
View File
@@ -543,7 +543,11 @@ void Aura::Update(uint32 diff)
}
// Channeled aura required check distance from caster except in possessed cases
if(IsChanneledSpell(m_spellProto) && m_caster_guid != m_target->GetGUID() && !m_target->isPossessed())
Unit *pRealTarget = (GetSpellProto()->EffectApplyAuraName[GetEffIndex()] == SPELL_AURA_PERIODIC_TRIGGER_SPELL) ? GetTriggerTarget() : m_target;
if(!pRealTarget)
return;
if(IsChanneledSpell(m_spellProto) && !pRealTarget->isPossessed() && pRealTarget->GetGUID() != GetCasterGUID())
{
Unit* caster = GetCaster();
if(!caster)
@@ -569,11 +573,8 @@ void Aura::Update(uint32 diff)
if(Player* modOwner = caster->GetSpellModOwner())
modOwner->ApplySpellMod(GetId(), mod, radius,NULL);
if(!caster->IsWithinDistInMap(m_target,radius))
{
m_target->RemoveAura(GetId(),GetEffIndex());
if(!caster->IsWithinDistInMap(pRealTarget, radius))
return;
}
}
if(m_isPeriodic && (m_duration >= 0 || m_isPassive || m_permanent))