From 7b7d436f007ade619aa16dbe40eb7c344202ab30 Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Wed, 23 Oct 2019 08:14:16 +0100 Subject: [PATCH 01/19] clues: fix Shayzien supply armour Sherlock clue --- .../client/plugins/cluescrolls/clues/SkillChallengeClue.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java index d563c0c0de..ced104cc30 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java @@ -144,7 +144,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll new SkillChallengeClue("Craft multiple cosmic runes from a single essence.", item(ItemID.PURE_ESSENCE)), new SkillChallengeClue("Plant a watermelon seed.", item(ItemID.RAKE), item(ItemID.SEED_DIBBER), xOfItem(ItemID.WATERMELON_SEED, 3)), new SkillChallengeClue("Activate the Chivalry prayer."), - new SkillChallengeClue("Hand in a Tier 2 or higher set of Shayzien supply armour", "hand in a boxed set of shayzien supply armour at tier 2 or above.", any("Shayzien Supply Set (Tier 2 or higher)", item(ItemID.SHAYZIEN_SUPPLY_SET_2), item(ItemID.SHAYZIEN_SUPPLY_SET_3), item(ItemID.SHAYZIEN_SUPPLY_SET_4), item(ItemID.SHAYZIEN_SUPPLY_SET_5))), + new SkillChallengeClue("Hand in a Tier 2 or higher set of Shayzien supply armour", "take the lovakengj armourers a boxed set of shayzien supply armour at tier 2 or above.", any("Shayzien Supply Set (Tier 2 or higher)", item(ItemID.SHAYZIEN_SUPPLY_SET_2), item(ItemID.SHAYZIEN_SUPPLY_SET_3), item(ItemID.SHAYZIEN_SUPPLY_SET_4), item(ItemID.SHAYZIEN_SUPPLY_SET_5))), // Master Sherlock Tasks new SkillChallengeClue("Equip an abyssal whip in front of the abyssal demons of the Slayer Tower.", true, any("Abyssal Whip", item(ItemID.ABYSSAL_WHIP), item(ItemID.FROZEN_ABYSSAL_WHIP), item(ItemID.VOLCANIC_ABYSSAL_WHIP))), new SkillChallengeClue("Smith a runite med helm.", item(ItemID.HAMMER), item(ItemID.RUNITE_BAR)), From 6aea005bfa707b10be3182ba44e50681058839ed Mon Sep 17 00:00:00 2001 From: dekvall Date: Wed, 23 Oct 2019 01:29:32 +0200 Subject: [PATCH 02/19] chat timestamps: add timestamps to split private chat --- .../src/main/scripts/ChatSplitBuilder.rs2asm | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm b/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm index 73badbb543..354aa42e71 100644 --- a/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm +++ b/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm @@ -377,12 +377,17 @@ LABEL327: jump LABEL372 LABEL330: iload 7 + iload 12 ; Load the id of the messageNode + sconst "" ; Push a container for the timestamp + sconst "addTimestamp" ; Push event name + runelite_callback ; Invoke callback + pop_int ; Pop the id of the messageNode sconst "From " sload 1 sconst ":" sconst "privateChatSplitFrom" runelite_callback - join_string 3 + join_string 4 ; Add the timestamp to the message sload 0 iload 9 iload 10 @@ -401,12 +406,17 @@ LABEL330: jump LABEL407 LABEL351: iload 7 + iload 12 ; Load the id of the messageNode + sconst "" ; Push container for the timestamp + sconst "addTimestamp" ; Push event name + runelite_callback ; Invoke callback + pop_int ; Pop the id of the messageNode sconst "To " sload 1 sconst ":" sconst "privateChatSplitTo" runelite_callback - join_string 3 + join_string 4 ; Add the timestamp to the message sload 0 iload 9 iload 10 @@ -425,7 +435,13 @@ LABEL351: jump LABEL407 LABEL372: iload 7 - sload 0 + iload 12 ; Load the id of the messageNode + sconst "" ; Push a container for the timestamp + sconst "addTimestamp" ; Push event name + runelite_callback ; Invoke callback + pop_int ; Pop the id of the messageNode + sload 0 ; Load the log in/out message + join_string 2 ; Add the timestamp to the message iload 9 iload 10 iconst 10682368 From fcbd26bbc9531febaf7171b9c391530e088d17bc Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 11 Oct 2019 20:11:24 +0100 Subject: [PATCH 03/19] menu entry swapper: add shift click teleport spell swap Co-authored-by: Adam --- .../MenuEntrySwapperConfig.java | 10 ++++ .../MenuEntrySwapperPlugin.java | 32 +++++++++++ .../MenuEntrySwapperPluginTest.java | 54 +++++++++++++++++++ 3 files changed, 96 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index e687522286..13f780a823 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -311,4 +311,14 @@ public interface MenuEntrySwapperConfig extends Config { return true; } + + @ConfigItem( + keyName = "swapTeleportSpell", + name = "Shift-click teleport spells", + description = "Swap teleport spells that have a second destination on shift" + ) + default boolean swapTeleportSpell() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index d19b47455f..91fddefb66 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -604,6 +604,38 @@ public class MenuEntrySwapperPlugin extends Plugin { swap("use", option, target, index); } + + if (shiftModifier && config.swapTeleportSpell()) + { + if (target.equals("varrock teleport")) + { + swapTeleport(target, option, "grand exchange", index); + } + else if (target.equals("camelot teleport")) + { + swapTeleport(target, option, "seers'", index); + } + else if (target.equals("watchtower teleport")) + { + swapTeleport(target, option, "yanille", index); + } + else if (target.equals("teleport to house")) + { + swapTeleport(target, option, "outside", index); + } + } + } + + private void swapTeleport(String target, String option, String optionA, int index) + { + if (option.equals("cast")) + { + swap(optionA, option, target, index); + } + else if (option.equals(optionA)) + { + swap("cast", option, target, index); + } } private static boolean shouldSwapPickpocket(String target) diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java index d34331e209..19b101c931 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java @@ -42,6 +42,7 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import static org.mockito.ArgumentMatchers.any; import org.mockito.Mock; +import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -209,4 +210,57 @@ public class MenuEntrySwapperPluginTest menu("Pay (north)", "Kragen", MenuAction.NPC_THIRD_OPTION), }, argumentCaptor.getValue()); } + + @Test + public void testTeleport() + { + when(config.swapTeleportSpell()).thenReturn(true); + menuEntrySwapperPlugin.setShiftModifier(true); + + // Cast -> Grand Exchange + entries = new MenuEntry[]{ + menu("Cancel", "", MenuAction.CANCEL), + + menu("Configure", "Varrock Teleport", MenuAction.WIDGET_THIRD_OPTION), + menu("Grand Exchange", "Varrock Teleport", MenuAction.WIDGET_SECOND_OPTION), + menu("Cast", "Varrock Teleport", MenuAction.WIDGET_FIRST_OPTION), + }; + + menuEntrySwapperPlugin.onClientTick(new ClientTick()); + + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(MenuEntry[].class); + verify(client).setMenuEntries(argumentCaptor.capture()); + + assertArrayEquals(new MenuEntry[]{ + menu("Cancel", "", MenuAction.CANCEL), + + menu("Configure", "Varrock Teleport", MenuAction.WIDGET_THIRD_OPTION), + menu("Cast", "Varrock Teleport", MenuAction.WIDGET_FIRST_OPTION), + menu("Grand Exchange", "Varrock Teleport", MenuAction.WIDGET_SECOND_OPTION), + }, argumentCaptor.getValue()); + + clearInvocations(client); + + // Grand Exchange -> Cast + entries = new MenuEntry[]{ + menu("Cancel", "", MenuAction.CANCEL), + + menu("Configure", "Varrock Teleport", MenuAction.WIDGET_THIRD_OPTION), + menu("Cast", "Varrock Teleport", MenuAction.WIDGET_SECOND_OPTION), + menu("Grand Exchange", "Varrock Teleport", MenuAction.WIDGET_FIRST_OPTION), + }; + + menuEntrySwapperPlugin.onClientTick(new ClientTick()); + + argumentCaptor = ArgumentCaptor.forClass(MenuEntry[].class); + verify(client).setMenuEntries(argumentCaptor.capture()); + + assertArrayEquals(new MenuEntry[]{ + menu("Cancel", "", MenuAction.CANCEL), + + menu("Configure", "Varrock Teleport", MenuAction.WIDGET_THIRD_OPTION), + menu("Grand Exchange", "Varrock Teleport", MenuAction.WIDGET_FIRST_OPTION), + menu("Cast", "Varrock Teleport", MenuAction.WIDGET_SECOND_OPTION), + }, argumentCaptor.getValue()); + } } \ No newline at end of file From d56951e6d719383174904e3163a3060a1a3b90b7 Mon Sep 17 00:00:00 2001 From: Nathaniel Pather <12907920+NathanielPather@users.noreply.github.com> Date: Thu, 24 Oct 2019 19:04:33 +1000 Subject: [PATCH 04/19] npc health: add lvl 44 zombie health (#10121) --- runelite-client/src/main/resources/npc_health.json | 1 + 1 file changed, 1 insertion(+) diff --git a/runelite-client/src/main/resources/npc_health.json b/runelite-client/src/main/resources/npc_health.json index 6f39e21f79..a6b92c36a3 100644 --- a/runelite-client/src/main/resources/npc_health.json +++ b/runelite-client/src/main/resources/npc_health.json @@ -6,6 +6,7 @@ "Zombie_13": 22, "Zombie_18": 24, "Zombie_24": 30, + "Zombie_44": 40, "Summoned Zombie_13": 22, "Skeleton_22": 29, "Skeleton_21": 24, From 25c81187df67983760559c89f96856d6157a63aa Mon Sep 17 00:00:00 2001 From: ln Date: Fri, 25 Oct 2019 04:34:28 +0300 Subject: [PATCH 05/19] GPU: Floating point screen coordinates to eliminate vertex snapping --- .../runelite/client/plugins/gpu/common.glsl | 6 ++--- .../net/runelite/client/plugins/gpu/geom.glsl | 6 ++--- .../client/plugins/gpu/to_screen.glsl | 26 +++++++++---------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/common.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/common.glsl index 207e8300a1..55c3b9e6c3 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/common.glsl +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/common.glsl @@ -74,9 +74,9 @@ bool face_visible(ivec4 vA, ivec4 vB, ivec4 vC, ivec4 position, int cameraYaw, i vB += position - cameraPos; vC += position - cameraPos; - ivec3 sA = toScreen(vA.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); - ivec3 sB = toScreen(vB.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); - ivec3 sC = toScreen(vC.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); + vec3 sA = toScreen(vA.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); + vec3 sB = toScreen(vB.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); + vec3 sC = toScreen(vC.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); return (sA.x - sB.x) * (sC.y - sB.y) - (sC.x - sB.x) * (sA.y - sB.y) > 0; } diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/geom.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/geom.glsl index 28a339f788..0f7f1bad23 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/geom.glsl +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/geom.glsl @@ -60,9 +60,9 @@ out float fogAmount; void main() { ivec3 cameraPos = ivec3(cameraX, cameraY, cameraZ); - ivec3 screenA = toScreen(vPosition[0] - cameraPos, cameraYaw, cameraPitch, centerX, centerY, zoom); - ivec3 screenB = toScreen(vPosition[1] - cameraPos, cameraYaw, cameraPitch, centerX, centerY, zoom); - ivec3 screenC = toScreen(vPosition[2] - cameraPos, cameraYaw, cameraPitch, centerX, centerY, zoom); + vec3 screenA = toScreen(vPosition[0] - cameraPos, cameraYaw, cameraPitch, centerX, centerY, zoom); + vec3 screenB = toScreen(vPosition[1] - cameraPos, cameraYaw, cameraPitch, centerX, centerY, zoom); + vec3 screenC = toScreen(vPosition[2] - cameraPos, cameraYaw, cameraPitch, centerX, centerY, zoom); if (-screenA.z < 50 || -screenB.z < 50 || -screenC.z < 50) { // the client does not draw a triangle if any vertex distance is <50 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/to_screen.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/to_screen.glsl index 612cf8fce8..1e9e63428d 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/to_screen.glsl +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/to_screen.glsl @@ -26,22 +26,22 @@ /* * Convert a vertex to screen space */ -ivec3 toScreen(ivec3 vertex, int cameraYaw, int cameraPitch, int centerX, int centerY, int zoom) { - int yawSin = int(65536.0f * sin(cameraYaw * UNIT)); - int yawCos = int(65536.0f * cos(cameraYaw * UNIT)); +vec3 toScreen(ivec3 vertex, int cameraYaw, int cameraPitch, int centerX, int centerY, int zoom) { + float yawSin = sin(cameraYaw * UNIT); + float yawCos = cos(cameraYaw * UNIT); - int pitchSin = int(65536.0f * sin(cameraPitch * UNIT)); - int pitchCos = int(65536.0f * cos(cameraPitch * UNIT)); + float pitchSin = sin(cameraPitch * UNIT); + float pitchCos = cos(cameraPitch * UNIT); - int rotatedX = ((vertex.z * yawSin) + (vertex.x * yawCos)) >> 16; - int rotatedZ = ((vertex.z * yawCos) - (vertex.x * yawSin)) >> 16; + float rotatedX = (vertex.z * yawSin) + (vertex.x * yawCos); + float rotatedZ = (vertex.z * yawCos) - (vertex.x * yawSin); - int var13 = ((vertex.y * pitchCos) - (rotatedZ * pitchSin)) >> 16; - int var12 = ((vertex.y * pitchSin) + (rotatedZ * pitchCos)) >> 16; + float var13 = (vertex.y * pitchCos) - (rotatedZ * pitchSin); + float var12 = (vertex.y * pitchSin) + (rotatedZ * pitchCos); - int x = rotatedX * zoom / var12 + centerX; - int y = var13 * zoom / var12 + centerY; - int z = -var12; // in OpenGL depth is negative + float x = rotatedX * zoom / var12 + centerX; + float y = var13 * zoom / var12 + centerY; + float z = -var12; // in OpenGL depth is negative - return ivec3(x, y, z); + return vec3(x, y, z); } From 7bb95ef7c7d5270ccd0ddb8e4cdef9e43b894f28 Mon Sep 17 00:00:00 2001 From: SebastiaanVanspauwen <43320258+SebastiaanVanspauwen@users.noreply.github.com> Date: Fri, 25 Oct 2019 11:02:12 +0200 Subject: [PATCH 06/19] Worldmap: Fix incorrect Zeah quest start locations (#10135) --- .../runelite/client/plugins/worldmap/QuestStartLocation.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java index 459abf02e0..bce9ec50c3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java @@ -58,7 +58,7 @@ enum QuestStartLocation //Members' Quests ANIMAL_MAGNETISM(Quest.ANIMAL_MAGNETISM, new WorldPoint(3094, 3360, 0)), ANOTHER_SLICE_OF_HAM(Quest.ANOTHER_SLICE_OF_HAM, new WorldPoint(2799, 5428, 0)), - THE_ASCENT_OF_ARCEUUS(Quest.THE_ASCENT_OF_ARCEUUS, new WorldPoint(1700, 3742, 0)), + THE_ASCENT_OF_ARCEUUS(Quest.THE_ASCENT_OF_ARCEUUS, new WorldPoint(1699, 3742, 0)), BETWEEN_A_ROCK(Quest.BETWEEN_A_ROCK, new WorldPoint(2823, 10168, 0)), BIG_CHOMPY_BIRD_HUNTING(Quest.BIG_CHOMPY_BIRD_HUNTING, new WorldPoint(2629, 2981, 0)), BIOHAZARD(Quest.BIOHAZARD, new WorldPoint(2591, 3335, 0)), @@ -72,7 +72,7 @@ enum QuestStartLocation DARKNESS_OF_HALLOWVALE(Quest.DARKNESS_OF_HALLOWVALE, new WorldPoint(3494, 9628, 0)), DEATH_PLATEAU_TROLL_STRONGHOLD(new Quest[]{Quest.DEATH_PLATEAU, Quest.TROLL_STRONGHOLD}, new WorldPoint(2895, 3528, 0)), DEATH_TO_THE_DORGESHUUN(Quest.DEATH_TO_THE_DORGESHUUN, new WorldPoint(3316, 9613, 0)), - THE_DEPTHS_OF_DESPAIR(Quest.THE_DEPTHS_OF_DESPAIR, new WorldPoint(1780, 3569, 0)), + THE_DEPTHS_OF_DESPAIR(Quest.THE_DEPTHS_OF_DESPAIR, new WorldPoint(1781, 3570, 0)), DESERT_TREASURE(Quest.DESERT_TREASURE, new WorldPoint(3177, 3043, 0)), DEVIOUS_MINDS(Quest.DEVIOUS_MINDS, new WorldPoint(3405, 3492, 0)), THE_DIG_SITE(Quest.THE_DIG_SITE, new WorldPoint(3363, 3337, 0)), From f715c9f48dbc7c79a7c79e9eacf517b2063dc5ff Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Sat, 26 Oct 2019 08:48:05 +0100 Subject: [PATCH 07/19] clues: fix MultipleOfItemRequirement not working with non-stacking items --- .../clues/item/MultipleOfItemRequirement.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/item/MultipleOfItemRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/item/MultipleOfItemRequirement.java index 975d38c1d2..064d92eddc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/item/MultipleOfItemRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/item/MultipleOfItemRequirement.java @@ -48,11 +48,16 @@ public class MultipleOfItemRequirement implements ItemRequirement @Override public boolean fulfilledBy(Item[] items) { + int quantityFound = 0; for (Item item : items) { - if (item.getId() == itemId && item.getQuantity() >= quantity) + if (item.getId() == itemId) { - return true; + quantityFound += item.getQuantity(); + if (quantityFound >= quantity) + { + return true; + } } } From c2e7b61a685ae3e86841cce904e081f35ad6e481 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 25 Oct 2019 19:07:52 -0400 Subject: [PATCH 08/19] cache: update npc definition and loader --- .../cache/definitions/NpcDefinition.java | 53 +++++++++--------- .../cache/definitions/loaders/NpcLoader.java | 56 +++++++++---------- .../cache/definitions/savers/NpcSaver.java | 48 ++++++++-------- 3 files changed, 77 insertions(+), 80 deletions(-) diff --git a/cache/src/main/java/net/runelite/cache/definitions/NpcDefinition.java b/cache/src/main/java/net/runelite/cache/definitions/NpcDefinition.java index 8ba160c97a..ddfabfe367 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/NpcDefinition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/NpcDefinition.java @@ -31,38 +31,37 @@ import lombok.Data; @Data public class NpcDefinition { - public final int id; - public short[] recolorToFind; - public int rotation = 32; public String name = "null"; - public short[] recolorToReplace; + public int size = 1; public int[] models; - public int[] models_2; - public int stanceAnimation = -1; - public int anInt2165 = -1; - public int tileSpacesOccupied = 1; - public int walkAnimation = -1; - public short[] retextureToReplace; - public int rotate90RightAnimation = -1; - public boolean aBool2170 = true; - public int resizeX = 128; - public int contrast = 0; + public int[] chatheadModels; + public int standingAnimation = -1; + public int rotateLeftAnimation = -1; + public int rotateRightAnimation = -1; + public int walkingAnimation = -1; public int rotate180Animation = -1; - public int varbitIndex = -1; - public String[] options = new String[5]; - public boolean renderOnMinimap = true; - public int combatLevel = -1; + public int rotate90RightAnimation = -1; public int rotate90LeftAnimation = -1; - public int resizeY = 128; - public boolean hasRenderPriority = false; - public int ambient = 0; - public int headIcon = -1; - public int[] configs; + public short[] recolorToFind; + public short[] recolorToReplace; public short[] retextureToFind; + public short[] retextureToReplace; + public String[] actions = new String[5]; + public boolean isMinimapVisible = true; + public int combatLevel = -1; + public int widthScale = 128; + public int heightScale = 128; + public boolean hasRenderPriority; + public int ambient; + public int contrast; + public int headIcon = -1; + public int rotationSpeed = 32; + public int[] configs; + public int varbitId = -1; public int varpIndex = -1; - public boolean isClickable = true; - public int anInt2189 = -1; - public boolean aBool2190 = false; - public Map params = null; + public boolean isInteractable = true; + public boolean rotationFlag = true; + public boolean isPet; + public Map params; } diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/NpcLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/NpcLoader.java index 478ef2660a..0ce81f864b 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/NpcLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/NpcLoader.java @@ -24,13 +24,12 @@ */ package net.runelite.cache.definitions.loaders; +import java.util.HashMap; import net.runelite.cache.definitions.NpcDefinition; import net.runelite.cache.io.InputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; - public class NpcLoader { private static final Logger logger = LoggerFactory.getLogger(NpcLoader.class); @@ -67,7 +66,6 @@ public class NpcLoader { def.models[index] = stream.readUnsignedShort(); } - } else if (opcode == 2) { @@ -75,37 +73,37 @@ public class NpcLoader } else if (opcode == 12) { - def.tileSpacesOccupied = stream.readUnsignedByte(); + def.size = stream.readUnsignedByte(); } else if (opcode == 13) { - def.stanceAnimation = stream.readUnsignedShort(); + def.standingAnimation = stream.readUnsignedShort(); } else if (opcode == 14) { - def.walkAnimation = stream.readUnsignedShort(); + def.walkingAnimation = stream.readUnsignedShort(); } else if (opcode == 15) { - def.anInt2165 = stream.readUnsignedShort(); + def.rotateLeftAnimation = stream.readUnsignedShort(); } else if (opcode == 16) { - def.anInt2189 = stream.readUnsignedShort(); + def.rotateRightAnimation = stream.readUnsignedShort(); } else if (opcode == 17) { - def.walkAnimation = stream.readUnsignedShort(); + def.walkingAnimation = stream.readUnsignedShort(); def.rotate180Animation = stream.readUnsignedShort(); def.rotate90RightAnimation = stream.readUnsignedShort(); def.rotate90LeftAnimation = stream.readUnsignedShort(); } else if (opcode >= 30 && opcode < 35) { - def.options[opcode - 30] = stream.readString(); - if (def.options[opcode - 30].equalsIgnoreCase("Hidden")) + def.actions[opcode - 30] = stream.readString(); + if (def.actions[opcode - 30].equalsIgnoreCase("Hidden")) { - def.options[opcode - 30] = null; + def.actions[opcode - 30] = null; } } else if (opcode == 40) @@ -137,17 +135,17 @@ public class NpcLoader else if (opcode == 60) { length = stream.readUnsignedByte(); - def.models_2 = new int[length]; + def.chatheadModels = new int[length]; for (index = 0; index < length; ++index) { - def.models_2[index] = stream.readUnsignedShort(); + def.chatheadModels[index] = stream.readUnsignedShort(); } } else if (opcode == 93) { - def.renderOnMinimap = false; + def.isMinimapVisible = false; } else if (opcode == 95) { @@ -155,11 +153,11 @@ public class NpcLoader } else if (opcode == 97) { - def.resizeX = stream.readUnsignedShort(); + def.widthScale = stream.readUnsignedShort(); } else if (opcode == 98) { - def.resizeY = stream.readUnsignedShort(); + def.heightScale = stream.readUnsignedShort(); } else if (opcode == 99) { @@ -179,18 +177,18 @@ public class NpcLoader } else if (opcode == 103) { - def.rotation = stream.readUnsignedShort(); + def.rotationSpeed = stream.readUnsignedShort(); } else if (opcode == 106) { - def.varbitIndex = stream.readUnsignedShort(); - if ('\uffff' == def.varbitIndex) + def.varbitId = stream.readUnsignedShort(); + if (def.varbitId == 65535) { - def.varbitIndex = -1; + def.varbitId = -1; } def.varpIndex = stream.readUnsignedShort(); - if ('\uffff' == def.varpIndex) + if (def.varpIndex == 65535) { def.varpIndex = -1; } @@ -212,26 +210,26 @@ public class NpcLoader } else if (opcode == 107) { - def.isClickable = false; + def.isInteractable = false; } else if (opcode == 109) { - def.aBool2170 = false; + def.rotationFlag = false; } else if (opcode == 111) { - def.aBool2190 = true; + def.isPet = true; } else if (opcode == 118) { - def.varbitIndex = stream.readUnsignedShort(); - if ('\uffff' == def.varbitIndex) + def.varbitId = stream.readUnsignedShort(); + if (def.varbitId == 65535) { - def.varbitIndex = -1; + def.varbitId = -1; } def.varpIndex = stream.readUnsignedShort(); - if ('\uffff' == def.varpIndex) + if (def.varpIndex == 65535) { def.varpIndex = -1; } diff --git a/cache/src/main/java/net/runelite/cache/definitions/savers/NpcSaver.java b/cache/src/main/java/net/runelite/cache/definitions/savers/NpcSaver.java index 55d4b966e9..577681cf80 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/savers/NpcSaver.java +++ b/cache/src/main/java/net/runelite/cache/definitions/savers/NpcSaver.java @@ -47,45 +47,45 @@ public class NpcSaver out.writeByte(2); out.writeString(npc.name); } - if (npc.tileSpacesOccupied != 1) + if (npc.size != 1) { out.writeByte(12); - out.writeByte(npc.tileSpacesOccupied); + out.writeByte(npc.size); } - if (npc.stanceAnimation != -1) + if (npc.standingAnimation != -1) { out.writeByte(13); - out.writeShort(npc.stanceAnimation); + out.writeShort(npc.standingAnimation); } - if (npc.walkAnimation != -1) + if (npc.walkingAnimation != -1) { out.writeByte(14); - out.writeShort(npc.walkAnimation); + out.writeShort(npc.walkingAnimation); } - if (npc.anInt2165 != -1) + if (npc.rotateLeftAnimation != -1) { out.writeByte(15); - out.writeShort(npc.anInt2165); + out.writeShort(npc.rotateLeftAnimation); } - if (npc.anInt2189 != -1) + if (npc.rotateRightAnimation != -1) { out.writeByte(16); - out.writeShort(npc.anInt2189); + out.writeShort(npc.rotateRightAnimation); } if (npc.rotate180Animation != -1 || npc.rotate90LeftAnimation != -1 || npc.rotate90RightAnimation != -1) { out.writeByte(17); - out.writeShort(npc.walkAnimation); + out.writeShort(npc.walkingAnimation); out.writeShort(npc.rotate180Animation); out.writeShort(npc.rotate90RightAnimation); out.writeShort(npc.rotate90LeftAnimation); } for (int i = 0; i < 5; ++i) { - if (npc.options[i] != null) + if (npc.actions[i] != null) { out.writeByte(30 + i); - out.writeString(npc.options[i]); + out.writeString(npc.actions[i]); } } if (npc.recolorToFind != null && npc.recolorToReplace != null) @@ -108,16 +108,16 @@ public class NpcSaver out.writeShort(npc.retextureToReplace[i]); } } - if (npc.models_2 != null) + if (npc.chatheadModels != null) { out.writeByte(60); - out.writeByte(npc.models_2.length); - for (int modelId : npc.models_2) + out.writeByte(npc.chatheadModels.length); + for (int modelId : npc.chatheadModels) { out.writeShort(modelId); } } - if (!npc.renderOnMinimap) + if (!npc.isMinimapVisible) { out.writeByte(93); } @@ -127,9 +127,9 @@ public class NpcSaver out.writeShort(npc.combatLevel); } out.writeByte(97); - out.writeShort(npc.resizeX); + out.writeShort(npc.widthScale); out.writeByte(98); - out.writeShort(npc.resizeY); + out.writeShort(npc.heightScale); if (npc.hasRenderPriority) { out.writeByte(99); @@ -144,23 +144,23 @@ public class NpcSaver out.writeShort(npc.headIcon); } out.writeByte(103); - out.writeShort(npc.rotation); - if (!npc.isClickable) + out.writeShort(npc.rotationSpeed); + if (!npc.isInteractable) { out.writeByte(107); } - if (!npc.aBool2170) + if (!npc.rotationFlag) { out.writeByte(109); } - if (npc.aBool2190) + if (npc.isPet) { out.writeByte(111); } if (npc.configs != null) { out.writeByte(118); - out.writeShort(npc.varbitIndex); + out.writeShort(npc.varbitId); out.writeShort(npc.varpIndex); int[] c = npc.configs; From 7eda41452ba2985a479607eddc04cbb0e9ede9aa Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 26 Oct 2019 12:18:24 -0400 Subject: [PATCH 09/19] api: add source to sound effect events --- .../runelite/api/events/AreaSoundEffectPlayed.java | 11 +++++++++++ .../net/runelite/api/events/SoundEffectPlayed.java | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/events/AreaSoundEffectPlayed.java b/runelite-api/src/main/java/net/runelite/api/events/AreaSoundEffectPlayed.java index 488bff8264..e0f4c1fe28 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/AreaSoundEffectPlayed.java +++ b/runelite-api/src/main/java/net/runelite/api/events/AreaSoundEffectPlayed.java @@ -24,14 +24,25 @@ */ package net.runelite.api.events; +import javax.annotation.Nullable; import lombok.Data; +import net.runelite.api.Actor; @Data public class AreaSoundEffectPlayed { + @Nullable + private final Actor source; private int soundId; private int sceneX; private int sceneY; private int range; private int delay; + + private boolean consumed; + + public void consume() + { + consumed = true; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/events/SoundEffectPlayed.java b/runelite-api/src/main/java/net/runelite/api/events/SoundEffectPlayed.java index 127a9a2646..06002f717a 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/SoundEffectPlayed.java +++ b/runelite-api/src/main/java/net/runelite/api/events/SoundEffectPlayed.java @@ -24,11 +24,22 @@ */ package net.runelite.api.events; +import javax.annotation.Nullable; import lombok.Data; +import net.runelite.api.Actor; @Data public class SoundEffectPlayed { + @Nullable + private final Actor source; private int soundId; private int delay; + + private boolean consumed; + + public void consume() + { + consumed = true; + } } From 9f9205e65d144e444c57b5fe62ef7cd4d4625e7f Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 26 Oct 2019 12:18:49 -0400 Subject: [PATCH 10/19] devtools: add source to sound effect overlay --- .../net/runelite/client/plugins/devtools/SoundEffectOverlay.java | 1 + 1 file changed, 1 insertion(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SoundEffectOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SoundEffectOverlay.java index fbe2254066..cb99746a90 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SoundEffectOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SoundEffectOverlay.java @@ -123,6 +123,7 @@ class SoundEffectOverlay extends Overlay String text = "Id: " + event.getSoundId() + + " - S: " + (event.getSource() != null ? event.getSource().getName() : "") + " - L: " + event.getSceneX() + "," + event.getSceneY() + " - R: " + event.getRange() + " - D: " + event.getDelay(); From 79800944011b8a1b0f0073adc6674323b1588374 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 26 Oct 2019 12:19:28 -0400 Subject: [PATCH 11/19] music plugin: add option to mute other players area sounds --- .../client/plugins/music/MusicConfig.java | 11 +++++++++++ .../client/plugins/music/MusicPlugin.java | 15 +++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicConfig.java index da764e62c9..e425a10f08 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicConfig.java @@ -31,6 +31,16 @@ import net.runelite.client.config.ConfigItem; @ConfigGroup("music") public interface MusicConfig extends Config { + @ConfigItem( + keyName = "muteOtherAreaSounds", + name = "Mute others' area sounds", + description = "Mute area sounds caused from other players" + ) + default boolean muteOtherAreaSounds() + { + return false; + } + @ConfigItem( keyName = "musicVolume", name = "", @@ -60,6 +70,7 @@ public interface MusicConfig extends Config { return 0; } + @ConfigItem( keyName = "soundEffectVolume", name = "", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java index 167032278a..dd99b8ad5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java @@ -37,13 +37,16 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; +import net.runelite.api.Actor; import net.runelite.api.Client; import net.runelite.api.GameState; +import net.runelite.api.Player; import net.runelite.api.ScriptID; import net.runelite.api.SoundEffectID; import net.runelite.api.SpriteID; import net.runelite.api.VarClientInt; import net.runelite.api.VarPlayer; +import net.runelite.api.events.AreaSoundEffectPlayed; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.ScriptCallbackEvent; @@ -532,4 +535,16 @@ public class MusicPlugin extends Plugin client.getIntStack()[client.getIntStackSize() - 1] = -1; } } + + @Subscribe + public void onAreaSoundEffectPlayed(AreaSoundEffectPlayed areaSoundEffectPlayed) + { + Actor source = areaSoundEffectPlayed.getSource(); + if (source != client.getLocalPlayer() + && source instanceof Player + && musicConfig.muteOtherAreaSounds()) + { + areaSoundEffectPlayed.consume(); + } + } } \ No newline at end of file From 423d16fa8e9dc9ff9933b71fe3d53117391a5879 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 26 Oct 2019 21:58:50 -0400 Subject: [PATCH 12/19] http-service: make mongo database configurable --- .../net/runelite/http/service/config/ConfigService.java | 6 ++++-- http-service/src/main/resources/application.yaml | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/http-service/src/main/java/net/runelite/http/service/config/ConfigService.java b/http-service/src/main/java/net/runelite/http/service/config/ConfigService.java index bbe8557d88..727620570f 100644 --- a/http-service/src/main/java/net/runelite/http/service/config/ConfigService.java +++ b/http-service/src/main/java/net/runelite/http/service/config/ConfigService.java @@ -51,6 +51,7 @@ import net.runelite.http.api.config.ConfigEntry; import net.runelite.http.api.config.Configuration; import org.bson.Document; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service @@ -66,11 +67,12 @@ public class ConfigService @Autowired public ConfigService( - MongoClient mongoClient + MongoClient mongoClient, + @Value("${mongo.database}") String databaseName ) { - MongoDatabase database = mongoClient.getDatabase("config"); + MongoDatabase database = mongoClient.getDatabase(databaseName); MongoCollection collection = database.getCollection("config"); this.mongoCollection = collection; diff --git a/http-service/src/main/resources/application.yaml b/http-service/src/main/resources/application.yaml index ce902b76cb..f5e1a799d9 100644 --- a/http-service/src/main/resources/application.yaml +++ b/http-service/src/main/resources/application.yaml @@ -32,6 +32,7 @@ redis: mongo: jndiName: java:comp/env/mongodb/runelite + database: runelite # Twitter client for feed runelite: From 53e56720fc5d18d0b43c079841444e4e2e6bb50d Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sun, 27 Oct 2019 21:08:34 +0100 Subject: [PATCH 13/19] raids plugin: add option to manually broadcast layout Closes #9541 Signed-off-by: Tomas Slusny --- .../client/plugins/raids/RaidsConfig.java | 2 +- .../client/plugins/raids/RaidsOverlay.java | 3 +++ .../client/plugins/raids/RaidsPlugin.java | 24 ++++++++++++++----- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java index 2323a15a49..f92e483eae 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java @@ -160,6 +160,6 @@ public interface RaidsConfig extends Config ) default boolean layoutMessage() { - return true; + return false; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java index 5ca7214b57..9613d2e643 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java @@ -30,6 +30,7 @@ import java.awt.Graphics2D; import javax.inject.Inject; import lombok.Setter; import net.runelite.api.Client; +import static net.runelite.api.MenuAction.RUNELITE_OVERLAY; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; import net.runelite.client.plugins.raids.solver.Room; import net.runelite.client.ui.overlay.Overlay; @@ -44,6 +45,7 @@ import net.runelite.client.ui.overlay.components.TitleComponent; public class RaidsOverlay extends Overlay { private static final int OLM_PLANE = 0; + static final String BROADCAST_ACTION = "Broadcast layout"; private Client client; private RaidsPlugin plugin; @@ -63,6 +65,7 @@ public class RaidsOverlay extends Overlay this.plugin = plugin; this.config = config; getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Raids overlay")); + getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY, BROADCAST_ACTION, "Raids overlay")); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 6508792768..7c075b8767 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -39,6 +39,7 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.InstanceTemplates; +import net.runelite.api.MenuAction; import net.runelite.api.NullObjectID; import static net.runelite.api.Perspective.SCENE_SIZE; import net.runelite.api.Point; @@ -56,6 +57,7 @@ import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -253,6 +255,17 @@ public class RaidsPlugin extends Plugin } } + @Subscribe + public void onOverlayMenuClicked(final OverlayMenuClicked event) + { + if (event.getEntry().getMenuAction() == MenuAction.RUNELITE_OVERLAY && + event.getEntry().getOption().equals(RaidsOverlay.BROADCAST_ACTION) && + event.getOverlay() == overlay) + { + sendRaidLayoutMessage(); + } + } + private void checkRaidPresence(boolean force) { if (client.getGameState() != GameState.LOGGED_IN) @@ -288,7 +301,11 @@ public class RaidsPlugin extends Plugin raid.updateLayout(layout); RotationSolver.solve(raid.getCombatRooms()); overlay.setScoutOverlayShown(true); - sendRaidLayoutMessage(); + + if (config.layoutMessage()) + { + sendRaidLayoutMessage(); + } } else if (!config.scoutOverlayAtBank()) { @@ -305,11 +322,6 @@ public class RaidsPlugin extends Plugin private void sendRaidLayoutMessage() { - if (!config.layoutMessage()) - { - return; - } - final String layout = getRaid().getLayout().toCodeString(); final String rooms = getRaid().toRoomString(); final String raidData = "[" + layout + "]: " + rooms; From 5344cd6ddbd0e435bad7a088dbc266738319a5fc Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 27 Oct 2019 16:20:37 -0400 Subject: [PATCH 14/19] menu swapper: add pyramid plunder start-minigame and quick-leave Co-authored-by: MrH4mm3r --- .../MenuEntrySwapperConfig.java | 20 +++++++++++++++++++ .../MenuEntrySwapperPlugin.java | 9 +++++++++ 2 files changed, 29 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index 13f780a823..ddd3a1513c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -321,4 +321,24 @@ public interface MenuEntrySwapperConfig extends Config { return false; } + + @ConfigItem( + keyName = "swapStartMinigame", + name = "Pyramid Plunder Start-minigame", + description = "Swap Talk-to with Start-minigame at the Guardian Mummy" + ) + default boolean swapStartMinigame() + { + return true; + } + + @ConfigItem( + keyName = "swapQuickleave", + name = "Quick-Leave", + description = "Swap Leave Tomb with Quick-Leave at Pyramid Plunder" + ) + default boolean swapQuickLeave() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 91fddefb66..7d37fae388 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -458,6 +458,15 @@ public class MenuEntrySwapperPlugin extends Plugin { swap("enchant", option, target, index); } + + if (config.swapStartMinigame()) + { + swap("start-minigame", option, target, index); + } + } + else if (config.swapQuickLeave() && option.equals("leave tomb") && target.equals("tomb door")) + { + swap("quick-leave", option, target, index); } else if (config.swapTravel() && option.equals("pass") && target.equals("energy barrier")) { From 897cfffa015ac322a538da1df16b1fe92d4b6be8 Mon Sep 17 00:00:00 2001 From: trimbe Date: Sun, 27 Oct 2019 13:37:44 -0400 Subject: [PATCH 15/19] tabinterface: remember search after clicking deposit-x --- .../runelite/client/plugins/banktags/tabs/TabInterface.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index e6a3683daa..61b992036e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -606,9 +606,11 @@ public class TabInterface chatboxPanelManager.close(); } - if (event.getWidgetId() == WidgetInfo.BANK_ITEM_CONTAINER.getId() + if ((event.getWidgetId() == WidgetInfo.BANK_ITEM_CONTAINER.getId() + || event.getWidgetId() == WidgetInfo.BANK_INVENTORY_ITEMS_CONTAINER.getId()) && event.getMenuAction() == MenuAction.EXAMINE_ITEM_BANK_EQ - && event.getMenuOption().equalsIgnoreCase("withdraw-x")) + && (event.getMenuOption().equalsIgnoreCase("withdraw-x") + || event.getMenuOption().equalsIgnoreCase("deposit-x"))) { waitSearchTick = true; rememberedSearch = client.getVar(VarClientStr.INPUT_TEXT); From 6beddcb1e956c4b726f2b4fb8605fe230be28a52 Mon Sep 17 00:00:00 2001 From: Harry Freeborough Date: Mon, 28 Oct 2019 09:44:17 +0000 Subject: [PATCH 16/19] Correct capitalisations of "RuneScape" (#10142) --- .../main/java/net/runelite/client/config/ChatColorConfig.java | 4 ++-- .../plugins/cluescrolls/clues/hotcold/HotColdSolver.java | 2 +- .../net/runelite/client/plugins/hiscore/HiscorePanel.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java b/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java index c9a3e40d3d..e57be2942b 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java @@ -164,7 +164,7 @@ public interface ChatColorConfig extends Config position = 45, keyName = "opaqueServerMessage", name = "Server message", - description = "Color of Server Messages (eg. 'Welcome to Runescape')" + description = "Color of Server Messages (eg. 'Welcome to RuneScape')" ) Color opaqueServerMessage(); @@ -404,7 +404,7 @@ public interface ChatColorConfig extends Config position = 75, keyName = "transparentServerMessage", name = "Server message (transparent)", - description = "Color of Server Messages (eg. 'Welcome to Runescape') (transparent)" + description = "Color of Server Messages (eg. 'Welcome to RuneScape') (transparent)" ) Color transparentServerMessage(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdSolver.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdSolver.java index 87414f0387..052fef03ea 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdSolver.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdSolver.java @@ -38,7 +38,7 @@ import net.runelite.api.coords.WorldPoint; *

