From 6c70d864b0adc6307dd3aa5610d4d6531e184833 Mon Sep 17 00:00:00 2001 From: Gamer1120 Date: Wed, 18 Apr 2018 18:59:18 +0200 Subject: [PATCH 1/2] Only render mining spots on same floor in MLM. Fixes #1642 --- .../plugins/motherlode/MotherlodePlugin.java | 15 +++++++++++++++ .../motherlode/MotherlodeRocksOverlay.java | 6 +++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java index a739a2ceac..b88cb8944f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java @@ -53,8 +53,10 @@ import static net.runelite.api.ObjectID.ORE_VEIN_26663; import static net.runelite.api.ObjectID.ORE_VEIN_26664; import static net.runelite.api.ObjectID.ROCKFALL; import static net.runelite.api.ObjectID.ROCKFALL_26680; +import net.runelite.api.Perspective; import net.runelite.api.Varbits; import net.runelite.api.WallObject; +import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameObjectChanged; import net.runelite.api.events.GameObjectDespawned; @@ -86,6 +88,8 @@ public class MotherlodePlugin extends Plugin private static final int SACK_LARGE_SIZE = 162; private static final int SACK_SIZE = 81; + private static final int UPPER_FLOOR_HEIGHT = -500; + @Inject private MotherlodeOverlay overlay; @@ -399,4 +403,15 @@ public class MotherlodePlugin extends Plugin return true; } + + /** + * Checks if the given point is "upstairs" in the mlm. + * The upper floor is actually on z=0. + * @param localPoint + * @return + */ + boolean isUpstairs(LocalPoint localPoint) + { + return Perspective.getTileHeight(client, localPoint.getX(), localPoint.getY(), 0) < UPPER_FLOOR_HEIGHT; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeRocksOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeRocksOverlay.java index 44a9c43397..b6b7c89674 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeRocksOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeRocksOverlay.java @@ -91,7 +91,11 @@ class MotherlodeRocksOverlay extends Overlay LocalPoint location = vein.getLocalLocation(); if (localLocation.distanceTo(location) <= MAX_DISTANCE) { - renderVein(graphics, vein); + // Only draw veins on the same level + if (plugin.isUpstairs(localLocation) == plugin.isUpstairs(vein.getLocalLocation())) + { + renderVein(graphics, vein); + } } } From 9cc5c0924a16e93bca8e511061fb985a32f6ead1 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 20 Apr 2018 22:10:37 -0400 Subject: [PATCH 2/2] perspective: use LOCAL_COORD_BITS in getTileHeight and document that parameters are local coords --- .../java/net/runelite/api/Perspective.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Perspective.java b/runelite-api/src/main/java/net/runelite/api/Perspective.java index 2b244f850f..35c21290bb 100644 --- a/runelite-api/src/main/java/net/runelite/api/Perspective.java +++ b/runelite-api/src/main/java/net/runelite/api/Perspective.java @@ -228,30 +228,30 @@ public class Perspective * Calculates the above ground height of a tile point. * * @param client - * @param x the ground coordinate on the x axis - * @param y the ground coordinate on the y axis + * @param localX the ground coordinate on the x axis + * @param localY the ground coordinate on the y axis * @param plane the client plane/ground level * @return the offset from the ground of the tile */ - public static int getTileHeight(Client client, int x, int y, int plane) + public static int getTileHeight(Client client, int localX, int localY, int plane) { - int var3 = x >> 7; - int var4 = y >> 7; - if (var3 >= 0 && var4 >= 0 && var3 <= 103 && var4 <= 103) + int sceneX = localX >> LOCAL_COORD_BITS; + int sceneY = localY >> LOCAL_COORD_BITS; + if (sceneX >= 0 && sceneY >= 0 && sceneX <= 103 && sceneY <= 103) { byte[][][] tileSettings = client.getTileSettings(); int[][][] tileHeights = client.getTileHeights(); int var5 = plane; - if (plane < 3 && (tileSettings[1][var3][var4] & 2) == 2) + if (plane < 3 && (tileSettings[1][sceneX][sceneY] & 2) == 2) { var5 = plane + 1; } - int var6 = x & 127; - int var7 = y & 127; - int var8 = var6 * tileHeights[var5][var3 + 1][var4] + (128 - var6) * tileHeights[var5][var3][var4] >> 7; - int var9 = tileHeights[var5][var3][var4 + 1] * (128 - var6) + var6 * tileHeights[var5][var3 + 1][var4 + 1] >> 7; + int var6 = localX & 127; + int var7 = localY & 127; + int var8 = var6 * tileHeights[var5][sceneX + 1][sceneY] + (128 - var6) * tileHeights[var5][sceneX][sceneY] >> 7; + int var9 = tileHeights[var5][sceneX][sceneY + 1] * (128 - var6) + var6 * tileHeights[var5][sceneX + 1][sceneY + 1] >> 7; return (128 - var7) * var8 + var7 * var9 >> 7; }