Ignore no path found issues.
Thanks to Trance.
This commit is contained in:
@ -180,6 +180,17 @@ public class GeoEngine
|
||||
return region.hasGeo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the specified position for available geodata.
|
||||
* @param x the world x
|
||||
* @param y the world y
|
||||
* @return {@code true} if there is geodata for the given coordinates, {@code false} otherwise
|
||||
*/
|
||||
public boolean hasGeo(int x, int y)
|
||||
{
|
||||
return hasGeoPos(getGeoX(x), getGeoY(y));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param geoX
|
||||
* @param geoY
|
||||
@ -274,6 +285,42 @@ public class GeoEngine
|
||||
return region.getNextHigherZ(geoX, geoY, worldZ);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Z height.
|
||||
* @param x the world x
|
||||
* @param y the world y
|
||||
* @param z the world z
|
||||
* @return the nearest Z height
|
||||
*/
|
||||
public int getHeight(int x, int y, int z)
|
||||
{
|
||||
return getNearestZ(getGeoX(x), getGeoY(y), z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the next lower Z height.
|
||||
* @param x the world x
|
||||
* @param y the world y
|
||||
* @param z the world z
|
||||
* @return the nearest Z height
|
||||
*/
|
||||
public int getLowerHeight(int x, int y, int z)
|
||||
{
|
||||
return getNextLowerZ(getGeoX(x), getGeoY(y), z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the next higher Z height.
|
||||
* @param x the world x
|
||||
* @param y the world y
|
||||
* @param z the world z
|
||||
* @return the nearest Z height
|
||||
*/
|
||||
public int getHigherHeight(int x, int y, int z)
|
||||
{
|
||||
return getNextHigherZ(getGeoX(x), getGeoY(y), z);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param worldX
|
||||
* @return the geo X
|
||||
@ -328,18 +375,6 @@ public class GeoEngine
|
||||
return (geoZ * 16) + WORLD_MIN_Z + 8;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Z height.
|
||||
* @param x the x coordinate
|
||||
* @param y the y coordinate
|
||||
* @param z the z coordinate
|
||||
* @return the nearest Z height
|
||||
*/
|
||||
public int getHeight(int x, int y, int z)
|
||||
{
|
||||
return getNearestZ(getGeoX(x), getGeoY(y), z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Can see target. Doors as target always return true. Checks doors between.
|
||||
* @param cha the character
|
||||
@ -710,17 +745,6 @@ public class GeoEngine
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the specified position for available geodata.
|
||||
* @param x the X coordinate
|
||||
* @param y the Y coordinate
|
||||
* @return {@code true} if there is geodata for the given coordinates, {@code false} otherwise
|
||||
*/
|
||||
public boolean hasGeo(int x, int y)
|
||||
{
|
||||
return hasGeoPos(getGeoX(x), getGeoY(y));
|
||||
}
|
||||
|
||||
public static GeoEngine getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
|
@ -3384,6 +3384,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
final Location destiny = GeoEngine.getInstance().canMoveToTargetLoc(curX, curY, curZ, x, y, z, getInstanceWorld());
|
||||
x = destiny.getX();
|
||||
y = destiny.getY();
|
||||
z = destiny.getZ();
|
||||
dx = x - curX;
|
||||
dy = y - curY;
|
||||
dz = z - curZ;
|
||||
@ -3397,13 +3398,17 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
m.geoPath = GeoEnginePathfinding.getInstance().findPath(curX, curY, curZ, originalX, originalY, originalZ, getInstanceWorld());
|
||||
if ((m.geoPath == null) || (m.geoPath.size() < 2)) // No path found
|
||||
{
|
||||
if ((isPlayer()) || (!isPlayable() && !isMinion() && (Math.abs(z - curZ) > 140)) || (isSummon() && !((Summon) this).getFollowStatus()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m.disregardingGeodata = true;
|
||||
|
||||
// Mobius: Verify destination. Prevents wall collision issues.
|
||||
final Location newDestination = GeoEngine.getInstance().canMoveToTargetLoc(curX, curY, curZ, originalX, originalY, originalZ, getInstanceWorld());
|
||||
x = newDestination.getX();
|
||||
y = newDestination.getY();
|
||||
z = newDestination.getZ();
|
||||
x = originalX;
|
||||
y = originalY;
|
||||
z = originalZ;
|
||||
distance = originalDistance;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -12715,7 +12715,7 @@ public class PlayerInstance extends Playable
|
||||
{
|
||||
if (Config.CORRECT_PLAYER_Z)
|
||||
{
|
||||
final int nearestZ = GeoEngine.getInstance().getNextLowerZ(getX(), getY(), getZ());
|
||||
final int nearestZ = GeoEngine.getInstance().getHigherHeight(getX(), getY(), getZ());
|
||||
if (getZ() < nearestZ)
|
||||
{
|
||||
teleToLocation(new Location(getX(), getY(), nearestZ));
|
||||
|
Reference in New Issue
Block a user