diff --git a/common.settings.gradle.kts b/common.settings.gradle.kts index 8a7d31ac2a6..c19ee3957c6 100644 --- a/common.settings.gradle.kts +++ b/common.settings.gradle.kts @@ -102,6 +102,12 @@ gradle.afterProject { isReproducibleFileOrder = true } + tasks.withType { + testLogging { + exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL + } + } + extensions.findByType()?.run { module { isDownloadSources = true diff --git a/gradle.properties b/gradle.properties index 449f651ad96..84df6847473 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,10 +28,10 @@ org.gradle.parallel=true org.gradle.caching=false project.build.group=net.runelite -project.build.version=1.12.13 +project.build.version=1.12.14 glslang.path= -microbot.version=2.1.15 +microbot.version=2.1.16 microbot.commit.sha=nogit microbot.repo.url=http://138.201.81.246:8081/repository/microbot-snapshot/ microbot.repo.username= diff --git a/runelite-api/src/main/interfaces/interfaces.toml b/runelite-api/src/main/interfaces/interfaces.toml index f302980514e..0742286b166 100644 --- a/runelite-api/src/main/interfaces/interfaces.toml +++ b/runelite-api/src/main/interfaces/interfaces.toml @@ -58,24 +58,23 @@ tutorial_button=4 item_count_top=5 item_count_bar=6 item_count_bottom=7 -group_storage_button=8 -content_container=10 -tab_container=11 -item_container=13 -scrollbar=14 -search_button_background=42 -deposit_inventory=44 -deposit_equipment=46 -potion_store=48 -incinerator=49 -incinerator_confirm=50 -potionstore_content=52 -equipment_parent=80 -equipment_set_bonus=121 -settings_button=125 -equipment_button=126 -popup=128 -equipment_stat_bonus=134 +content_container=9 +tab_container=10 +item_container=12 +scrollbar=13 +search_button_background=41 +deposit_inventory=43 +deposit_equipment=45 +potion_store=119 +incinerator=48 +incinerator_confirm=49 +potionstore_content=51 +equipment_parent=54 +equipment_set_bonus=95 +settings_button=99 +equipment_button=100 +popup=102 +equipment_stat_bonus=108 [bank_inventory] id=15 diff --git a/runelite-api/src/main/java/net/runelite/api/IconID.java b/runelite-api/src/main/java/net/runelite/api/IconID.java index dccf3bbc07b..8c40b8ed29d 100644 --- a/runelite-api/src/main/java/net/runelite/api/IconID.java +++ b/runelite-api/src/main/java/net/runelite/api/IconID.java @@ -48,7 +48,10 @@ public enum IconID NO_ENTRY(11), CHAIN_LINK(12), BOUNTY_HUNTER_EMBLEM(20), - LEAGUE(22); + LEAGUE(22), + GROUP_IRONMAN(41), + HARDCORE_GROUP_IRONMAN(42), + UNRANKED_GROUP_IRONMAN(43); private final int index; diff --git a/runelite-api/src/main/java/net/runelite/api/ItemID.java b/runelite-api/src/main/java/net/runelite/api/ItemID.java index ada7dd32357..470bdbda788 100644 --- a/runelite-api/src/main/java/net/runelite/api/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemID.java @@ -16132,5 +16132,7 @@ public final class ItemID public static final int HOODED_SLAYER_HELMET_I = 33068; public static final int HOODED_SLAYER_HELMET_I_33070 = 33070; public static final int HOODED_SLAYER_HELMET_I_33072 = 33072; + public static final int FACILITY_BOTTLE_EMPTY = 33074; + public static final int FACILITY_BOTTLE_FULL = 33077; /* This file is automatically generated. Do not edit. */ } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/NullItemID.java b/runelite-api/src/main/java/net/runelite/api/NullItemID.java index bf0e4db7177..8f456f33f43 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullItemID.java @@ -16632,5 +16632,7 @@ public final class NullItemID public static final int NULL_33069 = 33069; public static final int NULL_33071 = 33071; public static final int NULL_33073 = 33073; + public static final int NULL_33075 = 33075; + public static final int NULL_33076 = 33076; /* This file is automatically generated. Do not edit. */ } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java index 58f37dfd9e8..327141d4bfd 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java @@ -31329,8 +31329,8 @@ public final class NullObjectID public static final int NULL_60617 = 60617; public static final int NULL_60618 = 60618; public static final int NULL_60643 = 60643; - public static final int NULL_60644 = 60644; - public static final int NULL_60645 = 60645; public static final int NULL_60646 = 60646; + public static final int NULL_60661 = 60661; + public static final int NULL_60662 = 60662; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index f1f53fd8e00..82758bcea62 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -272,7 +272,7 @@ public final class ScriptID *
  • int (WidgetID) * 16, various widgets making up the bank interface
  • * */ - @ScriptArguments(integer = 17) + @ScriptArguments(integer = 20) public static final int BANKMAIN_SEARCH_REFRESH = 283; @ScriptArguments(integer = 6) @@ -308,7 +308,7 @@ public final class ScriptID @ScriptArguments(integer = 4, string = 1) public static final int XPDROPS_SETDROPSIZE = 996; - @ScriptArguments(integer = 34) + @ScriptArguments(integer = 35) public static final int BANKMAIN_INIT = 274; /** @@ -317,10 +317,10 @@ public final class ScriptID *
  • int (WidgetID) * 17, various widgets making up the bank interface
  • * */ - @ScriptArguments(integer = 17) + @ScriptArguments(integer = 20) public static final int BANKMAIN_BUILD = 277; - @ScriptArguments(integer = 19) + @ScriptArguments(integer = 22) public static final int BANKMAIN_FINISHBUILDING = 505; @ScriptArguments() @@ -337,7 +337,7 @@ public final class ScriptID * These can be retrieved from the onInvTransmitListener of BANK_ITEM_CONTAINER. Note that this array also * contains the script ID for the bank layout script in the first index */ - @ScriptArguments(integer = 18) + @ScriptArguments(integer = 21) public static final int BANKMAIN_SEARCH_TOGGLE = 281; @ScriptArguments(integer = 6) @@ -500,4 +500,7 @@ public final class ScriptID @ScriptArguments(integer = 6, string = 9) public static final int INTERFACE_INV_DRAW_SLOT_BIG = 154; + + @ScriptArguments(integer = 4) + public static final int BANKMAIN_POPUP_TAB_DRAW = 9221; } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java b/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java index c899a07a741..9f744990840 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java @@ -13693,6 +13693,11 @@ public static final class SailingBoatFacility */ public static final int COL_FACILITY_CUSTOMISATION_ORDER = 25; + /** + * integer + */ + public static final int COL_FACILITY_BOTTLE_ID = 26; + public static final class Row { public static final int SAILING_BOAT_FACILITY_BRONZE_CANNON = 8427; diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java b/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java index 2da24796a44..b0df4d317e2 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java @@ -1219,140 +1219,145 @@ public static final class Bankmain public static final int OCCUPIEDSLOTS = 0x000c_0005; public static final int UNIVERSE_LINE4 = 0x000c_0006; public static final int CAPACITY_LAYER = 0x000c_0007; - public static final int GIM_STORAGE = 0x000c_0008; - public static final int CAPACITY = 0x000c_0009; - public static final int ITEMS_CONTAINER = 0x000c_000a; - public static final int TABS = 0x000c_000b; - public static final int TABS_LINE0 = 0x000c_000c; - public static final int ITEMS = 0x000c_000d; - public static final int SCROLLBAR = 0x000c_000e; - public static final int POTIONSTORE_CONTAINER = 0x000c_000f; - public static final int POTIONSTORE_BACKGROUND = 0x000c_0010; - public static final int BOTTOM = 0x000c_0011; - public static final int REARRANGE_TEXT = 0x000c_0012; - public static final int SWAP = 0x000c_0013; - public static final int SWAP_TEXT = 0x000c_0014; - public static final int INSERT = 0x000c_0015; - public static final int INSERT_TEXT = 0x000c_0016; - public static final int WITHDRAW_TEXT = 0x000c_0017; - public static final int ITEM = 0x000c_0018; - public static final int ITEM_TEXT = 0x000c_0019; - public static final int NOTE = 0x000c_001a; - public static final int NOTE_TEXT = 0x000c_001b; - public static final int QUANTITY_LAYER = 0x000c_001c; - public static final int QUANTITY_LAYER_TEXT0 = 0x000c_001d; - public static final int QUANTITY1 = 0x000c_001e; - public static final int QUANTITY1_TEXT = 0x000c_001f; - public static final int QUANTITY5 = 0x000c_0020; - public static final int QUANTITY5_TEXT = 0x000c_0021; - public static final int QUANTITY10 = 0x000c_0022; - public static final int QUANTITY10_TEXT = 0x000c_0023; - public static final int QUANTITYX = 0x000c_0024; - public static final int QUANTITYX_TEXT = 0x000c_0025; - public static final int QUANTITYALL = 0x000c_0026; - public static final int QUANTITYALL_TEXT = 0x000c_0027; - public static final int PLACEHOLDER = 0x000c_0028; - public static final int PLACEHOLDER_GRAPHIC = 0x000c_0029; - public static final int SEARCH = 0x000c_002a; - public static final int SEARCH_GRAPHIC = 0x000c_002b; - public static final int DEPOSITINV = 0x000c_002c; - public static final int DEPOSITINV_GRAPHIC = 0x000c_002d; - public static final int DEPOSITWORN = 0x000c_002e; - public static final int DEPOSITWORN_GRAPHIC = 0x000c_002f; - public static final int POTIONSTORE_BUTTON = 0x000c_0030; - public static final int INCINERATOR_TARGET = 0x000c_0031; - public static final int INCINERATOR_CONFIRM = 0x000c_0032; - public static final int INCINERATOR_CONFIRM_GRAPHIC0 = 0x000c_0033; - public static final int POTIONSTORE_ITEMS = 0x000c_0034; - public static final int POTIONSTORE_SCROLLBAR = 0x000c_0035; - public static final int MENU_CONTAINER = 0x000c_0036; - public static final int TABDISPLAY = 0x000c_0037; - public static final int INCINERATOR_TOGGLE = 0x000c_0038; - public static final int BANKTUT_TOGGLE = 0x000c_0039; - public static final int TABDISPLAY_TEXT0 = 0x000c_003a; - public static final int TABDISPLAY_SELECT = 0x000c_003b; - public static final int SIDEOPS_TOGGLE = 0x000c_003c; - public static final int BANKOPS_TOGGLE = 0x000c_003d; - public static final int DEPOSITINV_TOGGLE = 0x000c_003e; - public static final int DEPOSITWORN_TOGGLE = 0x000c_003f; - public static final int DEPOSITPOTION_TOGGLE = 0x000c_0040; - public static final int CHUGGINGBARREL_TOGGLE = 0x000c_0041; - public static final int RELEASE_PLACEHOLDERS = 0x000c_0042; - public static final int LOCKS = 0x000c_0043; - public static final int BANK_FILLERS = 0x000c_0044; - public static final int BANK_FILLER_1 = 0x000c_0045; - public static final int BANK_FILLER_1_TEXT = 0x000c_0046; - public static final int BANK_FILLER_10 = 0x000c_0047; - public static final int BANK_FILLER_10_TEXT = 0x000c_0048; - public static final int BANK_FILLER_50 = 0x000c_0049; - public static final int BANK_FILLER_50_TEXT = 0x000c_004a; - public static final int BANK_FILLER_X = 0x000c_004b; - public static final int BANK_FILLER_X_TEXT = 0x000c_004c; - public static final int BANK_FILLER_ALL = 0x000c_004d; - public static final int BANK_FILLER_ALL_TEXT = 0x000c_004e; - public static final int BANK_FILLER_CONFIRM = 0x000c_004f; - public static final int WORNITEMS_CONTAINER = 0x000c_0050; - public static final int WORNITEMS_CONTAINER_MODEL0 = 0x000c_0051; - public static final int WORNITEMS_CONTAINER_GRAPHIC1 = 0x000c_0052; - public static final int WORNITEMS_CONTAINER_GRAPHIC2 = 0x000c_0053; - public static final int WORNITEMS_CONTAINER_GRAPHIC3 = 0x000c_0054; - public static final int WORNITEMS_CONTAINER_GRAPHIC4 = 0x000c_0055; - public static final int WORNITEMS_CONTAINER_GRAPHIC5 = 0x000c_0056; - public static final int WORNSLOT0 = 0x000c_0057; - public static final int WORNSLOT1 = 0x000c_0058; - public static final int WORNSLOT2 = 0x000c_0059; - public static final int WORNSLOT3 = 0x000c_005a; - public static final int WORNSLOT4 = 0x000c_005b; - public static final int WORNSLOT5 = 0x000c_005c; - public static final int WORNSLOT7 = 0x000c_005d; - public static final int WORNSLOT9 = 0x000c_005e; - public static final int WORNSLOT10 = 0x000c_005f; - public static final int WORNSLOT12 = 0x000c_0060; - public static final int WORNSLOT13 = 0x000c_0061; - public static final int EXTRA_QUIVER_SLOT = 0x000c_0062; - public static final int STAT_GROUP = 0x000c_0063; - public static final int STAT_GROUP_TEXT0 = 0x000c_0064; - public static final int STABATT = 0x000c_0065; - public static final int SLASHATT = 0x000c_0066; - public static final int CRUSHATT = 0x000c_0067; - public static final int MAGICATT = 0x000c_0068; - public static final int RANGEATT = 0x000c_0069; - public static final int STAT_GROUP_TEXT6 = 0x000c_006a; - public static final int STABDEF = 0x000c_006b; - public static final int SLASHDEF = 0x000c_006c; - public static final int CRUSHDEF = 0x000c_006d; - public static final int MAGICDEF = 0x000c_006e; - public static final int RANGEDEF = 0x000c_006f; - public static final int STAT_GROUP_TEXT12 = 0x000c_0070; - public static final int MELEESTRENGTH = 0x000c_0071; - public static final int RANGESTRENGTH = 0x000c_0072; - public static final int MAGICDAMAGE = 0x000c_0073; - public static final int PRAYER = 0x000c_0074; - public static final int STAT_GROUP_TEXT17 = 0x000c_0075; - public static final int TYPEMULTIPLIER = 0x000c_0076; - public static final int SLAYERMULTIPLIER = 0x000c_0077; - public static final int STAT_GROUP_TEXT20 = 0x000c_0078; - public static final int NEXT_PAGE = 0x000c_0079; - public static final int SET_BONUS = 0x000c_007a; - public static final int WORNITEMS_CONTAINER_GRAPHIC21 = 0x000c_007b; - public static final int WORNITEMS_CONTAINER_TEXT22 = 0x000c_007c; - public static final int MENU_BUTTON = 0x000c_007d; - public static final int WORNITEMS_BUTTON = 0x000c_007e; - public static final int BANK_HIGHLIGHT = 0x000c_007f; - public static final int POPUP = 0x000c_0080; - public static final int DROPDOWN_CONTAINER = 0x000c_0081; - public static final int TOOLTIP = 0x000c_0082; - public static final int SET_BONUS_TEXT0 = 0x000c_0083; - public static final int SET_EFFECT = 0x000c_0084; - public static final int SCROLLBAR_1 = 0x000c_0085; - public static final int PREVIOUS_PAGE = 0x000c_0086; - public static final int ATTACKSPEEDBASE = 0x000c_0087; - public static final int ATTACKSPEEDACTUAL = 0x000c_0088; - public static final int EXTRA_QUIVER_AMMO_GRAPHIC = 0x000c_0089; - public static final int EXTRA_QUIVER_AMMO = 0x000c_008a; - public static final int DROPDOWN = 0x000c_008b; - public static final int DROPDOWN_CONTENT = 0x000c_008c; - public static final int DROPDOWN_SCROLLER = 0x000c_008d; + public static final int CAPACITY = 0x000c_0008; + public static final int ITEMS_CONTAINER = 0x000c_0009; + public static final int TABS = 0x000c_000a; + public static final int TABS_LINE0 = 0x000c_000b; + public static final int ITEMS = 0x000c_000c; + public static final int SCROLLBAR = 0x000c_000d; + public static final int POTIONSTORE_CONTAINER = 0x000c_000e; + public static final int POTIONSTORE_BACKGROUND = 0x000c_000f; + public static final int BOTTOM = 0x000c_0010; + public static final int SWAP_INSERT = 0x000c_0011; + public static final int SWAP_INSERT_GRAPHIC = 0x000c_0012; + public static final int NOTE = 0x000c_0013; + public static final int NOTE_GRAPHIC = 0x000c_0014; + public static final int BOTTOM_LINE4 = 0x000c_0015; + public static final int QUANTITY_LAYER = 0x000c_0016; + public static final int QUANTITY1 = 0x000c_0017; + public static final int QUANTITY1_TEXT = 0x000c_0018; + public static final int QUANTITY5 = 0x000c_0019; + public static final int QUANTITY5_TEXT = 0x000c_001a; + public static final int QUANTITY10 = 0x000c_001b; + public static final int QUANTITY10_TEXT = 0x000c_001c; + public static final int QUANTITYX = 0x000c_001d; + public static final int QUANTITYX_TEXT = 0x000c_001e; + public static final int QUANTITYALL = 0x000c_001f; + public static final int QUANTITYALL_TEXT = 0x000c_0020; + public static final int BOTTOM_LINE6 = 0x000c_0021; + public static final int PLACEHOLDER = 0x000c_0022; + public static final int PLACEHOLDER_GRAPHIC = 0x000c_0023; + public static final int SEARCH = 0x000c_0024; + public static final int SEARCH_GRAPHIC = 0x000c_0025; + public static final int DEPOSIT_LINE = 0x000c_0026; + public static final int DEPOSITCONTAINERS = 0x000c_0027; + public static final int DEPOSITCONTAINERS_GRAPHIC = 0x000c_0028; + public static final int DEPOSITINV = 0x000c_0029; + public static final int DEPOSITINV_GRAPHIC = 0x000c_002a; + public static final int DEPOSITWORN = 0x000c_002b; + public static final int DEPOSITWORN_GRAPHIC = 0x000c_002c; + public static final int HORIZONTAL_LINE = 0x000c_002d; + public static final int POPUP_BUTTON_OUT = 0x000c_002e; + public static final int STORAGE_POPUP_TAB = 0x000c_002f; + public static final int INCINERATOR_TARGET = 0x000c_0030; + public static final int INCINERATOR_CONFIRM = 0x000c_0031; + public static final int INCINERATOR_CONFIRM_GRAPHIC0 = 0x000c_0032; + public static final int POTIONSTORE_ITEMS = 0x000c_0033; + public static final int POTIONSTORE_SCROLLBAR = 0x000c_0034; + public static final int MENU_CONTAINER = 0x000c_0035; + public static final int WORNITEMS_CONTAINER = 0x000c_0036; + public static final int WORNITEMS_CONTAINER_MODEL0 = 0x000c_0037; + public static final int WORNITEMS_CONTAINER_GRAPHIC1 = 0x000c_0038; + public static final int WORNITEMS_CONTAINER_GRAPHIC2 = 0x000c_0039; + public static final int WORNITEMS_CONTAINER_GRAPHIC3 = 0x000c_003a; + public static final int WORNITEMS_CONTAINER_GRAPHIC4 = 0x000c_003b; + public static final int WORNITEMS_CONTAINER_GRAPHIC5 = 0x000c_003c; + public static final int WORNSLOT0 = 0x000c_003d; + public static final int WORNSLOT1 = 0x000c_003e; + public static final int WORNSLOT2 = 0x000c_003f; + public static final int WORNSLOT3 = 0x000c_0040; + public static final int WORNSLOT4 = 0x000c_0041; + public static final int WORNSLOT5 = 0x000c_0042; + public static final int WORNSLOT7 = 0x000c_0043; + public static final int WORNSLOT9 = 0x000c_0044; + public static final int WORNSLOT10 = 0x000c_0045; + public static final int WORNSLOT12 = 0x000c_0046; + public static final int WORNSLOT13 = 0x000c_0047; + public static final int EXTRA_QUIVER_SLOT = 0x000c_0048; + public static final int STAT_GROUP = 0x000c_0049; + public static final int STAT_GROUP_TEXT0 = 0x000c_004a; + public static final int STABATT = 0x000c_004b; + public static final int SLASHATT = 0x000c_004c; + public static final int CRUSHATT = 0x000c_004d; + public static final int MAGICATT = 0x000c_004e; + public static final int RANGEATT = 0x000c_004f; + public static final int STAT_GROUP_TEXT6 = 0x000c_0050; + public static final int STABDEF = 0x000c_0051; + public static final int SLASHDEF = 0x000c_0052; + public static final int CRUSHDEF = 0x000c_0053; + public static final int MAGICDEF = 0x000c_0054; + public static final int RANGEDEF = 0x000c_0055; + public static final int STAT_GROUP_TEXT12 = 0x000c_0056; + public static final int MELEESTRENGTH = 0x000c_0057; + public static final int RANGESTRENGTH = 0x000c_0058; + public static final int MAGICDAMAGE = 0x000c_0059; + public static final int PRAYER = 0x000c_005a; + public static final int STAT_GROUP_TEXT17 = 0x000c_005b; + public static final int TYPEMULTIPLIER = 0x000c_005c; + public static final int SLAYERMULTIPLIER = 0x000c_005d; + public static final int STAT_GROUP_TEXT20 = 0x000c_005e; + public static final int NEXT_PAGE = 0x000c_005f; + public static final int SET_BONUS = 0x000c_0060; + public static final int WORNITEMS_CONTAINER_GRAPHIC21 = 0x000c_0061; + public static final int WORNITEMS_CONTAINER_TEXT22 = 0x000c_0062; + public static final int MENU_BUTTON = 0x000c_0063; + public static final int WORNITEMS_BUTTON = 0x000c_0064; + public static final int BANK_HIGHLIGHT = 0x000c_0065; + public static final int POPUP = 0x000c_0066; + public static final int DROPDOWN_CONTAINER = 0x000c_0067; + public static final int TOOLTIP = 0x000c_0068; + public static final int SET_BONUS_TEXT0 = 0x000c_0069; + public static final int SET_EFFECT = 0x000c_006a; + public static final int SCROLLBAR_1 = 0x000c_006b; + public static final int PREVIOUS_PAGE = 0x000c_006c; + public static final int ATTACKSPEEDBASE = 0x000c_006d; + public static final int ATTACKSPEEDACTUAL = 0x000c_006e; + public static final int EXTRA_QUIVER_AMMO_GRAPHIC = 0x000c_006f; + public static final int EXTRA_QUIVER_AMMO = 0x000c_0070; + public static final int DROPDOWN = 0x000c_0071; + public static final int DROPDOWN_CONTENT = 0x000c_0072; + public static final int DROPDOWN_SCROLLER = 0x000c_0073; + public static final int STORAGE_POPUP_TAB_FRAME = 0x000c_0074; + public static final int POPUP_BUTTON_IN = 0x000c_0075; + public static final int GIM_STORAGE = 0x000c_0076; + public static final int POTIONSTORE_BUTTON = 0x000c_0077; + public static final int TABDISPLAY = 0x000c_0078; + public static final int TABDISPLAY_TEXT0 = 0x000c_0079; + public static final int TABDISPLAY_SELECT_1 = 0x000c_007a; + public static final int INCINERATOR_TOGGLE = 0x000c_007b; + public static final int BANKTUT_TOGGLE = 0x000c_007c; + public static final int SIDEOPS_TOGGLE = 0x000c_007d; + public static final int BANKOPS_TOGGLE = 0x000c_007e; + public static final int DEPOSITINV_TOGGLE = 0x000c_007f; + public static final int DEPOSITWORN_TOGGLE = 0x000c_0080; + public static final int DEPOSITCONTAINERS_TOGGLE = 0x000c_0081; + public static final int POPUP_TAB_FORGETPOS = 0x000c_0082; + public static final int DEPOSITPOTION_TOGGLE = 0x000c_0083; + public static final int CHUGGINGBARREL_TOGGLE = 0x000c_0084; + public static final int RELEASE_PLACEHOLDERS = 0x000c_0085; + public static final int LOCKS = 0x000c_0086; + public static final int BANK_FILLERS = 0x000c_0087; + public static final int BANK_FILLER_1 = 0x000c_0088; + public static final int BANK_FILLER_1_TEXT = 0x000c_0089; + public static final int BANK_FILLER_10 = 0x000c_008a; + public static final int BANK_FILLER_10_TEXT = 0x000c_008b; + public static final int BANK_FILLER_50 = 0x000c_008c; + public static final int BANK_FILLER_50_TEXT = 0x000c_008d; + public static final int BANK_FILLER_X = 0x000c_008e; + public static final int BANK_FILLER_X_TEXT = 0x000c_008f; + public static final int BANK_FILLER_ALL = 0x000c_0090; + public static final int BANK_FILLER_ALL_TEXT = 0x000c_0091; + public static final int BANK_FILLER_CONFIRM = 0x000c_0092; } public static final class CorpBeast @@ -8129,8 +8134,8 @@ public static final class BankDepositbox public static final int INVENTORY_RECT2 = 0x00c0_001a; public static final int INVENTORY_RECT3 = 0x00c0_001b; public static final int DEPOSIT_ALL_BUTTONS = 0x00c0_001c; - public static final int DEPOSIT_INV = 0x00c0_001d; - public static final int DEPOSIT_WORN = 0x00c0_001e; + public static final int DEPOSIT_WORN = 0x00c0_001d; + public static final int DEPOSIT_INV = 0x00c0_001e; public static final int DEPOSIT_LOOTINGBAG = 0x00c0_001f; public static final int QUANTITY_BUTTONS = 0x00c0_0020; public static final int MENU = 0x00c0_0021; @@ -24659,34 +24664,27 @@ public static final class SharedBank public static final int SEARCH_GRAPHIC = 0x02d4_0011; public static final int DEPOSITINV = 0x02d4_0012; public static final int DEPOSITINV_GRAPHIC = 0x02d4_0013; - public static final int BOTTOM = 0x02d4_0014; - public static final int MODE_LAYER = 0x02d4_0015; - public static final int REARRANGE_TEXT = 0x02d4_0016; - public static final int SWAP = 0x02d4_0017; - public static final int SWAP_TEXT = 0x02d4_0018; - public static final int INSERT = 0x02d4_0019; - public static final int INSERT_TEXT = 0x02d4_001a; - public static final int WITHDRAWAL_LAYER = 0x02d4_001b; - public static final int WITHDRAW_TEXT = 0x02d4_001c; - public static final int ITEM = 0x02d4_001d; - public static final int ITEM_TEXT = 0x02d4_001e; - public static final int NOTE = 0x02d4_001f; - public static final int NOTE_TEXT = 0x02d4_0020; - public static final int BOTTOM_TEXT2 = 0x02d4_0021; - public static final int SAVE_BUTTON = 0x02d4_0022; - public static final int QUANTITY_LAYER = 0x02d4_0023; - public static final int QUANTITY_LAYER_TEXT0 = 0x02d4_0024; - public static final int QUANTITY1 = 0x02d4_0025; - public static final int QUANTITY1_TEXT = 0x02d4_0026; - public static final int QUANTITY5 = 0x02d4_0027; - public static final int QUANTITY5_TEXT = 0x02d4_0028; - public static final int QUANTITY10 = 0x02d4_0029; - public static final int QUANTITY10_TEXT = 0x02d4_002a; - public static final int QUANTITYX = 0x02d4_002b; - public static final int QUANTITYX_TEXT = 0x02d4_002c; - public static final int QUANTITYALL = 0x02d4_002d; - public static final int QUANTITYALL_TEXT = 0x02d4_002e; - public static final int POPUP = 0x02d4_002f; + public static final int MODE_LAYER = 0x02d4_0014; + public static final int SWAP_INSERT = 0x02d4_0015; + public static final int WITHDRAWAL_LAYER = 0x02d4_0016; + public static final int NOTE = 0x02d4_0017; + public static final int SWAP_INSERT_GRAPHIC = 0x02d4_0018; + public static final int QUANTITY_LAYER = 0x02d4_0019; + public static final int BOTTOM_TEXT3 = 0x02d4_001a; + public static final int SAVE_BUTTON = 0x02d4_001b; + public static final int BOTTOM = 0x02d4_001c; + public static final int POPUP = 0x02d4_001d; + public static final int NOTE_GRAPHIC = 0x02d4_001e; + public static final int QUANTITY1 = 0x02d4_001f; + public static final int QUANTITY1_TEXT = 0x02d4_0020; + public static final int QUANTITY5 = 0x02d4_0021; + public static final int QUANTITY5_TEXT = 0x02d4_0022; + public static final int QUANTITY10 = 0x02d4_0023; + public static final int QUANTITY10_TEXT = 0x02d4_0024; + public static final int QUANTITYX = 0x02d4_0025; + public static final int QUANTITYX_TEXT = 0x02d4_0026; + public static final int QUANTITYALL = 0x02d4_0027; + public static final int QUANTITYALL_TEXT = 0x02d4_0028; } public static final class SharedBankSide diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java b/runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java index 1727d028dd6..4d64a3c6d66 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java @@ -1007,5 +1007,8 @@ public final class InventoryID public static final int TRADER_SHOP_PORT_ROBERTS_IRON = 1000; public static final int TRADER_SHOP_PORT_ROBERTS_UIM = 1001; public static final int TRADER_SHOP_PORT_ROBERTS_GIM = 1002; + public static final int RAZMIREBUILDINGSTORE_IRON = 1003; + public static final int RAZMIREBUILDINGSTORE_UIM = 1004; + public static final int RAZMIREBUILDINGSTORE_GIM = 1005; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java b/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java index 9c611584cc3..fc5d9fb18d0 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java @@ -86626,6 +86626,16 @@ public final class ItemID */ public static final int PVPA_SLAYER_HELM_I_HOODED = 33072; + /** + * Facility bottle (empty) + */ + public static final int SAILING_FACILITY_BOTTLE_EMPTY = 33074; + + /** + * Facility bottle (full) + */ + public static final int SAILING_FACILITY_BOTTLE_FULL = 33077; + public static final class Cert { public static final int TWPART1 = 7; @@ -91206,6 +91216,7 @@ public static final class Cert public static final int MAGIC_ROCK_OF_AVARICE = 33045; public static final int MAGIC_ROCK_OF_FORTUITY_INACTIVE = 33048; public static final int MAGIC_ROCK_OF_FORTUITY_ACTIVE = 33051; + public static final int SAILING_FACILITY_BOTTLE_EMPTY = 33075; } public static final class Placeholder @@ -100658,6 +100669,7 @@ public static final class Placeholder public static final int SLAYER_HELM_I_HOODED = 33069; public static final int SW_SLAYER_HELM_I_HOODED = 33071; public static final int PVPA_SLAYER_HELM_I_HOODED = 33073; + public static final int SAILING_FACILITY_BOTTLE_EMPTY = 33076; } /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java b/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java index b03a77d5d98..afb0196b383 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java @@ -78056,8 +78056,6 @@ public class ObjectID1 */ public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_LARGE_CARGO = 60642; public static final int DEADMAN_DUNGEON_CORRIDORFILLER = 60643; - public static final int DEADMAN_DUNGEON_CORRIDORFILLERL = 60644; - public static final int DEADMAN_DUNGEON_CORRIDORFILLERR = 60645; public static final int BLACK_WALL02 = 60646; /** @@ -78129,5 +78127,7 @@ public class ObjectID1 * Window space */ public static final int POH_CHAPELWINDOW_HOTSPOT_DEADMAN = 60660; + public static final int DEADMAN_DUNGEON_INSIDEWALL_SIDER = 60661; + public static final int DEADMAN_DUNGEON_INSIDEWALL_SIDEL = 60662; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java b/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java index 7001df833df..d6085b9ae04 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java @@ -11015,4 +11015,16 @@ public static final class DeadmanSigilUtilityIconsLargeInactive public static final int _30 = 7416; public static final int _31 = 7417; } + + public static final class BankStorage + { + public static final int _0 = 7418; + public static final int _1 = 7419; + public static final int _2 = 7420; + public static final int _3 = 7421; + public static final int _4 = 7422; + public static final int _5 = 7423; + public static final int _6 = 7424; + public static final int _7 = 7425; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java b/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java index 4d788155208..77abef8d147 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java @@ -13897,7 +13897,6 @@ public final class VarbitID public static final int DEADMAN_2026_INITIAL_SETUP_DONE = 19678; public static final int DEADMAN_2026_TUTORIAL_END = 19679; public static final int DEADMAN_2026_TUTORIAL_TELEPORT_DEST = 19680; - public static final int DEADMAN_FACTION_CHARACTER_CREATION_COMPLETE = 19681; public static final int DEADMAN_SKULL_TAB = 19682; public static final int SIGIL_OF_AGILE_FORTUNE_STATE = 19683; public static final int SIGIL_OF_HOARDING_STATE = 19684; @@ -13937,5 +13936,9 @@ public final class VarbitID public static final int SIGIL_OF_REMOTE_STORAGE_TOGGLE = 19718; public static final int SIGIL_OF_DEVOTION_TOGGLE = 19719; public static final int SLAYER_UNLOCK_HELM_HOODED = 19720; + public static final int BANK_HIDEDEPOSITCONTAINERS = 19721; + public static final int BANK_POPUPTAB_OPEN = 19722; + public static final int BANK_SETTING_FORGET_POPUP = 19723; + public static final int DEADMAN_2026_GE_WIPE = 19724; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankConfig.java index 15f8ad841b4..444f2f8d612 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankConfig.java @@ -93,8 +93,8 @@ default boolean rightClickBankEquip() @ConfigItem( keyName = "rightClickBankLoot", - name = "Disable left-click bank looting bag", - description = "Configures whether the bank looting bag button will bank your looting bag contents on left-click.", + name = "Disable left-click bank containers", + description = "Configures whether the bank containers button will bank your looting bag contents on left-click.", position = 6 ) default boolean rightClickBankLoot() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java index cf942042e16..e2888e262a5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java @@ -84,7 +84,7 @@ public class BankPlugin extends Plugin { private static final String DEPOSIT_WORN = "Deposit worn items"; private static final String DEPOSIT_INVENTORY = "Deposit inventory"; - private static final String DEPOSIT_LOOT = "Deposit loot"; + private static final String EMPTY_CONTAINERS = "Empty containers"; private static final String TOGGLE_PLACEHOLDERS = "Always set placeholders"; private static final String SEED_VAULT_TITLE = "Seed Vault"; private static final int POTION_STORE_TAB = 15; @@ -225,7 +225,7 @@ public void onMenuShouldLeftClick(MenuShouldLeftClick event) if ((entry.getOption().equals(DEPOSIT_WORN) && config.rightClickBankEquip()) || (entry.getOption().equals(DEPOSIT_INVENTORY) && config.rightClickBankInventory()) - || (entry.getOption().equals(DEPOSIT_LOOT) && config.rightClickBankLoot()) + || (entry.getOption().equals(EMPTY_CONTAINERS) && config.rightClickBankLoot()) || (entry.getTarget().contains(TOGGLE_PLACEHOLDERS) && config.rightClickPlaceholders()) ) { @@ -240,7 +240,7 @@ public void onMenuEntryAdded(MenuEntryAdded event) { if ((event.getOption().equals(DEPOSIT_WORN) && config.rightClickBankEquip()) || (event.getOption().equals(DEPOSIT_INVENTORY) && config.rightClickBankInventory()) - || (event.getOption().equals(DEPOSIT_LOOT) && config.rightClickBankLoot()) + || (event.getOption().equals(EMPTY_CONTAINERS) && config.rightClickBankLoot()) || (event.getTarget().contains(TOGGLE_PLACEHOLDERS) && config.rightClickPlaceholders())) { forceRightClickFlag = true; 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 5dccdd7b20a..0cc7546ff96 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 @@ -63,6 +63,7 @@ import net.runelite.api.events.DraggingWidgetChanged; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; +import net.runelite.api.events.ScriptPostFired; import net.runelite.api.events.ScriptPreFired; import net.runelite.api.events.WidgetClosed; import net.runelite.api.gameval.InterfaceID; @@ -72,7 +73,6 @@ import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetConfig; -import net.runelite.api.widgets.WidgetSizeMode; import net.runelite.api.widgets.WidgetType; import net.runelite.api.widgets.WidgetUtil; import net.runelite.client.callback.ClientThread; @@ -280,14 +280,24 @@ else if (activeTag != null) if (tagTabActive) { // This is prior to bankmain_finishbuilding running, so the arguments are still on the stack. Overwrite - // argument int12 (7 from the end) which is the height passed to if_setscrollsize + // argument int13 (9 from the end) which is the height passed to if_setscrollsize final int[] intStack = client.getIntStack(); final int intStackSize = client.getIntStackSize(); - intStack[intStackSize - 7] = tagTabHeight; + intStack[intStackSize - 9] = tagTabHeight; } } } + @Subscribe + private void onScriptPostFired(ScriptPostFired ev) + { + if (ev.getScriptId() == ScriptID.BANKMAIN_POPUP_TAB_DRAW) + { + repositionButtons(); + layoutTabs(); + } + } + @Subscribe public void onWidgetClosed(WidgetClosed event) { @@ -351,42 +361,6 @@ private void init() var layout = layoutManager.loadLayout(tab); plugin.openTag(tab, layout); } - - // Move equipment button to the titlebar - Widget equipmentButton = client.getWidget(InterfaceID.Bankmain.WORNITEMS_BUTTON); - Widget titleBar = client.getWidget(InterfaceID.Bankmain.TITLE); - Widget bankItemCountTop = client.getWidget(InterfaceID.Bankmain.OCCUPIEDSLOTS); - if (equipmentButton != null && titleBar != null && bankItemCountTop != null) - { - equipmentButton.setOriginalX(6); - equipmentButton.setOriginalY(4); - equipmentButton.revalidate(); - - int equipmentButtonTotalWidth = equipmentButton.getWidth() + equipmentButton.getOriginalX() - bankItemCountTop.getOriginalX(); - // the bank item count is 3 widgets - for (int c = InterfaceID.Bankmain.OCCUPIEDSLOTS; c <= InterfaceID.Bankmain.CAPACITY_LAYER; c++) - { - Widget widget = client.getWidget(c); - if (widget == null) - { - continue; - } - - widget.setOriginalX(widget.getOriginalX() + equipmentButtonTotalWidth); - widget.revalidate(); - } - - titleBar.setOriginalX(equipmentButton.getWidth() / 2); - titleBar.setOriginalWidth(titleBar.getWidth() - equipmentButton.getWidth()); - titleBar.revalidate(); - - Widget groupStorageButton = client.getWidget(InterfaceID.Bankmain.GIM_STORAGE); - if (groupStorageButton != null) - { - groupStorageButton.setOriginalX(groupStorageButton.getOriginalX() + equipmentButtonTotalWidth); - groupStorageButton.revalidate(); - } - } } public void deinit() @@ -1203,47 +1177,43 @@ public void reloadActiveTab() private void repositionButtons() { - Widget incinerator = client.getWidget(InterfaceID.Bankmain.INCINERATOR_TARGET); - int offset = BANK_BOTTOM_OFFSET; - if (incinerator != null && !incinerator.isHidden()) - { - incinerator.setOriginalHeight(INCINERATOR_HEIGHT); - incinerator.setOriginalWidth(INCINERATOR_WIDTH); - - // ~bankmain_build is run three times when the bank is opened, the first is from ~bankmain_viewbuttons - // which is prior to the incinerator being setup. - Widget child = incinerator.getChild(0); - if (child != null) - { - child.setOriginalHeight(INCINERATOR_HEIGHT); - child.setOriginalWidth(INCINERATOR_WIDTH); - child.setWidthMode(WidgetSizeMode.ABSOLUTE); - child.setHeightMode(WidgetSizeMode.ABSOLUTE); - } + int height = parent.getHeight() - BANK_BOTTOM_OFFSET; - incinerator.revalidate(); + Widget widget = client.getWidget(InterfaceID.Bankmain.INCINERATOR_TARGET); + if (widget != null && !widget.isHidden()) + { + height = Math.min(height, widget.getRelativeY()); + } - offset = incinerator.getHeight() + incinerator.getOriginalY(); + widget = client.getWidget(InterfaceID.Bankmain.POPUP_BUTTON_OUT); + if (widget != null && !widget.isHidden()) + { + height = Math.min(height, widget.getRelativeY()); } - Widget potionStore = client.getWidget(InterfaceID.Bankmain.POTIONSTORE_BUTTON); - if (potionStore != null && !potionStore.isSelfHidden()) + Widget popupTab = client.getWidget(InterfaceID.Bankmain.STORAGE_POPUP_TAB); + if (popupTab != null && !popupTab.isHidden()) { - potionStore.setOriginalY(offset); - potionStore.setOriginalHeight(43); // remove some unused vertical space to make it slightly smaller - potionStore.revalidate(); + widget = client.getWidget(InterfaceID.Bankmain.GIM_STORAGE); + if (widget != null && !widget.isHidden()) + { + height = Math.min(height, popupTab.getRelativeY() + widget.getRelativeY()); + } - offset = potionStore.getHeight() + potionStore.getOriginalY(); + widget = client.getWidget(InterfaceID.Bankmain.POTIONSTORE_BUTTON); + if (widget != null && !widget.isHidden()) + { + height = Math.min(height, popupTab.getRelativeY() + widget.getRelativeY()); + } } scrollComponent.setOriginalY(41 + BUTTON_HEIGHT); scrollComponent.setOriginalWidth(TAB_WIDTH + MARGIN * 2); // Keep the tab layer height a multiple of the tab heights - int tabLayerHeight = parent.getHeight() - - scrollComponent.getOriginalY() - - BUTTON_HEIGHT // the bottom button - - offset; // incinerator etc. + int tabLayerHeight = height + - scrollComponent.getOriginalY() + - BUTTON_HEIGHT; // the bottom button tabCount = tabLayerHeight / (TAB_HEIGHT + MARGIN); scrollComponent.setOriginalHeight(tabCount * (TAB_HEIGHT + MARGIN)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java index 89f23713da9..85cfc867201 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java @@ -189,7 +189,7 @@ public class CoordinateClue extends ClueScroll implements LocationClueScroll CoordinateClue.builder() .itemId(ItemID.TRAIL_CLUE_MEDIUM_SEXTANT006) .location(new WorldPoint(2512, 3467, 0)) - .directions("Baxtorian Falls (Bring rope).") + .directionsProvider((plugin) -> "Baxtorian Falls" + getBaxtorianFallsDirections(plugin)) .build(), CoordinateClue.builder() .itemId(ItemID.TRAIL_MEDIUM_SEXTANT_EXP7) @@ -1184,4 +1184,13 @@ private static String getHardwoodGroveCost(ClueScrollPlugin plugin) return " An entry fee of 100 trading sticks is required."; } + + private static String getBaxtorianFallsDirections(ClueScrollPlugin plugin) + { + if (plugin.getClient().getVarbitValue(VarbitID.KANDARIN_DIARY_MEDIUM_COMPLETE) == 1) + { + return ""; + } + return " (Bring rope)"; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java index bbfd172b265..e04d3dc41fb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java @@ -390,6 +390,7 @@ public void onAnimationChanged(AnimationChanged event) case AnimationID.HUMAN_MACHINERY_ALCHEMY01_ALEMBIC01_INTERACT01: case AnimationID.HUMAN_MACHINERY_ALCHEMY01_AGITATOR01_INTERACT01: case AnimationID.HUMAN_ALCHEMY01_MILL01_INTERACT01: + case AnimationID.HUMAN_HERBING_VIAL_RESTART: /* Magic */ case AnimationID.HUMAN_CASTCHARGEORB: case AnimationID.DREAM_PLAYER_MAKE_PLANK_SPELL: diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/bank/Rs2Bank.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/bank/Rs2Bank.java index 7b76be57fe1..7642e76367e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/bank/Rs2Bank.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/bank/Rs2Bank.java @@ -56,7 +56,7 @@ import java.util.stream.Stream; import static net.runelite.api.widgets.ComponentID.BANK_INVENTORY_ITEM_CONTAINER; -import static net.runelite.api.widgets.ComponentID.BANK_ITEM_CONTAINER; +//import static net.runelite.api.widgets.ComponentID.BANK_ITEM_CONTAINER; import static net.runelite.client.plugins.microbot.util.Global.*; import static net.runelite.client.plugins.microbot.util.gameobject.Rs2GameObject.hoverOverObject; import static net.runelite.client.plugins.microbot.util.npc.Rs2Npc.hoverOverActor; @@ -64,6 +64,11 @@ @SuppressWarnings("unused") @Slf4j public class Rs2Bank { + /** + * 12:12 + */ + public static final int BANK_ITEM_CONTAINER = 786444; + public static final int BANK_ITEM_WIDTH = 36; public static final int BANK_ITEM_HEIGHT = 32; public static final int BANK_ITEM_Y_PADDING = 4; @@ -162,7 +167,7 @@ public static Rectangle itemBounds(Rs2ItemModel rs2Item) { */ public static boolean isOpen() { if (!handleBankPin()) return false; - return Rs2Widget.hasWidgetText("Rearrange mode", 12, 18, false); + return Rs2Widget.isWidgetVisible(12, 1); } public static List bankItems() { @@ -2343,7 +2348,7 @@ public static boolean hasWithdrawAsItem() { public static boolean setWithdrawAs(boolean noted) { if (isWithdrawAs(noted)) return true; - int target = noted ? InterfaceID.Bankmain.NOTE : InterfaceID.Bankmain.ITEM; + int target = noted ? InterfaceID.Bankmain.NOTE : InterfaceID.Bankmain.QUANTITY1_TEXT; boolean clicked = Rs2Widget.clickWidget(target); if (!clicked) return false; return sleepUntil(() -> isWithdrawAs(noted)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/misc/SpecialAttackWeaponEnum.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/misc/SpecialAttackWeaponEnum.java index 620951dea91..e14631ce597 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/misc/SpecialAttackWeaponEnum.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/misc/SpecialAttackWeaponEnum.java @@ -11,6 +11,7 @@ public enum SpecialAttackWeaponEnum { ABYSSAL_TENTACLE("abyssal tentacle", 500, false), ABYSSAL_WHIP("abyssal whip", 500, false), ANCIENT_MACE("ancient mace", 1000, true), + ARKAN_BLADE("arkan blade",300,false), ARMADYL_CROSSBOW("armadyl crossbow", 400, false), ARMADYL_GODSWORD("armadyl godsword", 500, true), BANDOS_GODSWORD("bandos godsword", 500, true), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java index 5b37a806f71..0ea83977790 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java @@ -38,7 +38,9 @@ public enum ConstructionAction implements NamedSkillAction FERN_BIG_PLANT("Fern (big plant)", 1, 31, ItemID.POH_PLANTBIG1A), PLANT("Plant", 1, 31, ItemID.POH_PLANTSMALL1A), SHORT_PLANT("Short Plant", 1, 31, ItemID.POH_PLANTBIG2A), + REPAIR_KIT("Repair Kit", 1, 43.5f, ItemID.BOAT_REPAIR_KIT), CRUDE_WOODEN_CHAIR("Crude Wooden Chair", 1, 58, ItemID.POH_ARMCHAIR_1), + WOODEN_HULL_PARTS("Wooden Hull Parts", 1, 72.5f, ItemID.SAILING_BOAT_HULL_PART_WOODEN), EXIT_PORTAL("Exit Portal", 1, 100, ItemID.POH_GARDEN_CENTREPIECE_1), BROWN_RUG("Brown Rug", 2, 30, ItemID.POH_RUG_1), TORN_CURTAINS("Torn Curtains", 2, 132, ItemID.POH_CURTAINS_1), @@ -56,6 +58,7 @@ public enum ConstructionAction implements NamedSkillAction BEER_BARREL("Beer Barrel", 7, 87, ItemID.POH_BARREL_1), PUMP_AND_DRAIN("Pump and Drain", 7, 100, ItemID.POH_SINK_1), WOODEN_CHAIR("Wooden Chair", 8, 87, ItemID.POH_ARMCHAIR_2), + OAK_HULL_PARTS("Oak Hull Parts", 8, 150, ItemID.SAILING_BOAT_HULL_PART_OAK), WOODEN_LARDER("Wooden Larder", 9, 228, ItemID.POH_LARDER_1), NICE_TREE("Nice Tree", 10, 44, ItemID.POH_TREE_2), POND("Pond", 10, 100, ItemID.POH_GARDEN_CENTREPIECE_3), @@ -79,6 +82,7 @@ public enum ConstructionAction implements NamedSkillAction ASGARNIAN_ALE("Asgarnian Ale", 18, 184, ItemID.ASGARNIAN_ALE), CURTAINS("Curtains", 18, 225, ItemID.POH_CURTAINS_2), CAT_BASKET("Cat Basket", 19, 58, ItemID.POH_CAT_BASKET_2), + OAK_REPAIR_KIT("Oak Repair Kit", 19, 90, ItemID.BOAT_REPAIR_KIT_OAK), OAK_CHAIR("Oak Chair", 19, 120, ItemID.POH_ARMCHAIR_4), SHOE_BOX("Shoe Box", 20, 58, ItemID.POH_WARDROBE_1), WOODEN_BED("Wooden Bed", 20, 117, ItemID.POH_BED_1), @@ -86,6 +90,7 @@ public enum ConstructionAction implements NamedSkillAction OAK_BENCH("Oak Bench", 22, 240, ItemID.POH_DINING_CHAIRS_2), OAK_DINING_TABLE("Oak Dining Table", 22, 240, ItemID.POH_DINING_TABLE_2), WOODEN_SHELVES_3("Wooden Shelves 3", 23, 147, ItemID.POH_KITCHEN_SHELVES_3), + TEAK_HULL_PARTS("Teak Hull Parts", 23, 225, ItemID.SAILING_BOAT_HULL_PART_TEAK), SMALL_OVEN("Small Oven", 24, 80, ItemID.POH_STOVE_4), OAK_CLOCK("Oak Clock", 25, 142, ItemID.POH_CLOCK_1), ROPE_BELL_PULL("Rope Bell-Pull", 26, 64, ItemID.POH_BELLPULL_1), @@ -98,6 +103,7 @@ public enum ConstructionAction implements NamedSkillAction LARGE_OVEN("Large Oven", 29, 100, ItemID.POH_STOVE_5), OAK_BOOKCASE("Oak Bookcase", 29, 180, ItemID.POH_BOOKCASE_2), WILLOW_TREE("Willow Tree", 30, 100, ItemID.POH_TREE_4), + TEAK_REPAIR_KIT("Teak Repair Kit", 30, 135, ItemID.BOAT_REPAIR_KIT_TEAK), OAK_BED("Oak Bed", 30, 210, ItemID.POH_BED_2), LONG_BONE("Long Bone", 30, 4500, ItemID.DORGESH_CONSTRUCTION_BONE), CURVED_BONE("Curved Bone", 30, 6750, ItemID.DORGESH_CONSTRUCTION_BONE_CURVED), @@ -127,6 +133,7 @@ public enum ConstructionAction implements NamedSkillAction OPULENT_CURTAINS("Opulent Curtains", 40, 315, ItemID.POH_CURTAINS_3), MAHOGANY_BOOKCASE("Mahogany Bookcase", 40, 420, ItemID.POH_BOOKCASE_3), GLOBE("Globe", 41, 180, ItemID.POH_GLOBE_1), + MAHOGANY_HULL_PARTS("Mahogany Hull Parts", 41, 350, ItemID.SAILING_BOAT_HULL_PART_MAHOGANY), FENCING_RING("Fencing Ring", 41, 570, ItemID.POH_COMBAT_RING_2), FANCY_RANGE("Fancy Range", 42, 160, ItemID.POH_STOVE_7), CRYSTAL_BALL("Crystal Ball", 42, 280, ItemID.POH_CRYSTALBALL_1), @@ -142,6 +149,7 @@ public enum ConstructionAction implements NamedSkillAction TEAK_DRESSER("Teak Dresser", 46, 181, ItemID.POH_MIRROR_4), DEMON_LECTERN("Demon Lectern", 47, 120, ItemID.POH_LECTERN_3), EAGLE_LECTERN("Eagle Lectern", 47, 120, ItemID.POH_LECTERN_2), + MAHOGANY_REPAIR_KIT("Mahogany Repair Kit", 47, 210, ItemID.BOAT_REPAIR_KIT_MAHOGANY), SINK("Sink", 47, 300, ItemID.POH_SINK_3), MOUNTED_MYTHICAL_CAPE("Mounted Mythical Cape", 47, 370, ItemID.POH_TROPHY_MYTHICAL_CAPE), GOLD_SINK("Gold Sink", 47, 11144, ItemID.POH_SINK_4), @@ -165,12 +173,14 @@ public enum ConstructionAction implements NamedSkillAction TEAK_DEMON_LECTERN("Teak Demon Lectern", 57, 180, ItemID.POH_LECTERN_5), TEAK_EAGLE_LECTERN("Teak Eagle Lectern", 57, 180, ItemID.POH_LECTERN_4), LIMESTONE_ATTACK_STONE("Limestone attack stone", 59, 200, ItemID.POH_ATTACK_STONE_2), + CAMPHOR_HULL_PARTS("Camphor Hull Parts", 59, 400, ItemID.SAILING_BOAT_HULL_PART_CAMPHOR), LUNAR_GLOBE("Lunar Globe", 59, 570, ItemID.POH_GLOBE_3), YEW_TREE("Yew Tree", 60, 141, ItemID.POH_TREE_6), SPICE_RACK("Spice Rack", 60, 374, ItemID.POH_KITCHEN_RACK_1), POSH_BELL_PULL("Posh Bell-Pull", 60, 420, ItemID.POH_BELLPULL_3), GILDED_FOUR_POSTER_BED("Gilded 4-Poster Bed", 60, 1330, ItemID.POH_BED_7), GILDED_BENCH("Gilded Bench", 61, 1760, ItemID.POH_DINING_CHAIRS_7), + CAMPHOR_CRATE("Camphor Crate", 62, 50, ItemID.CAMPHOR_CRATE), ASTRONOMICAL_CHART("Astronomical Chart", 63, 45, ItemID.POH_WALLCHART_2), TEAK_WARDROBE("Teak Wardrobe", 63, 270, ItemID.POH_WARDROBE_5), MARBLE_FIREPLACE("Marble Fireplace", 63, 500, ItemID.POH_FIREPLACE_3), @@ -179,6 +189,7 @@ public enum ConstructionAction implements NamedSkillAction OPULENT_RUG("Opulent Rug", 65, 360, ItemID.POH_RUG_3), MAHOGANY_PORTAL("Mahogany Portal", 65, 420, ItemID.POH_PORTAL_FRAME_2), GREATER_FOCUS("Greater Focus", 65, 500, ItemID.POH_TELEPORT_CENTREPIECE_2), + CAMPHOR_REPAIR_KIT("Camphor Repair Kit", 66, 255, ItemID.BOAT_REPAIR_KIT_CAMPHOR), TEAK_GARDEN_BENCH("Teak Garden Bench", 66, 540, ItemID.POH_SUPERIOR_GARDEN_BENCH_TEAK), CRYSTAL_OF_POWER("Crystal of Power", 66, 890, ItemID.POH_CRYSTALBALL_3), MAHOGANY_DEMON_LECTERN("Mahogany Demon Lectern", 67, 580, ItemID.POH_LECTERN_7), @@ -192,17 +203,21 @@ public enum ConstructionAction implements NamedSkillAction OAK_DOOR("Oak Door", 74, 600, ItemID.POH_DUNGEON_DOOR_OAK), MAGIC_TREE("Magic Tree", 75, 223, ItemID.POH_TREE_7), MAHOGANY_WARDROBE("Mahogany Wardrobe", 75, 420, ItemID.POH_WARDROBE_6), + IRONWOOD_HULL_PARTS("Ironwood Hull Parts", 77, 437.5f, ItemID.SAILING_BOAT_HULL_PART_IRONWOOD), GNOME_BENCH("Gnome Bench", 77, 840, ItemID.POH_SUPERIOR_GARDEN_BENCH_MAHOGANY), ARMILLARY_GLOBE("Armillary Globe", 77, 960, ItemID.POH_GLOBE_1), MARBLE_WALL("Marble Wall", 79, 4000, ItemID.POH_FENCING7), + IRONWOOD_REPAIR_KIT("Ironwood Repair Kit", 80, 300, ItemID.BOAT_REPAIR_KIT_IRONWOOD), MARBLE_PORTAL("Marble Portal", 80, 1500, ItemID.POH_PORTAL_FRAME_3), SCRYING_POOL("Scrying Pool", 80, 2000, ItemID.POH_TELEPORT_CENTREPIECE_3), BALANCE_BEAM("Balance Beam", 81, 1000, ItemID.POH_COMBAT_RING_5), INFERNAL_CHART("Infernal Chart", 83, 60, ItemID.POH_WALLCHART_3), MAHOGANY_TELESCOPE("Mahogany Telescope", 84, 281, ItemID.POH_TELESCOPE_3), + ROSEWOOD_HULL_PARTS("Rosewood Hull Parts", 84, 475, ItemID.SAILING_BOAT_HULL_PART_ROSEWOOD), GILDED_CLOCK("Gilded Clock", 85, 602, ItemID.POH_CLOCK_3), SMALL_ORRERY("Small Orrery", 86, 1320, ItemID.POH_GLOBE_6), GILDED_WARDROBE("Gilded Wardrobe", 87, 720, ItemID.POH_WARDROBE_7), + ROSEWOOD_REPAIR_KIT("Rosewood Repair Kit", 92, 330, ItemID.BOAT_REPAIR_KIT_ROSEWOOD), LARGE_ORRERY("Large Orrery", 95, 1420, ItemID.POH_GLOBE_7), CRYSTAL_THRONE("Crystal Throne", 95, 15000, ItemID.POH_THRONE_6), DEMONIC_THRONE("Demonic Throne", 99, 25000, ItemID.POH_THRONE_7), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java index bce36e86feb..52df99ad120 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java @@ -76,6 +76,7 @@ public enum CookingAction implements ItemSkillAction SERVERY_MEAT_PIE(ItemID.HOSIDIUS_SERVERY_MEAT_PIE, 20, 160), POT_OF_CREAM(ItemID.POT_OF_CREAM, 21, 18), ROAST_BEAST_MEAT(ItemID.SPIT_ROASTED_BEAST_MEAT, 21, 82.5f), + RED_CRAB_MEAT(ItemID.RED_CRAB_MEAT, 21, 90), COOKED_CRAB_MEAT(ItemID.HUNDRED_PIRATE_GIANT_CRAB_MEAT_5, 21, 100), FAT_SNAIL_MEAT(ItemID.SNAIL_CORPSE_COOKED3, 22, 95), EGG_AND_TOMATO(ItemID.BOWL_EGG_TOMATO, 23, 50), @@ -134,6 +135,7 @@ public enum CookingAction implements ItemSkillAction POTATO_WITH_CHEESE(ItemID.POTATO_CHEESE, 47, 40), FISH_PIE(ItemID.FISH_PIE, 47, 164), CHEESE(ItemID.CHEESE, 48, 64, true), + BLUE_CRAB_MEAT(ItemID.BLUE_CRAB_MEAT, 48, 153), AXEMANS_FOLLY(ItemID.AXEMANS_FOLLY, 49, 413), COOKED_OOMLIE_WRAP(ItemID.COOKED_OOMLIE, 50, 30), CHOCOLATE_CAKE(ItemID.CHOCOLATE_CAKE, 50, 210), @@ -143,6 +145,7 @@ public enum CookingAction implements ItemSkillAction LAVA_EEL(ItemID.LAVA_EEL, 53, 30), CHEFS_DELIGHT(ItemID.CHEFS_DELIGHT, 54, 446), ANCHOVY_PIZZA(ItemID.ANCHOVIE_PIZZA, 55, 182), + SWORDTIP_SQUID(ItemID.SWORDTIP_SQUID, 56, 150), MUSHROOM_AND_ONION(ItemID.BOWL_MUSHROOM_ONION, 57, 120), PITTA_BREAD(ItemID.PITTA_BREAD, 58, 40), UGTHANKI_KEBAB_FRESH(ItemID.UGTHANKI_KEBAB_BAD, 58, 80), @@ -158,17 +161,25 @@ public enum CookingAction implements ItemSkillAction TUNA_AND_CORN(ItemID.BOWL_TUNA_SWEETCORN, 67, 204), COOKED_SUNLIGHT_ANTELOPE(ItemID.ANTELOPESUN_COOKED, 68, 175), TUNA_POTATO(ItemID.POTATO_TUNA_SWEETCORN, 68, 309.5f), + GIANT_KRILL(ItemID.GIANT_KRILL, 69, 177.5f), ADMIRAL_PIE(ItemID.ADMIRAL_PIE, 70, 210), + JUMBO_SQUID(ItemID.JUMBO_SQUID, 71, 180), SACRED_EEL(ItemID.SNAKEBOSS_EEL, 72, 109), + HADDOCK(ItemID.HADDOCK, 73, 180), DRAGONFRUIT_PIE(ItemID.DRAGONFRUIT_PIE, 73, 220), + RAINBOW_CRAB_MEAT(ItemID.RAINBOW_CRAB_MEAT, 77, 212), + YELLOWFIN(ItemID.YELLOWFIN, 79, 200), SHARK(ItemID.SHARK, 80, 210), SEA_TURTLE(ItemID.SEATURTLE, 82, 211.3f), COOKED_DASHING_KEBBIT(ItemID.DASHINGKEBBIT_COOKED, 82, 215), + HALIBUT(ItemID.HALIBUT, 83, 212.5f), ANGLERFISH(ItemID.ANGLERFISH, 84, 230), WILD_PIE(ItemID.WILD_PIE, 85, 240), + BLUEFIN(ItemID.BLUEFIN, 87, 215), DARK_CRAB(ItemID.DARK_CRAB, 90, 215), MANTA_RAY(ItemID.MANTARAY, 91, 216.3f), COOKED_MOONLIGHT_ANTELOPE(ItemID.ANTELOPEMOON_COOKED, 92, 220), + MARLIN(ItemID.MARLIN, 93, 225), SUMMER_PIE(ItemID.SUMMER_PIE, 95, 260), ; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java index 40a8c80d03c..d9bf4672097 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java @@ -56,6 +56,8 @@ public enum CraftingAction implements ItemSkillAction BOW_STRING(ItemID.BOW_STRING, 10, 15), CROSSBOW_STRING(ItemID.XBOWS_CROSSBOW_STRING, 10, 15), LEATHER_VAMBRACES(ItemID.LEATHER_VAMBRACES, 11, 22), + LINEN_YARN(ItemID.LINEN_YARN, 12, 16), + BOLT_OF_LINEN(ItemID.BOLT_OF_LINEN, 12, 20), EMPTY_OIL_LAMP(ItemID.OIL_LAMP_EMPTY, 12, 25), JADE(ItemID.JADE, 13, 20), JADE_RING(ItemID.JADE_RING, 13, 32), @@ -103,6 +105,8 @@ public enum CraftingAction implements ItemSkillAction BASKET(ItemID.BASKET_EMPTY, 36, 56), COIF(ItemID.COIF, 38, 37, true), TOPAZ_BRACELET(ItemID.TOPAZ_BRACELET, 38, 75), + HEMP_YARN(ItemID.HEMP_YARN, 39, 60), + BOLT_OF_CANVAS(ItemID.BOLT_OF_CANVAS, 39, 75), RUBY_NECKLACE(ItemID.RUBY_NECKLACE, 40, 75), HARD_LEATHER_SHIELD(ItemID.LEATHER_SHIELD, 41, 70), GOLD_TIARA(ItemID.TIARA_GOLD, 42, 35), @@ -144,6 +148,8 @@ public enum CraftingAction implements ItemSkillAction BLUE_DHIDE_BODY(ItemID.BLUE_DRAGONHIDE_BODY, 71, 210), DRAGONSTONE_NECKLACE(ItemID.DRAGONSTONE_NECKLACE, 72, 105), RED_DHIDE_VAMB(ItemID.RED_DRAGON_VAMBRACES, 73, 78), + COTTON_YARN(ItemID.COTTON_YARN, 73, 105), + BOLT_OF_COTTON(ItemID.BOLT_OF_COTTON, 73, 132), DRAGONSTONE_BRACELET(ItemID.JEWL_DRAGONSTONE_BRACELET, 74, 110), MAGIC_BIRD_HOUSE(ItemID.BIRDHOUSE_MAGIC, 75, 50), RED_DHIDE_CHAPS(ItemID.RED_DRAGONHIDE_CHAPS, 75, 156), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java index 6f02fe8c21c..024a2510310 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java @@ -56,18 +56,21 @@ public enum FarmingAction implements NamedSkillAction TOMATOES("Tomatoes", 12, 12.5f, ItemID.TOMATO), MARRENTILL("Marrentill", 14, 13.5f, ItemID.MARENTILL), OAK_TREE("Oak Tree", 15, 481.3f, ItemID.OAK_LOGS), + FLAX("Flax", 18, 16, ItemID.FLAX), TARROMIN("Tarromin", 19, 16, ItemID.TARROMIN), SWEETCORN("Sweetcorn", 20, 17, ItemID.SWEETCORN), GIANT_SEAWEED("Giant seaweed", 23, 21, ItemID.GIANT_SEAWEED), HARRALANDER("Harralander", 26, 21.5f, ItemID.HARRALANDER), LIMPWURT_PLANT("Limpwurt Plant", 26, 40, ItemID.LIMPWURT_ROOT), APPLE_TREE("Apple Tree", 27, 1221.5f, ItemID.COOKING_APPLE), + ELKHRON_CORAL("Elkhorn Coral", 28, 20.5f, ItemID.CORAL_ELKHORN), GOUTWEED("Goutweed", 29, 105, ItemID.EADGAR_GOUTWEED_HERB), WILLOW_TREE("Willow Tree", 30, 1481.5f, ItemID.WILLOW_LOGS), STRAWBERRIES("Strawberries", 31, 26, ItemID.STRAWBERRY), RANARR_WEED("Ranarr Weed", 32, 27, ItemID.RANARR_WEED), BANANA_TREE("Banana Tree", 33, 1778.5f, ItemID.BANANA), TEAK_TREE("Teak Tree", 35, 7315, ItemID.TEAK_LOGS), + HEMP("Hemp", 37, 33, ItemID.HEMP), TOADFLAX("Toadflax", 38, 34, ItemID.TOADFLAX), ORANGE_TREE("Orange Tree", 39, 2505.7f, ItemID.ORANGE), CURRY_TREE("Curry Tree", 42, 2946.9f, ItemID.CURRY_LEAF), @@ -76,6 +79,7 @@ public enum FarmingAction implements NamedSkillAction WATERMELONS("Watermelons", 47, 49, ItemID.WATERMELON), AVANTOE("Avantoe", 50, 54.5f, ItemID.AVANTOE), PINEAPPLE_PLANT("Pineapple Plant", 51, 4662.7f, ItemID.PINEAPPLE), + PILLAR_CORAL("Pillar Coral", 52, 52, ItemID.CORAL_PILLAR), MAHOGANY_TREE("Mahogany Tree", 55, 15783, ItemID.MAHOGANY_LOGS), KWUARM("Kwuarm", 56, 69, ItemID.KWUARM), PAPAYA_TREE("Papaya Tree", 57, 6218.4f, ItemID.PAPAYA), @@ -85,18 +89,23 @@ public enum FarmingAction implements NamedSkillAction SNAPDRAGON("Snapdragon", 62, 87.5f, ItemID.SNAPDRAGON), HUASCA("Huasca", 65, 86.5f, ItemID.HUASCA), HESPORI("Hespori", 65, 12662, ItemID.HESPORI), + CAMPHOR_TREE("Camphor Tree", 66, 17928, ItemID.CAMPHOR_LOGS), CADANTINE("Cadantine", 67, 106.5f, ItemID.CADANTINE), PALM_TREE("Palm Tree", 68, 10260.6f, ItemID.COCONUT), + COTTON_BOLL("Cotton Boll", 71, 72, ItemID.COTTON_BOLL), CALQUAT_TREE("Calquat Tree", 72, 12225.5f, ItemID.CALQUAT_FRUIT), LANTADYME("Lantadyme", 73, 134.5f, ItemID.LANTADYME), CRYSTAL_TREE("Crystal Tree", 74, 13366, ItemID.PRIF_CRYSTAL_SHARD), MAGIC_TREE("Magic Tree", 75, 13913.8f, ItemID.MAGIC_LOGS), + UMBRAL_CORAL("Umbral Coral", 77, 136, ItemID.CORAL_UMBRAL), DWARF_WEED("Dwarf Weed", 79, 170.5f, ItemID.DWARF_WEED), + IRONWOOD_TREE("Ironwood Tree", 80, 20525, ItemID.IRONWOOD_LOGS), DRAGONFRUIT_TREE("Dragonfruit Tree", 81, 17895, ItemID.DRAGONFRUIT), SPIRIT_TREE("Spirit Tree", 83, 19501.3f, ItemID.SPIRIT_TREE_DUMMY), TORSTOL("Torstol", 85, 199.5f, ItemID.TORSTOL), CELASTRUS_TREE("Celastrus Tree", 85, 14334, ItemID.CELASTRUS_WOOD), REDWOOD_TREE("Redwood Tree", 90, 22680, ItemID.REDWOOD_LOGS), + ROSEWOOD_TREE("Rosewood Tree", 92, 23352, ItemID.ROSEWOOD_LOGS), ; private final String name; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java index 0d4f7607c3c..f3b51a2edb5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java @@ -47,6 +47,7 @@ public enum FiremakingAction implements ItemSkillAction WILLOW_LOGS(ItemID.WILLOW_LOGS, 30, 90, FiremakingMethod.NORMAL_LOGS), WILLOW_PYRE_LOGS(ItemID.WILLOW_LOGS_PYRE, 35, 100, FiremakingMethod.PYRE_LOGS), TEAK_LOGS(ItemID.TEAK_LOGS, 35, 105, FiremakingMethod.NORMAL_LOGS), + JATOBA_LOGS(ItemID.JATOBA_LOGS, 40, 120, FiremakingMethod.NORMAL_LOGS), TEAK_PYRE_LOGS(ItemID.TEAK_LOGS_PYRE, 40, 120, FiremakingMethod.PYRE_LOGS), ARCTIC_PINE_LOGS(ItemID.ARCTIC_PINE_LOG, 42, 125, FiremakingMethod.NORMAL_LOGS), MAPLE_LOGS(ItemID.MAPLE_LOGS, 45, 135, FiremakingMethod.NORMAL_LOGS), @@ -57,10 +58,40 @@ public enum FiremakingAction implements ItemSkillAction YEW_LOGS(ItemID.YEW_LOGS, 60, 202.5f, FiremakingMethod.NORMAL_LOGS), BLISTERWOOD_LOGS(ItemID.BLISTERWOOD_LOGS, 62, 96, FiremakingMethod.NORMAL_LOGS), YEW_PYRE_LOGS(ItemID.YEW_LOGS_PYRE, 65, 255, FiremakingMethod.PYRE_LOGS), + CAMPHOR_LOGS(ItemID.CAMPHOR_LOGS, 66, 180, FiremakingMethod.NORMAL_LOGS), + CAMPHOR_PYRE_LOGS(ItemID.CAMPHOR_LOGS_PYRE, 71, 320, FiremakingMethod.PYRE_LOGS), MAGIC_LOGS(ItemID.MAGIC_LOGS, 75, 303.8f, FiremakingMethod.NORMAL_LOGS), + IRONWOOD_LOGS(ItemID.IRONWOOD_LOGS, 80, 220.5f, FiremakingMethod.NORMAL_LOGS), MAGIC_PYRE_LOGS(ItemID.MAGIC_LOGS_PYRE, 80, 404.5f, FiremakingMethod.PYRE_LOGS), + IRONWOOD_PYRE_LOGS(ItemID.IRONWOOD_LOGS_PYRE, 85, 435, FiremakingMethod.PYRE_LOGS), + CAMPHOR_LOGS_BARBARIAN(ItemID.CAMPHOR_LOGS, 86, 245, FiremakingMethod.NORMAL_LOGS) + { + @Override + public String getName(final ItemManager itemManager) + { + return "Camphor logs (barbarian)"; + } + }, REDWOOD_LOGS(ItemID.REDWOOD_LOGS, 90, 350, FiremakingMethod.NORMAL_LOGS), + ROSEWOOD_LOGS(ItemID.ROSEWOOD_LOGS, 92, 268, FiremakingMethod.NORMAL_LOGS), REDWOOD_PYRE_LOGS(ItemID.REDWOOD_LOGS_PYRE, 95, 500, FiremakingMethod.PYRE_LOGS), + ROSEWOOD_PYRE_LOGS(ItemID.ROSEWOOD_LOGS_PYRE, 97, 580, FiremakingMethod.PYRE_LOGS), + IRONWOOD_LOGS_BARBARIAN(ItemID.IRONWOOD_LOGS, 99, 320, FiremakingMethod.NORMAL_LOGS) + { + @Override + public String getName(final ItemManager itemManager) + { + return "Ironwood logs (barbarian)"; + } + }, + ROSEWOOD_LOGS_BARBARIAN(ItemID.ROSEWOOD_LOGS, 99, 420, FiremakingMethod.NORMAL_LOGS) + { + @Override + public String getName(final ItemManager itemManager) + { + return "Rosewood logs (barbarian)"; + } + }, ; private final int itemId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java index b6007121da5..489dbe82c7a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java @@ -24,9 +24,12 @@ */ package net.runelite.client.plugins.skillcalculator.skills; +import java.util.Collections; +import java.util.Set; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.gameval.ItemID; +import static net.runelite.client.plugins.skillcalculator.skills.FishingBonus.ANGLERS_OUTFIT; @AllArgsConstructor @Getter @@ -55,21 +58,47 @@ public enum FishingAction implements ItemSkillAction RAW_BASS(ItemID.RAW_BASS, 46, 100), LEAPING_TROUT(ItemID.BRUT_SPAWNING_TROUT, 48, 50), RAW_SWORDFISH(ItemID.RAW_SWORDFISH, 50, 100), + RAW_SWORDTIP_SQUID(ItemID.RAW_SWORDTIP_SQUID, 52, 55), LEAPING_SALMON(ItemID.BRUT_SPAWNING_SALMON, 58, 70), RAW_MONKFISH(ItemID.RAW_MONKFISH, 62, 120), RAW_KARAMBWAN(ItemID.TBWT_RAW_KARAMBWAN, 65, 50), + RAW_JUMBO_SQUID(ItemID.RAW_JUMBO_SQUID, 69, 75), + RAW_GIANT_KRILL(ItemID.RAW_GIANT_KRILL, 69, 112.5f), LEAPING_STURGEON(ItemID.BRUT_STURGEON, 70, 80), + RAW_HADDOCK(ItemID.RAW_HADDOCK, 73, 128.5f), RAW_SHARK(ItemID.RAW_SHARK, 76, 110), RAW_SEA_TURTLE(ItemID.RAW_SEATURTLE, 79, 38), + RAW_YELLOWFIN(ItemID.RAW_YELLOWFIN, 79, 155.5f), INFERNAL_EEL(ItemID.INFERNAL_EEL, 80, 95), RAW_MANTA_RAY(ItemID.RAW_MANTARAY, 81, 46), MINNOW(ItemID.MINNOW, 82, 26.5f), RAW_ANGLERFISH(ItemID.RAW_ANGLERFISH, 82, 120), + RAW_HALIBUT(ItemID.RAW_HALIBUT, 83, 195.5f), RAW_DARK_CRAB(ItemID.RAW_DARK_CRAB, 85, 130), SACRED_EEL(ItemID.SNAKEBOSS_EEL, 87, 105), + RAW_BLUEFIN(ItemID.RAW_BLUEFIN, 87, 220.5f), + RAW_MARLIN(ItemID.RAW_MARLIN, 91, 265.5f), ; private final int itemId; private final int level; private final float xp; + + @Override + public Set getExcludedSkillBonuses() + { + switch (this) + { + case RAW_GIANT_KRILL: + case RAW_HADDOCK: + case RAW_YELLOWFIN: + case RAW_HALIBUT: + case RAW_BLUEFIN: + case RAW_MARLIN: + return Set.of(ANGLERS_OUTFIT); + default: + return Collections.emptySet(); + } + } + } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java index 31ffc5edcbe..eae56a5b8e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java @@ -122,6 +122,7 @@ public String getName(final ItemManager itemManager) SAPPHIRE_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_MITHRIL_TIPPED_SAPPHIRE, 56, 4.7f), MAPLE_SHIELD(ItemID.MAPLE_SHIELD, 57, 116.5f), EMERALD_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_MITHRIL_TIPPED_EMERALD, 58, 5.5f), + CAMPHOR_BLOWPIPE(ItemID.CAMPHOR_BLOWPIPE, 58, 140), HUNTERS_SPEAR(ItemID.HG_HUNTER_SPEAR, 60, 9.5f), ADAMANT_ARROW(ItemID.ADAMANT_ARROW, 60, 10), ADAMANT_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_ADAMANTITE, 61, 7), @@ -150,6 +151,7 @@ public String getName(final ItemManager itemManager) YEW_LONGBOW_U(ItemID.UNSTRUNG_YEW_LONGBOW, 70, 75), DRAGONSTONE_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_RUNITE_TIPPED_DRAGONSTONE, 71, 8.2f), YEW_SHIELD(ItemID.YEW_SHIELD, 72, 150), + IRONWOOD_BLOWPIPE(ItemID.IRONWOOD_BLOWPIPE, 72, 170), ONYX_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_RUNITE_TIPPED_ONYX, 73, 9.4f), ATLATL_DART_TIPS(ItemID.ATLATL_DART_TIPS, 74, 0.1f), ATLATL_DART_SHAFT(ItemID.ATLATL_DART_SHAFT, 74, 0.3f), @@ -184,6 +186,7 @@ public String getName(final ItemManager itemManager) AMETHYST_ARROW(ItemID.AMETHYST_ARROW, 82, 13.5f), DRAGON_BOLTS(ItemID.DRAGON_BOLTS_UNFEATHERED, 84, 12), AMETHYST_JAVELIN(ItemID.AMETHYST_JAVELIN, 84, 13.5f), + ROSEWOOD_BLOWPIPE(ItemID.ROSEWOOD_BLOWPIPE, 84, 200), MAGIC_LONGBOW(ItemID.MAGIC_LONGBOW, 85, 91.5f), MAGIC_LONGBOW_U(ItemID.UNSTRUNG_MAGIC_LONGBOW, 85, 91.5f), MAGIC_SHIELD(ItemID.MAGIC_SHIELD, 87, 183), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java index 7ae81e989f0..5aa5be17644 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java @@ -60,6 +60,7 @@ public enum HerbloreAction implements ItemSkillAction SUPER_ATTACK_3(ItemID._3DOSE2ATTACK, 45, 100), AVANTOE(ItemID.AVANTOE, 48, 10), SUPERANTIPOISON_3(ItemID._3DOSE2ANTIPOISON, 48, 106.3f), + ANTI_ODOUR_SALT(ItemID.ANTI_ODOUR_SALT, 49, 11), FISHING_POTION_3(ItemID._3DOSEFISHERSPOTION, 50, 112.5f), SUPER_ENERGY_3(ItemID._3DOSE2ENERGY, 52, 117.5f), HUNTER_POTION_3(ItemID._3DOSEHUNTING, 53, 120), @@ -67,6 +68,8 @@ public enum HerbloreAction implements ItemSkillAction GOADING_POTION_3(ItemID._3DOSEGOADING, 54, 132), IRIT_TAR(ItemID.SALAMANDER_TAR_MOUNTAIN, 55, 85), SUPER_STRENGTH_3(ItemID._3DOSE2STRENGTH, 55, 125), + HAEMOSTATIC_POULTICE(ItemID.HAEMOSTATIC_POULTICE, 56, 27), + HAEMOSTATIC_DRESSING_3(ItemID._3DOSEHAEMOSTATICDRESSING, 56, 100), MAGIC_ESSENCE_POTION_3(ItemID._3DOSEMAGICESS, 57, 130), HUASCA(ItemID.HUASCA, 58, 11.8f), PRAYER_REGENERATION_POTION(ItemID._3DOSE1PRAYER_REGENERATION, 58, 132), @@ -75,13 +78,16 @@ public enum HerbloreAction implements ItemSkillAction ALCOAUGMENTATOR(ItemID.MM_POTION_AAA_UNFINISHED, 60, 190), LIPLACK_LIQUOR(ItemID.MM_POTION_LLL_UNFINISHED, 60, 190), MAMMOTHMIGHT_MIX(ItemID.MM_POTION_MMM_UNFINISHED, 60, 190), + SUPER_FISHING_POTION_3(ItemID._3DOSE2FISHERSPOTION, 62, 140.5f), SUPER_RESTORE_3(ItemID._3DOSE2RESTORE, 63, 142.5f), MYSTIC_MANA_AMALGAM(ItemID.MM_POTION_MMA_UNFINISHED, 63, 215), CADANTINE(ItemID.CADANTINE, 65, 12.5f), SANFEW_SERUM_3(ItemID.SANFEW_SALVE_3_DOSE, 65, 160), + EXTREME_ENERGY_POTION_4(ItemID._4DOSE3ENERGY, 66, 84), SUPER_DEFENCE_3(ItemID._3DOSE2DEFENSE, 66, 150), MARLEYS_MOONLIGHT(ItemID.MM_POTION_MML_UNFINISHED, 66, 240), LANTADYME(ItemID.LANTADYME, 67, 13.1f), + SUPER_HUNTER_POTION_3(ItemID._3DOSE2HUNTING, 67, 154), ANTIDOTE_PLUS_4(ItemID.ANTIDOTE_4, 68, 155), ANTIFIRE_POTION_3(ItemID._3DOSE1ANTIDRAGON, 69, 157.5f), AZURE_AURA_MIX(ItemID.MM_POTION_AAM_UNFINISHED, 69, 265), @@ -96,7 +102,6 @@ public enum HerbloreAction implements ItemSkillAction TORSTOL(ItemID.TORSTOL, 75, 15), MEGALITE_LIQUID(ItemID.MM_POTION_LLM_UNFINISHED, 75, 315), MAGIC_POTION_3(ItemID._3DOSE1MAGIC, 76, 172.5f), - STAMINA_POTION_3(ItemID._3DOSESTAMINA, 77, 76.5f), STAMINA_POTION_4(ItemID._4DOSESTAMINA, 77, 102), DIVINE_MAGIC_POTION_4(ItemID._4DOSEDIVINEMAGIC, 78, 2), ZAMORAK_BREW_3(ItemID._3DOSEPOTIONOFZAMORAK, 78, 175), @@ -108,21 +113,20 @@ public enum HerbloreAction implements ItemSkillAction SURGE_POTION_3(ItemID._3DOSESURGE, 81, 185), MIXALOT(ItemID.MM_POTION_MAL_UNFINISHED, 81, 365), WEAPON_POISON_PLUS_PLUS(ItemID.WEAPON_POISON__, 82, 190), - EXTENDED_ANTIFIRE_3(ItemID._3DOSE2ANTIDRAGON, 84, 82.5f), EXTENDED_ANTIFIRE_4(ItemID._4DOSE2ANTIDRAGON, 84, 110), + EXTENDED_STAMINA_POTION_4(ItemID._4DOSE2STAMINA, 85, 110), ANCIENT_BREW_4(ItemID._4DOSEANCIENTBREW, 85, 190), DIVINE_BASTION_POTION_4(ItemID._4DOSEDIVINEBASTION, 86, 2), DIVINE_BATTLEMAGE_POTION_4(ItemID._4DOSEDIVINEBATTLEMAGE, 86, 2), - ANTIVENOM_3(ItemID.ANTIVENOM3, 87, 90), ANTIVENOM_4(ItemID.ANTIVENOM4, 87, 120), MENAPHITE_REMEDY_3(ItemID._3DOSESTATRENEWAL, 88, 200), + ARMADYL_BREW_3(ItemID._3DOSEARMADYLBREW, 89, 205), SUPER_COMBAT_POTION_4(ItemID._4DOSE2COMBAT, 90, 150), FORGOTTEN_BREW_4(ItemID._4DOSEFORGOTTENBREW, 91, 145), SUPER_ANTIFIRE_4(ItemID._4DOSE3ANTIDRAGON, 92, 130), EXTENDED_ANTIVENOM_PLUS_4(ItemID.EXTENDED_ANTIVENOM_4, 94, 80), ANTIVENOM_PLUS_4(ItemID.ANTIVENOM_4, 94, 125), DIVINE_SUPER_COMBAT_POTION_4(ItemID._4DOSEDIVINECOMBAT, 97, 2), - EXTENDED_SUPER_ANTIFIRE_3(ItemID._3DOSE4ANTIDRAGON, 98, 120), EXTENDED_SUPER_ANTIFIRE_4(ItemID._4DOSE4ANTIDRAGON, 98, 160), ; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java index d33f2ba61f3..a0f547f1011 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java @@ -47,6 +47,7 @@ public enum HunterAction implements NamedSkillAction BABY_IMPLING("Baby Impling", 17, 18, ItemID.II_CAPTURED_IMPLING_1), TROPICAL_WAGTAIL("Tropical Wagtail", 19, 95, ItemID.HUNTGUIDE_COLOURED_BIRD), MOSS_LIZARD("Moss Lizard", 20, 90, ItemID.RAW_LIZARD), + RED_CRAB("Red Crab", 21, 64, ItemID.RED_CRAB), YOUNG_IMPLING("Young Impling", 22, 20, ItemID.II_CAPTURED_IMPLING_2), WILD_KEBBIT("Wild Kebbit", 23, 128, ItemID.HUNTGUIDE_POLAR_BEAST), WILLOW_BIRD_HOUSE("Willow Bird House", 24, 560, ItemID.BIRDHOUSE_WILLOW), @@ -68,6 +69,7 @@ public enum HunterAction implements NamedSkillAction MAPLE_BIRD_HOUSE("Maple Bird House", 44, 820, ItemID.BIRDHOUSE_MAPLE), BLACK_WARLOCK("Black Warlock", 45, 54, ItemID.HUNTGUIDE_BLACK_BUTTERFLY), ORANGE_SALAMANDER("Orange Salamander", 47, 224, ItemID.ORANGE_SALAMANDER), + BLUE_CRAB("Blue Crab", 48, 136, ItemID.BLUE_CRAB), RAZOR_BACKED_KEBBIT("Razor-backed Kebbit", 49, 348, ItemID.HUNTGUIDE_RAZOR2_BEAST), MAHOGANY_BIRD_HOUSE("Mahogany Bird House", 49, 960, ItemID.BIRDHOUSE_MAHOGANY), ECLECTIC_IMPLING("Eclectic Impling", 50, 32, ItemID.II_CAPTURED_IMPLING_6), @@ -92,6 +94,7 @@ public enum HunterAction implements NamedSkillAction NINJA_IMPLING_GIELINOR("Ninja Impling (Gielinor)", 74, 240, ItemID.II_CAPTURED_IMPLING_9), MAGIC_BIRD_HOUSE("Magic Bird House", 74, 1140, ItemID.BIRDHOUSE_MAGIC), MOONLIGHT_MOTH("Moonlight Moth", 75, 84, ItemID.HUNTGUIDE_MOONLIGHT_MOTH), + RAINBOW_CRAB("Rainbow Crab", 77, 216, ItemID.RAINBOW_CRAB_C), TECU_SALAMANDER("Tecu Salamander", 79, 344, ItemID.MOUNTAIN_SALAMANDER), CRYSTAL_IMPLING("Crystal Impling", 80, 280, ItemID.II_CAPTURED_IMPLING_12), DRAGON_IMPLING("Dragon Impling", 83, 65, ItemID.II_CAPTURED_IMPLING_10), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java index 61611dd47cb..3ddb7be3692 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java @@ -49,6 +49,7 @@ public String getName(final ItemManager itemManager) BARRONITE_DEPOSIT(ItemID.CAMDOZAAL_BARRONITE_DEPOSIT, 14, 32), IRON_ORE(ItemID.IRON_ORE, 15, 35), SILVER_ORE(ItemID.SILVER_ORE, 20, 40), + LEAD_ORE(ItemID.LEAD_ORE, 25, 40.5f), PURE_ESSENCE(ItemID.BLANKRUNE_HIGH, 30, 5) { @Override @@ -77,12 +78,13 @@ public String getName(final ItemManager itemManager) @Override public String getName(final ItemManager itemManager) { - return "Calcified Rocks"; + return "Calcified rocks"; } }, GRANITE_500G(ItemID.ENAKH_GRANITE_TINY, 45, 50), GRANITE_2KG(ItemID.ENAKH_GRANITE_SMALL, 45, 60), GRANITE_5KG(ItemID.ENAKH_GRANITE_MEDIUM, 45, 75), + RUBIUM_SPLINTERS(ItemID.RUBIUM_SPLINTERS, 48, 72), MITHRIL_ORE(ItemID.MITHRIL_ORE, 55, 80), SOFT_CLAY(ItemID.SOFTCLAY, 70, 5) { @@ -93,6 +95,7 @@ public boolean isMembers(final ItemManager itemManager) } }, ADAMANTITE_ORE(ItemID.ADAMANTITE_ORE, 70, 95), + NICKEL_ORE(ItemID.NICKEL_ORE, 74, 80.5f), RUNITE_ORE(ItemID.RUNITE_ORE, 85, 125), AMETHYST(ItemID.AMETHYST, 92, 240), ; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java index 934a2375773..cb19a2b23da 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java @@ -60,6 +60,7 @@ public enum PrayerAction implements ItemSkillAction PHRIN_REMAINS(ItemID.SHADE_BONES2, 1, 46.5f, PrayerMethod.SHADE_REMAINS), WYRM_BONES(ItemID.WYRM_BONES, 1, 50, PrayerMethod.BONES), RIYL_REMAINS(ItemID.SHADE_BONES3, 1, 59.5f, PrayerMethod.SHADE_REMAINS), + STRYKEWYRM_BONES(ItemID.STRYKEWYRM_BONES, 1, 60, PrayerMethod.BONES), MALICIOUS_ASHES(ItemID.MALICIOUS_ASHES, 1, 65, PrayerMethod.DEMONIC_ASHES), DRAGON_BONES(ItemID.DRAGON_BONES, 1, 72, PrayerMethod.BONES), WYVERN_BONES(ItemID.WYVERN_BONES, 1, 72, PrayerMethod.BONES), @@ -70,6 +71,7 @@ public enum PrayerAction implements ItemSkillAction ABYSSAL_ASHES(ItemID.ABYSSAL_ASHES, 1, 85, PrayerMethod.DEMONIC_ASHES), LAVA_DRAGON_BONES(ItemID.LAVA_DRAGON_BONES, 1, 85, PrayerMethod.BONES), RAURG_BONES(ItemID.ZOGRE_ANCESTRAL_BONES_RAURG, 1, 96, PrayerMethod.BONES), + FROST_DRAGON_BONES(ItemID.FROST_DRAGON_BONES, 1, 100, PrayerMethod.BONES), HYDRA_BONES(ItemID.HYDRA_BONES, 1, 110, PrayerMethod.BONES), INFERNAL_ASHES(ItemID.INFERNAL_ASHES, 1, 110, PrayerMethod.DEMONIC_ASHES), URIUM_REMAINS(ItemID.SHADE_BONES6, 1, 120.5f, PrayerMethod.SHADE_REMAINS), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java index 88c9c03b7f3..9c79ba936a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java @@ -44,6 +44,7 @@ public enum SmithingAction implements ItemSkillAction BRONZE_NAILS(ItemID.NAILS_BRONZE, 4, 12.5f), BRONZE_SWORD(ItemID.BRONZE_SWORD, 4, 12.5f), BRONZE_WIRE(ItemID.BRONZECRAFTWIRE, 4, 12.5f), + BRONZE_CANNONBALL(ItemID.BRONZE_CANNONBALL, 5, 9), BRONZE_ARROWTIPS(ItemID.BRONZE_ARROWHEADS, 5, 12.5f), BRONZE_HASTA(ItemID.BRUT_BRONZE_SPEAR, 5, 25), BRONZE_SCIMITAR(ItemID.BRONZE_SCIMITAR, 5, 25), @@ -56,6 +57,7 @@ public enum SmithingAction implements ItemSkillAction BRONZE_SQ_SHIELD(ItemID.BRONZE_SQ_SHIELD, 8, 25), BRONZE_WARHAMMER(ItemID.BRONZE_WARHAMMER, 9, 37.5f), BRONZE_BATTLEAXE(ItemID.BRONZE_BATTLEAXE, 10, 37.5f), + BRONZE_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_BRONZE, 10, 62.5f), BRONZE_CHAINBODY(ItemID.BRONZE_CHAINBODY, 11, 37.5f), BRONZE_KITESHIELD(ItemID.BRONZE_KITESHIELD, 12, 37.5f), BRONZE_CLAWS(ItemID.BRONZE_CLAWS, 13, 25), @@ -75,6 +77,7 @@ public enum SmithingAction implements ItemSkillAction IRON_NAILS(ItemID.NAILS_IRON, 19, 25), IRON_SWORD(ItemID.IRON_SWORD, 19, 25), SILVER_BAR(ItemID.SILVER_BAR, 20, 13.7f), + IRON_CANNONBALL(ItemID.IRON_CANNONBALL, 20, 17), IRON_ARROWTIPS(ItemID.IRON_ARROWHEADS, 20, 25), IRON_HASTA(ItemID.BRUT_IRON_SPEAR, 20, 50), IRON_SCIMITAR(ItemID.IRON_SCIMITAR, 20, 50), @@ -83,9 +86,11 @@ public enum SmithingAction implements ItemSkillAction IRON_LONGSWORD(ItemID.IRON_LONGSWORD, 21, 50), IRON_KNIFE(ItemID.IRON_KNIFE, 22, 25), IRON_FULL_HELM(ItemID.IRON_FULL_HELM, 22, 50), + IRON_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_IRON, 22, 125f), IRON_LIMBS(ItemID.XBOWS_CROSSBOW_LIMBS_IRON, 23, 25), IRON_SQ_SHIELD(ItemID.IRON_SQ_SHIELD, 23, 50), IRON_WARHAMMER(ItemID.IRON_WARHAMMER, 24, 75), + LEAD_BAR(ItemID.LEAD_BAR, 25, 15.5f), IRON_BATTLEAXE(ItemID.IRON_BATTLEAXE, 25, 75), OIL_LANTERN_FRAME(ItemID.OIL_LANTERN_FRAME, 26, 25), IRON_CHAINBODY(ItemID.IRON_CHAINBODY, 26, 75), @@ -104,7 +109,7 @@ public enum SmithingAction implements ItemSkillAction STEEL_DART_TIP(ItemID.STEEL_DART_TIP, 34, 37.5f), STEEL_NAILS(ItemID.NAILS, 34, 37.5f), STEEL_SWORD(ItemID.STEEL_SWORD, 34, 37.5f), - CANNONBALL(ItemID.MCANNONBALL, 35, 25.6f), + STEEL_CANNONBALL(ItemID.MCANNONBALL, 35, 25.6f), STEEL_ARROWTIPS(ItemID.STEEL_ARROWHEADS, 35, 37.5f), STEEL_HASTA(ItemID.BRUT_STEEL_SPEAR, 35, 75), STEEL_SCIMITAR(ItemID.STEEL_SCIMITAR, 35, 75), @@ -116,6 +121,7 @@ public enum SmithingAction implements ItemSkillAction STEEL_KNIFE(ItemID.STEEL_KNIFE, 37, 37.5f), STEEL_FULL_HELM(ItemID.STEEL_FULL_HELM, 37, 75), STEEL_SQ_SHIELD(ItemID.STEEL_SQ_SHIELD, 38, 75), + STEEL_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_STEEL, 38, 187.5f), STEEL_WARHAMMER(ItemID.STEEL_WARHAMMER, 39, 112.5f), GOLD_BAR(ItemID.GOLD_BAR, 40, 22.5f), STEEL_BATTLEAXE(ItemID.STEEL_BATTLEAXE, 40, 112.5f), @@ -136,6 +142,7 @@ public enum SmithingAction implements ItemSkillAction MITHRIL_DART_TIP(ItemID.MITHRIL_DART_TIP, 54, 50), MITHRIL_NAILS(ItemID.NAILS_MITHRIL, 54, 50), MITHRIL_SWORD(ItemID.MITHRIL_SWORD, 54, 50), + MITHRIL_CANNONBALL(ItemID.MITHRIL_CANNONBALL, 55, 34), MITHRIL_ARROWTIPS(ItemID.MITHRIL_ARROWHEADS, 55, 50), MITHRIL_HASTA(ItemID.BRUT_MITHRIL_SPEAR, 55, 100), MITHRIL_SCIMITAR(ItemID.MITHRIL_SCIMITAR, 55, 100), @@ -143,6 +150,7 @@ public enum SmithingAction implements ItemSkillAction MITHRIL_JAVELIN_HEADS(ItemID.MITHRIL_JAVELIN_HEAD, 56, 50), MITHRIL_LIMBS(ItemID.XBOWS_CROSSBOW_LIMBS_MITHRIL, 56, 50), MITHRIL_LONGSWORD(ItemID.MITHRIL_LONGSWORD, 56, 100), + MITHRIL_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_MITHRIL, 56, 250), MITHRIL_KNIFE(ItemID.MITHRIL_KNIFE, 57, 50), MITHRIL_FULL_HELM(ItemID.MITHRIL_FULL_HELM, 57, 100), MITHRIL_SQ_SHIELD(ItemID.MITHRIL_SQ_SHIELD, 58, 100), @@ -163,9 +171,12 @@ public enum SmithingAction implements ItemSkillAction ADAMANT_MACE(ItemID.ADAMANT_MACE, 72, 62.5f), ADAMANT_BOLTS_UNF(ItemID.XBOWS_CROSSBOW_BOLTS_ADAMANTITE_UNFEATHERED, 73, 62.5f), ADAMANT_MED_HELM(ItemID.ADAMANT_MED_HELM, 73, 62.5f), + CUPRONICKEL_BAR(ItemID.CUPRONICKEL_BAR, 74, 42), ADAMANTITE_NAILS(ItemID.NAILS_ADAMANT, 74, 62.5f), ADAMANT_DART_TIP(ItemID.ADAMANT_DART_TIP, 74, 62.5f), ADAMANT_SWORD(ItemID.ADAMANT_SWORD, 74, 62.5f), + ADAMANT_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_ADAMANT, 74, 312.5f), + ADAMANT_CANNONBALL(ItemID.ADAMANT_CANNONBALL, 75, 42.5f), ADAMANT_ARROWTIPS(ItemID.ADAMANT_ARROWHEADS, 75, 62.5f), ADAMANT_HASTA(ItemID.BRUT_ADAMANT_SPEAR, 75, 125), ADAMANT_SCIMITAR(ItemID.ADAMANT_SCIMITAR, 75, 125), @@ -187,6 +198,7 @@ public enum SmithingAction implements ItemSkillAction RUNE_AXE(ItemID.RUNE_AXE, 86, 75), ADAMANT_PLATELEGS(ItemID.ADAMANT_PLATELEGS, 86, 187.5f), ADAMANT_PLATESKIRT(ItemID.ADAMANT_PLATESKIRT, 86, 187.5f), + RUNE_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_RUNE, 86, 375), RUNE_MACE(ItemID.RUNE_MACE, 87, 75), RUNE_MED_HELM(ItemID.RUNE_MED_HELM, 88, 75), RUNITE_BOLTS_UNF(ItemID.XBOWS_CROSSBOW_BOLTS_RUNITE_UNFEATHERED, 88, 75), @@ -194,6 +206,7 @@ public enum SmithingAction implements ItemSkillAction RUNE_DART_TIP(ItemID.RUNE_DART_TIP, 89, 75), RUNE_NAILS(ItemID.NAILS_RUNE, 89, 75), RUNE_SWORD(ItemID.RUNE_SWORD, 89, 75), + RUNE_CANNONBALL(ItemID.RUNE_CANNONBALL, 90, 50.5f), RUNE_ARROWTIPS(ItemID.RUNE_ARROWHEADS, 90, 75), RUNE_HASTA(ItemID.BRUT_RUNE_SPEAR, 90, 150), RUNE_SCIMITAR(ItemID.RUNE_SCIMITAR, 90, 150), @@ -206,6 +219,7 @@ public enum SmithingAction implements ItemSkillAction RUNE_FULL_HELM(ItemID.RUNE_FULL_HELM, 92, 150), RUNE_SQ_SHIELD(ItemID.RUNE_SQ_SHIELD, 93, 150), RUNE_WARHAMMER(ItemID.RUNE_WARHAMMER, 94, 225), + DRAGON_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_DRAGON, 94, 700), RUNE_BATTLEAXE(ItemID.RUNE_BATTLEAXE, 95, 225), RUNE_CHAINBODY(ItemID.RUNE_CHAINBODY, 96, 225), RUNE_KITESHIELD(ItemID.RUNE_KITESHIELD, 97, 225), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java index 7f10c88be23..169aa752679 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java @@ -53,6 +53,7 @@ public enum ThievingAction implements NamedSkillAction NATURE_RUNE_CHEST("Nature Rune Chest", 28, 25, ItemID.NATURERUNE), ISLE_OF_SOULS_CHEST("Isle of Souls Dungeon Chest", 28, 150, ItemID.SW_DUNGEON_CHEST_KEY), ROGUE("Rogue", 32, 36.5f, ItemID.PICKPOCKET_GUIDE_ROGUE), + RUSTY_CHEST("Rusty Chest", 33, 90, ItemID.BRONZE_CANNONBALL), FUR_STALL("Fur Stall", 35, 45, ItemID.GREY_WOLF_FUR), CAVE_GOBLIN("Cave Goblin", 36, 40, ItemID.PICKPOCKET_GUIDE_DORGESH), MASTER_FARMER("Master Farmer", 38, 43, ItemID.PICKPOCKET_GUIDE_MASTER_FARMER), @@ -69,8 +70,10 @@ public enum ThievingAction implements NamedSkillAction SILVER_STALL("Silver Stall", 50, 205, ItemID.SILVER_BAR), DORGESH_KAAN_AVERAGE_CHEST("Dorgesh-Kaan Average Chest", 52, 200, ItemID.OIL_LANTERN_UNLIT), DESERT_BANDIT("Desert Bandit", 53, 79.4f, ItemID.PICKPOCKET_GUIDE_DESERT_BANDIT), + TARNISHED_CHEST("Tarnished Chest", 54, 122.5f, ItemID.MCANNONBALL), KNIGHT("Knight", 55, 84.3f, ItemID.PICKPOCKET_GUIDE_KNIGHT), POLLNIVNIAN_BANDIT("Pollnivnian Bandit", 55, 84.3f, ItemID.PICKPOCKET_GUIDE_FEUD_ARABIAN_GUARD1), + PIRATE("Pirate", 60, 72, ItemID.PICKPOCKET_GUIDE_PIRATE), STONE_CHEST("Stone Chest", 64, 280, ItemID.XERIC_FABRIC), MAGIC_STALL("Magic Stall", 65, 90, ItemID.ROGUETRADER_AIRRUNE), SPICE_STALL("Spice Stall", 65, 92, ItemID.SPICESPOT), @@ -81,12 +84,14 @@ public enum ThievingAction implements NamedSkillAction PALADIN("Paladin", 70, 131.8f, ItemID.PICKPOCKET_GUIDE_PALADIN), GNOME("Gnome", 75, 133.5f, ItemID.PICKPOCKET_GUIDE_GNOME), GEM_STALL("Gem Stall", 75, 408, ItemID.SAPPHIRE), + REINFORCED_CHEST("Reinforced Chest", 76, 182.5f, ItemID.ADAMANT_CANNONBALL), DORGESH_KAAN_RICH_CHEST("Dorgesh-Kaan Rich Chest", 78, 650, ItemID.CAVE_GOBLIN_MINING_HELMET_LIT), HERO("Hero", 80, 163.3f, ItemID.PICKPOCKET_GUIDE_HERO), VYRE("Vyre", 82, 306.9f, ItemID.PICKPOCKET_GUIDE_VYRE), ORE_STALL("Ore Stall", 82, 350, ItemID.RUNITE_ORE), ROGUES_CASTLE_CHEST("Wilderness Rogues' Chest", 84, 701.7f, ItemID.DRAGONSTONE), ELF("Elf", 85, 353.3f, ItemID.PICKPOCKET_GUIDE_WOODELF), + CANNONBALL_STALL("Cannonball Stall", 87, 223, ItemID.MCANNONBALL), TZHAAR_HUR("TzHaar-Hur", 90, 103.4f, ItemID.PICKPOCKET_GUIDE_TZHAAR), ; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java index 0032e6aa3ab..0022730b09e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java @@ -38,6 +38,7 @@ public enum WoodcuttingAction implements ItemSkillAction OAK_LOGS(ItemID.OAK_LOGS, 15, 37.5f), WILLOW_LOGS(ItemID.WILLOW_LOGS, 30, 67.5f), TEAK_LOGS(ItemID.TEAK_LOGS, 35, 85), + JATOBA_lOGS(ItemID.JATOBA_LOGS, 40, 92), JUNIPER_LOGS(ItemID.JUNIPER_LOGS, 42, 35), BARK(ItemID.HOLLOW_BARK, 45, 82.5f), MAPLE_LOGS(ItemID.MAPLE_LOGS, 45, 100), @@ -53,8 +54,11 @@ public String getName(final ItemManager itemManager) return "Sulliusceps"; } }, + CAMPHOR_LOGS(ItemID.CAMPHOR_LOGS, 66, 143.5f), MAGIC_LOGS(ItemID.MAGIC_LOGS, 75, 250), + IRONWOOD_LOGS(ItemID.IRONWOOD_LOGS, 80, 175), REDWOOD_LOGS(ItemID.REDWOOD_LOGS, 90, 380), + ROSEWOOD_LOGS(ItemID.ROSEWOOD_LOGS, 92, 212.5f), ; private final int itemId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java index 6b04fd9279f..387677dc193 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java @@ -94,6 +94,7 @@ public enum Task FIRE_GIANTS("Fire giants", ItemID.RTBRANDAPET, "Branda the Fire Queen"), FLESH_CRAWLERS("Fleshcrawlers", ItemID.ARCEUUS_CORPSE_SCORPION_INITIAL, "Flesh crawler"), FOSSIL_ISLAND_WYVERNS("Fossil island wyverns", ItemID.SLAYERGUIDE_FOSSILWYVERN, "Ancient wyvern", "Long-tailed wyvern", "Spitting wyvern", "Taloned wyvern"), + FROST_DRAGONS("Frost dragons", ItemID.FROST_DRAGON_BONES), GARGOYLES("Gargoyles", ItemID.SLAYERGUIDE_GARGOYLE, 9, ItemID.SLAYER_ROCK_HAMMER, "Dusk", "Dawn"), GENERAL_GRAARDOR("General Graardor", ItemID.BANDOSPET), GHOSTS("Ghosts", ItemID.AMULET_OF_GHOSTSPEAK, "Death wing", "Tortured soul", "Forgotten Soul", "Revenant"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java index 9f2ecf24067..b080b9d5719 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2019, gregg1494 + * Copyright (c) 2026, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,6 +27,7 @@ import java.awt.Color; import java.awt.Dimension; +import java.awt.FontMetrics; import java.awt.Graphics2D; import javax.inject.Inject; import net.runelite.api.Client; @@ -65,27 +67,36 @@ public Dimension render(Graphics2D graphics) return null; } - final int ping = worldHopperPlugin.getCurrentPing(); - if (ping < 0) - { - return null; - } - - final String text = ping + " ms"; - final int textWidth = graphics.getFontMetrics().stringWidth(text); - final int textHeight = graphics.getFontMetrics().getAscent() - graphics.getFontMetrics().getDescent(); + int xOffset = X_OFFSET; - // Adjust ping offset for logout button + // Adjust offset for logout button Widget logoutButton = client.getWidget(InterfaceID.ToplevelPreEoc.ICON10); - int xOffset = X_OFFSET; if (logoutButton != null && !logoutButton.isHidden()) { xOffset += logoutButton.getWidth(); } + final FontMetrics fm = graphics.getFontMetrics(); + final int textHeight = fm.getAscent() - fm.getDescent(); final int width = (int) client.getRealDimensions().getWidth(); - final Point point = new Point(width - textWidth - xOffset, textHeight + Y_OFFSET); - OverlayUtil.renderTextLocation(graphics, point, text, Color.YELLOW); + + final int ping = worldHopperPlugin.getCurrentPing(); + if (ping >= 0) + { + String text = ping + " ms"; + int textWidth = fm.stringWidth(text); + Point point = new Point(width - textWidth - xOffset, textHeight + Y_OFFSET); + OverlayUtil.renderTextLocation(graphics, point, text, Color.YELLOW); + xOffset += textWidth + fm.stringWidth(" "); + } + + int percRetransmit = worldHopperPlugin.retransmitCalculator.getRetransmitPercent(); + if (percRetransmit > 0) + { + String text = percRetransmit + "% loss"; + Point point = new Point(width - fm.stringWidth(text) - xOffset, textHeight + Y_OFFSET); + OverlayUtil.renderTextLocation(graphics, point, text, Color.RED); + } return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index 2fd3b50a10c..a63ec469d3a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableList; import com.google.inject.Provides; import java.awt.image.BufferedImage; +import java.io.FileDescriptor; import java.time.Instant; import java.util.EnumSet; import java.util.HashMap; @@ -81,6 +82,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.worldhopper.ping.Ping; +import net.runelite.client.plugins.worldhopper.ping.RetransmitCalculator; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.overlay.OverlayManager; @@ -163,6 +165,8 @@ public class WorldHopperPlugin extends Plugin private final Map storedPings = new HashMap<>(); + final RetransmitCalculator retransmitCalculator = new RetransmitCalculator(); + private final HotkeyListener previousKeyListener = new HotkeyListener(() -> config.previousKey()) { @Override @@ -910,6 +914,12 @@ private void pingCurrentWorld() { SwingUtilities.invokeLater(() -> panel.updatePing(currentWorld.getId(), currentPing)); } + + FileDescriptor fd = client.getSocketFD(); + if (fd != null) + { + retransmitCalculator.record(fd); + } } Integer getStoredPing(World world) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/RetransmitCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/RetransmitCalculator.java new file mode 100644 index 00000000000..68e29189729 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/RetransmitCalculator.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2026, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.worldhopper.ping; + +import com.sun.jna.Pointer; +import com.sun.jna.platform.win32.WinNT; +import com.sun.jna.ptr.IntByReference; +import java.io.FileDescriptor; +import java.lang.reflect.Field; +import java.util.Arrays; +import lombok.extern.slf4j.Slf4j; +import net.runelite.client.util.OSType; + +@Slf4j +public class RetransmitCalculator +{ + private static final int SAMPLES = 16; + + private int index; + private long connectionTime; + private final long[] bytesOut = new long[SAMPLES]; + private final long[] bytesRetrans = new long[SAMPLES]; + private int loss; + + public void record(FileDescriptor fd) + { + if (OSType.getOSType() != OSType.Windows) + { + return; + } + + int handle; + try + { + Field f = FileDescriptor.class.getDeclaredField("fd"); + f.setAccessible(true); + handle = f.getInt(fd); + } + catch (NoSuchFieldException | IllegalAccessException ex) + { + log.debug(null, ex); + return; + } + + IntByReference tcpInfoVersion = new IntByReference(0); // Version 0 of TCP_INFO + TCP_INFO_v0 info = new TCP_INFO_v0(); + IntByReference bytesReturned = new IntByReference(); + + Ws2_32 winsock = Ws2_32.INSTANCE; + int rc; + try + { + rc = winsock.WSAIoctl( + new WinNT.HANDLE(Pointer.createConstant(handle)), + Ws2_32.SIO_TCP_INFO, + tcpInfoVersion.getPointer(), Integer.BYTES, + info.getPointer(), info.size(), + bytesReturned, + Pointer.NULL, + Pointer.NULL + ); + } + catch (UnsatisfiedLinkError ex) + { + // probably Windows 7 + log.debug("WSAIoctl()", ex); + return; + } + if (rc != 0) + { + log.debug("WSAIoctl(SIO_TCP_INFO) error"); // WSAGetLastError() seems to always be 0? + return; + } + + info.read(); + + int nextIndex = index++ & (SAMPLES - 1); + + long connectionTime = info.ConnectionTimeMs.longValue(); + long out = info.BytesOut.longValue(); + long rt = info.BytesRetrans.longValue(); + + log.trace("rtt: {}us bytes out: {} retrans: {}", info.RttUs.longValue(), out, rt); + + if (connectionTime < this.connectionTime) + { + Arrays.fill(bytesOut, 0L); + Arrays.fill(bytesRetrans, 0L); + } + + this.connectionTime = connectionTime; + bytesOut[nextIndex] = out; + bytesRetrans[nextIndex] = rt; + + loss = computeRetransmitPercent(); + } + + private int computeRetransmitPercent() + { + int startIndex = (index - 1) & (SAMPLES - 1); + int endIndex = index & (SAMPLES - 1); + + long deltaOut = bytesOut[startIndex] - bytesOut[endIndex]; + long deltaRt = bytesRetrans[startIndex] - bytesRetrans[endIndex]; + + if (deltaOut == 0) + { + return 0; + } + + return (int) (deltaRt * 100L / deltaOut); + } + + public int getRetransmitPercent() + { + return loss; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/TCP_INFO_v0.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/TCP_INFO_v0.java new file mode 100644 index 00000000000..a4596729087 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/TCP_INFO_v0.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2026, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.worldhopper.ping; + +import com.sun.jna.Structure; +import com.sun.jna.platform.win32.WinDef; +import java.util.List; + +public class TCP_INFO_v0 extends Structure +{ + public WinDef.ULONG State; + public WinDef.ULONG Mss; + public WinDef.ULONGLONG ConnectionTimeMs; + public WinDef.BOOL TimestampsEnabled; + public WinDef.ULONG RttUs; + public WinDef.ULONG MinRttUs; + public WinDef.ULONG BytesInFlight; + public WinDef.ULONG Cwnd; + public WinDef.ULONG SndWnd; + public WinDef.ULONG RcvWnd; + public WinDef.ULONG RcvBuf; + public WinDef.ULONGLONG BytesOut; + public WinDef.ULONGLONG BytesIn; + public WinDef.ULONG BytesReordered; + public WinDef.ULONG BytesRetrans; + public WinDef.ULONG FastRetrans; + public WinDef.ULONG DupAcksIn; + public WinDef.ULONG TimeoutEpisodes; + public WinDef.UCHAR SynRetrans; + + @Override + protected List getFieldOrder() + { + return List.of( + "State", + "Mss", + "ConnectionTimeMs", + "TimestampsEnabled", + "RttUs", + "MinRttUs", + "BytesInFlight", + "Cwnd", + "SndWnd", + "RcvWnd", + "RcvBuf", + "BytesOut", + "BytesIn", + "BytesReordered", + "BytesRetrans", + "FastRetrans", + "DupAcksIn", + "TimeoutEpisodes", + "SynRetrans" + ); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ws2_32.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ws2_32.java new file mode 100644 index 00000000000..1026f7fc859 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ws2_32.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2026, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.worldhopper.ping; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Pointer; +import com.sun.jna.platform.win32.WinNT; +import com.sun.jna.ptr.IntByReference; + +interface Ws2_32 extends Library +{ + Ws2_32 INSTANCE = Native.loadLibrary("Ws2_32", Ws2_32.class); + + int SIO_TCP_INFO = 0xD800_0027; + + int WSAIoctl(WinNT.HANDLE socket, int dwIoControlCode, Pointer lpvInBuffer, int cbInBuffer, Pointer lpvOutBuffer, int cbOutBuffer, IntByReference lpcbBytesReturned, Pointer lpOverlapped, Pointer lpCompletionRoutine); +} diff --git a/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java b/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java index fe8902d6637..0e8439466e0 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java @@ -77,6 +77,18 @@ public void execute(Runnable command) service.execute(monitor(command)); } + @Override + public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) + { + return service.scheduleAtFixedRate(monitor(command), initialDelay, period, unit); + } + + @Override + public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) + { + return service.scheduleWithFixedDelay(monitor(command), initialDelay, delay, unit); + } + // Everything below is direct proxy to provided executor service @Override @@ -144,16 +156,4 @@ public ScheduledFuture schedule(Callable callable, long delay, TimeUni { return service.schedule(callable, delay, unit); } - - @Override - public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) - { - return service.scheduleAtFixedRate(command, initialDelay, period, unit); - } - - @Override - public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) - { - return service.scheduleWithFixedDelay(command, initialDelay, delay, unit); - } } diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json index e529cbc5659..783391818c0 100644 --- a/runelite-client/src/main/resources/item_variations.json +++ b/runelite-client/src/main/resources/item_variations.json @@ -13702,5 +13702,9 @@ "sigil of efficiency": [ 33061, 33062 + ], + "facility bottle": [ + 33074, + 33077 ] } \ No newline at end of file diff --git a/runelite-client/src/main/scripts/BankMainBuild.hash b/runelite-client/src/main/scripts/BankMainBuild.hash index b073bcae513..789662cb826 100644 --- a/runelite-client/src/main/scripts/BankMainBuild.hash +++ b/runelite-client/src/main/scripts/BankMainBuild.hash @@ -1 +1 @@ -7C5AA581E28A0D5C2F402A968C596C2AE6717EFB51AC15530F6D74AFA209FEC9 \ No newline at end of file +74F5261D8C6A9EDB8BA3354B82BE354427CA6F962EC0824A0CA9658075E17C3F \ No newline at end of file diff --git a/runelite-client/src/main/scripts/BankMainBuild.rs2asm b/runelite-client/src/main/scripts/BankMainBuild.rs2asm index bfc4b89847f..872ac6ce191 100644 --- a/runelite-client/src/main/scripts/BankMainBuild.rs2asm +++ b/runelite-client/src/main/scripts/BankMainBuild.rs2asm @@ -1,5 +1,5 @@ .id 277 -.int_arg_count 17 +.int_arg_count 20 .obj_arg_count 0 get_varbit 5102 iconst 1 @@ -7,421 +7,473 @@ jump LABEL8 LABEL4: iconst 0 - iload 9 + iload 10 if_sethide jump LABEL13 LABEL8: iconst 1 - iload 9 + iload 10 if_sethide - iload 11 + iload 12 invoke 41 LABEL13: - get_varbit 5364 + iload 10 + invoke 9219 + iconst 0 + istore 20 + get_varbit 19721 iconst 1 - if_icmpeq LABEL17 + if_icmpeq LABEL21 jump LABEL24 -LABEL17: - iconst 1 - iload 14 - if_sethide +LABEL21: iconst 1 - iload 15 - if_sethide - jump LABEL30 + istore 20 + jump LABEL26 LABEL24: iconst 0 - iload 14 - if_sethide - iconst 0 + istore 20 +LABEL26: + iload 20 iload 15 if_sethide -LABEL30: + iload 20 + iload 16 + if_sethide get_varbit 8352 iconst 1 - if_icmpeq LABEL34 - jump LABEL41 -LABEL34: - iconst 1 - iload 12 - if_sethide + if_icmpeq LABEL36 + jump LABEL39 +LABEL36: iconst 1 + istore 20 + jump LABEL41 +LABEL39: + iconst 0 + istore 20 +LABEL41: + iload 20 iload 13 if_sethide - jump LABEL47 -LABEL41: - iconst 0 - iload 12 + iload 20 + iload 14 if_sethide + get_varbit 5364 + iconst 1 + if_icmpeq LABEL51 + jump LABEL54 +LABEL51: + iconst 1 + istore 20 + jump LABEL56 +LABEL54: iconst 0 - iload 13 + istore 20 +LABEL56: + iload 20 + iload 17 + if_sethide + iload 20 + iload 18 if_sethide -LABEL47: iconst 3368 - iload 16 + iload 19 iconst 1141 iconst 1 sconst "iY" - iload 16 + iload 19 if_setonvartransmit - iconst 441 + iconst 439 iconst 0 iconst 0 iconst 0 - iload 14 + iload 17 if_setposition - iconst 444 + iconst 442 iconst 7 iconst 0 iconst 0 - iload 15 + iload 18 if_setposition - get_varbit 8352 - iconst 1 - if_icmpeq LABEL70 - jump LABEL97 -LABEL70: - get_varbit 5364 - iconst 0 - if_icmpeq LABEL74 - jump LABEL97 -LABEL74: - iload 12 - if_getx - iload 12 - if_gety - iconst 0 + iconst 3 + define_array 73 + iconst 3 + define_array 65609 iconst 0 - iload 14 - if_setposition - iload 13 - if_getx - iload 13 - if_gety + istore 21 iconst 0 + istore 22 + get_varbit 19721 iconst 0 + if_icmpeq LABEL93 + jump LABEL103 +LABEL93: + iload 21 iload 15 - if_setposition - iconst 37 - iconst 37 + set_array_int + iload 21 + iload 16 + set_array_int 1 + iload 21 iconst 1 - iconst 0 - iload 4 - if_setsize - jump LABEL133 -LABEL97: + add + istore 21 +LABEL103: get_varbit 8352 iconst 0 - if_icmpeq LABEL101 - jump LABEL112 -LABEL101: + if_icmpeq LABEL107 + jump LABEL117 +LABEL107: + iload 21 + iload 13 + set_array_int + iload 21 + iload 14 + set_array_int 1 + iload 21 + iconst 1 + add + istore 21 +LABEL117: get_varbit 5364 + iconst 0 + if_icmpeq LABEL121 + jump LABEL131 +LABEL121: + iload 21 + iload 17 + set_array_int + iload 21 + iload 18 + set_array_int 1 + iload 21 iconst 1 - if_icmpeq LABEL105 - jump LABEL112 -LABEL105: + add + istore 21 +LABEL131: iconst 37 + iconst 3 + iload 21 + sub + multiply iconst 37 iconst 1 iconst 0 - iload 4 + iload 5 if_setsize - jump LABEL133 -LABEL112: - get_varbit 8352 - iconst 1 - if_icmpeq LABEL116 - jump LABEL127 -LABEL116: - get_varbit 5364 + iload 21 + iconst 0 + if_icmpeq LABEL145 + jump LABEL149 +LABEL145: iconst 1 - if_icmpeq LABEL120 - jump LABEL127 -LABEL120: - iconst 74 + iconst 786470 + if_sethide + jump LABEL152 +LABEL149: + iconst 0 + iconst 786470 + if_sethide +LABEL152: + iload 22 + iload 21 + if_icmplt LABEL156 + jump LABEL187 +LABEL156: + iconst 366 + iload 22 iconst 37 - iconst 1 + multiply + add + iload 22 + get_array_int + if_gety iconst 0 - iload 4 - if_setsize - jump LABEL133 -LABEL127: iconst 0 + iload 22 + get_array_int + if_setposition + iconst 369 + iload 22 iconst 37 - iconst 1 + multiply + add + iload 22 + get_array_int 1 + if_gety iconst 0 - iload 4 - if_setsize -LABEL133: + iconst 0 + iload 22 + get_array_int 1 + if_setposition + iload 22 iconst 1 - iload 10 + add + istore 22 + jump LABEL152 +LABEL187: + iconst 1 + iload 11 if_sethide - iload 10 + iload 11 cc_deleteall iconst 0 - istore 17 + istore 23 get_varbit 4170 iconst 3 - if_icmpeq LABEL144 - jump LABEL177 -LABEL144: + if_icmpeq LABEL198 + jump LABEL231 +LABEL198: get_varbit 4171 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4172 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4173 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4174 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4175 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4176 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4177 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4178 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4179 iconst 0 - if_icmpgt LABEL172 - jump LABEL175 -LABEL172: + if_icmpgt LABEL226 + jump LABEL229 +LABEL226: iconst 0 - istore 17 - jump LABEL177 -LABEL175: + istore 23 + jump LABEL231 +LABEL229: iconst 1 - istore 17 -LABEL177: + istore 23 +LABEL231: iconst 0 - istore 18 - iload 17 + istore 24 + iload 23 iconst 1 - if_icmpeq LABEL183 - jump LABEL213 -LABEL183: + if_icmpeq LABEL237 + jump LABEL255 +LABEL237: iconst 1 - iload 8 + iload 9 if_sethide iconst 2 - istore 18 + istore 24 iconst 460 iconst 39 iconst 0 iconst 1 - iload 2 - if_setsize - iconst 16 - iconst 39 - iconst 0 - iconst 1 iload 3 if_setsize iconst 53 iconst 39 iconst 1 iconst 1 - iconst 786447 + iconst 786446 if_setsize - iconst 28 - iconst 42 - iconst 2 - iconst 0 - iload 1 - if_setposition - jump LABEL240 -LABEL213: + jump LABEL276 +LABEL255: iconst 0 - iload 8 + iload 9 if_sethide iconst 460 iconst 81 iconst 0 iconst 1 - iload 2 + iload 3 if_setsize iconst 16 iconst 81 iconst 0 iconst 1 - iload 3 + iload 4 if_setsize iconst 53 iconst 81 iconst 1 iconst 1 - iconst 786447 + iconst 786446 if_setsize - iconst 12 - iconst 42 - iconst 2 - iconst 0 - iload 1 - if_setposition -LABEL240: +LABEL276: get_varbit 4150 iconst 15 - if_icmpeq LABEL244 - jump LABEL249 -LABEL244: + if_icmpeq LABEL280 + jump LABEL292 +LABEL280: iconst 0 - iconst 786447 + iconst 786446 + if_sethide + iload 23 + iconst 1 + if_icmpeq LABEL287 + jump LABEL290 +LABEL287: + iconst 1 + iload 2 if_sethide +LABEL290: invoke 6080 - jump LABEL252 -LABEL249: + jump LABEL298 +LABEL292: iconst 1 - iconst 786447 + iconst 786446 if_sethide -LABEL252: - iload 3 + iconst 0 iload 2 + if_sethide +LABEL298: + iload 4 + iload 3 invoke 231 iconst 1410 - istore 19 + istore 25 iconst 1410 iconst 9 iconst 3 multiply add - istore 20 -LABEL263: - iload 19 - iload 20 - if_icmple LABEL267 - jump LABEL280 -LABEL267: - iload 2 - iload 19 + istore 26 +LABEL309: + iload 25 + iload 26 + if_icmple LABEL313 + jump LABEL326 +LABEL313: + iload 3 + iload 25 cc_find iconst 1 - if_icmpeq LABEL273 - jump LABEL275 -LABEL273: + if_icmpeq LABEL319 + jump LABEL321 +LABEL319: iconst 1 cc_sethide -LABEL275: - iload 19 +LABEL321: + iload 25 iconst 1 add - istore 19 - jump LABEL263 -LABEL280: + istore 25 + jump LABEL309 +LABEL326: iconst 0 - istore 19 + istore 25 iconst 8 iconst 1 sub - istore 21 - iload 2 + istore 27 + iload 3 if_getwidth iconst 51 sub iconst 35 sub - istore 22 - iload 22 + istore 28 + iload 28 iconst 8 iconst 36 multiply sub - iload 21 + iload 27 div - istore 23 + istore 29 iconst -1 - istore 24 + istore 30 iconst 0 - istore 25 + istore 31 iconst 0 - istore 26 + istore 32 iconst 0 - istore 27 + istore 33 iconst 0 - istore 28 + istore 34 iconst -1 - istore 29 + istore 35 iconst 0 - istore 30 + istore 36 invoke 514 - istore 31 + istore 37 get_varc_string 359 ; Skip truncating of meslayerinput by not calling bankmain_filterstring lowercase ; instead get the var directly and lowercase it - ostore 0 - jump LABEL325 ; + ostore 2 + jump LABEL371 ; sconst "" - ostore 0 - iload 31 + ostore 2 + iload 37 iconst 1 - if_icmpeq LABEL323 - jump LABEL325 -LABEL323: + if_icmpeq LABEL369 + jump LABEL371 +LABEL369: invoke 280 - ostore 0 -LABEL325: + ostore 2 +LABEL371: iconst 0 ; sconst "bankBuildTab" ; runelite_callback ; - istore 36 ; whether to use the single tab building mode instead of the whole bank - iload 36 ; + istore 42 ; whether to use the single tab building mode instead of the whole bank + iload 42 ; iconst 1 ; if_icmpeq singletabbuildmode ; get_varbit 4150 iconst 0 - if_icmple LABEL332 + if_icmple LABEL378 get_varbit 4150 iconst 9 - if_icmpgt LABEL332 - jump LABEL807 -LABEL332: + if_icmpgt LABEL378 + jump LABEL856 +LABEL378: get_varbit 4150 iconst 15 - if_icmpne LABEL336 - jump LABEL807 -LABEL336: - iload 19 + if_icmpne LABEL382 + jump LABEL856 +LABEL382: + iload 25 iconst 1410 - if_icmplt LABEL340 - jump LABEL365 -LABEL340: - iload 2 - iload 19 + if_icmplt LABEL386 + jump LABEL411 +LABEL386: + iload 3 + iload 25 cc_find iconst 1 - if_icmpeq LABEL346 - jump LABEL348 -LABEL346: + if_icmpeq LABEL392 + jump LABEL394 +LABEL392: iconst 1 cc_sethide -LABEL348: +LABEL394: iconst 95 - iload 19 + iload 25 inv_getobj iconst -1 - if_icmpne LABEL354 - jump LABEL360 -LABEL354: - iload 28 + if_icmpne LABEL400 + jump LABEL406 +LABEL400: + iload 34 iconst 1 add - iload 19 - istore 29 - istore 28 -LABEL360: - iload 19 + iload 25 + istore 35 + istore 34 +LABEL406: + iload 25 iconst 1 add - istore 19 - jump LABEL336 -LABEL365: + istore 25 + jump LABEL382 +LABEL411: get_varbit 4171 get_varbit 4172 add @@ -439,445 +491,445 @@ LABEL365: add get_varbit 4179 add - istore 30 - iload 30 + istore 36 + iload 36 iconst 0 - if_icmple LABEL387 - jump LABEL391 -LABEL387: + if_icmple LABEL433 + jump LABEL437 +LABEL433: iconst 1410 iconst 1 sub - istore 29 -LABEL391: - iload 30 - iload 29 + istore 35 +LABEL437: + iload 36 + iload 35 iconst 1 add iconst 0 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 + istore 32 iconst 0 - istore 19 + istore 25 get_varbit 4171 iconst 0 - if_icmpgt LABEL420 - jump LABEL452 -LABEL420: + if_icmpgt LABEL466 + jump LABEL498 +LABEL466: iconst 1 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4171 add iconst 1 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4171 add - istore 19 -LABEL452: + istore 25 +LABEL498: get_varbit 4172 iconst 0 - if_icmpgt LABEL456 - jump LABEL488 -LABEL456: + if_icmpgt LABEL502 + jump LABEL534 +LABEL502: iconst 2 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4172 add iconst 2 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4172 add - istore 19 -LABEL488: + istore 25 +LABEL534: get_varbit 4173 iconst 0 - if_icmpgt LABEL492 - jump LABEL524 -LABEL492: + if_icmpgt LABEL538 + jump LABEL570 +LABEL538: iconst 3 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4173 add iconst 3 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4173 add - istore 19 -LABEL524: + istore 25 +LABEL570: get_varbit 4174 iconst 0 - if_icmpgt LABEL528 - jump LABEL560 -LABEL528: + if_icmpgt LABEL574 + jump LABEL606 +LABEL574: iconst 4 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4174 add iconst 4 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4174 add - istore 19 -LABEL560: + istore 25 +LABEL606: get_varbit 4175 iconst 0 - if_icmpgt LABEL564 - jump LABEL596 -LABEL564: + if_icmpgt LABEL610 + jump LABEL642 +LABEL610: iconst 5 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4175 add iconst 5 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4175 add - istore 19 -LABEL596: + istore 25 +LABEL642: get_varbit 4176 iconst 0 - if_icmpgt LABEL600 - jump LABEL632 -LABEL600: + if_icmpgt LABEL646 + jump LABEL678 +LABEL646: iconst 6 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4176 add iconst 6 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4176 add - istore 19 -LABEL632: + istore 25 +LABEL678: get_varbit 4177 iconst 0 - if_icmpgt LABEL636 - jump LABEL668 -LABEL636: + if_icmpgt LABEL682 + jump LABEL714 +LABEL682: iconst 7 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4177 add iconst 7 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4177 add - istore 19 -LABEL668: + istore 25 +LABEL714: get_varbit 4178 iconst 0 - if_icmpgt LABEL672 - jump LABEL704 -LABEL672: + if_icmpgt LABEL718 + jump LABEL750 +LABEL718: iconst 8 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4178 add iconst 8 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4178 add - istore 19 -LABEL704: + istore 25 +LABEL750: get_varbit 4179 iconst 0 - if_icmpgt LABEL708 - jump LABEL740 -LABEL708: + if_icmpgt LABEL754 + jump LABEL786 +LABEL754: iconst 9 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4179 add iconst 9 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4179 add - istore 19 -LABEL740: - iload 31 + istore 25 +LABEL786: + iload 37 iconst 1 - if_icmpeq LABEL744 - jump LABEL783 -LABEL744: - oload 0 + if_icmpeq LABEL790 + jump LABEL829 +LABEL790: + oload 2 string_length iconst 0 - if_icmpgt LABEL749 - jump LABEL768 -LABEL749: + if_icmpgt LABEL795 + jump LABEL814 +LABEL795: sconst "Showing items: " sconst "" - oload 0 + oload 2 sconst "" join_string 4 - iload 5 + iload 6 if_settext get_varc_int 5 iconst 11 - if_icmpeq LABEL760 - jump LABEL767 -LABEL760: + if_icmpeq LABEL806 + jump LABEL813 +LABEL806: sconst "Show items whose names contain the following text: (" - iload 26 + iload 32 tostring sconst " found)" join_string 3 - iload 26 ; load number of matches + iload 32 ; load number of matches sconst "setSearchBankInputTextFound" ; load event name runelite_callback ; invoke callback pop_int ; pop number of matches iconst 10616874 if_settext -LABEL767: - jump LABEL782 -LABEL768: +LABEL813: + jump LABEL828 +LABEL814: sconst "Showing items: " sconst "" sconst "*" sconst "" join_string 4 - iload 5 + iload 6 if_settext get_varc_int 5 iconst 11 - if_icmpeq LABEL779 - jump LABEL782 -LABEL779: + if_icmpeq LABEL825 + jump LABEL828 +LABEL825: sconst "Show items whose names contain the following text:" sconst "setSearchBankInputText" ; load event name runelite_callback ; invoke callback iconst 10616874 if_settext -LABEL782: - jump LABEL786 -LABEL783: +LABEL828: + jump LABEL832 +LABEL829: sconst "The Bank of Gielinor" - iload 5 + iload 6 if_settext -LABEL786: +LABEL832: iload 0 iload 1 iload 2 @@ -890,13 +942,16 @@ LABEL786: iload 9 iload 10 iload 11 - iload 27 - iload 28 iload 12 + iload 33 + iload 34 iload 13 iload 14 iload 15 iload 16 + iload 17 + iload 18 + iload 19 invoke 505 ; [proc,bankmain_finishbuilding] return singletabbuildmode: @@ -920,184 +975,184 @@ singletabbuildmode: add ; get_varbit 4179 ; add ; - istore 30 ; store start to the first item in the "All items" tab -LABEL807: + istore 36 ; store start to the first item in the "All items" tab +LABEL856: ; if (~bankmain_searching = 1) { - iload 31 + iload 37 iconst 1 - if_icmpeq LABEL811 - jump LABEL815 -LABEL811: + if_icmpeq LABEL860 + jump LABEL864 +LABEL860: iconst 1 iconst 1 iconst 1 invoke 299 -LABEL815: +LABEL864: ; after ~meslayer close iconst -1 - istore 32 + istore 38 iconst -1 - istore 33 + istore 39 get_varbit 4150 invoke 513 - istore 33 - istore 32 + istore 39 + istore 38 iconst 0 - istore 34 + istore 40 iconst 0 - istore 35 -LABEL827: - iload 19 + istore 41 +LABEL876: + iload 25 iconst 1410 - if_icmplt LABEL831 - jump LABEL907 -LABEL831: + if_icmplt LABEL880 + jump LABEL956 +LABEL880: ; item index = (loop index + offset) % bank size - iload 19 ; loop index - iload 30 ; offset + iload 25 ; loop index + iload 36 ; offset add ; iconst 1410 ; bank size mod ; - istore 29 ; store index - iload 2 + istore 35 ; store index + iload 3 jump LOAD_ITEM_INDEX - iload 19 + iload 25 LOAD_ITEM_INDEX: - iload 29 ; use item index instead of loop index + iload 35 ; use item index instead of loop index cc_find iconst 1 - if_icmpeq LABEL837 - jump LABEL902 -LABEL837: + if_icmpeq LABEL886 + jump LABEL951 +LABEL886: iconst 95 jump LOAD_ITEM_INDEX2 - iload 19 + iload 25 LOAD_ITEM_INDEX2: - iload 29 ; use item index instead of loop index + iload 35 ; use item index instead of loop index inv_getobj - istore 24 - iload 24 + istore 30 + iload 30 iconst -1 - if_icmpne LABEL845 - jump LABEL849 -LABEL845: - iload 28 + if_icmpne LABEL894 + jump LABEL898 +LABEL894: + iload 34 iconst 1 add - istore 28 -LABEL849: - iload 36 ; overriding single tab building mode? + istore 34 +LABEL898: + iload 42 ; overriding single tab building mode? iconst 1 ; if_icmpeq filtertest ; - iload 19 - iload 32 - if_icmpge LABEL853 - jump LABEL900 -LABEL853: - iload 19 - iload 33 - if_icmplt LABEL857 - jump LABEL900 + iload 25 + iload 38 + if_icmpge LABEL902 + jump LABEL949 +LABEL902: + iload 25 + iload 39 + if_icmplt LABEL906 + jump LABEL949 filtertest: - iload 24 ; obj - iload 31 ; bankmain_searching - oload 0 ; bankmain_filterstring + iload 30 ; obj + iload 37 ; bankmain_searching + oload 2 ; bankmain_filterstring invoke 279 ; ~bankmain_filteritem iconst 1 ; - if_icmpne LABEL900 ; -LABEL857: + if_icmpne LABEL949 ; +LABEL906: iconst 0 cc_sethide - iload 24 + iload 30 iconst 95 jump LOAD_ITEM_INDEX3 - iload 19 + iload 25 LOAD_ITEM_INDEX3: - iload 29 ; use item index instead of loop index + iload 35 ; use item index instead of loop index inv_getnum - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 + iload 12 invoke 278 iconst 51 - iload 34 + iload 40 iconst 36 - iload 23 + iload 29 add multiply add - iload 27 + iload 33 iconst 0 iconst 0 cc_setposition - iload 34 - iload 21 - if_icmplt LABEL884 - jump LABEL889 -LABEL884: - iload 34 + iload 40 + iload 27 + if_icmplt LABEL933 + jump LABEL938 +LABEL933: + iload 40 iconst 1 add - istore 34 - jump LABEL899 -LABEL889: + istore 40 + jump LABEL948 +LABEL938: iconst 0 - iload 35 + iload 41 iconst 1 add - istore 35 - istore 34 - iload 35 + istore 41 + istore 40 + iload 41 iconst 36 multiply - istore 27 -LABEL899: - jump LABEL902 -LABEL900: + istore 33 +LABEL948: + jump LABEL951 +LABEL949: iconst 1 cc_sethide -LABEL902: - iload 19 +LABEL951: + iload 25 iconst 1 add - istore 19 - jump LABEL827 -LABEL907: - iload 27 + istore 25 + jump LABEL876 +LABEL956: + iload 33 iconst 32 add - istore 27 + istore 33 iconst 1 - iconst 786447 + iconst 786446 if_sethide get_varbit 4150 iconst 15 - if_icmpeq LABEL918 - jump LABEL925 -LABEL918: - sconst "Potion store" - iload 5 + if_icmpeq LABEL967 + jump LABEL974 +LABEL967: + sconst "Potion storage" + iload 6 if_settext iconst 0 - iconst 786447 + iconst 786446 if_sethide - jump LABEL945 -LABEL925: - iload 36 ; overriding single tab building mode? + jump LABEL994 +LABEL974: + iload 42 ; overriding single tab building mode? iconst 1 ; if_icmpne tabtitle ; set normal "Tab" title sconst "The Bank of Gielinor" ; bank title - iload 5 ; bank title component + iload 6 ; bank title component if_settext ; jump FinishBuilding ; tabtitle: ; get_varbit 4170 iconst 2 - if_icmpeq LABEL929 - jump LABEL939 -LABEL929: + if_icmpeq LABEL978 + jump LABEL988 +LABEL978: sconst "Tab " iconst 105 iconst 115 @@ -1105,18 +1160,18 @@ LABEL929: get_varbit 4150 enum join_string 2 - iload 5 + iload 6 if_settext - jump LABEL945 -LABEL939: + jump LABEL994 +LABEL988: sconst "Tab " get_varbit 4150 tostring join_string 2 - iload 5 + iload 6 if_settext FinishBuilding: -LABEL945: +LABEL994: iload 0 iload 1 iload 2 @@ -1129,12 +1184,15 @@ LABEL945: iload 9 iload 10 iload 11 - iload 27 - iload 28 iload 12 + iload 33 + iload 34 iload 13 iload 14 iload 15 iload 16 + iload 17 + iload 18 + iload 19 invoke 505 return diff --git a/runelite-client/src/main/scripts/TriggerBankLayout.hash b/runelite-client/src/main/scripts/TriggerBankLayout.hash index e4d5241bf65..e124d99905b 100644 --- a/runelite-client/src/main/scripts/TriggerBankLayout.hash +++ b/runelite-client/src/main/scripts/TriggerBankLayout.hash @@ -1 +1 @@ -DC2D875DFF91D7D0184670EC9CD4E5980C051D8D4BD0F591935FD603409A7369 \ No newline at end of file +5318C120955D6D3B0283BBAB3F46EACE6672675F8A6464C36DB64AC4618DAF91 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/TriggerBankLayout.rs2asm b/runelite-client/src/main/scripts/TriggerBankLayout.rs2asm index beba5961b65..fe705afe10d 100644 --- a/runelite-client/src/main/scripts/TriggerBankLayout.rs2asm +++ b/runelite-client/src/main/scripts/TriggerBankLayout.rs2asm @@ -1,5 +1,5 @@ .id 276 -.int_arg_count 17 +.int_arg_count 20 .obj_arg_count 0 ; Check if we should allow server to relayout bank @@ -40,5 +40,8 @@ RELAYOUT: iload 14 iload 15 iload 16 + iload 17 + iload 18 + iload 19 invoke 277 return diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java index 90925764195..903e4b88d94 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java @@ -291,6 +291,7 @@ public void npcMatching() assertTrue(matches("Magma strykewyrm", Task.WYRMS)); assertTrue(matches("Aquanite", Task.AQUANITES)); assertTrue(matches("Elder Aquanite", Task.AQUANITES)); + assertTrue(matches("Frost dragon", Task.FROST_DRAGONS)); assertFalse(matches("Rat", Task.PIRATES)); assertFalse(matches("Wolf", Task.WEREWOLVES));