public void StartCharmBot() { var process = Process.GetProcesses().Where(p => p.ProcessName.ToLower().Contains("league of legends")).FirstOrDefault(); var reader = new ProcessMemoryReader() { Process = process }; reader.Open(); dispatcher.BeginInvoke((Action)(() => { MemoryReaderStatusChanged?.Invoke(true); })); try { GameObject localPlayer = new GameObject(reader, reader.ReadInt(reader.ModuleBaseAddr + Offsets.LocalPlayer)); int objectManagerPointer = reader.ReadInt(reader.ModuleBaseAddr + Offsets.ObjectManager); float charmEffectSeenAt = -1; var seenCharm = false; while (true) { process = Process.GetProcesses().Where(p => p.ProcessName.ToLower().Contains("league of legends")).FirstOrDefault(); if (process == null) { break; } var gameObjects = GameObject.GetGameObjects(reader, objectManagerPointer); var enemyChampions = gameObjects.Where(g => g.Team != localPlayer.Team && isChampion(g.Name) || (g.Name?.ToLower()?.Contains("dummy") ?? false)).ToList(); var ahriCharm = gameObjects.Where(c => c.SpellName == "AhriSeduceMissile").FirstOrDefault(); var gameTime = reader.ReadFloat(reader.ModuleBaseAddr + Offsets.GameTime); foreach (var champ in enemyChampions) { champ.ReadBuffs(); var ahriCharmBuff = champ.ActiveBuffs.FirstOrDefault(b => b.Name == "AhriSeduce" && gameTime < b.EndTime && charmEffectSeenAt < b.StartTime); if (ahriCharmBuff != null) { if (!seenCharm) { CharmBotCharmCast?.Invoke(gameTime); } CharmBotCharmHit?.Invoke(gameTime, champ.Name); charmEffectSeenAt = ahriCharmBuff.StartTime; } } if (ahriCharm != null) { if (!seenCharm) { CharmBotCharmCast?.Invoke(gameTime); } seenCharm = true; } else { seenCharm = false; } Thread.Sleep(10); } } catch (Exception) { } finally { dispatcher.BeginInvoke((Action)(() => { MemoryReaderStatusChanged?.Invoke(false); })); reader.Close(); } }