AkaCore.AkaLib.Evade.SkillshotDetector.OnProcessSpellCast C# (CSharp) Метод

OnProcessSpellCast() приватный статический Метод

private static OnProcessSpellCast ( Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args ) : void
sender Obj_AI_Base
args GameObjectProcessSpellCastEventArgs
Результат void
        private static void OnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
        {
            if (!sender.IsValid<AIHeroClient>() || sender.Team == ObjectManager.Player.Team)
                {
                    return;
                }
                if (args.SData.Name == "dravenrdoublecast")
                {
                    DetectedSkillshots.RemoveAll(
                        i => i.Unit.NetworkId == sender.NetworkId && i.SpellData.SpellName == "DravenRCast");
                }
                var spellData = SpellDatabase.GetByName(args.SData.Name);
                if (spellData == null)
                {
                    return;
                }
                var startPos = new Vector2();
                if (spellData.FromObject != "")
                {
                    foreach (var obj in ObjectManager.Get<GameObject>().Where(i => i.Name.Contains(spellData.FromObject)))
                    {
                        startPos = obj.Position.To2D();
                    }
                }
                else
                {
                    startPos = sender.ServerPosition.To2D();
                }
                if (spellData.FromObjects != null && spellData.FromObjects.Length > 0)
                {
                    foreach (var obj in
                        ObjectManager.Get<GameObject>().Where(i => i.IsEnemy && spellData.FromObject.Contains(i.Name)))
                    {
                        var start = obj.Position.To2D();
                        var end = start + spellData.Range * (args.End.To2D() - obj.Position.To2D()).Normalized();
                        TriggerOnDetectSkillshot(
                            DetectionType.ProcessSpell,
                            spellData,
                            Extensions.GameTimeTickCount - Game.Ping / 2,
                            start,
                            end,
                            sender);
                    }
                }
                if (!startPos.IsValid())
                {
                    return;
                }
                var endPos = args.End.To2D();
                if (spellData.SpellName == "LucianQ" && args.Target != null
                    && args.Target.NetworkId == ObjectManager.Player.NetworkId)
                {
                    return;
                }
                var direction = (endPos - startPos).Normalized();
                if (startPos.Distance(endPos) > spellData.Range || spellData.FixedRange)
                {
                    endPos = startPos + direction * spellData.Range;
                }
                if (spellData.ExtraRange != -1)
                {
                    endPos = endPos
                             + Math.Min(spellData.ExtraRange, spellData.Range - endPos.Distance(startPos)) * direction;
                }
                TriggerOnDetectSkillshot(
                    DetectionType.ProcessSpell,
                    spellData,
                    Extensions.GameTimeTickCount - Game.Ping / 2,
                    startPos,
                    endPos,
                    sender);
        }