From 815d6ef6cc4e22dfa4b178688591e596e00c477c Mon Sep 17 00:00:00 2001 From: melxin Date: Wed, 25 Mar 2026 20:13:13 +0100 Subject: [PATCH 1/3] rev 237: fix top level wv --- .../microbot/api/actor/Rs2ActorModel.java | 3 ++- .../util/gameobject/Rs2GameObject.java | 18 ++++++++---------- .../microbot/util/menu/NewMenuEntry.java | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java index b4e145816a..41aa49d907 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java @@ -71,7 +71,8 @@ public int getHealthScale() @Override public WorldPoint getWorldLocation() { - if (getWorldView() != null && getWorldView().getId() != -1) { + final WorldView worldView = getWorldView(); + if (worldView != null && worldView.getId() != WorldView.TOPLEVEL) { return Microbot.getClientThread().invoke(this::projectActorLocationToMainWorld); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/gameobject/Rs2GameObject.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/gameobject/Rs2GameObject.java index 5462395fd3..e9868a0240 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/gameobject/Rs2GameObject.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/gameobject/Rs2GameObject.java @@ -1842,17 +1842,15 @@ public static boolean clickObject(TileObject object, String action) { param1 = 4; }*/ - int worldViewId = -1; - - if (object.getWorldView().getId() != -1) { - var worldView =Microbot.getClientThread().invoke(() -> Microbot.getClient().getLocalPlayer().getWorldView()); - if (worldView == null) { - worldViewId = Microbot.getClient().getTopLevelWorldView().getId(); - } else { - worldViewId = worldView - .getId(); + int worldViewId = WorldView.TOPLEVEL; + + final WorldView objectWorldView = object.getWorldView(); + if (objectWorldView != null && objectWorldView.getId() != WorldView.TOPLEVEL) { + var worldView = Microbot.getClientThread().invoke(() -> Microbot.getClient().getLocalPlayer().getWorldView()); + if (worldView != null) + { + worldViewId = worldView.getId(); } - } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/menu/NewMenuEntry.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/menu/NewMenuEntry.java index 3d85a39fee..191e58a460 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/menu/NewMenuEntry.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/menu/NewMenuEntry.java @@ -28,7 +28,7 @@ public class NewMenuEntry implements MenuEntry { private Actor actor; private TileObject gameObject; private Widget widget; - private int worldViewId = -1; + private int worldViewId = WorldView.TOPLEVEL; private NewMenuEntry(int param0, int param1, MenuAction type, int identifier) { this.param0 = param0; From 541157ba2f3870e2e5f059ad0b6238b6c4acc759 Mon Sep 17 00:00:00 2001 From: melxin Date: Wed, 25 Mar 2026 20:43:10 +0100 Subject: [PATCH 2/3] Rs2Reflection: fix menu action descriptors d4d0d7a68cceda7306c3326e778ec5a67c6816e8 3d7caa4a80426a69ba20f6ccbae9a3b485cfbe1e --- .../plugins/microbot/util/reflection/Rs2Reflection.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java index 36b025f416..09a22ca8f1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java @@ -32,7 +32,8 @@ public static void invokeMenu(int param0, int param1, int opcode, int identifier { if (menuAction == null) { - final String MENU_ACTION_DESCRIPTOR_VANILLA = "(IIIIIILjava/lang/String;Ljava/lang/String;III)V"; + final String MENU_ACTION_DESCRIPTOR_VANILLA_BYTE_GARBAGE_VALUE = "(IIIIIILjava/lang/String;Ljava/lang/String;IIB)V"; + final String MENU_ACTION_DESCRIPTOR_VANILLA_INT_GARBAGE_VALUE = "(IIIIIILjava/lang/String;Ljava/lang/String;III)V"; final String MENU_ACTION_DESCRIPTOR_RUNELITE = "(IILnet/runelite/api/MenuAction;IILjava/lang/String;Ljava/lang/String;)V"; final Class clientClazz = Microbot.getClient().getClass(); @@ -72,9 +73,9 @@ else if (insnNode.getOpcode() == Opcodes.SIPUSH) } final MethodInsnNode menuActionVanillaInsn = (MethodInsnNode) insnNode.getNext(); - if (!menuActionVanillaInsn.desc.equals(MENU_ACTION_DESCRIPTOR_VANILLA)) + if (!menuActionVanillaInsn.desc.equals(MENU_ACTION_DESCRIPTOR_VANILLA_BYTE_GARBAGE_VALUE) && !menuActionVanillaInsn.desc.equals(MENU_ACTION_DESCRIPTOR_VANILLA_INT_GARBAGE_VALUE)) { - throw new RuntimeException("Menu action descriptor vanilla has changed from: " + MENU_ACTION_DESCRIPTOR_VANILLA + " to: " + menuActionVanillaInsn.desc); + throw new RuntimeException("Menu action descriptor vanilla has changed to: " + menuActionVanillaInsn.desc); } menuAction = Arrays.stream(Class.forName(menuActionVanillaInsn.owner).getDeclaredMethods()) .filter(m -> m.getName().equals(menuActionVanillaInsn.name)) From dbbbe59a317dd87785372c22a29afa0230b67339 Mon Sep 17 00:00:00 2001 From: melxin Date: Thu, 26 Mar 2026 02:04:52 +0100 Subject: [PATCH 3/3] Rs2ActorModel: fix actor::getWorldLocation --- .../client/plugins/microbot/api/actor/Rs2ActorModel.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java index 41aa49d907..517c3e6c41 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java @@ -76,7 +76,7 @@ public WorldPoint getWorldLocation() return Microbot.getClientThread().invoke(this::projectActorLocationToMainWorld); } - return actor.getWorldLocation(); + return Microbot.getClientThread().runOnClientThreadOptional(() -> actor.getWorldLocation()).orElse(null); } @Override @@ -450,7 +450,12 @@ public long getHash() } public WorldPoint projectActorLocationToMainWorld() { - WorldPoint actorLocation = actor.getWorldLocation(); + WorldPoint actorLocation = Microbot.getClientThread().runOnClientThreadOptional(() -> actor.getWorldLocation()).orElse(null); + if (actorLocation == null) + { + return getWorldLocation(); + } + LocalPoint localPoint = LocalPoint.fromWorld( getWorldView(), actorLocation