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
}