rendered paste bodyIndex: src/game/EventMgr.h
===================================================================
--- src/game/EventMgr.h (revision 87)
+++ src/game/EventMgr.h (working copy)
@@ -165,7 +165,7 @@
EVENT_AURA_PERIODIC_REGEN,
EVENT_AURA_PERIODIC_HEALPERC,
EVENT_ATTACK_TIMEOUT,
-
+ EVENT_AURA_ADD,
};
struct TimedEvent
Index: src/game/Spell.cpp
===================================================================
--- src/game/Spell.cpp (revision 87)
+++ src/game/Spell.cpp (working copy)
@@ -1935,7 +1935,11 @@
Target->RemoveAurasByBuffType(m_spellInfo->buffType, m_caster->GetGUID());
// spells that proc on spell cast, some talents
if(p_caster)
+ {
+ float dist = p_caster->CalcDistance(Target);
+ float time = ((dist*1000.0)/m_spellInfo->speed);
p_caster->HandleProc(PROC_ON_CAST_SPECIFIC_SPELL,Target, m_spellInfo);
+ }
std::map<uint32,Aura*>::iterator itr=Target->tmpAura.find(m_spellInfo->Id);
if(itr!=Target->tmpAura.end())
{
@@ -1947,7 +1951,10 @@
for(int i=0;i<itr->second->GetSpellProto()->procCharges-1;i++)
{
aur = new Aura(itr->second->GetSpellProto(),itr->second->GetDuration(),itr->second->GetCaster(),itr->second->GetTarget());
- Target->AddAura(aur);
+ if(time<=100)
+ Target->AddAura(aur);
+ else
+ sEventMgr.AddEvent(Target, &Unit::AddAura, aur, EVENT_AURA_ADD, uint32(time), 1);
aur=NULL;
}
SpellCharge charge;
@@ -1957,8 +1964,11 @@
charge.lastproc = 0;charge.FromProc=false;
Target->m_chargeSpells.insert(make_pair(itr->second->GetSpellId(),charge));
}
- Target->AddAura(itr->second); // the real spell is added last so the modifier is removed last
- Target->tmpAura.erase(itr);
+ if(time<=100)
+ Target->AddAura(itr->second); // the real spell is added last so the modifier is removed last
+ else
+ sEventMgr.AddEvent(Target, &Unit::AddAura, itr->second, EVENT_AURA_ADD, uint32(time), 1);
+ Target->tmpAura.erase(itr);
}
}
uint32 spellid = 0;