public static void Attack(this Creature creature, bool packetOnly) { if (packetOnly) { Tibia.Packets.Outgoing.AttackPacket.Send(Core.Client, (uint)creature.Id); } else { creature.Attack(); } }
private static void AutoPush(this Hero me) { var handle = me.Handle; var creeps = Creeps.All.Where(x => x != null && x.IsValid && x.IsAlive && x.IsVisible).ToList(); var creepsEnemy = creeps.Where(x => x.Team != MyHero.Team).ToList(); var creepsAlly = creeps.Where(x => x.Team == MyHero.Team).ToList(); var enemyHeroes = Heroes.GetByTeam(MyHero.GetEnemyTeam()).Where(x=>x.IsAlive).ToList(); var towers = Towers.All.Where(x => x.Team != MyHero.Team).Where(x => x.IsAlive).ToList(); var creepWithEnemy = creepsAlly.FirstOrDefault( x => x.MaximumHealth*65/100 < x.Health && creepsEnemy.Any(y => y.Distance2D(x) <= 1000)); var travelBoots = me.FindItem("item_travel_boots") ?? me.FindItem("item_travel_boots_2"); if (travelBoots != null && creepWithEnemy != null && Menu.Item("AutoPush.TravelBoots").GetValue<bool>() && Utils.SleepCheck("TravelBoots."+handle)) { if (travelBoots.CanBeCasted() && !creepsEnemy.Any(x => x.Distance2D(me) <= 1000)) { travelBoots.UseAbility(creepWithEnemy); Utils.Sleep(500, "TravelBoots."+handle); return; } } var nearestTower = towers.OrderBy(y => y.Distance2D(me)) .FirstOrDefault() ?? Fountains.GetEnemyFountain(); var fountain = Fountains.GetAllyFountain(); var curlane = GetCurrentLane(me); var clospoint = GetClosestPoint(curlane); var useThisShit = clospoint.Distance2D(fountain) - 250 > me.Distance2D(fountain); var name = MeepoSet.Find(x => x.Handle == me.Handle).Handle.ToString(); if (nearestTower != null && Utils.SleepCheck(name + "attack")) { var pos = curlane == "mid" || !useThisShit ? nearestTower.Position : clospoint; var dist = Menu.Item("AutoPush.EscapeRange").GetValue<Slider>().Value; if (Menu.Item("AutoPush.EscapeFromAnyEnemyHero").GetValue<bool>() && enemyHeroes.Any(x => x.Distance2D(me) <= dist)) //escape from hero { OrderStates[handle] = OrderState.Escape; NeedHeal[handle] = true; } else if (creepsAlly.Any(x => x.Distance2D(nearestTower) <= 800) || me.Distance2D(nearestTower) > 800) { //under tower var hpwasChanged = CheckForChangedHealth(me); if (hpwasChanged) { var allyCreep = creepsAlly.OrderBy(x => x.Distance2D(me)).First(); if (allyCreep != null) { var towerPos = nearestTower.Position; var ang = allyCreep.FindAngleBetween(towerPos, true); var p = new Vector3((float) (allyCreep.Position.X - 250*Math.Cos(ang)), (float) (allyCreep.Position.Y - 250*Math.Sin(ang)), 0); me.Move(p); me.Attack(allyCreep, true); Utils.Sleep(1200, name + "attack"); } else { var towerPos = nearestTower.Position; var ang = me.FindAngleBetween(towerPos, true); var p = new Vector3((float) (towerPos.X - 1250*Math.Cos(ang)), (float) (towerPos.Y - 1250*Math.Sin(ang)), 0); me.Move(p); Utils.Sleep(500, name + "attack"); } } else { var act = me.NetworkActivity; if (!Utils.SleepCheck("attack_time" + name)) return; if (Menu.Item("AutoPush.LastHitMode").GetValue<bool>()) { var bestEnemyCreep = creepsEnemy.Where(x => x.Health < me.DamageAverage && x.Distance2D(me) <= 800) .OrderBy(x => x.Distance2D(me)) .FirstOrDefault(); if (bestEnemyCreep != null) { me.Attack(bestEnemyCreep); Utils.Sleep(UnitDatabase.GetAttackPoint(me)*1000, "attack_time" + name); } else { /*if (act == NetworkActivity.Attack || act == NetworkActivity.Attack2) { me.Stop(); }*/ if (act == NetworkActivity.Idle) { me.Attack(pos); } } } else { if (act == NetworkActivity.Idle) me.Attack(pos); } if (Menu.Item("AutoPush.AutoW").GetValue<bool>() && SpellW[handle] != null) { var w = SpellW[handle]; var castRange = w.GetRealCastRange(); if (w.CanBeCasted() && creepsEnemy.Any(x => x.Distance2D(me) <= castRange && x.Health <= 60 + 20*w.Level) && Utils.SleepCheck("w_push" + name)) { w.UseAbility(me); Utils.Sleep(250, "w_push" + name); } } } Utils.Sleep(100, name + "attack"); } else { var towerPos = nearestTower.Position; var ang = me.FindAngleBetween(towerPos, true); var p = new Vector3((float) (me.Position.X - 1000*Math.Cos(ang)), (float) (me.Position.Y - 1000*Math.Sin(ang)), 0); me.Move(p); Utils.Sleep(200, name + "attack"); } } }