private static void Add(DetectedTargetedSpellData args)
        {
            if (args == null || DetectedTargetedSpells.Contains(args))
            {
                Console.WriteLine("Invalid DetectedTargetedSpellData");
                return;
            }

            if (args.Missile != null)
            {
                var detect = DetectedTargetedSpells.FirstOrDefault(s => s.Caster.IdEquals(args.Caster) && s.Missile == null && s.Data.Equals(args.Data));
                if (detect != null)
                {
                    DetectedTargetedSpells.Remove(detect);
                }
            }

            if (args.Caster.Hero == Champion.Nautilus && args.Data.slot == SpellSlot.R && args.Target != null)
            {
                args.Start = args.Caster.ServerPosition.Extend(args.Target, args.Caster.GetAutoAttackRange(args.Target)).To3DWorld();
                if (args.Caster.Distance(args.Target) < args.Caster.GetAutoAttackRange(args.Target))
                {
                    args.Speed = int.MaxValue;
                }
            }

            OnTargetedSpellDetected.Invoke(args);
            DetectedTargetedSpells.Add(args);
        }
Example #2
0
        private static void Obj_AI_Base_OnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
        {
            var caster = sender as AIHeroClient;
            var hero   = args.Target as AIHeroClient;

            if (caster == null || !caster.IsEnemy)
            {
                return;
            }

            if (Database.SkillShotSpells.SkillShotsSpellsList.Any(s => s.hero == caster.Hero && s.slot == args.Slot && args.SData.Name.Equals(s.SpellName, StringComparison.CurrentCultureIgnoreCase)))
            {
                //Chat.Print("OnProcessSpellCast Detected " + args.SData.Name);
                var spell = Database.SkillShotSpells.SkillShotsSpellsList.FirstOrDefault(s => s.hero == caster.Hero && s.slot == args.Slot && args.SData.Name.Equals(s.SpellName, StringComparison.CurrentCultureIgnoreCase));
                if (spell.DetectByMissile)
                {
                    return;
                }
                OnSkillShotDetected?.Invoke(caster, args, spell, args.Start, args.End, spell.Range, spell.Width, null);
            }

            if (hero == null)
            {
                return;
            }
            if (Database.TargetedSpells.TargetedSpellsList.Any(s => s.hero == caster.Hero && s.slot == args.Slot))
            {
                var spell = Database.TargetedSpells.TargetedSpellsList.FirstOrDefault(s => s.hero == caster.Hero && s.slot == args.Slot);
                OnTargetedSpellDetected?.Invoke(caster, hero, args, spell);
            }
        }
Example #3
0
        private static void Game_OnTick(EventArgs args)
        {
            DetectedTargetedSpells.RemoveAll(s => s.Ended);

            foreach (var spell in DetectedTargetedSpells)
            {
                OnTargetedSpellDetected.Invoke(spell);
            }
        }
Example #4
0
        private static void Add(DetectedTargetedSpellData data)
        {
            if (data == null || DetectedTargetedSpells.Contains(data))
            {
                Console.WriteLine("Invalid DetectedTargetedSpellData");
                return;
            }

            OnTargetedSpellDetected.Invoke(data);
            DetectedTargetedSpells.Add(data);
        }