private static void AddDetectedSpells()
{
bool spellAdded = false;
foreach (KeyValuePair<int, Spell> entry in DetectedSpells)
{
Spell spell = entry.Value;
float evadeTime, spellHitTime;
spell.CanHeroEvade(MyHero, out evadeTime, out spellHitTime);
spell.SpellHitTime = spellHitTime;
spell.EvadeTime = evadeTime;
var extraDelay = Game.Ping + Config.Properties.GetInt(ConfigValue.ExtraPingBuffer);
if (spell.SpellHitTime - extraDelay < 1500 && CanHeroWalkIntoSpell(spell))
//if(true)
{
Spell newSpell = spell;
int spellId = spell.SpellId;
if (!DrawSpells.ContainsKey(spell.SpellId))
{
DrawSpells.Add(spellId, newSpell);
}
//var spellFlyTime = Evade.GetTickCount - spell.startTime;
if (spellHitTime < ConfigValue.SpellDetectionTime.GetInt())
{
continue;
}
if (EvadeUtils.TickCount - spell.StartTime < ConfigValue.ReactionTime.GetInt())
{
continue;
}
var dodgeInterval = ConfigValue.DodgeInterval.GetInt();
if (AdEvade.LastPosInfo != null && dodgeInterval > 0)
{
var timeElapsed = EvadeUtils.TickCount - AdEvade.LastPosInfo.Timestamp;
if (dodgeInterval > timeElapsed)
{
//var delay = dodgeInterval - timeElapsed;
//DelayAction.Add((int)delay, () => SpellDetector_OnProcessDetectedSpells());
continue;
}
}
if (!Spells.ContainsKey(spell.SpellId))
{
if (Config.Properties.GetSpell(newSpell.Info.SpellName).Dodge && !(AdEvade.IsDodgeDangerousEnabled() && (int) newSpell.Dangerlevel < (int) SpellDangerLevel.High))
{
if (newSpell.SpellType == SpellType.Circular
&& !ConfigValue.DodgeCircularSpells.GetBool())
{
//return spellID;
continue;
}
Spells.Add(spellId, newSpell);
spellAdded = true;
}
}
if (ConfigValue.CheckSpellCollision.GetBool() && spell.PredictedEndPos != Vector2.Zero)
{
spellAdded = false;
}
}
}
if (spellAdded && OnProcessDetectedSpells != null)
{
OnProcessDetectedSpells();
}
}