diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index dd6457fe6d..3886e59522 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -1784,10 +1784,21 @@ public abstract class RSClientMixin implements RSClient } } - @Inject - @MethodHook("changeGameOptions") + @Copy("changeGameOptions") + public static void rs$changeGameOptions(int var0) + { + throw new RuntimeException(); + } + + @Replace("changeGameOptions") public static void changeGameOptions(int var0) { - client.getCallbacks().post(VolumeChanged.class, VolumeChanged.INSTANCE); + rs$changeGameOptions(var0); + + int type = client.getVarpDefinition(var0).getType(); + if (type == 3 || type == 4 || type == 10) + { + client.getCallbacks().post(VolumeChanged.class, VolumeChanged.INSTANCE); + } } } \ No newline at end of file diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index d068563f23..d6ea54f4df 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -1117,4 +1117,7 @@ public interface RSClient extends RSGameShell, Client */ @Import("Login_promptCredentials") void promptCredentials(boolean clearPass); + + @Import("VarpDefinition_get") + RSVarpDefinition getVarpDefinition(int id); } \ No newline at end of file diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSVarpDefinition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSVarpDefinition.java new file mode 100644 index 0000000000..8661abed13 --- /dev/null +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSVarpDefinition.java @@ -0,0 +1,9 @@ +package net.runelite.rs.api; + +import net.runelite.mapping.Import; + +public interface RSVarpDefinition extends RSDualNode +{ + @Import("type") + int getType(); +} diff --git a/runescape-client/src/main/java/AbstractWorldMapData.java b/runescape-client/src/main/java/AbstractWorldMapData.java index efdefeec98..0c2c508ce5 100644 --- a/runescape-client/src/main/java/AbstractWorldMapData.java +++ b/runescape-client/src/main/java/AbstractWorldMapData.java @@ -245,7 +245,8 @@ public abstract class AbstractWorldMapData { signature = "(IB)Liq;", garbageValue = "1" ) - public static VarpDefinition method288(int var0) { + @Export("VarpDefinition_get") + public static VarpDefinition VarpDefinition_get(int var0) { VarpDefinition var1 = (VarpDefinition)VarpDefinition.VarpDefinition_cached.get((long)var0); if (var1 != null) { return var1; diff --git a/runescape-client/src/main/java/Client.java b/runescape-client/src/main/java/Client.java index 5abeff1ee4..ed958509cf 100644 --- a/runescape-client/src/main/java/Client.java +++ b/runescape-client/src/main/java/Client.java @@ -2680,7 +2680,7 @@ public final class Client extends GameShell implements Usernamed { Tiles.friendSystem.clear(); for (var33 = 0; var33 < VarpDefinition.VarpDefinition_fileCount; ++var33) { - VarpDefinition var28 = AbstractWorldMapData.method288(var33); + VarpDefinition var28 = AbstractWorldMapData.VarpDefinition_get(var33); if (var28 != null) { Varps.Varps_temp[var33] = 0; Varps.Varps_main[var33] = 0; @@ -4870,7 +4870,7 @@ public final class Client extends GameShell implements Usernamed { if (ServerPacket.field2099 == var1.serverPacket) { for (var16 = 0; var16 < VarpDefinition.VarpDefinition_fileCount; ++var16) { - VarpDefinition var54 = AbstractWorldMapData.method288(var16); + VarpDefinition var54 = AbstractWorldMapData.VarpDefinition_get(var16); if (var54 != null) { Varps.Varps_temp[var16] = 0; Varps.Varps_main[var16] = 0; diff --git a/runescape-client/src/main/java/NetSocket.java b/runescape-client/src/main/java/NetSocket.java index 42a66bbe21..9207e17a34 100644 --- a/runescape-client/src/main/java/NetSocket.java +++ b/runescape-client/src/main/java/NetSocket.java @@ -388,7 +388,7 @@ public final class NetSocket extends AbstractSocket implements Runnable { } } - int var4 = AbstractWorldMapData.method288(var0).type; + int var4 = AbstractWorldMapData.VarpDefinition_get(var0).type; if (var4 != 0) { int var2 = Varps.Varps_main[var0]; if (var4 == 1) {