private void BtnAttackTargetDummyClick(object sender, EventArgs e) { if (ObjectManager.InGame) { Langs.Load(); if (ObjectManager.MyPlayer.IsValid && Langs.TrainingDummy(ObjectManager.MyPlayer.Target.Name)) { if (_killDummy == null || !_killDummy.IsAlive) { KeyHelper.LoadKeys(); BarMapper.MapBars(); if (CombatEngine.StartOk) { CombatEngine.BotStarted(); } else { Logging.Write(LogType.Warning, "CustomClass returned false on StartOk not starting"); return; } _killDummy = new Thread(KillTheDummy); _killDummy.Name = "KillDummy"; _killDummy.IsBackground = true; _killDummy.Start(); } BtnAttackTargetDummy.Enabled = false; } else { Logging.Write("Please target a Training dummy ingame"); } } }
internal static void StartCombat(PUnit u) { if (ObjectManager.MyPlayer.IsDead) { Stop(); return; } Unit.BaseAddress = u.BaseAddress; InvokeCombatStatusChanged(new GCombatEventArgs(CombatType.CombatStarted)); _combatThread = new Thread(CombatThread) { IsBackground = true }; _combatThread.Name = "CombatThread"; _combatThread.Start(); _combatResult = CombatResult.Unknown; while (_combatThread.IsAlive) { try { if (Unit.IsDead) { _combatResult = CombatResult.Success; break; } if (!Unit.IsValid || PBlackList.IsBlacklisted(Unit)) { if (!Langs.TrainingDummy(ObjectManager.MyPlayer.Target.Name)) { _combatResult = CombatResult.Bugged; break; } } if (ObjectManager.MyPlayer.IsDead) { _combatResult = CombatResult.Died; break; } if (Unit.IsPet || Unit.IsTotem) { Logging.Write("We are attacking a totem or a pet... doh"); _combatResult = CombatResult.Bugged; break; } if (!Langs.TrainingDummy(Unit.Name) && Unit.IsTagged && !Unit.IsTaggedByMe && !Unit.IsTargetingMe && Unit != ObjectManager.MyPlayer) { Logging.Write("Other player tag"); _combatResult = CombatResult.OtherPlayerTag; break; } } catch (Exception e) { Logging.Write("Exeption in combat handler: " + e); } Thread.Sleep(160); } ExitCombat(); }
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 { } }