예제 #1
0
 private static void ExitCombat()
 {
     try
     {
         _combatLoopThread.Abort();
     }
     catch
     {
     }
     try
     {
         _combatThread.Abort();
     }
     catch
     {
     }
     MoveHelper.ReleaseKeys();
     if (_combatResult == CombatResult.OtherPlayerTag)
     {
         PBlackList.Blacklist(Unit, 1200, false);
     }
     if (_combatResult == CombatResult.Bugged && ObjectManager.MyPlayer.HasLivePet)
     {
         KeyHelper.SendKey("PetFollow");
     }
     if (Unit.IsDead)
     {
         _combatResult = CombatResult.Success;
     }
     if (!ObjectManager.MyPlayer.IsAlive)
     {
         _combatResult = CombatResult.Died;
     }
     Logging.Write("Combat done, result : " + _combatResult);
     InvokeCombatStatusChanged(new GCombatEventArgs(CombatType.CombatDone, Unit));
     CombatDone();
     try
     {
         Stop();
     }
     catch
     {
     }
 }
예제 #2
0
 public static void DoWork(PUnit unit)
 {
     MoveHelper.ReleaseKeys();
     if (!unit.IsLootable)
     {
         return;
     }
     Logging.Write("Looting: " + unit.Name);
     if (unit.DistanceToSelf > 5)
     {
         MoveHelper.MoveToLoc(unit.Location, 4, false, true);
     }
     if (ObjectManager.ShouldDefend)
     {
         Logging.Write("Skipping loot, we got into combat");
         return;
     }
     Thread.Sleep(200);
     if (ObjectManager.MyPlayer.HasLivePet)
     {
         Thread.Sleep(700);
     }
     if (ObjectManager.MyPlayer.Target != unit)
     {
         unit.Interact(false);
     }
     else
     {
         KeyHelper.SendKey("InteractTarget");
     }
     if (ObjectManager.ShouldDefend)
     {
         return;
     }
     TimeOut.Reset();
     while (!ObjectManager.MyPlayer.LootWinOpen && !TimeOut.IsReady)
     {
         Thread.Sleep(100);
     }
     TimeOut.Reset();
     if (GrindingSettings.Skin || GrindingSettings.WaitForLoot)
     {
         while (ObjectManager.MyPlayer.LootWinOpen && !TimeOut.IsReady)
         {
             Thread.Sleep(100);
         }
         Thread.Sleep(1300);
     }
     else
     {
         Thread.Sleep(200);
     }
     GrindingEngine.UpdateStats(1, 0, 0);
     PBlackList.Blacklist(unit, 300, false);
     if (unit.IsSkinnable && GrindingSettings.Skin)
     {
         Logging.Write("Skinning");
         KeyHelper.SendKey("TargetLastTarget");
         Thread.Sleep(1000);
         if (!ObjectManager.MyPlayer.Target.IsValid)
         {
             unit.Interact(false);
         }
         else
         {
             KeyHelper.SendKey("InteractTarget");
         }
         TimeOut.Reset();
         while (!ObjectManager.MyPlayer.LootWinOpen && !TimeOut.IsReady)
         {
             Thread.Sleep(100);
         }
         if (GrindingSettings.WaitForLoot)
         {
             Thread.Sleep(500);
         }
         GrindingEngine.UpdateStats(1, 0, 0);
     }
 }
