From cfb8cc59e2931126fd241592d3f27e3b0e56e03d Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 28 Aug 2017 02:50:08 +0000 Subject: [PATCH] Fixed attacking throu doors. --- .../admincommandhandlers/AdminGeodata.java | 8 +-- .../gameserver/geoengine/GeoEngine.java | 58 ++++++++++--------- .../geoengine/geodata/GeoLocation.java | 4 +- .../l2jmobius/gameserver/util/GeoUtils.java | 43 +++++++------- .../admincommandhandlers/AdminGeodata.java | 8 +-- .../gameserver/geoengine/GeoEngine.java | 58 ++++++++++--------- .../geoengine/geodata/GeoLocation.java | 4 +- .../l2jmobius/gameserver/util/GeoUtils.java | 43 +++++++------- .../admincommandhandlers/AdminGeodata.java | 8 +-- .../gameserver/geoengine/GeoEngine.java | 58 ++++++++++--------- .../geoengine/geodata/GeoLocation.java | 4 +- .../l2jmobius/gameserver/util/GeoUtils.java | 43 +++++++------- .../admincommandhandlers/AdminGeodata.java | 8 +-- .../gameserver/geoengine/GeoEngine.java | 38 ++++++------ .../geoengine/geodata/GeoLocation.java | 4 +- .../l2jmobius/gameserver/util/GeoUtils.java | 43 +++++++------- .../admincommandhandlers/AdminGeodata.java | 8 +-- .../gameserver/geoengine/GeoEngine.java | 58 ++++++++++--------- .../geoengine/geodata/GeoLocation.java | 4 +- .../l2jmobius/gameserver/util/GeoUtils.java | 43 +++++++------- 20 files changed, 275 insertions(+), 270 deletions(-) diff --git a/L2J_Mobius_Classic/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java b/L2J_Mobius_Classic/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java index 551e52bbb0..e2ef021c0c 100644 --- a/L2J_Mobius_Classic/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java +++ b/L2J_Mobius_Classic/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java @@ -54,8 +54,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { @@ -72,8 +72,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { diff --git a/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java b/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java index ab77a6a3ab..42f770f117 100644 --- a/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java +++ b/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java @@ -226,7 +226,7 @@ public class GeoEngine * @param worldX * @return int : Geo X */ - public final int getGeoX(int worldX) + public static final int getGeoX(int worldX) { return (MathUtil.limit(worldX, L2World.MAP_MIN_X, L2World.MAP_MAX_X) - L2World.MAP_MIN_X) >> 4; } @@ -236,7 +236,7 @@ public class GeoEngine * @param worldY * @return int : Geo Y */ - public final int getGeoY(int worldY) + public static final int getGeoY(int worldY) { return (MathUtil.limit(worldY, L2World.MAP_MIN_Y, L2World.MAP_MAX_Y) - L2World.MAP_MIN_Y) >> 4; } @@ -246,7 +246,7 @@ public class GeoEngine * @param geoX * @return int : World X */ - public final int getWorldX(int geoX) + public static final int getWorldX(int geoX) { return (MathUtil.limit(geoX, 0, GeoStructure.GEO_CELLS_X) << 4) + L2World.MAP_MIN_X + 8; } @@ -256,7 +256,7 @@ public class GeoEngine * @param geoY * @return int : World Y */ - public final int getWorldY(int geoY) + public static final int getWorldY(int geoY) { return (MathUtil.limit(geoY, 0, GeoStructure.GEO_CELLS_Y) << 4) + L2World.MAP_MIN_Y + 8; } @@ -568,6 +568,16 @@ public class GeoEngine final int ty = target.getY(); final int tz = target.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceWorld(), false)) + { + return false; + } + + if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), origin.getInstanceWorld())) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -609,7 +619,7 @@ public class GeoEngine } // perform geodata check - return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight); + return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceWorld()) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceWorld()); } /** @@ -628,6 +638,16 @@ public class GeoEngine final int ty = position.getY(); final int tz = position.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceWorld(), false)) + { + return false; + } + + if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), origin.getInstanceWorld())) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -662,7 +682,7 @@ public class GeoEngine } // perform geodata check - return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0); + return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0, origin.getInstanceWorld()); } /** @@ -675,9 +695,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character}) + * @param instance * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, Instance instance) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -857,9 +878,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character} or {@link L2DoorInstance}) + * @param instance * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, Instance instance) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -1040,16 +1062,6 @@ public class GeoEngine */ public final boolean canMoveToTarget(int ox, int oy, int oz, int tx, int ty, int tz, Instance instance) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instance, false)) - { - return false; - } - - if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), instance)) - { - return false; - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -1094,16 +1106,6 @@ public class GeoEngine */ public final Location canMoveToTargetLoc(int ox, int oy, int oz, int tx, int ty, int tz, Instance instance) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instance, false)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - - if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), instance)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); diff --git a/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java b/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java index 850fcdbfcd..477d232c2a 100644 --- a/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java +++ b/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java @@ -51,13 +51,13 @@ public class GeoLocation extends Location @Override public int getX() { - return GeoEngine.getInstance().getWorldX(_x); + return GeoEngine.getWorldX(_x); } @Override public int getY() { - return GeoEngine.getInstance().getWorldY(_y); + return GeoEngine.getWorldY(_y); } public byte getNSWE() diff --git a/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/util/GeoUtils.java b/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/util/GeoUtils.java index dba01759ef..e2f8cd3ced 100644 --- a/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/util/GeoUtils.java +++ b/L2J_Mobius_Classic/java/com/l2jmobius/gameserver/util/GeoUtils.java @@ -30,21 +30,21 @@ public final class GeoUtils { public static void debug2DLine(L2PcInstance player, int x, int y, int tx, int ty, int z) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug2DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), z); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), z); final LinePointIterator iter = new LinePointIterator(gx, gy, tgx, tgy); while (iter.next()) { - final int wx = GeoEngine.getInstance().getWorldX(iter.x()); - final int wy = GeoEngine.getInstance().getWorldY(iter.y()); + final int wx = GeoEngine.getWorldX(iter.x()); + final int wy = GeoEngine.getWorldY(iter.y()); prim.addPoint(Color.RED, wx, wy, z); } @@ -53,21 +53,21 @@ public final class GeoUtils public static void debug3DLine(L2PcInstance player, int x, int y, int z, int tx, int ty, int tz) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug3DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), tz); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), tz); final LinePointIterator3D iter = new LinePointIterator3D(gx, gy, z, tgx, tgy, tz); iter.next(); int prevX = iter.x(); int prevY = iter.y(); - int wx = GeoEngine.getInstance().getWorldX(prevX); - int wy = GeoEngine.getInstance().getWorldY(prevY); + int wx = GeoEngine.getWorldX(prevX); + int wy = GeoEngine.getWorldY(prevY); int wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -78,8 +78,8 @@ public final class GeoUtils if ((curX != prevX) || (curY != prevY)) { - wx = GeoEngine.getInstance().getWorldX(curX); - wy = GeoEngine.getInstance().getWorldY(curY); + wx = GeoEngine.getWorldX(curX); + wy = GeoEngine.getWorldY(curY); wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -109,9 +109,8 @@ public final class GeoUtils int iPacket = 0; ExServerPrimitive exsp = null; - final GeoEngine gd = GeoEngine.getInstance(); - final int playerGx = gd.getGeoX(player.getX()); - final int playerGy = gd.getGeoY(player.getY()); + final int playerGx = GeoEngine.getGeoX(player.getX()); + final int playerGy = GeoEngine.getGeoY(player.getY()); for (int dx = -geoRadius; dx <= geoRadius; ++dx) { for (int dy = -geoRadius; dy <= geoRadius; ++dy) @@ -135,9 +134,9 @@ public final class GeoUtils final int gx = playerGx + dx; final int gy = playerGy + dy; - final int x = gd.getWorldX(gx); - final int y = gd.getWorldY(gy); - final int z = gd.getHeightNearest(gx, gy, player.getZ()); + final int x = GeoEngine.getWorldX(gx); + final int y = GeoEngine.getWorldY(gy); + final int z = GeoEngine.getInstance().getHeightNearest(gx, gy, player.getZ()); // north arrow Color col = getDirectionColor(gx, gy, z, GeoStructure.CELL_FLAG_N); diff --git a/L2J_Mobius_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java b/L2J_Mobius_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java index 551e52bbb0..e2ef021c0c 100644 --- a/L2J_Mobius_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java +++ b/L2J_Mobius_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java @@ -54,8 +54,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { @@ -72,8 +72,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { diff --git a/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java b/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java index ab77a6a3ab..42f770f117 100644 --- a/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java +++ b/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java @@ -226,7 +226,7 @@ public class GeoEngine * @param worldX * @return int : Geo X */ - public final int getGeoX(int worldX) + public static final int getGeoX(int worldX) { return (MathUtil.limit(worldX, L2World.MAP_MIN_X, L2World.MAP_MAX_X) - L2World.MAP_MIN_X) >> 4; } @@ -236,7 +236,7 @@ public class GeoEngine * @param worldY * @return int : Geo Y */ - public final int getGeoY(int worldY) + public static final int getGeoY(int worldY) { return (MathUtil.limit(worldY, L2World.MAP_MIN_Y, L2World.MAP_MAX_Y) - L2World.MAP_MIN_Y) >> 4; } @@ -246,7 +246,7 @@ public class GeoEngine * @param geoX * @return int : World X */ - public final int getWorldX(int geoX) + public static final int getWorldX(int geoX) { return (MathUtil.limit(geoX, 0, GeoStructure.GEO_CELLS_X) << 4) + L2World.MAP_MIN_X + 8; } @@ -256,7 +256,7 @@ public class GeoEngine * @param geoY * @return int : World Y */ - public final int getWorldY(int geoY) + public static final int getWorldY(int geoY) { return (MathUtil.limit(geoY, 0, GeoStructure.GEO_CELLS_Y) << 4) + L2World.MAP_MIN_Y + 8; } @@ -568,6 +568,16 @@ public class GeoEngine final int ty = target.getY(); final int tz = target.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceWorld(), false)) + { + return false; + } + + if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), origin.getInstanceWorld())) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -609,7 +619,7 @@ public class GeoEngine } // perform geodata check - return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight); + return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceWorld()) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceWorld()); } /** @@ -628,6 +638,16 @@ public class GeoEngine final int ty = position.getY(); final int tz = position.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceWorld(), false)) + { + return false; + } + + if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), origin.getInstanceWorld())) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -662,7 +682,7 @@ public class GeoEngine } // perform geodata check - return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0); + return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0, origin.getInstanceWorld()); } /** @@ -675,9 +695,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character}) + * @param instance * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, Instance instance) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -857,9 +878,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character} or {@link L2DoorInstance}) + * @param instance * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, Instance instance) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -1040,16 +1062,6 @@ public class GeoEngine */ public final boolean canMoveToTarget(int ox, int oy, int oz, int tx, int ty, int tz, Instance instance) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instance, false)) - { - return false; - } - - if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), instance)) - { - return false; - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -1094,16 +1106,6 @@ public class GeoEngine */ public final Location canMoveToTargetLoc(int ox, int oy, int oz, int tx, int ty, int tz, Instance instance) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instance, false)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - - if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), instance)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); diff --git a/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java b/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java index 850fcdbfcd..477d232c2a 100644 --- a/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java +++ b/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java @@ -51,13 +51,13 @@ public class GeoLocation extends Location @Override public int getX() { - return GeoEngine.getInstance().getWorldX(_x); + return GeoEngine.getWorldX(_x); } @Override public int getY() { - return GeoEngine.getInstance().getWorldY(_y); + return GeoEngine.getWorldY(_y); } public byte getNSWE() diff --git a/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/util/GeoUtils.java b/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/util/GeoUtils.java index dba01759ef..e2f8cd3ced 100644 --- a/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/util/GeoUtils.java +++ b/L2J_Mobius_Ertheia/java/com/l2jmobius/gameserver/util/GeoUtils.java @@ -30,21 +30,21 @@ public final class GeoUtils { public static void debug2DLine(L2PcInstance player, int x, int y, int tx, int ty, int z) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug2DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), z); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), z); final LinePointIterator iter = new LinePointIterator(gx, gy, tgx, tgy); while (iter.next()) { - final int wx = GeoEngine.getInstance().getWorldX(iter.x()); - final int wy = GeoEngine.getInstance().getWorldY(iter.y()); + final int wx = GeoEngine.getWorldX(iter.x()); + final int wy = GeoEngine.getWorldY(iter.y()); prim.addPoint(Color.RED, wx, wy, z); } @@ -53,21 +53,21 @@ public final class GeoUtils public static void debug3DLine(L2PcInstance player, int x, int y, int z, int tx, int ty, int tz) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug3DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), tz); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), tz); final LinePointIterator3D iter = new LinePointIterator3D(gx, gy, z, tgx, tgy, tz); iter.next(); int prevX = iter.x(); int prevY = iter.y(); - int wx = GeoEngine.getInstance().getWorldX(prevX); - int wy = GeoEngine.getInstance().getWorldY(prevY); + int wx = GeoEngine.getWorldX(prevX); + int wy = GeoEngine.getWorldY(prevY); int wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -78,8 +78,8 @@ public final class GeoUtils if ((curX != prevX) || (curY != prevY)) { - wx = GeoEngine.getInstance().getWorldX(curX); - wy = GeoEngine.getInstance().getWorldY(curY); + wx = GeoEngine.getWorldX(curX); + wy = GeoEngine.getWorldY(curY); wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -109,9 +109,8 @@ public final class GeoUtils int iPacket = 0; ExServerPrimitive exsp = null; - final GeoEngine gd = GeoEngine.getInstance(); - final int playerGx = gd.getGeoX(player.getX()); - final int playerGy = gd.getGeoY(player.getY()); + final int playerGx = GeoEngine.getGeoX(player.getX()); + final int playerGy = GeoEngine.getGeoY(player.getY()); for (int dx = -geoRadius; dx <= geoRadius; ++dx) { for (int dy = -geoRadius; dy <= geoRadius; ++dy) @@ -135,9 +134,9 @@ public final class GeoUtils final int gx = playerGx + dx; final int gy = playerGy + dy; - final int x = gd.getWorldX(gx); - final int y = gd.getWorldY(gy); - final int z = gd.getHeightNearest(gx, gy, player.getZ()); + final int x = GeoEngine.getWorldX(gx); + final int y = GeoEngine.getWorldY(gy); + final int z = GeoEngine.getInstance().getHeightNearest(gx, gy, player.getZ()); // north arrow Color col = getDirectionColor(gx, gy, z, GeoStructure.CELL_FLAG_N); diff --git a/L2J_Mobius_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java b/L2J_Mobius_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java index 551e52bbb0..e2ef021c0c 100644 --- a/L2J_Mobius_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java +++ b/L2J_Mobius_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java @@ -54,8 +54,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { @@ -72,8 +72,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { diff --git a/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java b/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java index ab77a6a3ab..42f770f117 100644 --- a/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java +++ b/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java @@ -226,7 +226,7 @@ public class GeoEngine * @param worldX * @return int : Geo X */ - public final int getGeoX(int worldX) + public static final int getGeoX(int worldX) { return (MathUtil.limit(worldX, L2World.MAP_MIN_X, L2World.MAP_MAX_X) - L2World.MAP_MIN_X) >> 4; } @@ -236,7 +236,7 @@ public class GeoEngine * @param worldY * @return int : Geo Y */ - public final int getGeoY(int worldY) + public static final int getGeoY(int worldY) { return (MathUtil.limit(worldY, L2World.MAP_MIN_Y, L2World.MAP_MAX_Y) - L2World.MAP_MIN_Y) >> 4; } @@ -246,7 +246,7 @@ public class GeoEngine * @param geoX * @return int : World X */ - public final int getWorldX(int geoX) + public static final int getWorldX(int geoX) { return (MathUtil.limit(geoX, 0, GeoStructure.GEO_CELLS_X) << 4) + L2World.MAP_MIN_X + 8; } @@ -256,7 +256,7 @@ public class GeoEngine * @param geoY * @return int : World Y */ - public final int getWorldY(int geoY) + public static final int getWorldY(int geoY) { return (MathUtil.limit(geoY, 0, GeoStructure.GEO_CELLS_Y) << 4) + L2World.MAP_MIN_Y + 8; } @@ -568,6 +568,16 @@ public class GeoEngine final int ty = target.getY(); final int tz = target.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceWorld(), false)) + { + return false; + } + + if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), origin.getInstanceWorld())) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -609,7 +619,7 @@ public class GeoEngine } // perform geodata check - return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight); + return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceWorld()) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceWorld()); } /** @@ -628,6 +638,16 @@ public class GeoEngine final int ty = position.getY(); final int tz = position.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceWorld(), false)) + { + return false; + } + + if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), origin.getInstanceWorld())) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -662,7 +682,7 @@ public class GeoEngine } // perform geodata check - return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0); + return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0, origin.getInstanceWorld()); } /** @@ -675,9 +695,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character}) + * @param instance * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, Instance instance) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -857,9 +878,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character} or {@link L2DoorInstance}) + * @param instance * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, Instance instance) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -1040,16 +1062,6 @@ public class GeoEngine */ public final boolean canMoveToTarget(int ox, int oy, int oz, int tx, int ty, int tz, Instance instance) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instance, false)) - { - return false; - } - - if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), instance)) - { - return false; - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -1094,16 +1106,6 @@ public class GeoEngine */ public final Location canMoveToTargetLoc(int ox, int oy, int oz, int tx, int ty, int tz, Instance instance) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instance, false)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - - if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), instance)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); diff --git a/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java b/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java index 850fcdbfcd..477d232c2a 100644 --- a/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java +++ b/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java @@ -51,13 +51,13 @@ public class GeoLocation extends Location @Override public int getX() { - return GeoEngine.getInstance().getWorldX(_x); + return GeoEngine.getWorldX(_x); } @Override public int getY() { - return GeoEngine.getInstance().getWorldY(_y); + return GeoEngine.getWorldY(_y); } public byte getNSWE() diff --git a/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/util/GeoUtils.java b/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/util/GeoUtils.java index dba01759ef..e2f8cd3ced 100644 --- a/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/util/GeoUtils.java +++ b/L2J_Mobius_Helios/java/com/l2jmobius/gameserver/util/GeoUtils.java @@ -30,21 +30,21 @@ public final class GeoUtils { public static void debug2DLine(L2PcInstance player, int x, int y, int tx, int ty, int z) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug2DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), z); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), z); final LinePointIterator iter = new LinePointIterator(gx, gy, tgx, tgy); while (iter.next()) { - final int wx = GeoEngine.getInstance().getWorldX(iter.x()); - final int wy = GeoEngine.getInstance().getWorldY(iter.y()); + final int wx = GeoEngine.getWorldX(iter.x()); + final int wy = GeoEngine.getWorldY(iter.y()); prim.addPoint(Color.RED, wx, wy, z); } @@ -53,21 +53,21 @@ public final class GeoUtils public static void debug3DLine(L2PcInstance player, int x, int y, int z, int tx, int ty, int tz) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug3DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), tz); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), tz); final LinePointIterator3D iter = new LinePointIterator3D(gx, gy, z, tgx, tgy, tz); iter.next(); int prevX = iter.x(); int prevY = iter.y(); - int wx = GeoEngine.getInstance().getWorldX(prevX); - int wy = GeoEngine.getInstance().getWorldY(prevY); + int wx = GeoEngine.getWorldX(prevX); + int wy = GeoEngine.getWorldY(prevY); int wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -78,8 +78,8 @@ public final class GeoUtils if ((curX != prevX) || (curY != prevY)) { - wx = GeoEngine.getInstance().getWorldX(curX); - wy = GeoEngine.getInstance().getWorldY(curY); + wx = GeoEngine.getWorldX(curX); + wy = GeoEngine.getWorldY(curY); wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -109,9 +109,8 @@ public final class GeoUtils int iPacket = 0; ExServerPrimitive exsp = null; - final GeoEngine gd = GeoEngine.getInstance(); - final int playerGx = gd.getGeoX(player.getX()); - final int playerGy = gd.getGeoY(player.getY()); + final int playerGx = GeoEngine.getGeoX(player.getX()); + final int playerGy = GeoEngine.getGeoY(player.getY()); for (int dx = -geoRadius; dx <= geoRadius; ++dx) { for (int dy = -geoRadius; dy <= geoRadius; ++dy) @@ -135,9 +134,9 @@ public final class GeoUtils final int gx = playerGx + dx; final int gy = playerGy + dy; - final int x = gd.getWorldX(gx); - final int y = gd.getWorldY(gy); - final int z = gd.getHeightNearest(gx, gy, player.getZ()); + final int x = GeoEngine.getWorldX(gx); + final int y = GeoEngine.getWorldY(gy); + final int z = GeoEngine.getInstance().getHeightNearest(gx, gy, player.getZ()); // north arrow Color col = getDirectionColor(gx, gy, z, GeoStructure.CELL_FLAG_N); diff --git a/L2J_Mobius_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java b/L2J_Mobius_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java index 04b7fac173..257a7f152e 100644 --- a/L2J_Mobius_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java +++ b/L2J_Mobius_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java @@ -54,8 +54,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { @@ -72,8 +72,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { diff --git a/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java b/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java index b416b74a3d..b72be81c19 100644 --- a/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java +++ b/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java @@ -224,7 +224,7 @@ public class GeoEngine * @param worldX * @return int : Geo X */ - public final int getGeoX(int worldX) + public static final int getGeoX(int worldX) { return (MathUtil.limit(worldX, L2World.MAP_MIN_X, L2World.MAP_MAX_X) - L2World.MAP_MIN_X) >> 4; } @@ -234,7 +234,7 @@ public class GeoEngine * @param worldY * @return int : Geo Y */ - public final int getGeoY(int worldY) + public static final int getGeoY(int worldY) { return (MathUtil.limit(worldY, L2World.MAP_MIN_Y, L2World.MAP_MAX_Y) - L2World.MAP_MIN_Y) >> 4; } @@ -244,7 +244,7 @@ public class GeoEngine * @param geoX * @return int : World X */ - public final int getWorldX(int geoX) + public static final int getWorldX(int geoX) { return (MathUtil.limit(geoX, 0, GeoStructure.GEO_CELLS_X) << 4) + L2World.MAP_MIN_X + 8; } @@ -254,7 +254,7 @@ public class GeoEngine * @param geoY * @return int : World Y */ - public final int getWorldY(int geoY) + public static final int getWorldY(int geoY) { return (MathUtil.limit(geoY, 0, GeoStructure.GEO_CELLS_Y) << 4) + L2World.MAP_MIN_Y + 8; } @@ -566,6 +566,11 @@ public class GeoEngine final int ty = target.getY(); final int tz = target.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceId(), false)) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -607,7 +612,7 @@ public class GeoEngine } // perform geodata check - return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight); + return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceId()) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceId()); } /** @@ -626,6 +631,11 @@ public class GeoEngine final int ty = position.getY(); final int tz = position.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceId(), false)) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -660,7 +670,7 @@ public class GeoEngine } // perform geodata check - return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0); + return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0, origin.getInstanceId()); } /** @@ -673,9 +683,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character}) + * @param instanceId * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, int instanceId) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -855,9 +866,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character} or {@link L2DoorInstance}) + * @param instanceId * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, int instanceId) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -1038,11 +1050,6 @@ public class GeoEngine */ public final boolean canMoveToTarget(int ox, int oy, int oz, int tx, int ty, int tz, int instanceId) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instanceId, false)) - { - return false; - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -1087,11 +1094,6 @@ public class GeoEngine */ public final Location canMoveToTargetLoc(int ox, int oy, int oz, int tx, int ty, int tz, int instanceId) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instanceId, false)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); diff --git a/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java b/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java index 850fcdbfcd..477d232c2a 100644 --- a/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java +++ b/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java @@ -51,13 +51,13 @@ public class GeoLocation extends Location @Override public int getX() { - return GeoEngine.getInstance().getWorldX(_x); + return GeoEngine.getWorldX(_x); } @Override public int getY() { - return GeoEngine.getInstance().getWorldY(_y); + return GeoEngine.getWorldY(_y); } public byte getNSWE() diff --git a/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/util/GeoUtils.java b/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/util/GeoUtils.java index c81ee877ec..1a3d89367d 100644 --- a/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/util/GeoUtils.java +++ b/L2J_Mobius_HighFive/java/com/l2jmobius/gameserver/util/GeoUtils.java @@ -30,21 +30,21 @@ public final class GeoUtils { public static void debug2DLine(L2PcInstance player, int x, int y, int tx, int ty, int z) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug2DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), z); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), z); final LinePointIterator iter = new LinePointIterator(gx, gy, tgx, tgy); while (iter.next()) { - final int wx = GeoEngine.getInstance().getWorldX(iter.x()); - final int wy = GeoEngine.getInstance().getWorldY(iter.y()); + final int wx = GeoEngine.getWorldX(iter.x()); + final int wy = GeoEngine.getWorldY(iter.y()); prim.addPoint(Color.RED, wx, wy, z); } @@ -53,21 +53,21 @@ public final class GeoUtils public static void debug3DLine(L2PcInstance player, int x, int y, int z, int tx, int ty, int tz) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug3DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), tz); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), tz); final LinePointIterator3D iter = new LinePointIterator3D(gx, gy, z, tgx, tgy, tz); iter.next(); int prevX = iter.x(); int prevY = iter.y(); - int wx = GeoEngine.getInstance().getWorldX(prevX); - int wy = GeoEngine.getInstance().getWorldY(prevY); + int wx = GeoEngine.getWorldX(prevX); + int wy = GeoEngine.getWorldY(prevY); int wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -78,8 +78,8 @@ public final class GeoUtils if ((curX != prevX) || (curY != prevY)) { - wx = GeoEngine.getInstance().getWorldX(curX); - wy = GeoEngine.getInstance().getWorldY(curY); + wx = GeoEngine.getWorldX(curX); + wy = GeoEngine.getWorldY(curY); wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -109,9 +109,8 @@ public final class GeoUtils int iPacket = 0; ExServerPrimitive exsp = null; - final GeoEngine gd = GeoEngine.getInstance(); - final int playerGx = gd.getGeoX(player.getX()); - final int playerGy = gd.getGeoY(player.getY()); + final int playerGx = GeoEngine.getGeoX(player.getX()); + final int playerGy = GeoEngine.getGeoY(player.getY()); for (int dx = -geoRadius; dx <= geoRadius; ++dx) { for (int dy = -geoRadius; dy <= geoRadius; ++dy) @@ -135,9 +134,9 @@ public final class GeoUtils final int gx = playerGx + dx; final int gy = playerGy + dy; - final int x = gd.getWorldX(gx); - final int y = gd.getWorldY(gy); - final int z = gd.getHeightNearest(gx, gy, player.getZ()); + final int x = GeoEngine.getWorldX(gx); + final int y = GeoEngine.getWorldY(gy); + final int z = GeoEngine.getInstance().getHeightNearest(gx, gy, player.getZ()); // north arrow Color col = getDirectionColor(gx, gy, z, GeoStructure.CELL_FLAG_N); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java index 551e52bbb0..e2ef021c0c 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminGeodata.java @@ -54,8 +54,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { @@ -72,8 +72,8 @@ public class AdminGeodata implements IAdminCommandHandler final int worldX = activeChar.getX(); final int worldY = activeChar.getY(); final int worldZ = activeChar.getZ(); - final int geoX = GeoEngine.getInstance().getGeoX(worldX); - final int geoY = GeoEngine.getInstance().getGeoY(worldY); + final int geoX = GeoEngine.getGeoX(worldX); + final int geoY = GeoEngine.getGeoY(worldY); if (GeoEngine.getInstance().hasGeoPos(geoX, geoY)) { diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java index ab77a6a3ab..42f770f117 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/geoengine/GeoEngine.java @@ -226,7 +226,7 @@ public class GeoEngine * @param worldX * @return int : Geo X */ - public final int getGeoX(int worldX) + public static final int getGeoX(int worldX) { return (MathUtil.limit(worldX, L2World.MAP_MIN_X, L2World.MAP_MAX_X) - L2World.MAP_MIN_X) >> 4; } @@ -236,7 +236,7 @@ public class GeoEngine * @param worldY * @return int : Geo Y */ - public final int getGeoY(int worldY) + public static final int getGeoY(int worldY) { return (MathUtil.limit(worldY, L2World.MAP_MIN_Y, L2World.MAP_MAX_Y) - L2World.MAP_MIN_Y) >> 4; } @@ -246,7 +246,7 @@ public class GeoEngine * @param geoX * @return int : World X */ - public final int getWorldX(int geoX) + public static final int getWorldX(int geoX) { return (MathUtil.limit(geoX, 0, GeoStructure.GEO_CELLS_X) << 4) + L2World.MAP_MIN_X + 8; } @@ -256,7 +256,7 @@ public class GeoEngine * @param geoY * @return int : World Y */ - public final int getWorldY(int geoY) + public static final int getWorldY(int geoY) { return (MathUtil.limit(geoY, 0, GeoStructure.GEO_CELLS_Y) << 4) + L2World.MAP_MIN_Y + 8; } @@ -568,6 +568,16 @@ public class GeoEngine final int ty = target.getY(); final int tz = target.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceWorld(), false)) + { + return false; + } + + if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), origin.getInstanceWorld())) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -609,7 +619,7 @@ public class GeoEngine } // perform geodata check - return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight); + return door ? checkSeeOriginal(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceWorld()) : checkSee(gox, goy, goz, oheight, gtx, gty, gtz, theight, origin.getInstanceWorld()); } /** @@ -628,6 +638,16 @@ public class GeoEngine final int ty = position.getY(); final int tz = position.getZ(); + if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, origin.getInstanceWorld(), false)) + { + return false; + } + + if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), origin.getInstanceWorld())) + { + return false; + } + // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -662,7 +682,7 @@ public class GeoEngine } // perform geodata check - return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0); + return checkSee(gox, goy, goz, oheight, gtx, gty, gtz, 0, origin.getInstanceWorld()); } /** @@ -675,9 +695,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character}) + * @param instance * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSee(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, Instance instance) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -857,9 +878,10 @@ public class GeoEngine * @param gty : target Y geodata coordinate * @param gtz : target Z geodata coordinate * @param theight : target height (if instance of {@link Character} or {@link L2DoorInstance}) + * @param instance * @return {@code boolean} : True, when target can be seen. */ - protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight) + protected final boolean checkSeeOriginal(int gox, int goy, int goz, double oheight, int gtx, int gty, int gtz, double theight, Instance instance) { // get line of sight Z coordinates double losoz = goz + ((oheight * Config.PART_OF_CHARACTER_HEIGHT) / 100); @@ -1040,16 +1062,6 @@ public class GeoEngine */ public final boolean canMoveToTarget(int ox, int oy, int oz, int tx, int ty, int tz, Instance instance) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instance, false)) - { - return false; - } - - if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), instance)) - { - return false; - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); @@ -1094,16 +1106,6 @@ public class GeoEngine */ public final Location canMoveToTargetLoc(int ox, int oy, int oz, int tx, int ty, int tz, Instance instance) { - if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz, instance, false)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - - if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(ox, oy, oz), new Location(tx, ty, tz), instance)) - { - return new Location(ox, oy, getHeight(ox, oy, oz)); - } - // get origin and check existing geo coordinates final int gox = getGeoX(ox); final int goy = getGeoY(oy); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java index 850fcdbfcd..477d232c2a 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/geoengine/geodata/GeoLocation.java @@ -51,13 +51,13 @@ public class GeoLocation extends Location @Override public int getX() { - return GeoEngine.getInstance().getWorldX(_x); + return GeoEngine.getWorldX(_x); } @Override public int getY() { - return GeoEngine.getInstance().getWorldY(_y); + return GeoEngine.getWorldY(_y); } public byte getNSWE() diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/util/GeoUtils.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/util/GeoUtils.java index dba01759ef..e2f8cd3ced 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/util/GeoUtils.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/util/GeoUtils.java @@ -30,21 +30,21 @@ public final class GeoUtils { public static void debug2DLine(L2PcInstance player, int x, int y, int tx, int ty, int z) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug2DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), z); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), z); final LinePointIterator iter = new LinePointIterator(gx, gy, tgx, tgy); while (iter.next()) { - final int wx = GeoEngine.getInstance().getWorldX(iter.x()); - final int wy = GeoEngine.getInstance().getWorldY(iter.y()); + final int wx = GeoEngine.getWorldX(iter.x()); + final int wy = GeoEngine.getWorldY(iter.y()); prim.addPoint(Color.RED, wx, wy, z); } @@ -53,21 +53,21 @@ public final class GeoUtils public static void debug3DLine(L2PcInstance player, int x, int y, int z, int tx, int ty, int tz) { - final int gx = GeoEngine.getInstance().getGeoX(x); - final int gy = GeoEngine.getInstance().getGeoY(y); + final int gx = GeoEngine.getGeoX(x); + final int gy = GeoEngine.getGeoY(y); - final int tgx = GeoEngine.getInstance().getGeoX(tx); - final int tgy = GeoEngine.getInstance().getGeoY(ty); + final int tgx = GeoEngine.getGeoX(tx); + final int tgy = GeoEngine.getGeoY(ty); final ExServerPrimitive prim = new ExServerPrimitive("Debug3DLine", x, y, z); - prim.addLine(Color.BLUE, GeoEngine.getInstance().getWorldX(gx), GeoEngine.getInstance().getWorldY(gy), z, GeoEngine.getInstance().getWorldX(tgx), GeoEngine.getInstance().getWorldY(tgy), tz); + prim.addLine(Color.BLUE, GeoEngine.getWorldX(gx), GeoEngine.getWorldY(gy), z, GeoEngine.getWorldX(tgx), GeoEngine.getWorldY(tgy), tz); final LinePointIterator3D iter = new LinePointIterator3D(gx, gy, z, tgx, tgy, tz); iter.next(); int prevX = iter.x(); int prevY = iter.y(); - int wx = GeoEngine.getInstance().getWorldX(prevX); - int wy = GeoEngine.getInstance().getWorldY(prevY); + int wx = GeoEngine.getWorldX(prevX); + int wy = GeoEngine.getWorldY(prevY); int wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -78,8 +78,8 @@ public final class GeoUtils if ((curX != prevX) || (curY != prevY)) { - wx = GeoEngine.getInstance().getWorldX(curX); - wy = GeoEngine.getInstance().getWorldY(curY); + wx = GeoEngine.getWorldX(curX); + wy = GeoEngine.getWorldY(curY); wz = iter.z(); prim.addPoint(Color.RED, wx, wy, wz); @@ -109,9 +109,8 @@ public final class GeoUtils int iPacket = 0; ExServerPrimitive exsp = null; - final GeoEngine gd = GeoEngine.getInstance(); - final int playerGx = gd.getGeoX(player.getX()); - final int playerGy = gd.getGeoY(player.getY()); + final int playerGx = GeoEngine.getGeoX(player.getX()); + final int playerGy = GeoEngine.getGeoY(player.getY()); for (int dx = -geoRadius; dx <= geoRadius; ++dx) { for (int dy = -geoRadius; dy <= geoRadius; ++dy) @@ -135,9 +134,9 @@ public final class GeoUtils final int gx = playerGx + dx; final int gy = playerGy + dy; - final int x = gd.getWorldX(gx); - final int y = gd.getWorldY(gy); - final int z = gd.getHeightNearest(gx, gy, player.getZ()); + final int x = GeoEngine.getWorldX(gx); + final int y = GeoEngine.getWorldY(gy); + final int z = GeoEngine.getInstance().getHeightNearest(gx, gy, player.getZ()); // north arrow Color col = getDirectionColor(gx, gy, z, GeoStructure.CELL_FLAG_N);