private static void SC2TimerDetector(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { try { if (!sender.IsValid) return; var check = Program.SC2TimerList.FirstOrDefault(d => d.Caster == sender && d.ChampionName == sender.BaseSkinName && d.Slot == args.Slot); if (check != null) { var cooldown = (sender.Spellbook.GetSpell(args.Slot).CooldownExpires - Game.Time) * 1000f; check.FullTime = cooldown; check.StartTime = Utility.TickCount; check.StartTime = Utility.TickCount; check.EndTime = cooldown + Utility.TickCount; return; } var database = SC2TimerDatabase.Database.FirstOrDefault(d => ((d.SC2Type == SC2Type.SummonerSpell && d.Name == args.SData.Name) || (d.SC2Type == SC2Type.Spell && d.ChampionName == sender.BaseSkinName && d.Slot == args.Slot))); if (database != null) { var cooldown = (sender.Spellbook.GetSpell(args.Slot).CooldownExpires - Game.Time) * 1000f; Program.SC2TimerList.Add(new SC2Timer { SC2Type = database.SC2Type, Slot = args.Slot, Team = sender.GetTeam(), Caster = sender, ChampionName = sender.BaseSkinName, Name = args.SData.Name, MenuCode = database.GetMenuCode(), DisplayName = database.GetDisplayName(), FullTime = cooldown, StartTime = Utility.TickCount, EndTime = cooldown + Utility.TickCount, Cancel = false, Global = database.Global, SpriteName = database.SpriteName, }); return; } } catch (Exception e) { e.ErrorMessage("SC2TIMER_DETECTOR", args.SData.Name); } }