Jump to content

Pathfinder Z coordinate tolerance


Weer36

Recommended Posts

What is tolerance for Z coordinate inside pathfinder for each type of TypeArea ?

In my experiments POLYAREA_BIGDANGER has not infinite height of cylinder, so I forced to play with Z on Blackspots for make Pathfinder avoid it in mountains or oceans

Link to comment
Share on other sites

  • 1 month later...

Can't understand why pathfinder goes through blacklisted by POLYAREA_BIGDANGER zones.

For sure Z tolerance I'm testing by folowing code:

bool result;
var path = PathFinder.FindPath(new Vector3(4674.098, 3099.332, 352.9073), out result);


var miniMapLandmarkName = "m";
wManager.Wow.Forms.UserControlMiniMap.LandmarksMiniMap.Remove(miniMapLandmarkName);
if (path.Count > 0)
     wManager.Wow.Forms.UserControlMiniMap.LandmarksMiniMap.Add(path[0], miniMapLandmarkName, System.Drawing.Color.Aquamarine, 10, miniMapLandmarkName, true);
foreach (var vector3 in path)
{
    if (wManager.wManagerSetting.IsBlackListedZone(vector3))
    wManager.Wow.Forms.UserControlMiniMap.LandmarksMiniMap.Add(vector3, miniMapLandmarkName, System.Drawing.Color.Blue, 10, "", true);
    else
    wManager.Wow.Forms.UserControlMiniMap.LandmarksMiniMap.Add(vector3, miniMapLandmarkName, System.Drawing.Color.Aquamarine, 10, "", true);
}

And i get image.png.95f438ff3d8722bbdea728e4d23e5c3f.png

Zone is too big to find 100% alternative path.

So what should I do to avoid blacklisted zone?

Link to comment
Share on other sites

In POLYAREA_BIGDANGER cost is 500 yards by yard.

If crossing the BigDanger zone has a lower total cost than going around it, the bot will cross the zone.

		m_filter->setAreaCost((int)PolyArea::POLYAREA_GROUND, 10.0f);
		m_filter->setAreaCost((int)PolyArea::POLYAREA_WATER, 120.0f);
		m_filter->setAreaCost((int)PolyArea::POLYAREA_ROAD, 1.0f);
		m_filter->setAreaCost((int)PolyArea::POLYAREA_DOOR, 1.0f);
		m_filter->setAreaCost((int)PolyArea::POLYAREA_GRASS, 20.0f);
		m_filter->setAreaCost((int)PolyArea::POLYAREA_JUMP, 15.0f);
		m_filter->setAreaCost((int)PolyArea::POLYAREA_DANGER, 40.0f);
		m_filter->setAreaCost((int)PolyArea::POLYAREA_BIGDANGER, 500.0f);

You can try to bypass the area (BigDanger area) with "ROAD" type.

By default, "Ground" type is used (with cost of 10)

Link to comment
Share on other sites

The fact that the zones overlap does not change anything.

 

1 - If to reach the destination, the character must do 50 yards in normal areas (ground) and 15 yards in bigdanger areas, then the total cost will be 50*10+15*500 = 8000
2
- If to reach the destination, the character must do 850 yards in normal areas (ground) (to  cross the bigdanger zones), then the total cost will be 850*10 = 8500

The bot will choose option 1 (less costs).

This system is not 100% reliable, especially if you are close (flight distance) to the destination

 

Link to comment
Share on other sites

Well it seems to be a good new feature - to test not just whether a coordinate belongs to an blacklisted areas as sum of all.

But new difficulty appears: path will more complex to avoid overlaps :-) So.. maybe add custom zone with overlayed AreaCost property in new versions?

Link to comment
Share on other sites

Is it possible to add a new type, "IMPOSSIBLE" or something, with cost 2000?
There are scenarios where going around is the only way. BigDanger is good as is. It shouldn't be changed.

Link to comment
Share on other sites

wManager.wManagerSetting.ClearBlacklist();
wManager.wManagerSetting.AddBlackListZone(new Vector3(3437.02344, -2807.998, 231.762161), 100, ContinentId.Northrend, RDManaged.RD.PolyArea.POLYAREA_BIGDANGER, true);
wManager.wManagerSetting.CurrentSetting.AvoidBlacklistedZonesPathFinder = false;

bool result;
var path = PathFinder.FindPath(new Vector3(3215.589, -2845.045, 146.3819), new Vector3(3583.113, -2798.588, 175.9346), out result);

var m = "m";
wManager.Wow.Forms.UserControlMiniMap.LandmarksMiniMap.Remove(m);
wManager.Wow.Forms.UserControlMiniMap.LandmarksMiniMap.Add(path[0], m, System.Drawing.Color.Aquamarine, 10, m, true);
foreach (var vector3 in path)
{
    var color = wManager.wManagerSetting.IsBlackListedZone(vector3) ? System.Drawing.Color.Red : System.Drawing.Color.Aquamarine;
    wManager.Wow.Forms.UserControlMiniMap.LandmarksMiniMap.Add(vector3, m, color, 10, "", true);
}

image.png.b2c87a5dfe592cf563c76987ac751971.png

@Droidz test it please, smth broke

Here is POLYAREA_AVOID result:

image.png.6c9f48ac7e25ae65f3073d8c85973d37.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...