* These puzzles are established by having some way to test the distance from the solution via "warmth", where being * colder means one is farther away from the target, and being warmer means one is closer to it, with the goal being to - * reach the most warm value to discover the solution point. Hot-cold puzzles in Old School Runescape are implemented + * reach the most warm value to discover the solution point. Hot-cold puzzles in Old School RuneScape are implemented * with specific set of solution points, so this solver will filter from a provided set of possible solutions as new * signals of temperatures and temperature changes are provided. */ diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java index 0ddb3372f3..d61f8866db 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java @@ -97,7 +97,7 @@ import net.runelite.http.api.hiscore.Skill; @Slf4j public class HiscorePanel extends PluginPanel { - /* The maximum allowed username length in runescape accounts */ + /* The maximum allowed username length in RuneScape accounts */ private static final int MAX_USERNAME_LENGTH = 12; /** @@ -345,7 +345,7 @@ public class HiscorePanel extends PluginPanel return; } - /* Runescape usernames can't be longer than 12 characters long */ + /* RuneScape usernames can't be longer than 12 characters long */ if (lookup.length() > MAX_USERNAME_LENGTH) { searchBar.setIcon(IconTextField.Icon.ERROR); From a2166f121599c8c570c1f336400971c487f3844b Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 28 Oct 2019 18:05:35 -0400 Subject: [PATCH 17/19] http-api: centralize json mediatype --- http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java | 2 ++ .../java/net/runelite/http/api/ge/GrandExchangeClient.java | 3 +-- .../net/runelite/http/api/loottracker/LootTrackerClient.java | 3 +-- .../src/main/java/net/runelite/http/api/xtea/XteaClient.java | 4 +--- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java index 472c241f72..2f0ba34bc0 100644 --- a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java +++ b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java @@ -31,6 +31,7 @@ import java.util.Properties; import java.util.concurrent.TimeUnit; import okhttp3.HttpUrl; import okhttp3.Interceptor; +import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -45,6 +46,7 @@ public class RuneLiteAPI public static final OkHttpClient CLIENT; public static final Gson GSON = new Gson(); + public static final MediaType JSON = MediaType.parse("application/json"); public static String userAgent; private static final String BASE = "https://api.runelite.net"; diff --git a/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java b/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java index a1b97bc390..78e64d383a 100644 --- a/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java +++ b/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java @@ -30,10 +30,10 @@ import java.util.UUID; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; +import static net.runelite.http.api.RuneLiteAPI.JSON; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; -import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; @@ -42,7 +42,6 @@ import okhttp3.Response; @AllArgsConstructor public class GrandExchangeClient { - private static final MediaType JSON = MediaType.parse("application/json"); private static final Gson GSON = RuneLiteAPI.GSON; private final UUID uuid; diff --git a/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java b/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java index 59d1a567ff..71eb151364 100644 --- a/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java +++ b/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java @@ -36,10 +36,10 @@ import java.util.UUID; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; +import static net.runelite.http.api.RuneLiteAPI.JSON; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; -import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; @@ -48,7 +48,6 @@ import okhttp3.Response; @AllArgsConstructor public class LootTrackerClient { - private static final MediaType JSON = MediaType.parse("application/json"); private static final Gson GSON = RuneLiteAPI.GSON; private final UUID uuid; diff --git a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java index e4ee2c22b9..42b10e3239 100644 --- a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java +++ b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java @@ -31,10 +31,10 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; import net.runelite.http.api.RuneLiteAPI; +import static net.runelite.http.api.RuneLiteAPI.JSON; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; -import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; @@ -43,8 +43,6 @@ import org.slf4j.LoggerFactory; public class XteaClient { - private static final MediaType JSON = MediaType.parse("application/json"); - private static final Logger logger = LoggerFactory.getLogger(XteaClient.class); public void submit(XteaRequest xteaRequest) From 66e7acd86f11b0ab2a813a759b6dcc87392b4672 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Thu, 24 Oct 2019 13:29:05 -0600 Subject: [PATCH 18/19] music: check parent and siblings for null --- .../client/plugins/music/MusicPlugin.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java index dd99b8ad5e..6f3496a922 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java @@ -411,13 +411,21 @@ public class MusicPlugin extends Plugin { { Widget handle = slider.getHandle(); - Widget[] siblings = handle.getParent().getChildren(); - if (siblings.length < handle.getIndex() || siblings[handle.getIndex()] != handle) + Widget parent = handle.getParent(); + if (parent == null) { continue; } - siblings[slider.getTrack().getIndex()] = null; - siblings[handle.getIndex()] = null; + else + { + Widget[] siblings = parent.getChildren(); + if (siblings == null || handle.getIndex() >= siblings.length || siblings[handle.getIndex()] != handle) + { + continue; + } + siblings[slider.getTrack().getIndex()] = null; + siblings[handle.getIndex()] = null; + } } Object[] init = icon.getOnLoadListener(); @@ -444,11 +452,19 @@ public class MusicPlugin extends Plugin Widget handle = slider.getHandle(); if (handle != null) { - Widget[] siblings = handle.getParent().getChildren(); - if (siblings.length < handle.getIndex() || siblings[handle.getIndex()] != handle) + Widget parent = handle.getParent(); + if (parent == null) { handle = null; } + else + { + Widget[] siblings = parent.getChildren(); + if (siblings == null || handle.getIndex() >= siblings.length || siblings[handle.getIndex()] != handle) + { + handle = null; + } + } } if (handle == null) { From b123ad667a8f4f14419f4c27454d7506820fdccb Mon Sep 17 00:00:00 2001 From: Joel <47850057+PERSS0N@users.noreply.github.com> Date: Tue, 29 Oct 2019 23:01:20 +0100 Subject: [PATCH 19/19] Add item mapping for Berserker Necklace (or) (#10158) --- .../src/main/java/net/runelite/client/game/ItemMapping.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java index 638dfcb19b..47cb63556e 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java @@ -106,6 +106,8 @@ public enum ItemMapping ITEM_FURY_ORNAMENT_KIT(FURY_ORNAMENT_KIT, AMULET_OF_FURY_OR), ITEM_TORMENTED_BRACELET(TORMENTED_BRACELET, TORMENTED_BRACELET_OR), ITEM_TORMENTED_ORNAMENT_KIT(TORMENTED_ORNAMENT_KIT, TORMENTED_BRACELET_OR), + ITEM_BERSERKER_NECKLACE(BERSERKER_NECKLACE, BERSERKER_NECKLACE_OR), + ITEM_BERSERKER_NECKLACE_ORNAMENT_KIT(BERSERKER_NECKLACE_ORNAMENT_KIT, BERSERKER_NECKLACE_OR), // Ensouled heads ITEM_ENSOULED_GOBLIN_HEAD(ENSOULED_GOBLIN_HEAD_13448, ENSOULED_GOBLIN_HEAD),