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:
+1
-1
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user