September 15, 20187 yr Hey Guys, soo... I think many of you know already. Thoradins Wall is a big problem for the pathfinder. Has anyone found a workaround to this? I could try to add many small blacklists along the wall and only leave the good gaps open? Not sure if that would work and it seems really dirty to me. Offmesh connection doesnt really make sense here, or does it? Thanks for any info. Edited September 15, 20187 yr by Bambo
September 20, 20187 yr New wRobot update should be able to take offmesh even if you can make a path - so you can give it a try. Otherwise ask FNV for the little piece of code he used to and from Searing Gorge. Basically it intercepts movements and enters your own. Or do something similar to how I automate the Darnassus portal in HMP: using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Threading; using System.Threading.Tasks; using robotManager.Events; using robotManager.FiniteStateMachine; using robotManager.Helpful; using robotManager.Products; using wManager; using wManager.Events; using wManager.Wow.Bot.States; using wManager.Wow.Bot.Tasks; using wManager.Wow.Forms; using wManager.Wow.Helpers; using wManager.Wow.ObjectManager; public class Darnassus { public static bool TakingPortal; private static WoWLocalPlayer Me = ObjectManager.Me; private static Vector3 _currentDestination = Vector3.Empty; private static List<Vector3> _darnassusPolygon = new List<Vector3> { new Vector3(10749.604f, 2412.323f, 0f), new Vector3(11296.502f, 2097.9175f, 0f), new Vector3(11259.335f, 936.64453f, 0f), new Vector3(10914.204f, 317.97504f, 0f), new Vector3(9990.316f, 104.99061f, 0f), new Vector3(9236.339f, 480.24902f, 0f), new Vector3(8944.306f, 1230.7659f, 0f), new Vector3(9045.189f, 2295.6887f, 0f), new Vector3(9512.443f, 2792.6523f, 0f), new Vector3(10292.969f, 2904.216f, 0f), new Vector3(10569.073f, 2655.7341f, 0f), new Vector3(10946.0625f, 2371.7546f, 0f), }; public static void Start() { MovementEvents.OnMovementPulse += MovementEventsOnOnMovementPulse; } public static void Stop() { TakingPortal = false; _currentDestination = Vector3.Empty; MovementEvents.OnMovementPulse -= MovementEventsOnOnMovementPulse; } private static void MovementEventsOnOnMovementPulse(List<Vector3> points, CancelEventArgs cancelable) { //cancel all movement events that aren't our own /*if (_takingPortal && _currentDestination != Vector3.Empty && points.Last() != _currentDestination && !Logging.Status.ToLower().Contains("taxi")) { cancelable.Cancel = true; }*/ if (!TakingPortal && points.Count > 0) { bool taken = TakePortalIfNecessary(points.Last()); if (taken) { //GoToTask.ToPosition(points.Last()); cancelable.Cancel = true; } } } private static bool TakePortalIfNecessary(Vector3 destination) { bool taken = false; if (Usefuls.ContinentId == 1) { if (VectorHelper.PointInPolygon2D(_darnassusPolygon, Me.Position) && !VectorHelper.PointInPolygon2D(_darnassusPolygon, destination)) { PluginLog.Log("Player in Darnassus, leaving through portal"); GoThroughPortal(new Vector3(9947.029, 2618.881, 1316.962), new Vector3(9946.723, 2618.692, 1316.909)); taken = true; } else if (!VectorHelper.PointInPolygon2D(_darnassusPolygon, Me.Position) && VectorHelper.PointInPolygon2D(_darnassusPolygon, destination)) { PluginLog.Log("Player outside Darnassus, entering through portal"); GoThroughPortal(new Vector3(8786.36, 967.445, 30.197), new Vector3(8788.761, 967.9706, 30.19558)); taken = true; } } TakingPortal = false; _currentDestination = Vector3.Empty; return taken; } private static void GoThroughPortal(Vector3 destination, Vector3 direction) { TakingPortal = true; _currentDestination = destination; var tmp = wManagerSetting.CurrentSetting.CloseIfPlayerTeleported; wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = false; GoToTask.ToPosition(destination); //For some reason, GoToTask ends right away if (Me.IsDead && Me.HaveBuff("Ghost")) { MovementManager.Go(PathFinder.FindPath(destination)); while (Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause && Me.Position.DistanceTo(destination) >= 2) { Thread.Sleep(500); } } MovementManager.MoveTo(direction); Thread.Sleep(500); Move.Forward(Move.MoveAction.PressKey, 5000); //Reenable(tmp); } private static async void Reenable(bool close) { await Task.Run(() => { Products.InPause = true; Thread.Sleep(5000); MovementManager.StopMove(); MovementManager.CurrentPath.Clear(); MovementManager.CurrentPathOrigine.Clear(); wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = close; Products.InPause = false; TakingPortal = false; //Products.ProductRestart(); PluginLog.Log("Resetting path after port"); }); } }
September 20, 20187 yr Sorry, but for the moment new update don't support this (I added code but not terminate, I released update before to finish to fix detection problem quickly)
September 20, 20187 yr Author I will wait for the off mesh solution for now. We will see how this works out. Thanks alot to both of you.
September 21, 20187 yr Today update add support of new offmeshconnections features: I haven't added it to UI for now, but you can do it with code: wManager.Wow.Helpers.PathFinder.OffMeshConnections.Add(new wManager.Wow.Helpers.PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(-8857.249, 538.4138, 106.2859), new Vector3(-8842.317, 550.2717, 96.78889) { Action = "lua: print('gg')" } }, -1) { TryToUseEvenIfCanFindPathSuccess = true, Type = wManager.Wow.Helpers.PathFinder.OffMeshConnectionType.Unidirectional }); With this code, WRobot will jump instead to down the stairs when he exit the Flightmaster in Stormwind. And WRobot support now the roads and waters, I need to complet list (for now only roads of Eastern kingdoms and Kalimdor are recorded (thank to Reaper)): wManager.Wow.Helpers.PathFinder.ReportArea(new Vector3(1, 2, 3), 3, RDManaged.RD.PolyArea.POLYAREA_ROAD); wManager.Wow.Helpers.PathFinder.ReportArea(new Vector3(1, 2, 3), 3, RDManaged.RD.PolyArea.POLYAREA_WATER);
September 21, 20187 yr Big thanks to both you for implementing this and providing road preference as well as water areas and Reapler for providing the data. It's a great day for wRobot pathfinding :)
September 21, 20187 yr Author 1 minute ago, Matenia said: Big thanks to both you for implementing this and providing road preference as well as water areas and Reapler for providing the data. It's a great day for wRobot pathfinding ? I agree. My thanks go out to you guys as well.
Create an account or sign in to comment