private static void Spellbook_OnStopCast(Obj_AI_Base sender, SpellbookStopCastEventArgs args) { var caster = sender as AIHeroClient; if (caster == null || !caster.ChampionName.Equals("Sion")) { return; } SkillshotsDetected.RemoveAll(s => s.Caster.IdEquals(caster)); // Clear all sion Skills when he stops casting }
private static void Game_OnTick(EventArgs args) { foreach (var LuxR in DetectedLuxRParticals) { var data = SkillshotDatabase.List.FirstOrDefault(s => s.hero.Equals(Champion.Lux) && s.slot.Equals(SpellSlot.R)); if (data == null) { continue; } if (SkillshotsDetected.Any(s => s.Caster.IdEquals(LuxR.caster) && s.Data.Equals(data))) { continue; } Vector3?start = null; Vector3?end = null; if (start == null) { if (LuxR.caster != null && LuxR.caster.IsHPBarRendered) { start = LuxR.caster.ServerPosition; } else { if (LuxR.Start.HasValue) { start = LuxR.Start; } else { if (LuxR.Mid.HasValue && LuxR.End.HasValue) { start = LuxR.End.Value.Extend(LuxR.Mid.Value, data.Range).To3DWorld(); } } } } if (end == null) { if (LuxR.End.HasValue) { end = LuxR.End.Value; } else { if (LuxR.caster != null && LuxR.caster.IsHPBarRendered) { if (LuxR.End.HasValue) { end = LuxR.End.Value; } if (LuxR.Mid.HasValue) { end = LuxR.caster.ServerPosition.Extend(LuxR.Mid.Value, data.Range).To3DWorld(); } else { if (LuxR.Start.HasValue) { end = LuxR.caster.ServerPosition.Extend(LuxR.Start.Value, data.Range).To3DWorld(); } } } else { if (LuxR.Start.HasValue && LuxR.Mid.HasValue) { end = LuxR.Start.Value.Extend(LuxR.Mid.Value, data.Range).To3DWorld(); } } } } if (start.HasValue && end.HasValue) { if (!SkillshotsDetected.Any(s => s.Caster.IdEquals(LuxR.caster) && s.Data.Equals(data))) { var detected = new DetectedSkillshotData { Caster = LuxR.caster, StartTick = Core.GameTickCount, Start = start.Value.To2D(), End = end.Value.To2D(), Data = data }; Add(detected); } } } foreach (var skill in SkillshotsDetected) { OnSkillShotDetected.Invoke(skill); } DetectedLuxRParticals.RemoveAll(s => Core.GameTickCount - s.StartTick > s.Data.CastDelay); SkillshotsDetected.RemoveAll(s => s.Ended); }