Hi,
currently its a big issue to switch targets correctly in wrobot with fightclasses, as wrobot always tries to switch back to the original target.
It would help a lot with development, if you could give us a way to override this or set a new target for the fightloop to use.
I would like to suggest to add a continent name as a new parameter to the class "Grinderzone" it would allow to easier travelling between continents & taking the right path.
At the current state of the Grinder product for example it doesn't check the continent and taking vectors from a different continent. I've also written methods to check whether vector is on continent by Z axis:
/// <summary>
/// Load specific tiles to define the pather by the given location.
/// </summary>
/// <param name="from">The location.</param>
/// <param name="maxDistance">The maximum allowed z-distance.</param>
public Pather GetPatherByLocation(Vector3 from, float maxDistance = float.PositiveInfinity)
{
float d = float.PositiveInfinity;
Pather p = null;
try
{
Pather pc = null;
Logging.log("Load tiles to define continent...");
foreach (MainContinents continent in Enum.GetValues(typeof(MainContinents)))
{
pc = GetPather(from, continent);
if (Math.Abs(pc.FindZ(from) - from.Z) < d)
{
p = pc;
d = Math.Abs(p.FindZ(from) - from.Z);
}
pc.Dispose();
}
if (d < maxDistance)
{
Logging.log("Pather for " + from + " found\nContinent: " + p.Continent + "\nDeviation: " + d);
return p;
}
}
catch (Exception ex)
{
Logging.logex("GetPatherByLocation(...):\n" + ex);
}
Logging.log("GetPatherByLocation(...) failed to load suitable continent: " + d + " < " + maxDistance + " is invalid.\nSuspected continent: " + p.Continent);
return GetPather(from, Usefuls.ContinentNameMpq);
}
/// <summary>
/// Initialize new pather.
/// </summary>
/// <param name="loc">Initial location.</param>
/// <param name="continent">Pather's continent.</param>
public Pather GetPather(Vector3 loc, MainContinents continent)
{
try
{
if (loc != Vector3.Empty)
{
float x1;
float y1;
return new Pather(continent.ToString());
}
}
catch (Exception ex)
{
Logging.logex("GetPather(Vector3 loc, MainContinents continent):\nContinent: " + continent + "\nLocation: " + loc + "\nThrow an Exception:\n" + ex);
}
Logging.log("GetPather(Vector3 loc, MainContinents continent) failed to load desired continent: " + Usefuls.ContinentNameMpq);
return new Pather(Usefuls.ContinentNameMpq);
}
It works so far (i can put a position from a other continent & can get the string from Pather.Continent). But it needs to load the tiles. That's the down-side of it(If there's a better method to define it, let me know please)
i also have written classes to use the returned pather for connections between boats, Zeppelins & portals and have a general algorithm to take the path with the shortest distance with these connections.
But the mentioned method is the only thing left which is a thorn in my eye.
I would like also to suggest to add a continent property to the Vector3 class. So if someone calls this class it will also get the continent & can be saved in profiles
In the end the pather knows exactly where to go on which continent.
ps: i can also upload the classes, if you need them but it has a bit work left.