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); }
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); } }
private static void Game_OnTick(EventArgs args) { DetectedTargetedSpells.RemoveAll(s => s.Ended); foreach (var spell in DetectedTargetedSpells) { OnTargetedSpellDetected.Invoke(spell); } }
private static void Add(DetectedTargetedSpellData data) { if (data == null || DetectedTargetedSpells.Contains(data)) { Console.WriteLine("Invalid DetectedTargetedSpellData"); return; } OnTargetedSpellDetected.Invoke(data); DetectedTargetedSpells.Add(data); }