예제 #3
0
 private static void CombatThread()
 {
     try
     {
         Logging.Write("Started combat engine");
         if (ObjectManager.MyPlayer.IsMounted && !ObjectManager.MyPlayer.TravelForm)
         {
             KeyHelper.SendKey("GMount");
         }
         MoveHelper.ReleaseKeys();
         if (DefendAgainst() == null)
         {
             Logging.Write("Pulling: " + Unit.Name + " " + Unit.GUID);
             MoveHelper.MoveToUnit(Unit, 30);
             if (!Unit.TargetHostile())
             {
                 if (ObjectManager.GetAttackers.Count == 0)
                 {
                     PPullBlackList.Blacklist(Unit, 800, true);
                 }
             }
             Unit.Face();
             MoveHelper.ReleaseKeys();
             PullResult result = Pull();
             Logging.Write("Pull result: " + result);
             if (result.Equals(PullResult.CouldNotPull))
             {
                 PPullBlackList.Blacklist(Unit, 800, true);
                 return;
             }
             if (PPullBlackList.IsBlacklisted(Unit))
             {
                 return;
             }
         }
         else
         {
             Logging.Write("Got into combat with: " + Unit.Name);
             Unit.TargetHostile();
             Unit.Face();
         }
         Ticker combatTimeout;
         if (ObjectManager.MyPlayer.Level > 10)
         {
             combatTimeout = new Ticker(20 * 1000);
         }
         else
         {
             combatTimeout = new Ticker(40 * 1000);
         }
         while (!Unit.IsDead)
         {
             _combatLoopThread = new Thread(DoCombat)
             {
                 IsBackground = true
             };
             _combatLoopThread.Name = "DoCombat";
             _combatLoopThread.SetApartmentState(ApartmentState.STA);
             _combatLoopThread.Start();
             while (_combatLoopThread.IsAlive)
             {
                 Thread.Sleep(50);
                 if (!Langs.TrainingDummy(Unit.Name) && combatTimeout.IsReady && Unit.Health > 85)
                 {
                     Logging.Write("Combat took to long, bugged - blacklisting");
                     _combatResult = CombatResult.Bugged;
                     if (!PBlackList.IsBlacklisted(Unit))
                     {
                         PBlackList.Blacklist(Unit, 1200, false);
                     }
                     return;
                 }
             }
         }
     }
     catch
     {
     }
 }
예제 #4
0
 public static void DoWork(PUnit unit)
 {
     MoveHelper.ReleaseKeys();
     if (unit.IsLootable)
     {
         Logging.Write("Looting: " + unit.Name, new object[0]);
         if (unit.DistanceToSelf > 5.0)
         {
             MoveHelper.MoveToLoc(unit.Location, 4.0, false, true);
         }
         if (LazyLib.Wow.ObjectManager.ShouldDefend)
         {
             Logging.Write("Skipping loot, we got into combat", new object[0]);
             return;
         }
         Thread.Sleep(200);
         if (LazyLib.Wow.ObjectManager.MyPlayer.HasLivePet)
         {
             Thread.Sleep(700);
         }
         if (LazyLib.Wow.ObjectManager.MyPlayer.Target != unit)
         {
             unit.Interact(false);
         }
         else
         {
             KeyHelper.SendKey("InteractTarget");
         }
         if (LazyLib.Wow.ObjectManager.ShouldDefend)
         {
             return;
         }
         TimeOut.Reset();
         while (!LazyLib.Wow.ObjectManager.MyPlayer.LootWinOpen && !TimeOut.IsReady)
         {
             Thread.Sleep(100);
         }
         if (GrindingSettings.WaitForLoot)
         {
             Latency.Sleep(500);
         }
         GrindingEngine.UpdateStats(1, 0, 0);
         if (!GrindingSettings.Skin)
         {
             PBlackList.Blacklist(unit, 300, false);
         }
     }
     if ((unit.IsSkinnable && GrindingSettings.Skin) && (unit.GetSkinnableType() == Constants.SkinnableType.Skining))
     {
         Logging.Write("Skinning: " + unit.Name, new object[0]);
         if (unit.DistanceToSelf > 5.0)
         {
             MoveHelper.MoveToLoc(unit.Location, 4.0, false, true);
         }
         KeyHelper.SendKey("TargetLastTarget");
         Thread.Sleep(0x3e8);
         if (!LazyLib.Wow.ObjectManager.MyPlayer.Target.IsValid)
         {
             unit.Interact(false);
         }
         else
         {
             KeyHelper.SendKey("InteractTarget");
         }
         TimeOut.Reset();
         while (!LazyLib.Wow.ObjectManager.MyPlayer.LootWinOpen && !TimeOut.IsReady)
         {
             Thread.Sleep(100);
         }
         if (GrindingSettings.WaitForLoot)
         {
             Latency.Sleep(500);
         }
         GrindingEngine.UpdateStats(1, 0, 0);
         PBlackList.Blacklist(unit, 300, false);
     }
 }