private BehaviorTreeStatus DefendOwnBase(CtfBlackboard blackboard) { double distance = WowInterface.ObjectManager.Player.Position.GetDistance(WsgDataset.OwnBasePosition); if (distance > 16.0) { WowInterface.MovementEngine.SetMovementAction(MovementAction.Move, WsgDataset.OwnBasePosition); } else { WowUnit nearEnemy = WowInterface.ObjectManager.GetNearEnemies <WowUnit>(WsgDataset.OwnBasePosition, 16.0).FirstOrDefault(); if (nearEnemy != null) { double distanceToEnemy = WowInterface.ObjectManager.Player.Position.GetDistance(nearEnemy.Position); if (distanceToEnemy > 2.0) { WowInterface.MovementEngine.SetMovementAction(MovementAction.Move, nearEnemy.Position); } else if (ActionEvent.Run()) { WowInterface.Globals.ForceCombat = true; WowInterface.HookManager.WowTargetGuid(nearEnemy.Guid); } } } return(BehaviorTreeStatus.Ongoing); }
private BehaviorTreeStatus AttackNearWeakestEnemy(CtfBlackboard blackboard) { WowPlayer weakestPlayer = WowInterface.ObjectManager.GetNearEnemies <WowPlayer>(WowInterface.ObjectManager.Player.Position, 20.0).OrderBy(e => e.Health).FirstOrDefault(); if (weakestPlayer != null) { double distance = weakestPlayer.Position.GetDistance(WowInterface.ObjectManager.Player.Position); double threshold = WowInterface.CombatClass.IsMelee ? 3.0 : 28.0; if (distance > threshold) { WowInterface.MovementEngine.SetMovementAction(MovementAction.Move, weakestPlayer.Position); } else if (ActionEvent.Run()) { WowInterface.Globals.ForceCombat = true; WowInterface.HookManager.WowTargetGuid(weakestPlayer.Guid); } } else { return(BehaviorTreeStatus.Failed); } return(BehaviorTreeStatus.Ongoing); }
public void AcceptQuest() { if (!CheckedIfAccepted) { if (Bot.Wow.GetQuestLogIdByTitle(Name, out _)) { Accepted = true; } CheckedIfAccepted = true; } if (Accepted) { return; } (IWowObject, Vector3)objectPositionCombo = GetStartObject(); if (objectPositionCombo.Item1 != null) { if (Bot.Player.Position.GetDistance(objectPositionCombo.Item1.Position) > 5.0) { Bot.Movement.SetMovementAction(MovementAction.Move, objectPositionCombo.Item1.Position); } else if (ActionEvent.Run()) { if (!ActionToggle) { RightClickQuestgiver(objectPositionCombo.Item1); } else { Bot.Wow.SelectQuestByNameOrGossipId(Name, GossipId, true); Thread.Sleep(1000); Bot.Wow.AcceptQuest(); Thread.Sleep(250); if (Bot.Wow.GetQuestLogIdByTitle(Name, out _)) { Accepted = true; } } ActionToggle = !ActionToggle; } } else if (objectPositionCombo.Item2 != default) { // move to position if (Bot.Player.Position.GetDistance(objectPositionCombo.Item2) > 5.0) { Bot.Movement.SetMovementAction(MovementAction.Move, objectPositionCombo.Item2); } } }
public void AcceptQuest() { if (!CheckedIfAccepted) { if (WowInterface.HookManager.LuaGetQuestLogIdByTitle(Name, out int _questLogId)) { Accepted = true; } CheckedIfAccepted = true; } if (Accepted) { return; } (WowObject, Vector3)objectPositionCombo = GetStartObject(); if (objectPositionCombo.Item1 != null) { if (WowInterface.ObjectManager.Player.Position.GetDistance(objectPositionCombo.Item1.Position) > 5.0) { WowInterface.MovementEngine.SetMovementAction(Movement.Enums.MovementAction.Move, objectPositionCombo.Item1.Position); } else if (ActionEvent.Run()) { if (!ActionToggle) { RightClickQuestgiver(objectPositionCombo.Item1); } else { WowInterface.HookManager.LuaSelectQuestByNameOrGossipId(Name, GossipId, true); Thread.Sleep(1000); WowInterface.HookManager.LuaAcceptQuest(); Thread.Sleep(250); if (WowInterface.HookManager.LuaGetQuestLogIdByTitle(Name, out int _questLogId)) { Accepted = true; } } ActionToggle = !ActionToggle; } } else if (objectPositionCombo.Item2 != default) { // move to position if (WowInterface.ObjectManager.Player.Position.GetDistance(objectPositionCombo.Item2) > 5.0) { WowInterface.MovementEngine.SetMovementAction(Movement.Enums.MovementAction.Move, objectPositionCombo.Item2); } } }
public void CompleteQuest() { if (!HasQuest || !Finished) { Returned = true; return; } (WowObject, Vector3)objectPositionCombo = GetEndObject(); if (objectPositionCombo.Item1 != null) { // move to unit / object if (WowInterface.ObjectManager.Player.Position.GetDistance(objectPositionCombo.Item1.Position) > 5.0) { WowInterface.MovementEngine.SetMovementAction(Movement.Enums.MovementAction.Moving, objectPositionCombo.Item1.Position); } else { // interact with it if (!ActionToggle) { RightClickQuestgiver(objectPositionCombo.Item1); } else if (ActionEvent.Run()) { // TODO: get best reward WowInterface.HookManager.LuaCompleteQuestAndGetReward(WowInterface.ObjectManager.Player.QuestlogEntries.ToList().FindIndex(e => e.Id == Id) + 1, 1, GossipId); } ActionToggle = !ActionToggle; } } else if (objectPositionCombo.Item2 != default) { // move to position if (WowInterface.ObjectManager.Player.Position.GetDistance(objectPositionCombo.Item2) > 5.0) { WowInterface.MovementEngine.SetMovementAction(Movement.Enums.MovementAction.Moving, objectPositionCombo.Item2); } } }
public void AcceptQuest() { if (HasQuest) { Accepted = true; return; } (WowObject, Vector3)objectPositionCombo = GetStartObject(); if (objectPositionCombo.Item1 != null) { if (WowInterface.ObjectManager.Player.Position.GetDistance(objectPositionCombo.Item1.Position) > 5.0) { WowInterface.MovementEngine.SetMovementAction(Movement.Enums.MovementAction.Moving, objectPositionCombo.Item1.Position); } else if (ActionEvent.Run()) { if (!ActionToggle) { RightClickQuestgiver(objectPositionCombo.Item1); } else { WowInterface.HookManager.LuaAcceptQuest(GossipId); } ActionToggle = !ActionToggle; } } else if (objectPositionCombo.Item2 != default) { // move to position if (WowInterface.ObjectManager.Player.Position.GetDistance(objectPositionCombo.Item2) > 5.0) { WowInterface.MovementEngine.SetMovementAction(Movement.Enums.MovementAction.Moving, objectPositionCombo.Item2); } } }
private BehaviorTreeStatus KillEnemyFlagCarrier(CtfBlackboard blackboard) { if (JBgBlackboard.EnemyTeamFlagCarrier == null) { WowInterface.Globals.ForceCombat = false; return(BehaviorTreeStatus.Success); } double distance = WowInterface.ObjectManager.Player.Position.GetDistance(JBgBlackboard.EnemyTeamFlagCarrier.Position); double threshold = WowInterface.CombatClass.IsMelee ? 3.0 : 28.0; if (distance > threshold && !WowInterface.ObjectManager.Player.IsCasting) { WowInterface.MovementEngine.SetMovementAction(MovementAction.Move, BotUtils.MoveAhead(JBgBlackboard.EnemyTeamFlagCarrier.Position, JBgBlackboard.EnemyTeamFlagCarrier.Rotation, 1.0f)); } else if (ActionEvent.Run()) { WowInterface.Globals.ForceCombat = true; WowInterface.HookManager.WowTargetGuid(JBgBlackboard.EnemyTeamFlagCarrier.Guid); } return(BehaviorTreeStatus.Ongoing); }
//-------------------------------------------// /// <summary> /// On the stream to the configuration file being established. /// </summary> private void OnLoad(ByteBuffer stream) { if (stream == null) { State = AssetState.Broken; Log.Debug("Loading configuration failed '" + _path + "'."); } else { // parse the node from the stream Node = NodeSerialization.Parse(stream); State = AssetState.Loaded; stream.Flush(); Log.Info("Loaded configuration '" + _path + "'."); } _onLoad.ArgA = this; _onLoad.Run(); _lock.Release(); }
private BehaviorTreeStatus UseNearestFlag(CtfBlackboard blackboard) { WowGameobject nearestFlag = JBgBlackboard.NearFlags.OrderBy(e => e.Position.GetDistance(WowInterface.ObjectManager.Player.Position)).FirstOrDefault(); if (nearestFlag != null) { double distance = WowInterface.ObjectManager.Player.Position.GetDistance(nearestFlag.Position); if (distance > 4.0) { WowInterface.MovementEngine.SetMovementAction(MovementAction.Move, nearestFlag.Position); } else if (ActionEvent.Run()) { WowInterface.HookManager.WowObjectRightClick(nearestFlag); } } else { return(BehaviorTreeStatus.Failed); } return(BehaviorTreeStatus.Ongoing); }
private BehaviorTreeStatus MoveToOwnFlagCarrierAndHelp(CtfBlackboard blackboard) { if (JBgBlackboard.MyTeamFlagCarrier == null) { return(BehaviorTreeStatus.Failed); } double distance = WowInterface.ObjectManager.Player.Position.GetDistance(JBgBlackboard.MyTeamFlagCarrier.Position); if (distance > 4.0) { WowInterface.MovementEngine.SetMovementAction(MovementAction.Move, JBgBlackboard.MyTeamFlagCarrier.Position); } else { WowUnit nearEnemy = WowInterface.ObjectManager.GetNearEnemies <WowUnit>(JBgBlackboard.MyTeamFlagCarrier.Position, 32.0).FirstOrDefault(); if (nearEnemy != null) { double distanceToEnemy = WowInterface.ObjectManager.Player.Position.GetDistance(nearEnemy.Position); double threshold = WowInterface.CombatClass.IsMelee ? 3.0 : 28.0; if (distanceToEnemy > threshold) { WowInterface.MovementEngine.SetMovementAction(MovementAction.Move, nearEnemy.Position); } else if (ActionEvent.Run()) { WowInterface.Globals.ForceCombat = true; WowInterface.HookManager.WowTargetGuid(nearEnemy.Guid); } } } return(BehaviorTreeStatus.Ongoing); }
public bool CompleteQuest() { if (Returned) { return(true); } (IWowObject, Vector3)objectPositionCombo = GetEndObject(); if (objectPositionCombo.Item1 != null) { // move to unit / object if (Bot.Player.Position.GetDistance(objectPositionCombo.Item1.Position) > 5.0) { Bot.Movement.SetMovementAction(MovementAction.Move, objectPositionCombo.Item1.Position); } else { // interact with it if (!ActionToggle) { RightClickQuestgiver(objectPositionCombo.Item1); } else if (ActionEvent.Run()) { Bot.Wow.SelectQuestByNameOrGossipId(Name, GossipId, false); Thread.Sleep(1000); Bot.Wow.CompleteQuest(); Thread.Sleep(1000); bool selectedReward = false; // TODO: This only works for the english locale! if (Bot.Wow.GetQuestLogIdByTitle(Name, out int questLogId)) { Bot.Wow.SelectQuestLogEntry(questLogId); if (Bot.Wow.GetNumQuestLogChoices(out int numChoices)) { for (int i = 1; i <= numChoices; ++i) { if (Bot.Wow.GetQuestLogChoiceItemLink(i, out string itemLink)) { string itemJson = Bot.Wow.GetItemByNameOrLink(itemLink); WowBasicItem item = ItemFactory.BuildSpecificItem(ItemFactory.ParseItem(itemJson)); if (item == null) { break; } if (item.Name == "0" || item.ItemLink == "0") { // get the item id and try again itemJson = Bot.Wow.GetItemByNameOrLink ( itemLink.Split(new string[] { "Hitem:" }, StringSplitOptions.RemoveEmptyEntries)[1] .Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[0] ); item = ItemFactory.BuildSpecificItem(ItemFactory.ParseItem(itemJson)); } if (Bot.Character.IsItemAnImprovement(item, out _)) { Bot.Wow.SelectQuestReward(i); Bot.Wow.SelectQuestReward(i); Bot.Wow.SelectQuestReward(i); selectedReward = true; break; } } else { break; } } } } if (!selectedReward) { Bot.Wow.SelectQuestReward(1); } Thread.Sleep(250); Returned = true; return(true); } ActionToggle = !ActionToggle; } } else if (objectPositionCombo.Item2 != default) { // move to position if (Bot.Player.Position.GetDistance(objectPositionCombo.Item2) > 5.0) { Bot.Movement.SetMovementAction(MovementAction.Move, objectPositionCombo.Item2); } } return(false); }