diff --git a/http-service/src/main/java/net/runelite/http/service/osbuddy/OsbuddyClient.java b/http-service/src/main/java/net/runelite/http/service/osbuddy/OsbuddyClient.java index dadb635a4d..585577511a 100644 --- a/http-service/src/main/java/net/runelite/http/service/osbuddy/OsbuddyClient.java +++ b/http-service/src/main/java/net/runelite/http/service/osbuddy/OsbuddyClient.java @@ -37,20 +37,18 @@ import okhttp3.Response; public class OsbuddyClient { - private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"; - public Map getSummary() throws IOException { HttpUrl httpUrl = new HttpUrl.Builder() .scheme("https") - .host("rsbuddy.com") - .addPathSegment("exchange") + .host("storage.googleapis.com") + .addPathSegment("osb-exchange") .addPathSegment("summary.json") .build(); Request request = new Request.Builder() .url(httpUrl) - .header("User-Agent", USER_AGENT) + .header("User-Agent", "RuneLite") .build(); try (Response responseOk = RuneLiteAPI.CLIENT.newCall(request).execute()) diff --git a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java index d7191aca72..256a8d3151 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java +++ b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java @@ -151,7 +151,7 @@ public enum AgilityShortcut MOTHERLODE_MINE_WALL_EAST(54, "Wall", new WorldPoint(3124, 9703, 0), DARK_TUNNEL_10047), MOTHERLODE_MINE_WALL_WEST(54, "Wall", new WorldPoint(3118, 9702, 0), DARK_TUNNEL_10047), MISCELLANIA_DOCK_STEPPING_STONE(55, "Stepping Stone", new WorldPoint(2572, 3862, 0), STEPPING_STONE_11768), - ISAFDAR_FOREST_OBSTACLES(56, "Trap", null, DENSE_FOREST_3938, DENSE_FOREST_3939, DENSE_FOREST_3998, DENSE_FOREST_3999, DENSE_FOREST, LEAVES, LEAVES_3924, LEAVES_3925, STICKS, TRIPWIRE), + ISAFDAR_FOREST_OBSTACLES(56, "Trap", null, DENSE_FOREST_3938, DENSE_FOREST_3939, DENSE_FOREST_3998, DENSE_FOREST_3999, DENSE_FOREST, LEAVES, LEAVES_3924, LEAVES_3925, STICKS, TRIPWIRE, TRIPWIRE_3921), RELEKKA_EAST_FENCE(57, "Fence", new WorldPoint(2688, 3697, 0), BROKEN_FENCE), YANILLE_DUNGEON_MONKEY_BARS(57, "Monkey Bars", null, MONKEYBARS_23567), PHASMATYS_ECTOPOOL_SHORTCUT(58, "Weathered Wall", null, WEATHERED_WALL, WEATHERED_WALL_16526), diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java index 55075cac92..11af997808 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java @@ -223,9 +223,9 @@ public enum ItemMapping ITEM_CRYSTAL_HARPOON(DRAGON_HARPOON, CRYSTAL_HARPOON, CRYSTAL_HARPOON_INACTIVE), ITEM_CRYSTAL_PICKAXE(DRAGON_PICKAXE, CRYSTAL_PICKAXE, CRYSTAL_PICKAXE_INACTIVE), ITEM_BLADE_OF_SAELDOR(BLADE_OF_SAELDOR_INACTIVE, BLADE_OF_SAELDOR), - ITEM_CRYSTAL_BOW(CRYSTAL_WEAPON_SEED, CRYSTAL_BOW, CRYSTAL_BOW_INACTIVE), - ITEM_CRYSTAL_HALBERD(CRYSTAL_WEAPON_SEED, CRYSTAL_HALBERD, CRYSTAL_HALBERD_INACTIVE), - ITEM_CRYSTAL_SHIELD(CRYSTAL_WEAPON_SEED, CRYSTAL_SHIELD, CRYSTAL_SHIELD_INACTIVE); + ITEM_CRYSTAL_BOW(CRYSTAL_WEAPON_SEED, CRYSTAL_BOW, CRYSTAL_BOW_24123, CRYSTAL_BOW_INACTIVE), + ITEM_CRYSTAL_HALBERD(CRYSTAL_WEAPON_SEED, CRYSTAL_HALBERD, CRYSTAL_HALBERD_24125, CRYSTAL_HALBERD_INACTIVE), + ITEM_CRYSTAL_SHIELD(CRYSTAL_WEAPON_SEED, CRYSTAL_SHIELD, CRYSTAL_SHIELD_24127, CRYSTAL_SHIELD_INACTIVE); private static final Multimap MAPPINGS = HashMultimap.create(); private final int tradeableItem; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/Courses.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/Courses.java index 85f921a8e1..5c1484101d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/Courses.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/Courses.java @@ -47,7 +47,7 @@ enum Courses SEERS(570.0, 435, 10806), POLLNIVNEACH(890.0, 540, 13358), RELLEKA(780.0, 475, 10553), - PRIFDDINAS(1199.0, 968, 12895), + PRIFDDINAS(1337.0, 1037, 12895), ARDOUGNE(793.0, 529, 10547); private final static Map coursesByRegion; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java index 3023754e35..27391e39bf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java @@ -163,7 +163,8 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc new AnagramClue("RUG DETER", "Gertrude", new WorldPoint(3151, 3412, 0), "West of Varrock, south of the Cooks' Guild"), new AnagramClue("SIR SHARE RED", "Hairdresser", new WorldPoint(2944, 3381, 0), "Western Falador"), new AnagramClue("TAUNT ROOF", "Fortunato", new WorldPoint(3080, 3250, 0), "Draynor Village Market"), - new AnagramClue("HICK JET", "Jethick", new WorldPoint(2541, 3305, 0), "West Ardougne", "38") + new AnagramClue("HICK JET", "Jethick", new WorldPoint(2541, 3305, 0), "West Ardougne", "38"), + new AnagramClue("RUE GO", "Goreu", new WorldPoint(2335, 3162, 0), "Lletya") ); private final String text; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java index 37b2bb1b70..e487707c13 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java @@ -255,7 +255,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc new CrypticClue("Search the chests upstairs in Al Kharid Palace.", CLOSED_CHEST_375, new WorldPoint(3301, 3169, 1), "The chest is located, in the northeast corner, on the first floor of the Al Kharid Palace"), new CrypticClue("Search the boxes just outside the Armour shop in East Ardougne.", BOXES_361, new WorldPoint(2654, 3299, 0), "Outside Zenesha's Plate Mail Body Shop"), new CrypticClue("Surrounded by white walls and gems.", "Herquin", new WorldPoint(2945, 3335, 0), "Talk to Herquin, the gem store owner in Falador."), - new CrypticClue("Monk's residence in the far west. See robe storage device.", DRAWERS_350, new WorldPoint(1742, 3490, 1), "Search the drawers upstairs in the chapel found on the southern coast of Hosidius, directly south of the player-owned house portal."), + new CrypticClue("Monk's residence in the far west. See robe storage device.", DRAWERS_350, new WorldPoint(1742, 3490, 1), "Search the drawers in the south tent of the monk's camp on the southern coast of Hosidius, directly south of the player-owned house portal."), new CrypticClue("Search the drawers in Catherby's Archery shop.", DRAWERS_350, new WorldPoint(2825, 3442, 0), "Hickton's Archery Emporium in Catherby."), new CrypticClue("The hand ain't listening.", "The Face", new WorldPoint(3019, 3232, 0), "Talk to The Face located by the manhole just north of the Port Sarim fishing shop."), new CrypticClue("Search the chest in the left-hand tower of Camelot Castle.", CLOSED_CHEST_25592, new WorldPoint(2748, 3495, 2), "Located on the second floor of the western tower of Camelot."), @@ -320,7 +320,10 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc new CrypticClue("Search the boxes next to a chest that needs a crystal key.", BOXES_360, new WorldPoint(2915, 3452, 0), "The Crystal chest can be found in the house directly south of the Witch's house in Taverley."), new CrypticClue("Talk to Turael in Burthorpe.", "Turael", new WorldPoint(2930, 3536, 0), "Turael is located in the small house east of the Toad and Chicken inn."), new CrypticClue("More resources than I can handle, but in a very dangerous area. Can't wait to strike gold!", new WorldPoint(3183, 3941, 0), "Dig between the three gold ores in the Wilderness Resource Area."), - new CrypticClue("Observing someone in a swamp, under the telescope lies treasure.", new WorldPoint(2221, 3091, 0), "Dig next to the telescope on Broken Handz's island in the poison wastes. (Accessible only through fairy ring DLR)") + new CrypticClue("Observing someone in a swamp, under the telescope lies treasure.", new WorldPoint(2221, 3091, 0), "Dig next to the telescope on Broken Handz's island in the poison wastes. (Accessible only through fairy ring DLR)"), + new CrypticClue("A general who sets a 'shining' example.", "General Hining", new WorldPoint(2186, 3148, 0), "Talk to General Hining in Tyras Camp."), + new CrypticClue("Has no one told you it is rude to ask a lady her age?", "Lady Tangwen Trahaearn", new WorldPoint(3280, 6042, 0), "Talk to Lady Tangwen Trahaearn, SSE Prifddinas by the teleporter."), + new CrypticClue("Elvish onions.", new WorldPoint(3303, 6092, 0), "Dig in the onion patch east of the Prifddinas allotments.") ); private final String text; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java index 4337f5d017..cc5df5a7ee 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java @@ -77,10 +77,12 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu new EmoteClue("Panic in the heart of the Haunted Woods. Beware of double agents! Have no items equipped when you do.", "Haunted Woods", null, new WorldPoint(3611, 3492, 0), PANIC, emptySlot("Nothing at all", HEAD, CAPE, AMULET, WEAPON, BODY, SHIELD, LEGS, GLOVES, BOOTS, RING, AMMO)), new EmoteClue("Show your anger towards the Statue of Saradomin in Ellamaria's garden. Beware of double agents! Equip a zamorak godsword.", "Varrock Castle", BY_THE_BEAR_CAGE_IN_VARROCK_PALACE_GARDENS, new WorldPoint(3230, 3478, 0), ANGRY, item(ZAMORAK_GODSWORD)), new EmoteClue("Show your anger at the Wise old man. Beware of double agents! Equip an abyssal whip, a legend's cape and some spined chaps.", "Draynor Village", BEHIND_MISS_SCHISM_IN_DRAYNOR_VILLAGE, new WorldPoint(3088, 3254, 0), ANGRY, any("Abyssal whip", item(ABYSSAL_WHIP), item(VOLCANIC_ABYSSAL_WHIP), item(FROZEN_ABYSSAL_WHIP)), item(CAPE_OF_LEGENDS), item(SPINED_CHAPS)), + new EmoteClue("Beckon by a collection of crystalline maple trees. Beware of double agents! Equip Bryophyta's staff and a nature tiara.", "North of Prifddinas", CRYSTALLINE_MAPLE_TREES, new WorldPoint(2211, 3427, 0), BECKON, range(BRYOPHYTAS_STAFF_UNCHARGED, BRYOPHYTAS_STAFF), item(NATURE_TIARA)), new EmoteClue("Beckon in the Digsite, near the eastern winch. Bow before you talk to me. Equip a green gnome hat, snakeskin boots and an iron pickaxe.", "Digsite", DIGSITE, new WorldPoint(3370, 3425, 0), BECKON, BOW, item(GREEN_HAT), item(SNAKESKIN_BOOTS), item(IRON_PICKAXE)), new EmoteClue("Beckon in Tai Bwo Wannai. Clap before you talk to me. Equip green dragonhide chaps, a ring of dueling and a mithril medium helmet.", "Tai Bwo Wannai", SOUTH_OF_THE_SHRINE_IN_TAI_BWO_WANNAI_VILLAGE, new WorldPoint(2803, 3073, 0), BECKON, CLAP, item(GREEN_DHIDE_CHAPS), any("Ring of dueling", item(RING_OF_DUELING1), item(RING_OF_DUELING2), item(RING_OF_DUELING3), item(RING_OF_DUELING4), item(RING_OF_DUELING5), item(RING_OF_DUELING6), item(RING_OF_DUELING7), item(RING_OF_DUELING8)), item(MITHRIL_MED_HELM)), new EmoteClue("Beckon in the combat ring of Shayzien. Show your anger before you talk to me. Equip an adamant platebody, adamant full helm and adamant platelegs.", "Shayzien combat ring", WEST_OF_THE_SHAYZIEN_COMBAT_RING, new WorldPoint(1545, 3594, 0), BECKON, ANGRY, item(ADAMANT_PLATELEGS), item(ADAMANT_PLATEBODY), item(ADAMANT_FULL_HELM)), - new EmoteClue("Bow near Lord Iorwerth. Beware of double agents! Equip a new imbued crystal bow.", "Lord Iorwerth's camp", TENT_IN_LORD_IORWERTHS_ENCAMPMENT, new WorldPoint(2205, 3252, 0), BOW, any("Imbued crystal bow", item(NEW_CRYSTAL_BOW_I), item(CRYSTAL_BOW_FULL_I), item(CRYSTAL_BOW_910_I), item(CRYSTAL_BOW_810_I), item(CRYSTAL_BOW_710_I), item(CRYSTAL_BOW_610_I), item(CRYSTAL_BOW_510_I), item(CRYSTAL_BOW_410_I), item(CRYSTAL_BOW_310_I), item(CRYSTAL_BOW_210_I), item(CRYSTAL_BOW_110_I))), + new EmoteClue("Bow near Lord Iorwerth. Beware of double agents! Equip a charged crystal bow.", "Lord Iorwerth's camp", TENT_IN_LORD_IORWERTHS_ENCAMPMENT, new WorldPoint(2205, 3252, 0), BOW, any("Crystal Bow", item(CRYSTAL_BOW), item(CRYSTAL_BOW_24123))), + new EmoteClue("Bow in the Iorwerth Camp. Beware of double agents! Equip a charged crystal bow.", "Lord Iorwerth's camp", TENT_IN_LORD_IORWERTHS_ENCAMPMENT, new WorldPoint(2205, 3252, 0), BOW, any("Crystal Bow", item(CRYSTAL_BOW), item(CRYSTAL_BOW_24123))), new EmoteClue("Bow outside the entrance to the Legends' Guild. Equip iron platelegs, an emerald amulet and an oak longbow.", "Legend's Guild", OUTSIDE_THE_LEGENDS_GUILD_GATES, new WorldPoint(2729, 3349, 0), BOW, item(IRON_PLATELEGS), item(OAK_LONGBOW), item(EMERALD_AMULET)), new EmoteClue("Bow on the ground floor of the Legend's guild. Equip Legend's cape, a dragon battleaxe and an amulet of glory.", "Legend's Guild", OUTSIDE_THE_LEGENDS_GUILD_DOOR, new WorldPoint(2728, 3377, 0), BOW, item(CAPE_OF_LEGENDS), item(DRAGON_BATTLEAXE), any("Any amulet of glory", item(AMULET_OF_GLORY), item(AMULET_OF_GLORY1), item(AMULET_OF_GLORY2), item(AMULET_OF_GLORY3), item(AMULET_OF_GLORY4), item(AMULET_OF_GLORY5), item(AMULET_OF_GLORY6))), new EmoteClue("Bow in the ticket office of the Duel Arena. Equip an iron chain body, leather chaps and coif.", "Duel Arena", MUBARIZS_ROOM_AT_THE_DUEL_ARENA, new WorldPoint(3314, 3241, 0), BOW, item(IRON_CHAINBODY), item(LEATHER_CHAPS), item(COIF)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java index ea4f23ba5c..8350483589 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java @@ -31,37 +31,9 @@ import java.util.List; import javax.annotation.Nonnull; import lombok.Getter; import net.runelite.api.Item; -import static net.runelite.api.ItemID.ARMADYL_HELMET; -import static net.runelite.api.ItemID.BARRELCHEST_ANCHOR; -import static net.runelite.api.ItemID.BARROWS_GLOVES; -import static net.runelite.api.ItemID.BASALT; -import static net.runelite.api.ItemID.BOOK_OF_BALANCE; -import static net.runelite.api.ItemID.BOOK_OF_DARKNESS; -import static net.runelite.api.ItemID.BOOK_OF_LAW; -import static net.runelite.api.ItemID.BOOK_OF_WAR; -import static net.runelite.api.ItemID.COOKING_GAUNTLETS; -import static net.runelite.api.ItemID.CRYSTAL_BOW_110; -import static net.runelite.api.ItemID.CRYSTAL_BOW_110_I; -import static net.runelite.api.ItemID.DRAGON_DEFENDER; -import static net.runelite.api.ItemID.DRAGON_SCIMITAR; -import static net.runelite.api.ItemID.FIGHTER_TORSO; -import static net.runelite.api.ItemID.GREENMANS_ALEM; -import static net.runelite.api.ItemID.HOLY_BOOK; -import static net.runelite.api.ItemID.INFERNAL_AXE; -import static net.runelite.api.ItemID.IVANDIS_FLAIL; -import static net.runelite.api.ItemID.LAVA_DRAGON_BONES; -import static net.runelite.api.ItemID.MARK_OF_GRACE; -import static net.runelite.api.ItemID.NEW_CRYSTAL_BOW; -import static net.runelite.api.ItemID.NEW_CRYSTAL_BOW_I; -import static net.runelite.api.ItemID.NUMULITE; -import static net.runelite.api.ItemID.ROD_OF_IVANDIS_1; -import static net.runelite.api.ItemID.ROD_OF_IVANDIS_10; -import static net.runelite.api.ItemID.RUNE_PLATEBODY; -import static net.runelite.api.ItemID.TZHAARKETOM; -import static net.runelite.api.ItemID.UNHOLY_BOOK; -import static net.runelite.api.ItemID.WARRIOR_GUILD_TOKEN; import net.runelite.api.NPC; import net.runelite.api.coords.WorldPoint; +import static net.runelite.api.ItemID.*; import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET; @@ -80,7 +52,7 @@ public class FaloTheBardClue extends ClueScroll implements TextClueScroll, NpcCl private static final List CLUES = ImmutableList.of( new FaloTheBardClue("A blood red weapon, a strong curved sword, found on the island of primate lords.", item(DRAGON_SCIMITAR)), new FaloTheBardClue("A book that preaches of some great figure, lending strength, might and vigour.", any("Any god book (must be complete)", item(HOLY_BOOK), item(BOOK_OF_BALANCE), item(UNHOLY_BOOK), item(BOOK_OF_LAW), item(BOOK_OF_WAR), item(BOOK_OF_DARKNESS))), - new FaloTheBardClue("A bow of elven craft was made, it shimmers bright, but will soon fade.", any("Crystal Bow", range(NEW_CRYSTAL_BOW, CRYSTAL_BOW_110), range(NEW_CRYSTAL_BOW_I, CRYSTAL_BOW_110_I))), + new FaloTheBardClue("A bow of elven craft was made, it shimmers bright, but will soon fade.", any("Crystal Bow", item(CRYSTAL_BOW), item(CRYSTAL_BOW_24123))), new FaloTheBardClue("A fiery axe of great inferno, when you use it, you'll wonder where the logs go.", item(INFERNAL_AXE)), new FaloTheBardClue("A mark used to increase one's grace, found atop a seer's place.", item(MARK_OF_GRACE)), new FaloTheBardClue("A molten beast with fiery breath, you acquire these with its death.", item(LAVA_DRAGON_BONES)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java index bf66bcefb1..1a4e5eb2b5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java @@ -137,7 +137,8 @@ public enum STASHUnit NORTH_OF_MOUNT_KARUULM(NullObjectID.NULL_34647, new WorldPoint(1308, 3840, 0)), GYPSY_TENT_ENTRANCE(NullObjectID.NULL_34736, new WorldPoint(3206, 3422, 0)), FINE_CLOTHES_ENTRANCE(NullObjectID.NULL_34737, new WorldPoint(3209, 3416, 0)), - BOB_AXES_ENTRANCE(NullObjectID.NULL_34738, new WorldPoint(3233, 3200, 0)); + BOB_AXES_ENTRANCE(NullObjectID.NULL_34738, new WorldPoint(3233, 3200, 0)), + CRYSTALLINE_MAPLE_TREES(NullObjectID.NULL_34953, new WorldPoint(2213, 3427, 0)); private final int objectId; private final WorldPoint[] worldPoints; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java index 1ca4216358..9d896d8ed7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java @@ -138,14 +138,14 @@ public enum HotColdLocation NORTHEAST_OF_AL_KHARID_MINE(true, new WorldPoint(3332, 3313, 0), MISTHALIN, "Northeast of Al Kharid Mine"), WESTERN_PROVINCE_EAGLES_PEAK(new WorldPoint(2297, 3530, 0), WESTERN_PROVINCE, "North-west of Eagles' Peak."), WESTERN_PROVINCE_PISCATORIS(new WorldPoint(2337, 3689, 0), WESTERN_PROVINCE, "Piscatoris Fishing Colony"), - WESTERN_PROVINCE_PISCATORIS_HUNTER_AREA(new WorldPoint(2361, 3566, 0), WESTERN_PROVINCE, "Eastern part of Piscatoris Hunter area, south-west of the Falconry."), + WESTERN_PROVINCE_PISCATORIS_HUNTER_AREA(new WorldPoint(2359, 3564, 0), WESTERN_PROVINCE, "Eastern part of Piscatoris Hunter area, south-west of the Falconry."), WESTERN_PROVINCE_ARANDAR(new WorldPoint(2366, 3318, 0), WESTERN_PROVINCE, "South-west of the crystal gate to Arandar."), WESTERN_PROVINCE_ELF_CAMP_EAST(new WorldPoint(2270, 3244, 0), WESTERN_PROVINCE, "East of Elf Camp."), WESTERN_PROVINCE_ELF_CAMP_NW(new WorldPoint(2174, 3280, 0), WESTERN_PROVINCE, "North-west of Elf Camp."), WESTERN_PROVINCE_LLETYA(new WorldPoint(2335, 3166, 0), WESTERN_PROVINCE, "In Lletya."), WESTERN_PROVINCE_TYRAS(new WorldPoint(2204, 3157, 0), WESTERN_PROVINCE, "Near Tyras Camp."), WESTERN_PROVINCE_ZULANDRA(new WorldPoint(2196, 3057, 0), WESTERN_PROVINCE, "The northern house at Zul-Andra."), - WILDERNESS_5(new WorldPoint(3169, 3558, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."), + WILDERNESS_5(new WorldPoint(3173, 3556, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."), WILDERNESS_12(new WorldPoint(3038, 3612, 0), WILDERNESS, "South-east of the Dark Warriors' Fortress, level 12 Wilderness."), WILDERNESS_20(new WorldPoint(3225, 3676, 0), WILDERNESS, "East of the Corporeal Beast's lair, level 20 Wilderness."), WILDERNESS_27(new WorldPoint(3174, 3735, 0), WILDERNESS, "Inside the Ruins north of the Graveyard of Shadows, level 27 Wilderness."), @@ -157,7 +157,7 @@ public enum HotColdLocation WILDERNESS_49(new WorldPoint(3140, 3910, 0), WILDERNESS, "South-west of the Deserted Keep, level 49 Wilderness."), WILDERNESS_54(new WorldPoint(2983, 3946, 0), WILDERNESS, "West of the Wilderness Agility Course, level 54 Wilderness."), ZEAH_BLASTMINE_BANK(new WorldPoint(1507, 3856, 0), ZEAH, "Next to the bank in the Lovakengj blast mine."), - ZEAH_BLASTMINE_NORTH(new WorldPoint(1490, 3883, 0), ZEAH, "Northern part of the Lovakengj blast mine."), + ZEAH_BLASTMINE_NORTH(new WorldPoint(1488, 3881, 0), ZEAH, "Northern part of the Lovakengj blast mine."), ZEAH_LOVAKITE_FURNACE(new WorldPoint(1507, 3819, 0), ZEAH, "Next to the lovakite furnace in Lovakengj."), ZEAH_LOVAKENGJ_MINE(new WorldPoint(1477, 3779, 0), ZEAH, "Next to mithril rock in the Lovakengj mine."), ZEAH_SULPHR_MINE(new WorldPoint(1428, 3866, 0), ZEAH, "Western entrance in the Lovakengj sulphur mine."), @@ -177,7 +177,7 @@ public enum HotColdLocation ZEAH_MESS_HALL(new WorldPoint(1658, 3621, 0), ZEAH, "East of the Mess hall."), ZEAH_WATSONS_HOUSE(new WorldPoint(1653, 3573, 0), ZEAH, "East of Watson's house."), ZEAH_VANNAHS_FARM_STORE(new WorldPoint(1806, 3521, 0), ZEAH, "North of Vannah's Farm Store, between the chicken coop and willow trees."), - ZEAH_FARMING_GUILD_W(new WorldPoint(1209, 3737, 0), ZEAH, "West of the Farming Guild."), + ZEAH_FARMING_GUILD_W(new WorldPoint(1208, 3736, 0), ZEAH, "West of the Farming Guild."), ZEAH_DAIRY_COW(new WorldPoint(1320, 3718, 0), ZEAH, "North-east of the Kebos Lowlands, east of the dairy cow."), ZEAH_CRIMSON_SWIFTS(new WorldPoint(1186, 3583, 0), ZEAH, "South-west of the Kebos Swamp, below the crimson swifts."); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index d715d36e50..c90495cf57 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -38,6 +38,7 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.ItemDefinition; +import net.runelite.api.ItemID; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.MenuOptionClicked; @@ -224,26 +225,32 @@ public class ExaminePlugin extends Plugin log.debug("Got examine for {} {}: {}", pendingExamine.getType(), pendingExamine.getId(), event.getMessage()); // If it is an item, show the price of it - final ItemDefinition Itemdefinition; + final ItemDefinition itemDefinition; if (pendingExamine.getType() == ExamineType.ITEM || pendingExamine.getType() == ExamineType.ITEM_BANK_EQ) { final int itemId = pendingExamine.getId(); final int itemQuantity = pendingExamine.getQuantity(); - Itemdefinition = itemManager.getItemDefinition(itemId); - if (Itemdefinition != null) + if (itemId == ItemID.COINS_995) { - final int id = itemManager.canonicalize(Itemdefinition.getId()); - executor.submit(() -> getItemPrice(id, Itemdefinition, itemQuantity)); + return; + } + + itemDefinition = itemManager.getItemDefinition(itemId); + + if (itemDefinition != null) + { + final int id = itemManager.canonicalize(itemDefinition.getId()); + executor.submit(() -> getItemPrice(id, itemDefinition, itemQuantity)); } } else { - Itemdefinition = null; + itemDefinition = null; } // Don't submit examine info for tradeable items, which we already have from the RS item api - if (Itemdefinition != null && Itemdefinition.isTradeable()) + if (itemDefinition != null && itemDefinition.isTradeable()) { return; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/BrokenOnDeathItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/BrokenOnDeathItem.java index 9f1fd5c95e..8512a05541 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/BrokenOnDeathItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/BrokenOnDeathItem.java @@ -24,7 +24,8 @@ */ package net.runelite.client.plugins.itemskeptondeath; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableMap; +import javax.annotation.Nullable; import lombok.AllArgsConstructor; import net.runelite.api.ItemID; @@ -37,75 +38,76 @@ import net.runelite.api.ItemID; enum BrokenOnDeathItem { // Capes - FIRE_CAPE(ItemID.FIRE_CAPE), - FIRE_MAX_CAPE(ItemID.FIRE_MAX_CAPE), - INFERNAL_CAPE(ItemID.INFERNAL_CAPE), - INFERNAL_MAX_CAPE(ItemID.INFERNAL_MAX_CAPE), - AVAS_ASSEMBLER(ItemID.AVAS_ASSEMBLER), - ASSEMBLER_MAX_CAPE(ItemID.ASSEMBLER_MAX_CAPE), + FIRE_CAPE(ItemID.FIRE_CAPE, 50000), + FIRE_MAX_CAPE(ItemID.FIRE_MAX_CAPE, 50000), + INFERNAL_CAPE(ItemID.INFERNAL_CAPE, 50000), + INFERNAL_MAX_CAPE(ItemID.INFERNAL_MAX_CAPE, 50000), + AVAS_ASSEMBLER(ItemID.AVAS_ASSEMBLER, 75000), + ASSEMBLER_MAX_CAPE(ItemID.ASSEMBLER_MAX_CAPE, 75000), // Defenders - BRONZE_DEFENDER(ItemID.BRONZE_DEFENDER), - IRON_DEFENDER(ItemID.IRON_DEFENDER), - STEEL_DEFENDER(ItemID.STEEL_DEFENDER), - BLACK_DEFENDER(ItemID.BLACK_DEFENDER), - MITHRIL_DEFENDER(ItemID.MITHRIL_DEFENDER), - ADAMANT_DEFENDER(ItemID.ADAMANT_DEFENDER), - RUNE_DEFENDER(ItemID.RUNE_DEFENDER), - DRAGON_DEFENDER(ItemID.DRAGON_DEFENDER), - AVERNIC_DEFENDER(ItemID.AVERNIC_DEFENDER), + BRONZE_DEFENDER(ItemID.BRONZE_DEFENDER, 1000), + IRON_DEFENDER(ItemID.IRON_DEFENDER, 2000), + STEEL_DEFENDER(ItemID.STEEL_DEFENDER, 2500), + BLACK_DEFENDER(ItemID.BLACK_DEFENDER, 5000), + MITHRIL_DEFENDER(ItemID.MITHRIL_DEFENDER, 15000), + ADAMANT_DEFENDER(ItemID.ADAMANT_DEFENDER, 25000), + RUNE_DEFENDER(ItemID.RUNE_DEFENDER, 35000), + DRAGON_DEFENDER(ItemID.DRAGON_DEFENDER, 40000), + AVERNIC_DEFENDER(ItemID.AVERNIC_DEFENDER, 1000000), // Void - VOID_MAGE_HELM(ItemID.VOID_MAGE_HELM), - VOID_RANGER_HELM(ItemID.VOID_RANGER_HELM), - VOID_MELEE_HELM(ItemID.VOID_MELEE_HELM), - VOID_KNIGHT_TOP(ItemID.VOID_KNIGHT_TOP), - VOID_KNIGHT_ROBE(ItemID.VOID_KNIGHT_ROBE), - VOID_KNIGHT_GLOVES(ItemID.VOID_KNIGHT_GLOVES), - VOID_KNIGHT_MACE(ItemID.VOID_KNIGHT_MACE), - ELITE_VOID_TOP(ItemID.ELITE_VOID_TOP), - ELITE_VOID_ROBE(ItemID.ELITE_VOID_ROBE), + VOID_MAGE_HELM(ItemID.VOID_MAGE_HELM, 40000), + VOID_RANGER_HELM(ItemID.VOID_RANGER_HELM, 40000), + VOID_MELEE_HELM(ItemID.VOID_MELEE_HELM, 40000), + VOID_KNIGHT_TOP(ItemID.VOID_KNIGHT_TOP, 45000), + VOID_KNIGHT_ROBE(ItemID.VOID_KNIGHT_ROBE, 45000), + VOID_KNIGHT_GLOVES(ItemID.VOID_KNIGHT_GLOVES, 30000), + ELITE_VOID_TOP(ItemID.ELITE_VOID_TOP, 50000), + ELITE_VOID_ROBE(ItemID.ELITE_VOID_ROBE, 50000), // Barb Assault - FIGHTER_HAT(ItemID.FIGHTER_HAT), - RANGER_HAT(ItemID.RANGER_HAT), - HEALER_HAT(ItemID.HEALER_HAT), - FIGHTER_TORSO(ItemID.FIGHTER_TORSO), - PENANCE_SKIRT(ItemID.PENANCE_SKIRT), + FIGHTER_HAT(ItemID.FIGHTER_HAT, 45000), + RANGER_HAT(ItemID.RANGER_HAT, 45000), + HEALER_HAT(ItemID.HEALER_HAT, 45000), + FIGHTER_TORSO(ItemID.FIGHTER_TORSO, 50000), + PENANCE_SKIRT(ItemID.PENANCE_SKIRT, 20000), // Castle Wars - SARADOMIN_HALO(ItemID.SARADOMIN_HALO), - ZAMORAK_HALO(ItemID.ZAMORAK_HALO), - GUTHIX_HALO(ItemID.GUTHIX_HALO), - DECORATIVE_MAGIC_HAT(ItemID.DECORATIVE_ARMOUR_11898), - DECORATIVE_MAGIC_ROBE_TOP(ItemID.DECORATIVE_ARMOUR_11896), - DECORATIVE_MAGIC_ROBE_LEGS(ItemID.DECORATIVE_ARMOUR_11897), - DECORATIVE_RANGE_TOP(ItemID.DECORATIVE_ARMOUR_11899), - DECORATIVE_RANGE_BOTTOM(ItemID.DECORATIVE_ARMOUR_11900), - DECORATIVE_RANGE_QUIVER(ItemID.DECORATIVE_ARMOUR_11901), - GOLD_DECORATIVE_HELM(ItemID.DECORATIVE_HELM_4511), - GOLD_DECORATIVE_BODY(ItemID.DECORATIVE_ARMOUR_4509), - GOLD_DECORATIVE_LEGS(ItemID.DECORATIVE_ARMOUR_4510), - GOLD_DECORATIVE_SKIRT(ItemID.DECORATIVE_ARMOUR_11895), - GOLD_DECORATIVE_SHIELD(ItemID.DECORATIVE_SHIELD_4512), - GOLD_DECORATIVE_SWORD(ItemID.DECORATIVE_SWORD_4508); + SARADOMIN_HALO(ItemID.SARADOMIN_HALO, 25000), + ZAMORAK_HALO(ItemID.ZAMORAK_HALO, 25000), + GUTHIX_HALO(ItemID.GUTHIX_HALO, 25000), + DECORATIVE_MAGIC_HAT(ItemID.DECORATIVE_ARMOUR_11898, 5000), + DECORATIVE_MAGIC_ROBE_TOP(ItemID.DECORATIVE_ARMOUR_11896, 5000), + DECORATIVE_MAGIC_ROBE_LEGS(ItemID.DECORATIVE_ARMOUR_11897, 5000), + DECORATIVE_RANGE_TOP(ItemID.DECORATIVE_ARMOUR_11899, 5000), + DECORATIVE_RANGE_BOTTOM(ItemID.DECORATIVE_ARMOUR_11900, 5000), + DECORATIVE_RANGE_QUIVER(ItemID.DECORATIVE_ARMOUR_11901, 5000), + GOLD_DECORATIVE_HELM(ItemID.DECORATIVE_HELM_4511, 5000), + GOLD_DECORATIVE_BODY(ItemID.DECORATIVE_ARMOUR_4509, 5000), + GOLD_DECORATIVE_LEGS(ItemID.DECORATIVE_ARMOUR_4510, 5000), + GOLD_DECORATIVE_SKIRT(ItemID.DECORATIVE_ARMOUR_11895, 5000), + GOLD_DECORATIVE_SHIELD(ItemID.DECORATIVE_SHIELD_4512, 5000), + GOLD_DECORATIVE_SWORD(ItemID.DECORATIVE_SWORD_4508, 5000); private final int itemID; + private final int repairPrice; - private static final ImmutableSet ID_SET; + private static final ImmutableMap REPAIR_MAP; static { - final ImmutableSet.Builder set = new ImmutableSet.Builder<>(); + final ImmutableMap.Builder map = new ImmutableMap.Builder<>(); for (final BrokenOnDeathItem p : values()) { - set.add(p.itemID); + map.put(p.itemID, p.repairPrice); } - ID_SET = set.build(); + REPAIR_MAP = map.build(); } - static boolean isBrokenOnDeath(final int itemID) + @Nullable + static Integer getRepairPrice(int itemId) { - return ID_SET.contains(itemID); + return REPAIR_MAP.get(itemId); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java index 6006eb658a..fb986e27f7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java @@ -313,8 +313,6 @@ public class ItemsKeptOnDeathPlugin extends Plugin continue; } - final ItemDefinition c = itemManager.getItemDefinition(i.getId()); - // Bonds are always kept and do not count towards the limit. if (id == ItemID.OLD_SCHOOL_BOND || id == ItemID.OLD_SCHOOL_BOND_UNTRADEABLE) { @@ -356,7 +354,7 @@ public class ItemsKeptOnDeathPlugin extends Plugin if (!Pets.isPet(id) && !LostIfNotProtected.isLostIfNotProtected(id) && !isTradeable(itemManager.getItemDefinition(id)) && wildyLevel <= DEEP_WILDY - && (wildyLevel <= 0 || BrokenOnDeathItem.isBrokenOnDeath(i.getId()))) + && (wildyLevel <= 0 || BrokenOnDeathItem.getRepairPrice(i.getId()) != null)) { keptItems.add(new ItemStack(id, qty)); } @@ -448,8 +446,6 @@ public class ItemsKeptOnDeathPlugin extends Plugin final DynamicPriceItem dynamicPrice = DynamicPriceItem.find(canonicalizedItemId); if (dynamicPrice != null) { - final ItemDefinition c1 = itemManager.getItemDefinition(canonicalizedItemId); - exchangePrice = c1.getPrice(); final int basePrice = itemManager.getItemPrice(dynamicPrice.getChargedId(), true); return dynamicPrice.calculateDeathPrice(basePrice); } @@ -462,19 +458,29 @@ public class ItemsKeptOnDeathPlugin extends Plugin // Grab base item price exchangePrice = itemManager.getItemPrice(fixedPrice.getBaseId(), true); } - else + + // Jagex uses the repair price when determining which items are kept on death. + final Integer repairPrice = BrokenOnDeathItem.getRepairPrice(canonicalizedItemId); + if (repairPrice != null) { - // Account for items whose death value comes from their tradeable variant (barrows) or components (ornate kits) - for (final int mappedID : ItemMapping.map(canonicalizedItemId)) - { - exchangePrice += itemManager.getItemPrice(mappedID, true); - } + exchangePrice = repairPrice; } if (exchangePrice == 0) { - final ItemDefinition c1 = itemManager.getItemDefinition(canonicalizedItemId); - exchangePrice = c1.getPrice(); + // Account for items whose death value comes from their tradeable variant (barrows) or components (ornate kits) + // ItemMapping.map will always return a collection with at least the passed ID + for (final int mappedID : ItemMapping.map(canonicalizedItemId)) + { + exchangePrice += itemManager.getItemPrice(mappedID, true); + } + + // If for some reason it still has no price default to the items store price + if (exchangePrice == 0) + { + final ItemDefinition c1 = itemManager.getItemDefinition(canonicalizedItemId); + exchangePrice = c1.getPrice(); + } } // Apply fixed price offset diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java index 015b47ed4a..5f6c9ef448 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java @@ -80,8 +80,8 @@ import net.runelite.client.ui.overlay.OverlayManager; @Singleton public class MiningPlugin extends Plugin { - // private static final int ROCK_DISTANCE = 14; private static final int MINING_GUILD_REGION = 12183; + private static final int ROCK_DISTANCE = 14; private static final Pattern COAL_BAG_EMPTY_MESSAGE = Pattern.compile("^The coal bag is (now )?empty\\.$"); private static final Pattern COAL_BAG_ONE_MESSAGE = Pattern.compile("^The coal bag contains one piece of coal\\.$"); @@ -189,11 +189,12 @@ public class MiningPlugin extends Plugin } final GameObject object = event.getGameObject(); + final int region = client.getLocalPlayer().getWorldLocation().getRegionID(); Rock rock = Rock.getRock(object.getId()); if (rock != null) { - RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(inMiningGuild()).toMillis(), rock.getZOffset()); + RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset()); respawns.add(rockRespawn); } } @@ -206,13 +207,14 @@ public class MiningPlugin extends Plugin } final WallObject object = event.getWallObject(); + final int region = client.getLocalPlayer().getWorldLocation().getRegionID(); switch (object.getId()) { case EMPTY_WALL: { Rock rock = Rock.AMETHYST; - RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(inMiningGuild()).toMillis(), rock.getZOffset()); + RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset()); respawns.add(rockRespawn); break; } @@ -222,7 +224,7 @@ public class MiningPlugin extends Plugin case DEPLETED_VEIN_26668: // Depleted motherlode vein { Rock rock = Rock.ORE_VEIN; - RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(inMiningGuild()).toMillis(), rock.getZOffset()); + RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset()); respawns.add(rockRespawn); break; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mining/Rock.java b/runelite-client/src/main/java/net/runelite/client/plugins/mining/Rock.java index 8ecfeba2bd..582d7fd14a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mining/Rock.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mining/Rock.java @@ -38,17 +38,25 @@ enum Rock IRON(Duration.ofMillis(5400), 0, ROCKS_11364, ROCKS_11365, ROCKS_36203) { @Override - Duration getRespawnTime(boolean inMiningGuild) + Duration getRespawnTime(int region) { - return inMiningGuild ? Duration.ofMillis(2400) : super.respawnTime; + return region == MINING_GUILD ? Duration.ofMillis(2400) : super.respawnTime; } }, COAL(Duration.ofMillis(29400), 0, ROCKS_11366, ROCKS_11367, ROCKS_36204) { @Override - Duration getRespawnTime(boolean inMiningGuild) + Duration getRespawnTime(int region) { - return inMiningGuild ? Duration.ofMillis(14400) : super.respawnTime; + switch (region) + { + case MINING_GUILD: + return Duration.ofMillis(14400); + case MISCELLANIA: + return Duration.ofMillis(6600); + default: + return super.respawnTime; + } } }, SILVER(Duration.ofMinutes(1), 0, ROCKS_11368, ROCKS_11369, ROCKS_36205), @@ -58,25 +66,25 @@ enum Rock MITHRIL(Duration.ofMinutes(2), 0, ROCKS_11372, ROCKS_11373, ROCKS_36207) { @Override - Duration getRespawnTime(boolean inMiningGuild) + Duration getRespawnTime(int region) { - return inMiningGuild ? Duration.ofMinutes(1) : super.respawnTime; + return region == MINING_GUILD ? Duration.ofMinutes(1) : super.respawnTime; } }, ADAMANTITE(Duration.ofMinutes(4), 0, ROCKS_11374, ROCKS_11375, ROCKS_36208) { @Override - Duration getRespawnTime(boolean inMiningGuild) + Duration getRespawnTime(int region) { - return inMiningGuild ? Duration.ofMinutes(2) : super.respawnTime; + return region == MINING_GUILD || region == WILDERNESS_RESOURCE_AREA ? Duration.ofMinutes(2) : super.respawnTime; } }, RUNITE(Duration.ofMinutes(12), 0, ROCKS_11376, ROCKS_11377, ROCKS_36209) { @Override - Duration getRespawnTime(boolean inMiningGuild) + Duration getRespawnTime(int region) { - return inMiningGuild ? Duration.ofMinutes(6) : super.respawnTime; + return region == MINING_GUILD ? Duration.ofMinutes(6) : super.respawnTime; } }, ORE_VEIN(Duration.ofSeconds(MiningOverlay.ORE_VEIN_MAX_RESPAWN_TIME), 150), @@ -84,6 +92,9 @@ enum Rock ASH_VEIN(Duration.ofSeconds(30), 0, ASH_PILE), GEM_ROCK(Duration.ofMinutes(1), 0, ROCKS_11380, ROCKS_11381); + private static final int WILDERNESS_RESOURCE_AREA = 12605; + private static final int MISCELLANIA = 10044; + private static final int MINING_GUILD = 12183; private static final Map ROCKS; static @@ -111,7 +122,7 @@ enum Rock this.ids = ids; } - Duration getRespawnTime(boolean inMiningGuild) + Duration getRespawnTime(int region) { return respawnTime; } 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 ccf163c6e8..9a0e6bd2a6 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 @@ -203,6 +203,7 @@ enum Task SCORPIA("Scorpia", ItemID.SCORPIAS_OFFSPRING), SCORPIONS("Scorpions", ItemID.ENSOULED_SCORPION_HEAD, asList("Scorpia"), Collections.emptyList()), + SARACHNIS("Sarachnis", ItemID.SRARACHA), SEA_SNAKES("Sea snakes", ItemID.SNAKE_CORPSE), SHADES("Shades", ItemID.SHADE_ROBE_TOP, asList("Loar Shadow", "Loar Shade", "Phrin Shadow", "Phrin Shade", "Riyl Shadow", "Riyl Shade", "Asyn Shadow", "Asyn Shade", "Fiyr Shadow", "Fiyr Shade"), Collections.emptyList()), diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java index fef98b9f84..96c9a52f7d 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java @@ -91,9 +91,7 @@ public class WorldMapOverlay extends Overlay final Rectangle worldMapRectangle = widget.getBounds(); final Area mapViewArea = getWorldMapClipArea(worldMapRectangle); - final Rectangle canvasBounds = client.getCanvas().getBounds(); - // in fixed, the bounds are offset by the size of the black borders outside the canvas - canvasBounds.setLocation(0, 0); + final Rectangle canvasBounds = new Rectangle(0, 0, client.getCanvasWidth(), client.getCanvasHeight()); final Area canvasViewArea = getWorldMapClipArea(canvasBounds); Area currentClip = null; @@ -265,7 +263,9 @@ public class WorldMapOverlay extends Overlay drawPoint = new Point(drawPoint.getX() + TOOLTIP_OFFSET_WIDTH, drawPoint.getY() + TOOLTIP_OFFSET_HEIGHT); - graphics.setClip(client.getCanvas().getBounds()); + final Rectangle bounds = new Rectangle(0, 0, client.getCanvasWidth(), client.getCanvasHeight()); + final Area mapArea = getWorldMapClipArea(bounds); + graphics.setClip(mapArea); graphics.setColor(JagexColors.TOOLTIP_BACKGROUND); graphics.setFont(FontManager.getRunescapeFont()); FontMetrics fm = graphics.getFontMetrics(); diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/frag.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/frag.glsl index 03d8464642..646d5dfd7d 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/frag.glsl +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/frag.glsl @@ -31,7 +31,7 @@ uniform float smoothBanding; uniform vec4 fogColor; in vec4 Color; -in float fHsl; +centroid in float fHsl; in vec4 fUv; in float fogAmount; diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json index b72b8d59e9..cc490c113f 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json @@ -82,7 +82,7 @@ "level": 75, "icon": 23962, "name": "Prifddinas Agility Course", - "xp": 1220 + "xp": 1337 }, { "level": 80, diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPluginTest.java index 15ef8cef3e..5b9a4f4103 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPluginTest.java @@ -608,4 +608,24 @@ public class ItemsKeptOnDeathPluginTest final List kept = deathItems.getKeptItems(); assertTrue(kept.contains(new ItemStack(ItemID.SHADOW_SWORD, 1))); } -} \ No newline at end of file + + @Test + public void brokenOnDeathTestRepairPrice() + { + // Dragon defender price should actually be pulled from BrokenOnDeathItem, and be lost on death + final Item[] inv = new Item[] + { + mItem(ItemID.BARROWS_GLOVES, 1, "Barrows gloves", false, 130000), + mItem(ItemID.DRAGON_DEFENDER, 1, "Dragon defender", false, 68007), + mItem(ItemID.DRAGON_SCIMITAR, 1, "Dragon scimitar", true, 63123), + mItem(ItemID.HELM_OF_NEITIZNOT, 1, "Helm of neitiznot", true, 45519), + }; + + plugin.wildyLevel = 21; + + final DeathItems deathItems = plugin.calculateKeptLostItems(inv, new Item[0]); + + final List lost = deathItems.getLostItems(); + assertTrue(lost.contains(new ItemStack(ItemID.DRAGON_DEFENDER, 1))); + } +}