public static void Game_OnUpdate(EventArgs args) { if (!isloaded) { me = ObjectManager.LocalHero; if (!Game.IsInGame || me == null) { return; } if (me.Team == Team.Dire) foreach (var creepWave in CreepWaves) creepWave.Coords.Reverse(); isloaded = true; } if (me == null || !me.IsValid) { isloaded = false; me = ObjectManager.LocalHero; return; } if (me.ClassID != ClassID.CDOTA_Unit_Hero_Meepo || Game.IsPaused || Game.IsChatOpen) { return; } var stackKey = Menu.Item("Stack").GetValue<KeyBind>().Active; var lanePush = Menu.Item("LanePush").GetValue<KeyBind>().Active; var JungleFarm = Menu.Item("JungleFarm").GetValue<KeyBind>().Active; _menuValue = Menu.Item("enabledAbilities").GetValue<AbilityToggler>(); W = me.Spellbook.Spell2; var wRadius = W.GetCastRange() - 30; var movementspeed = me.MovementSpeed; travels = me.Inventory.Items.FirstOrDefault(item => item.Name.Contains("item_travel_boots")); meepos = ObjectMgr.GetEntities<Meepo>().Where(meepo => meepo.Team == me.Team && !meepo.Equals(me)).ToList(); var seconds = ((int)Game.GameTime) % 60; if (JungleCamps.FindAll(x => x.meepos != null).Count != meepos.Count || seconds == 1) { foreach (var camp in JungleCamps) { camp.meepos = null; camp.Stacking = false; camp.Farming = false; camp.State = 0; } } if (seconds == 0) { foreach (var camp in JungleCamps) { camp.meepos = null; camp.Stacking = false; camp.Farming = false; camp.Empty = false; camp.State = 0; } } #region lanepush if (lanePush && Utils.SleepCheck("lanePush")) { try { var creeps = ObjectManager.GetEntities<Unit>() .Where( x => x.IsAlive && x.IsVisible && x.Team != me.Team && (x.ClassID == ClassID.CDOTA_BaseNPC_Creep_Lane || x.ClassID == ClassID.CDOTA_BaseNPC_Creep || x.ClassID == ClassID.CDOTA_BaseNPC_Creep_Neutral || x.ClassID == ClassID.CDOTA_BaseNPC_Creep_Siege )) .OrderByDescending(x => x.Distance2D(new Vector3(0, 0, 0))).ToList(); var creepdel = new List<Unit>(); foreach (var creepWave in CreepWaves) { creepdel.AddRange(creepWave.Creeps.Where(creep => creeps.All(x => x.Handle != creep.Handle))); foreach (var creep in creepdel) creepWave.Creeps.Remove(creep); } foreach (var creep in creeps) { float[] distance = { float.MaxValue }; var name = ""; foreach (var creepWave in CreepWaves) { foreach (var pos in creepWave.Coords.Where(pos => distance[0] > pos.Distance2D(creep))) { name = creepWave.Name; distance[0] = pos.Distance2D(creep); } } if (CreepWaves.Any(x => x.Name == name && !x.Creeps.Contains(creep))) CreepWaves.First(x => x.Name == name && !x.Creeps.Contains(creep)).Creeps.Add(creep); } foreach (var creepWave in CreepWaves) { if (creepWave.Creeps.Count > 0) creepWave.Position = new Vector3( creepWave.Creeps.Average(x => x.Position.X), creepWave.Creeps.Average(x => x.Position.Y), creepWave.Creeps.Average(x => x.Position.Z)); } } catch (Exception e) { Console.WriteLine("Error LanePush" + e); } if (meepos.Count > 0) { try { foreach (var meepo in meepos) { if (!CreepWaves.Any(x => x.meepo != null && x.meepo.Handle == meepo.Handle) && CreepWaves.Count(x => x.meepo == null) > 0) CreepWaves.First(x => x.meepo == null).meepo = meepo; } } catch (Exception) { Console.WriteLine("Error LanePush 4"); } try { foreach (var creepWave in CreepWaves.Where(x => x.meepo != null)) { if (GetClosestCreep(creepWave) != null) { if (creepWave.meepo.Distance2D(GetClosestWave(creepWave)) < 300 || creepWave.meepo.Distance2D(creepWave.Position) < 1000) creepWave.meepo.Attack(GetClosestCreep(creepWave)); else creepWave.meepo.Move(creepWave.Position); } else { if (creepWave.meepo.Distance2D(GetClosestWave(creepWave)) > 100) { creepWave.meepo.Move(GetClosestWave(creepWave)); creepWave.Position = GetNextWave(creepWave); } else { creepWave.meepo.Move(GetNextWave(creepWave)); creepWave.Position = GetNextWave(creepWave); } } if (creepWave.meepo.Modifiers.Any( m => m.Name == "modifier_kill" && Math.Abs(m.Duration - m.ElapsedTime - 1) < 0) || meepos.All(x => x.Handle != creepWave.meepo.Handle)) creepWave.meepo = null; } } catch (Exception e) { Console.WriteLine("Error LanePush 5" + e); } } Utils.Sleep(500, "lanePush"); } #endregion #region Stack else if (stackKey && meepos.Count > 0 && Utils.SleepCheck("wait")) { foreach (var meepo in meepos) { if (!Check(meepo)) { JungleCamps.Find(x => x.Id == GetClosestCamp(meepo, true, false).Id).meepos = meepo; JungleCamps.Find(x => x.Id == GetClosestCamp(meepo, true, false).Id).Stacking = true; } else { var illusionCamps = CheckMeepo(meepo); switch (illusionCamps.State) { case 0: if (meepo.Distance2D(illusionCamps.WaitPosition) < 5) illusionCamps.State = 1; else meepo.Move(illusionCamps.WaitPosition); Utils.Sleep(500, "wait"); break; case 1: creepscount = CreepCount(illusionCamps.meepos, 800); if (creepscount == 0) { JungleCamps.Find(x => x.Id == illusionCamps.Id).meepos = null; JungleCamps.Find(x => x.Id == illusionCamps.Id).Empty = true; JungleCamps.Find(x => x.Id == illusionCamps.Id).Stacking = false; JungleCamps.Find(x => x.Id == GetClosestCamp(meepo, true, false).Id).meepos = meepo; JungleCamps.Find(x => x.Id == GetClosestCamp(meepo, true, false).Id).Stacking = true; } else if (seconds >= illusionCamps.Starttime - 5) { closestNeutral = GetNearestCreepToPull(illusionCamps.meepos, 800); stackPosition = illusionCamps.StackPosition; var moveTime = illusionCamps.Starttime - (GetDistance2D(illusionCamps.meepos.Position, closestNeutral.Position) + (closestNeutral.IsRanged ? closestNeutral.AttackRange : closestNeutral.RingRadius)) / movementspeed; illusionCamps.AttackTime = (int)moveTime; illusionCamps.State = 2; } Utils.Sleep(500, "wait"); break; case 2: if (seconds >= illusionCamps.AttackTime) { closestNeutral = GetNearestCreepToPull(illusionCamps.meepos, 1200); stackPosition = GetClosestCamp(illusionCamps.meepos, true, false).StackPosition; illusionCamps.meepos.Attack(closestNeutral); illusionCamps.State = 3; var tWait = (int) (((GetDistance2D(illusionCamps.meepos.Position, closestNeutral.Position)) / movementspeed) * 1000 + Game.Ping); Utils.Sleep(tWait, "" + illusionCamps.meepos.Handle); } break; case 3: if (Utils.SleepCheck("" + illusionCamps.meepos.Handle)) { var poof = meepo.Spellbook.SpellW; if (_menuValue.IsEnabled(poof.Name) && poof.CanBeCasted() && Creepcountall(wRadius) > Creepcountall(600) / 2) poof.UseAbility(meepo); illusionCamps.meepos.Move(illusionCamps.StackPosition); illusionCamps.State = 4; } break; case 4: meepo.Move(illusionCamps.StackPosition); Utils.Sleep(1000, "wait"); break; default: illusionCamps.State = 0; break; } } } } #endregion Stack #region Farm else if (JungleFarm && meepos.Count > 0 && Utils.SleepCheck("farm")) { foreach (var meepo in meepos) { if (!Check(meepo)) { JungleCamps.Find(x => x.Id == GetClosestCamp(meepo, false, false).Id).meepos = meepo; JungleCamps.Find(x => x.Id == GetClosestCamp(meepo, false, false).Id).Farming = true; } else { var illusionCamps = CheckMeepo(meepo); if (meepo.Distance2D(illusionCamps.Position) > 100) { meepo.Move(illusionCamps.Position); } else { var poof = meepo.Spellbook.SpellW; if (poof.CanBeCasted() && CreepCount(meepo, 300) > 0 && _menuValue.IsEnabled(poof.Name) && Creepcountall(wRadius) >= Creepcountall(600) / 2) poof.UseAbility(meepo); meepo.Attack(GetNearestCreepToPull(illusionCamps.meepos, 500)); } } } Utils.Sleep(1000, "farm"); } #endregion Farm }