private void Game_OnProcessSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args) { if (!hero.IsMe) { return; } if (hero.NetworkId != myHero.NetworkId) { Console.WriteLine("IS NOT ME"); } /*if (args.SData.Name.Contains("Recall")) * { * var distance = lastStopPosition.Distance(args.Start.To2D()); * float moveTime = 1000 * distance / myHero.MoveSpeed; * * Console.WriteLine("Extra dist: " + distance + " Extra Delay: " + moveTime); * }*/ string name; if (SpellDetector.channeledSpells.TryGetValue(args.SData.Name, out name)) { Evade.isChanneling = true; Evade.channelPosition = myHero.ServerPosition.To2D(); } if (ObjectCache.menuCache.cache["CalculateWindupDelay"].GetValue <bool>()) { var castTime = (hero.Spellbook.CastTime - Game.Time) * 1000; if (castTime > 0 && !Orbwalking.IsAutoAttackLS(args.SData.Name) && Math.Abs(castTime - myHero.AttackCastDelay * 1000) > 1) { Evade.lastWindupTime = EvadeUtils.TickCount + castTime - Game.Ping / 2; if (Evade.isDodging) { SpellDetector_OnProcessDetectedSpells(); //reprocess } } } }