All pastes #515564 Raw Edit

Mine

public text v1 · immutable
#515564 ·published 2007-05-28 08:13 UTC
rendered paste body
Index: 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;