diff --git a/http-service/src/main/resources/application.yaml b/http-service/src/main/resources/application.yaml
index 3c6fc451fe..ce902b76cb 100644
--- a/http-service/src/main/resources/application.yaml
+++ b/http-service/src/main/resources/application.yaml
@@ -38,4 +38,4 @@ runelite:
twitter:
consumerkey:
secretkey:
- listid: 968949795153948673
\ No newline at end of file
+ listid: 1185897074786742273
\ No newline at end of file
diff --git a/runelite-api/src/main/java/net/runelite/api/InventoryID.java b/runelite-api/src/main/java/net/runelite/api/InventoryID.java
index cde3c7e323..8fb91cc959 100644
--- a/runelite-api/src/main/java/net/runelite/api/InventoryID.java
+++ b/runelite-api/src/main/java/net/runelite/api/InventoryID.java
@@ -29,6 +29,10 @@ package net.runelite.api;
*/
public enum InventoryID
{
+ /**
+ * Reward from fishing trawler
+ */
+ FISHING_TRAWLER_REWARD(0),
/**
* Standard player inventory.
*/
diff --git a/runelite-api/src/main/java/net/runelite/api/Quest.java b/runelite-api/src/main/java/net/runelite/api/Quest.java
index 47453e7cad..a63e140249 100644
--- a/runelite-api/src/main/java/net/runelite/api/Quest.java
+++ b/runelite-api/src/main/java/net/runelite/api/Quest.java
@@ -25,170 +25,173 @@
package net.runelite.api;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+@RequiredArgsConstructor
public enum Quest
{
//Free Quests
- BLACK_KNIGHTS_FORTRESS(299, "Black Knights' Fortress", VarPlayer.QUEST_BLACK_KNIGHTS_FORTRESS),
- COOKS_ASSISTANT(300, "Cook's Assistant", VarPlayer.QUEST_COOKS_ASSISTANT),
- THE_CORSAIR_CURSE(301, "The Corsair Curse", Varbits.QUEST_THE_CORSAIR_CURSE),
- DEMON_SLAYER(302, "Demon Slayer", Varbits.QUEST_DEMON_SLAYER),
- DORICS_QUEST(303, "Doric's Quest", VarPlayer.QUEST_DORICS_QUEST),
- DRAGON_SLAYER(304, "Dragon Slayer", VarPlayer.QUEST_DRAGON_SLAYER),
- ERNEST_THE_CHICKEN(305, "Ernest the Chicken", VarPlayer.QUEST_ERNEST_THE_CHICKEN),
- GOBLIN_DIPLOMACY(306, "Goblin Diplomacy", Varbits.QUEST_GOBLIN_DIPLOMACY),
- IMP_CATCHER(307, "Imp Catcher", VarPlayer.QUEST_IMP_CATCHER),
- THE_KNIGHTS_SWORD(308, "The Knight's Sword", VarPlayer.QUEST_THE_KNIGHTS_SWORD),
- MISTHALIN_MYSTERY(309, "Misthalin Mystery", Varbits.QUEST_MISTHALIN_MYSTERY),
- PIRATES_TREASURE(310, "Pirate's Treasure", VarPlayer.QUEST_PIRATES_TREASURE),
- PRINCE_ALI_RESCUE(311, "Prince Ali Rescue", VarPlayer.QUEST_PRINCE_ALI_RESCUE),
- THE_RESTLESS_GHOST(312, "The Restless Ghost", VarPlayer.QUEST_THE_RESTLESS_GHOST),
- ROMEO__JULIET(313, "Romeo & Juliet", VarPlayer.QUEST_ROMEO_AND_JULIET),
- RUNE_MYSTERIES(314, "Rune Mysteries", VarPlayer.QUEST_RUNE_MYSTERIES),
- SHEEP_SHEARER(315, "Sheep Shearer", VarPlayer.QUEST_SHEEP_SHEARER),
- SHIELD_OF_ARRAV(316, "Shield of Arrav", VarPlayer.QUEST_SHIELD_OF_ARRAV),
- VAMPIRE_SLAYER(317, "Vampire Slayer", VarPlayer.QUEST_VAMPIRE_SLAYER),
- WITCHS_POTION(318, "Witch's Potion", VarPlayer.QUEST_WITCHS_POTION),
- X_MARKS_THE_SPOT(550, "X Marks the Spot", Varbits.QUEST_X_MARKS_THE_SPOT),
+ BLACK_KNIGHTS_FORTRESS(299, "Black Knights' Fortress"),
+ COOKS_ASSISTANT(300, "Cook's Assistant"),
+ THE_CORSAIR_CURSE(301, "The Corsair Curse"),
+ DEMON_SLAYER(302, "Demon Slayer"),
+ DORICS_QUEST(303, "Doric's Quest"),
+ DRAGON_SLAYER(304, "Dragon Slayer"),
+ ERNEST_THE_CHICKEN(305, "Ernest the Chicken"),
+ GOBLIN_DIPLOMACY(306, "Goblin Diplomacy"),
+ IMP_CATCHER(307, "Imp Catcher"),
+ THE_KNIGHTS_SWORD(308, "The Knight's Sword"),
+ MISTHALIN_MYSTERY(309, "Misthalin Mystery"),
+ PIRATES_TREASURE(310, "Pirate's Treasure"),
+ PRINCE_ALI_RESCUE(311, "Prince Ali Rescue"),
+ THE_RESTLESS_GHOST(312, "The Restless Ghost"),
+ ROMEO__JULIET(313, "Romeo & Juliet"),
+ RUNE_MYSTERIES(314, "Rune Mysteries"),
+ SHEEP_SHEARER(315, "Sheep Shearer"),
+ SHIELD_OF_ARRAV(316, "Shield of Arrav"),
+ VAMPIRE_SLAYER(317, "Vampire Slayer"),
+ WITCHS_POTION(318, "Witch's Potion"),
+ X_MARKS_THE_SPOT(550, "X Marks the Spot"),
//Members' Quests
- ANIMAL_MAGNETISM(331, "Animal Magnetism", Varbits.QUEST_ANIMAL_MAGNETISM),
- ANOTHER_SLICE_OF_HAM(332, "Another Slice of H.A.M.", Varbits.QUEST_ANOTHER_SLICE_OF_HAM),
- BETWEEN_A_ROCK(333, "Between a Rock...", Varbits.QUEST_BETWEEN_A_ROCK),
- BIG_CHOMPY_BIRD_HUNTING(334, "Big Chompy Bird Hunting", VarPlayer.QUEST_BIG_CHOMPY_BIRD_HUNTING),
- BIOHAZARD(335, "Biohazard", VarPlayer.QUEST_BIOHAZARD),
- CABIN_FEVER(336, "Cabin Fever", VarPlayer.QUEST_CABIN_FEVER),
- CLOCK_TOWER(337, "Clock Tower", VarPlayer.QUEST_CLOCK_TOWER),
- COLD_WAR(338, "Cold War", Varbits.QUEST_COLD_WAR),
- CONTACT(339, "Contact!", Varbits.QUEST_CONTACT),
- CREATURE_OF_FENKENSTRAIN(340, "Creature of Fenkenstrain", VarPlayer.QUEST_CREATURE_OF_FENKENSTRAIN),
- DARKNESS_OF_HALLOWVALE(341, "Darkness of Hallowvale", Varbits.QUEST_DARKNESS_OF_HALLOWVALE),
- DEATH_PLATEAU(342, "Death Plateau", VarPlayer.QUEST_DEATH_PLATEAU),
- DEATH_TO_THE_DORGESHUUN(343, "Death to the Dorgeshuun", Varbits.QUEST_DEATH_TO_THE_DORGESHUUN),
- THE_DEPTHS_OF_DESPAIR(344, "The Depths of Despair", Varbits.QUEST_THE_DEPTHS_OF_DESPAIR),
- DESERT_TREASURE(345, "Desert Treasure", Varbits.QUEST_DESERT_TREASURE),
- DEVIOUS_MINDS(346, "Devious Minds", Varbits.QUEST_DEVIOUS_MINDS),
- THE_DIG_SITE(347, "The Dig Site", VarPlayer.QUEST_THE_DIG_SITE),
- DRAGON_SLAYER_II(348, "Dragon Slayer II", Varbits.QUEST_DRAGON_SLAYER_II),
- DREAM_MENTOR(349, "Dream Mentor", Varbits.QUEST_DREAM_MENTOR),
- DRUIDIC_RITUAL(350, "Druidic Ritual", VarPlayer.QUEST_DRUIDIC_RITUAL),
- DWARF_CANNON(351, "Dwarf Cannon", Varbits.QUEST_THE_GIANT_DWARF),
- EADGARS_RUSE(352, "Eadgar's Ruse", VarPlayer.QUEST_EADGARS_RUSE),
- EAGLES_PEAK(353, "Eagles' Peak", Varbits.QUEST_EAGLES_PEAK),
- ELEMENTAL_WORKSHOP_I(354, "Elemental Workshop I", VarPlayer.QUEST_ELEMENTAL_WORKSHOP_I),
- ELEMENTAL_WORKSHOP_II(355, "Elemental Workshop II", Varbits.QUEST_ELEMENTAL_WORKSHOP_II),
- ENAKHRAS_LAMENT(356, "Enakhra's Lament", Varbits.QUEST_ENAKHRAS_LAMENT),
- ENLIGHTENED_JOURNEY(357, "Enlightened Journey", Varbits.QUEST_ENLIGHTENED_JOURNEY),
- THE_EYES_OF_GLOUPHRIE(358, "The Eyes of Glouphrie", Varbits.QUEST_THE_EYES_OF_GLOUPHRIE),
- FAIRYTALE_I__GROWING_PAINS(359, "Fairytale I - Growing Pains", Varbits.QUEST_FAIRYTALE_I_GROWING_PAINS),
- FAIRYTALE_II__CURE_A_QUEEN(360, "Fairytale II - Cure a Queen", Varbits.QUEST_FAIRYTALE_II_CURE_A_QUEEN),
- FAMILY_CREST(361, "Family Crest", VarPlayer.QUEST_FAMILY_CREST),
- THE_FEUD(362, "The Feud", Varbits.QUEST_THE_FEUD),
- FIGHT_ARENA(363, "Fight Arena", VarPlayer.QUEST_FIGHT_ARENA),
- FISHING_CONTEST(364, "Fishing Contest", VarPlayer.QUEST_FISHING_CONTEST),
- FORGETTABLE_TALE(365, "Forgettable Tale...", Varbits.QUEST_FORGETTABLE_TALE),
- BONE_VOYAGE(366, "Bone Voyage", Varbits.QUEST_BONE_VOYAGE),
- THE_FREMENNIK_ISLES(367, "The Fremennik Isles", Varbits.QUEST_THE_FREMENNIK_ISLES),
- THE_FREMENNIK_TRIALS(368, "The Fremennik Trials", VarPlayer.QUEST_THE_FREMENNIK_TRIALS),
- GARDEN_OF_TRANQUILLITY(369, "Garden of Tranquillity", Varbits.QUEST_GARDEN_OF_TRANQUILLITY),
- GERTRUDES_CAT(370, "Gertrude's Cat", VarPlayer.QUEST_GERTRUDES_CAT),
- GHOSTS_AHOY(371, "Ghosts Ahoy", Varbits.QUEST_GHOSTS_AHOY),
- THE_GIANT_DWARF(372, "The Giant Dwarf", Varbits.QUEST_THE_GIANT_DWARF),
- THE_GOLEM(373, "The Golem", Varbits.QUEST_THE_GOLEM),
- THE_GRAND_TREE(374, "The Grand Tree", VarPlayer.QUEST_THE_GRAND_TREE),
- THE_GREAT_BRAIN_ROBBERY(375, "The Great Brain Robbery", VarPlayer.QUEST_THE_GREAT_BRAIN_ROBBERY),
- GRIM_TALES(376, "Grim Tales", Varbits.QUEST_GRIM_TALES),
- THE_HAND_IN_THE_SAND(377, "The Hand in the Sand", Varbits.QUEST_THE_HAND_IN_THE_SAND),
- HAUNTED_MINE(378, "Haunted Mine", VarPlayer.QUEST_HAUNTED_MINE),
- HAZEEL_CULT(379, "Hazeel Cult", VarPlayer.QUEST_HAZEEL_CULT),
- HEROES_QUEST(380, "Heroes' Quest", VarPlayer.QUEST_HEROES_QUEST),
- HOLY_GRAIL(381, "Holy Grail", VarPlayer.QUEST_HOLY_GRAIL),
- HORROR_FROM_THE_DEEP(382, "Horror from the Deep", Varbits.QUEST_HORROR_FROM_THE_DEEP),
- ICTHLARINS_LITTLE_HELPER(383, "Icthlarin's Little Helper", Varbits.QUEST_ICTHLARINS_LITTLE_HELPER),
- IN_AID_OF_THE_MYREQUE(384, "In Aid of the Myreque", Varbits.QUEST_IN_AID_OF_THE_MYREQUE),
- IN_SEARCH_OF_THE_MYREQUE(385, "In Search of the Myreque", VarPlayer.QUEST_IN_SEARCH_OF_THE_MYREQUE),
- JUNGLE_POTION(386, "Jungle Potion", VarPlayer.QUEST_JUNGLE_POTION),
- KINGS_RANSOM(387, "King's Ransom", Varbits.QUEST_KINGS_RANSOM),
- LEGENDS_QUEST(388, "Legends' Quest", VarPlayer.QUEST_LEGENDS_QUEST),
- LOST_CITY(389, "Lost City", VarPlayer.QUEST_LOST_CITY),
- THE_LOST_TRIBE(390, "The Lost Tribe", Varbits.QUEST_THE_LOST_TRIBE),
- LUNAR_DIPLOMACY(391, "Lunar Diplomacy", Varbits.QUEST_LUNAR_DIPLOMACY),
- MAKING_FRIENDS_WITH_MY_ARM(392, "Making Friends with My Arm", Varbits.QUEST_MAKING_FRIENDS_WITH_MY_ARM),
- MAKING_HISTORY(393, "Making History", Varbits.QUEST_MAKING_HISTORY),
- MERLINS_CRYSTAL(394, "Merlin's Crystal", VarPlayer.QUEST_MERLINS_CRYSTAL),
- MONKEY_MADNESS_I(395, "Monkey Madness I", VarPlayer.QUEST_MONKEY_MADNESS_I),
- MONKEY_MADNESS_II(396, "Monkey Madness II", Varbits.QUEST_MONKEY_MADNESS_II),
- MONKS_FRIEND(397, "Monk's Friend", VarPlayer.QUEST_MONKS_FRIEND),
- MOUNTAIN_DAUGHTER(398, "Mountain Daughter", Varbits.QUEST_MOUNTAIN_DAUGHTER),
- MOURNINGS_END_PART_I(399, "Mourning's End Part I", VarPlayer.QUEST_MOURNINGS_END_PART_I),
- MOURNINGS_END_PART_II(400, "Mourning's End Part II", Varbits.QUEST_MOURNINGS_END_PART_II),
- MURDER_MYSTERY(401, "Murder Mystery", VarPlayer.QUEST_MURDER_MYSTERY),
- MY_ARMS_BIG_ADVENTURE(402, "My Arm's Big Adventure", Varbits.QUEST_MY_ARMS_BIG_ADVENTURE),
- NATURE_SPIRIT(403, "Nature Spirit", VarPlayer.QUEST_NATURE_SPIRIT),
- OBSERVATORY_QUEST(404, "Observatory Quest", VarPlayer.QUEST_OBSERVATORY_QUEST),
- OLAFS_QUEST(405, "Olaf's Quest", Varbits.QUEST_OLAFS_QUEST),
- ONE_SMALL_FAVOUR(406, "One Small Favour", VarPlayer.QUEST_ONE_SMALL_FAVOUR),
- PLAGUE_CITY(407, "Plague City", VarPlayer.QUEST_PLAGUE_CITY),
- PRIEST_IN_PERIL(408, "Priest in Peril", VarPlayer.QUEST_PRIEST_IN_PERIL),
- THE_QUEEN_OF_THIEVES(409, "The Queen of Thieves", Varbits.QUEST_THE_QUEEN_OF_THIEVES),
- RAG_AND_BONE_MAN(410, "Rag and Bone Man", VarPlayer.QUEST_RAG_AND_BONE_MAN),
- RAG_AND_BONE_MAN_II(411, "Rag and Bone Man II", VarPlayer.QUEST_RAG_AND_BONE_MAN_II),
- RATCATCHERS(412, "Ratcatchers", Varbits.QUEST_RATCATCHERS),
- RECIPE_FOR_DISASTER(413, "Recipe for Disaster", Varbits.QUEST_RECIPE_FOR_DISASTER),
- RECRUITMENT_DRIVE(414, "Recruitment Drive", Varbits.QUEST_RECRUITMENT_DRIVE),
- REGICIDE(415, "Regicide", VarPlayer.QUEST_REGICIDE),
- ROVING_ELVES(416, "Roving Elves", VarPlayer.QUEST_ROVING_ELVES),
- ROYAL_TROUBLE(417, "Royal Trouble", Varbits.QUEST_ROYAL_TROUBLE),
- RUM_DEAL(418, "Rum Deal", VarPlayer.QUEST_RUM_DEAL),
- SCORPION_CATCHER(419, "Scorpion Catcher", VarPlayer.QUEST_SCORPION_CATCHER),
- SEA_SLUG(420, "Sea Slug", VarPlayer.QUEST_SEA_SLUG),
- SHADES_OF_MORTTON(421, "Shades of Mort'ton", VarPlayer.QUEST_SHADES_OF_MORTTON),
- SHADOW_OF_THE_STORM(422, "Shadow of the Storm", Varbits.QUEST_SHADOW_OF_THE_STORM),
- SHEEP_HERDER(423, "Sheep Herder", VarPlayer.QUEST_SHEEP_HERDER),
- SHILO_VILLAGE(424, "Shilo Village", VarPlayer.QUEST_SHILO_VILLAGE),
- THE_SLUG_MENACE(425, "The Slug Menace", Varbits.QUEST_THE_SLUG_MENACE),
- A_SOULS_BANE(426, "A Soul's Bane", Varbits.QUEST_A_SOULS_BANE),
- SPIRITS_OF_THE_ELID(427, "Spirits of the Elid", Varbits.QUEST_SPIRITS_OF_THE_ELID),
- SWAN_SONG(428, "Swan Song", Varbits.QUEST_SWAN_SONG),
- TAI_BWO_WANNAI_TRIO(429, "Tai Bwo Wannai Trio", VarPlayer.QUEST_TAI_BWO_WANNAI_TRIO),
- A_TAIL_OF_TWO_CATS(430, "A Tail of Two Cats", Varbits.QUEST_A_TAIL_OF_TWO_CATS),
- TALE_OF_THE_RIGHTEOUS(431, "Tale of the Righteous", Varbits.QUEST_TALE_OF_THE_RIGHTEOUS),
- A_TASTE_OF_HOPE(432, "A Taste of Hope", Varbits.QUEST_A_TASTE_OF_HOPE),
- TEARS_OF_GUTHIX(433, "Tears of Guthix", Varbits.QUEST_TEARS_OF_GUTHIX),
- TEMPLE_OF_IKOV(434, "Temple of Ikov", VarPlayer.QUEST_TEMPLE_OF_IKOV),
- THRONE_OF_MISCELLANIA(435, "Throne of Miscellania", VarPlayer.QUEST_THRONE_OF_MISCELLANIA),
- THE_TOURIST_TRAP(436, "The Tourist Trap", VarPlayer.QUEST_THE_TOURIST_TRAP),
- TOWER_OF_LIFE(437, "Tower of Life", Varbits.QUEST_TOWER_OF_LIFE),
- TREE_GNOME_VILLAGE(438, "Tree Gnome Village", VarPlayer.QUEST_TREE_GNOME_VILLAGE),
- TRIBAL_TOTEM(439, "Tribal Totem", VarPlayer.QUEST_TRIBAL_TOTEM),
- TROLL_ROMANCE(440, "Troll Romance", VarPlayer.QUEST_TROLL_ROMANCE),
- TROLL_STRONGHOLD(441, "Troll Stronghold", VarPlayer.QUEST_TROLL_STRONGHOLD),
- UNDERGROUND_PASS(442, "Underground Pass", VarPlayer.QUEST_UNDERGROUND_PASS),
- CLIENT_OF_KOUREND(443, "Client of Kourend", Varbits.QUEST_CLIENT_OF_KOUREND),
- WANTED(444, "Wanted!", Varbits.QUEST_WANTED),
- WATCHTOWER(445, "Watchtower", VarPlayer.QUEST_WATCHTOWER),
- WATERFALL_QUEST(446, "Waterfall Quest", VarPlayer.QUEST_WATERFALL_QUEST),
- WHAT_LIES_BELOW(447, "What Lies Below", Varbits.QUEST_WHAT_LIES_BELOW),
- WITCHS_HOUSE(448, "Witch's House", VarPlayer.QUEST_WITCHS_HOUSE),
- ZOGRE_FLESH_EATERS(449, "Zogre Flesh Eaters", Varbits.QUEST_ZOGRE_FLESH_EATERS),
- THE_ASCENT_OF_ARCEUUS(542, "The Ascent of Arceuus", Varbits.QUEST_THE_ASCENT_OF_ARCEUUS),
- THE_FORSAKEN_TOWER(543, "The Forsaken Tower", Varbits.QUEST_THE_FORSAKEN_TOWER),
- SONG_OF_THE_ELVES(603, "Song of the Elves", Varbits.QUEST_SONG_OF_THE_ELVES),
+ ANIMAL_MAGNETISM(331, "Animal Magnetism"),
+ ANOTHER_SLICE_OF_HAM(332, "Another Slice of H.A.M."),
+ BETWEEN_A_ROCK(333, "Between a Rock..."),
+ BIG_CHOMPY_BIRD_HUNTING(334, "Big Chompy Bird Hunting"),
+ BIOHAZARD(335, "Biohazard"),
+ CABIN_FEVER(336, "Cabin Fever"),
+ CLOCK_TOWER(337, "Clock Tower"),
+ COLD_WAR(338, "Cold War"),
+ CONTACT(339, "Contact!"),
+ CREATURE_OF_FENKENSTRAIN(340, "Creature of Fenkenstrain"),
+ DARKNESS_OF_HALLOWVALE(341, "Darkness of Hallowvale"),
+ DEATH_PLATEAU(342, "Death Plateau"),
+ DEATH_TO_THE_DORGESHUUN(343, "Death to the Dorgeshuun"),
+ THE_DEPTHS_OF_DESPAIR(344, "The Depths of Despair"),
+ DESERT_TREASURE(345, "Desert Treasure"),
+ DEVIOUS_MINDS(346, "Devious Minds"),
+ THE_DIG_SITE(347, "The Dig Site"),
+ DRAGON_SLAYER_II(348, "Dragon Slayer II"),
+ DREAM_MENTOR(349, "Dream Mentor"),
+ DRUIDIC_RITUAL(350, "Druidic Ritual"),
+ DWARF_CANNON(351, "Dwarf Cannon"),
+ EADGARS_RUSE(352, "Eadgar's Ruse"),
+ EAGLES_PEAK(353, "Eagles' Peak"),
+ ELEMENTAL_WORKSHOP_I(354, "Elemental Workshop I"),
+ ELEMENTAL_WORKSHOP_II(355, "Elemental Workshop II"),
+ ENAKHRAS_LAMENT(356, "Enakhra's Lament"),
+ ENLIGHTENED_JOURNEY(357, "Enlightened Journey"),
+ THE_EYES_OF_GLOUPHRIE(358, "The Eyes of Glouphrie"),
+ FAIRYTALE_I__GROWING_PAINS(359, "Fairytale I - Growing Pains"),
+ FAIRYTALE_II__CURE_A_QUEEN(360, "Fairytale II - Cure a Queen"),
+ FAMILY_CREST(361, "Family Crest"),
+ THE_FEUD(362, "The Feud"),
+ FIGHT_ARENA(363, "Fight Arena"),
+ FISHING_CONTEST(364, "Fishing Contest"),
+ FORGETTABLE_TALE(365, "Forgettable Tale..."),
+ BONE_VOYAGE(366, "Bone Voyage"),
+ THE_FREMENNIK_ISLES(367, "The Fremennik Isles"),
+ THE_FREMENNIK_TRIALS(368, "The Fremennik Trials"),
+ GARDEN_OF_TRANQUILLITY(369, "Garden of Tranquillity"),
+ GERTRUDES_CAT(370, "Gertrude's Cat"),
+ GHOSTS_AHOY(371, "Ghosts Ahoy"),
+ THE_GIANT_DWARF(372, "The Giant Dwarf"),
+ THE_GOLEM(373, "The Golem"),
+ THE_GRAND_TREE(374, "The Grand Tree"),
+ THE_GREAT_BRAIN_ROBBERY(375, "The Great Brain Robbery"),
+ GRIM_TALES(376, "Grim Tales"),
+ THE_HAND_IN_THE_SAND(377, "The Hand in the Sand"),
+ HAUNTED_MINE(378, "Haunted Mine"),
+ HAZEEL_CULT(379, "Hazeel Cult"),
+ HEROES_QUEST(380, "Heroes' Quest"),
+ HOLY_GRAIL(381, "Holy Grail"),
+ HORROR_FROM_THE_DEEP(382, "Horror from the Deep"),
+ ICTHLARINS_LITTLE_HELPER(383, "Icthlarin's Little Helper"),
+ IN_AID_OF_THE_MYREQUE(384, "In Aid of the Myreque"),
+ IN_SEARCH_OF_THE_MYREQUE(385, "In Search of the Myreque"),
+ JUNGLE_POTION(386, "Jungle Potion"),
+ KINGS_RANSOM(387, "King's Ransom"),
+ LEGENDS_QUEST(388, "Legends' Quest"),
+ LOST_CITY(389, "Lost City"),
+ THE_LOST_TRIBE(390, "The Lost Tribe"),
+ LUNAR_DIPLOMACY(391, "Lunar Diplomacy"),
+ MAKING_FRIENDS_WITH_MY_ARM(392, "Making Friends with My Arm"),
+ MAKING_HISTORY(393, "Making History"),
+ MERLINS_CRYSTAL(394, "Merlin's Crystal"),
+ MONKEY_MADNESS_I(395, "Monkey Madness I"),
+ MONKEY_MADNESS_II(396, "Monkey Madness II"),
+ MONKS_FRIEND(397, "Monk's Friend"),
+ MOUNTAIN_DAUGHTER(398, "Mountain Daughter"),
+ MOURNINGS_END_PART_I(399, "Mourning's End Part I"),
+ MOURNINGS_END_PART_II(400, "Mourning's End Part II"),
+ MURDER_MYSTERY(401, "Murder Mystery"),
+ MY_ARMS_BIG_ADVENTURE(402, "My Arm's Big Adventure"),
+ NATURE_SPIRIT(403, "Nature Spirit"),
+ OBSERVATORY_QUEST(404, "Observatory Quest"),
+ OLAFS_QUEST(405, "Olaf's Quest"),
+ ONE_SMALL_FAVOUR(406, "One Small Favour"),
+ PLAGUE_CITY(407, "Plague City"),
+ PRIEST_IN_PERIL(408, "Priest in Peril"),
+ THE_QUEEN_OF_THIEVES(409, "The Queen of Thieves"),
+ RAG_AND_BONE_MAN(410, "Rag and Bone Man"),
+ RAG_AND_BONE_MAN_II(411, "Rag and Bone Man II"),
+ RATCATCHERS(412, "Ratcatchers"),
+ RECIPE_FOR_DISASTER(413, "Recipe for Disaster"),
+ RECRUITMENT_DRIVE(414, "Recruitment Drive"),
+ REGICIDE(415, "Regicide"),
+ ROVING_ELVES(416, "Roving Elves"),
+ ROYAL_TROUBLE(417, "Royal Trouble"),
+ RUM_DEAL(418, "Rum Deal"),
+ SCORPION_CATCHER(419, "Scorpion Catcher"),
+ SEA_SLUG(420, "Sea Slug"),
+ SHADES_OF_MORTTON(421, "Shades of Mort'ton"),
+ SHADOW_OF_THE_STORM(422, "Shadow of the Storm"),
+ SHEEP_HERDER(423, "Sheep Herder"),
+ SHILO_VILLAGE(424, "Shilo Village"),
+ THE_SLUG_MENACE(425, "The Slug Menace"),
+ A_SOULS_BANE(426, "A Soul's Bane"),
+ SPIRITS_OF_THE_ELID(427, "Spirits of the Elid"),
+ SWAN_SONG(428, "Swan Song"),
+ TAI_BWO_WANNAI_TRIO(429, "Tai Bwo Wannai Trio"),
+ A_TAIL_OF_TWO_CATS(430, "A Tail of Two Cats"),
+ TALE_OF_THE_RIGHTEOUS(431, "Tale of the Righteous"),
+ A_TASTE_OF_HOPE(432, "A Taste of Hope"),
+ TEARS_OF_GUTHIX(433, "Tears of Guthix"),
+ TEMPLE_OF_IKOV(434, "Temple of Ikov"),
+ THRONE_OF_MISCELLANIA(435, "Throne of Miscellania"),
+ THE_TOURIST_TRAP(436, "The Tourist Trap"),
+ TOWER_OF_LIFE(437, "Tower of Life"),
+ TREE_GNOME_VILLAGE(438, "Tree Gnome Village"),
+ TRIBAL_TOTEM(439, "Tribal Totem"),
+ TROLL_ROMANCE(440, "Troll Romance"),
+ TROLL_STRONGHOLD(441, "Troll Stronghold"),
+ UNDERGROUND_PASS(442, "Underground Pass"),
+ CLIENT_OF_KOUREND(443, "Client of Kourend"),
+ WANTED(444, "Wanted!"),
+ WATCHTOWER(445, "Watchtower"),
+ WATERFALL_QUEST(446, "Waterfall Quest"),
+ WHAT_LIES_BELOW(447, "What Lies Below"),
+ WITCHS_HOUSE(448, "Witch's House"),
+ ZOGRE_FLESH_EATERS(449, "Zogre Flesh Eaters"),
+ THE_ASCENT_OF_ARCEUUS(542, "The Ascent of Arceuus"),
+ THE_FORSAKEN_TOWER(543, "The Forsaken Tower"),
+ SONG_OF_THE_ELVES(603, "Song of the Elves"),
+ THE_FREMENNIK_EXILES(718, "The Fremennik Exiles"),
//Miniquests
- ENTER_THE_ABYSS(319, "Enter the Abyss", VarPlayer.QUEST_ENTER_THE_ABYSS),
- ARCHITECTURAL_ALLIANCE(320, "Architectural Alliance", Varbits.QUEST_ARCHITECTURAL_ALLIANCE),
- BEAR_YOUR_SOUL(321, "Bear your Soul", Varbits.QUEST_BEAR_YOUR_SOUL),
- ALFRED_GRIMHANDS_BARCRAWL(322, "Alfred Grimhand's Barcrawl", VarPlayer.QUEST_ALFRED_GRIMHANDS_BARCRAWL),
- CURSE_OF_THE_EMPTY_LORD(323, "Curse of the Empty Lord", Varbits.QUEST_CURSE_OF_THE_EMPTY_LORD),
- ENCHANTED_KEY(324, "Enchanted Key", Varbits.QUEST_ENCHANTED_KEY),
- THE_GENERALS_SHADOW(325, "The General's Shadow", Varbits.QUEST_THE_GENERALS_SHADOW),
- SKIPPY_AND_THE_MOGRES(326, "Skippy and the Mogres", Varbits.QUEST_SKIPPY_AND_THE_MOGRES),
- THE_MAGE_ARENA(327, "The Mage Arena", VarPlayer.QUEST_THE_MAGE_ARENA),
- LAIR_OF_TARN_RAZORLOR(328, "Lair of Tarn Razorlor", Varbits.QUEST_LAIR_OF_TARN_RAZORLOR),
- FAMILY_PEST(329, "Family Pest", Varbits.QUEST_FAMILY_PEST),
- THE_MAGE_ARENA_II(330, "The Mage Arena II", Varbits.QUEST_THE_MAGE_ARENA_II),
- IN_SEARCH_OF_KNOWLEDGE(602, "In Search of Knowledge", Varbits.QUEST_IN_SEARCH_OF_KNOWLEDGE);
+ ENTER_THE_ABYSS(319, "Enter the Abyss"),
+ ARCHITECTURAL_ALLIANCE(320, "Architectural Alliance"),
+ BEAR_YOUR_SOUL(321, "Bear your Soul"),
+ ALFRED_GRIMHANDS_BARCRAWL(322, "Alfred Grimhand's Barcrawl"),
+ CURSE_OF_THE_EMPTY_LORD(323, "Curse of the Empty Lord"),
+ ENCHANTED_KEY(324, "Enchanted Key"),
+ THE_GENERALS_SHADOW(325, "The General's Shadow"),
+ SKIPPY_AND_THE_MOGRES(326, "Skippy and the Mogres"),
+ THE_MAGE_ARENA(327, "The Mage Arena"),
+ LAIR_OF_TARN_RAZORLOR(328, "Lair of Tarn Razorlor"),
+ FAMILY_PEST(329, "Family Pest"),
+ THE_MAGE_ARENA_II(330, "The Mage Arena II"),
+ IN_SEARCH_OF_KNOWLEDGE(602, "In Search of Knowledge");
@Getter
private final int id;
@@ -196,26 +199,6 @@ public enum Quest
@Getter
private final String name;
- private final Varbits varbit;
-
- private final VarPlayer varPlayer;
-
- Quest(int id, String name, Varbits varbit)
- {
- this.id = id;
- this.name = name;
- this.varbit = varbit;
- this.varPlayer = null;
- }
-
- Quest(int id, String name, VarPlayer varPlayer)
- {
- this.id = id;
- this.name = name;
- this.varbit = null;
- this.varPlayer = varPlayer;
- }
-
public QuestState getState(Client client)
{
client.runScript(ScriptID.QUESTLIST_PROGRESS, id);
@@ -229,16 +212,4 @@ public enum Quest
return QuestState.IN_PROGRESS;
}
}
-
- public int getVar(Client client)
- {
- if (varbit != null)
- {
- return client.getVar(varbit);
- }
- else
- {
- return client.getVar(varPlayer);
- }
- }
-}
+}
\ No newline at end of file
diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
index 743c512847..d9219461f0 100644
--- a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
+++ b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
@@ -61,4 +61,9 @@ public interface ScriptEvent
* @see net.runelite.api.events.MenuOptionClicked
*/
String getOpbase();
+
+ /**
+ * Parent relative x coordinate for mouse related events
+ */
+ int getMouseX();
}
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 05f5abd667..2dbf70873b 100644
--- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
@@ -101,6 +101,16 @@ public final class ScriptID
@ScriptArguments(integer = 2)
public static final int MESSAGE_LAYER_CLOSE = 299;
+ /**
+ * Sets the background for sound option bars
+ *
+ * - int Value of the slider (0-4)
+ * - int (WidgetID) * 5, segments of the slider
+ *
+ */
+ @ScriptArguments(integer = 6)
+ public static final int OPTIONS_ALLSOUNDS = 358;
+
/**
* Readies the chatbox panel for things like the chatbox input
* Inverse of MESSAGE_LAYER_CLOSE
diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java
index aaed685a2c..3e938a65e9 100644
--- a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java
+++ b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java
@@ -555,7 +555,7 @@ public interface Widget
void setOnMouseOverListener(Object... args);
/**
- * Sets a script to be ran every frame when the mouse is in the widget bounds
+ * Sets a script to be ran every client tick when the mouse is in the widget bounds
*
* @param args A ScriptID, then the args for the script
*/
@@ -569,7 +569,7 @@ public interface Widget
void setOnMouseLeaveListener(Object... args);
/**
- * Sets a script to be ran every frame
+ * Sets a script to be ran every client tick
*
* @param args A ScriptID, then the args for the script
*/
@@ -857,4 +857,31 @@ public interface Widget
* Gets the image which is (or should be) drawn on this widget
*/
Sprite getSprite();
+
+ /**
+ * {@link net.runelite.api.VarPlayer}s that triggers this widgets varTransmitListener
+ */
+ void setVarTransmitTrigger(int ...trigger);
+
+ /**
+ * Sets a script to be ran the first client tick the mouse is held ontop of this widget
+ *
+ * @param args A ScriptID, then the args for the script
+ */
+ void setOnClickListener(Object ...args);
+
+ /**
+ * Sets a script to be ran the every client tick the mouse is held ontop of this widget,
+ * except the first client tick.
+ *
+ * @param args A ScriptID, then the args for the script
+ */
+ void setOnHoldListener(Object ...args);
+
+ /**
+ * Sets a script to be ran the first client tick the mouse is not held ontop of this widget
+ *
+ * @param args A ScriptID, then the args for the script
+ */
+ void setOnReleaseListener(Object ...args);
}
diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
index 4b29f7b316..bd0d51ac85 100644
--- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
+++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
@@ -46,6 +46,8 @@ public class WidgetID
public static final int GRAND_EXCHANGE_GROUP_ID = 465;
public static final int DEPOSIT_BOX_GROUP_ID = 192;
public static final int INVENTORY_GROUP_ID = 149;
+ public static final int PLAYER_TRADE_SCREEN_GROUP_ID = 335;
+ public static final int PLAYER_TRADE_INVENTORY_GROUP_ID = 336;
public static final int FRIENDS_LIST_GROUP_ID = 429;
public static final int IGNORE_LIST_GROUP_ID = 432;
public static final int RAIDING_PARTY_GROUP_ID = 500;
@@ -53,7 +55,7 @@ public class WidgetID
public static final int EQUIPMENT_INVENTORY_GROUP_ID = 85;
public static final int EMOTES_GROUP_ID = 216;
public static final int RUNE_POUCH_GROUP_ID = 190;
- public static final int DIARY_GROUP_ID = 259;
+ public static final int ACHIEVEMENT_DIARY_GROUP_ID = 259;
public static final int PEST_CONTROL_BOAT_GROUP_ID = 407;
public static final int PEST_CONTROL_GROUP_ID = 408;
public static final int PEST_CONTROL_EXCHANGE_WINDOW_GROUP_ID = 243;
@@ -127,6 +129,7 @@ public class WidgetID
public static final int PERFORMERS_FOR_THE_THEATRE_GROUPS_GROUP_ID = 364;
public static final int PERFORMERS_FOR_THE_THEATRE_PLAYERS_GROUP_ID = 50;
public static final int FISHING_TRAWLER_GROUP_ID = 366;
+ public static final int FISHING_TRAWLER_REWARD_GROUP_ID = 367;
public static final int ZEAH_MESS_HALL_GROUP_ID = 235;
public static final int KOUREND_FAVOUR_GROUP_ID = 246;
public static final int LOOTING_BAG_GROUP_ID = 81;
@@ -157,6 +160,7 @@ public class WidgetID
public static final int LMS_GROUP_ID = 333;
public static final int LMS_INGAME_GROUP_ID = 328;
public static final int JEWELLERY_BOX_GROUP_ID = 590;
+ public static final int OPTIONS_GROUP_ID = 261;
static class WorldMap
{
@@ -990,7 +994,7 @@ public class WidgetID
static final int KILLDEATH_RATIO = 33;
static final int SKULL_CONTAINER = 53;
static final int SAFE_ZONE = 55;
- static final int WILDERNESS_LEVEL = 57; // this can also be the Deadman Mode "Protection" text
+ static final int WILDERNESS_LEVEL = 58; // this can also be the Deadman Mode "Protection" text
}
static class KourendFavour
@@ -1165,4 +1169,21 @@ public class WidgetID
static final int RING_OFGP = 6;
static final int AMUL_GLOR = 7; // yes
}
+
+ static class Options
+ {
+ static final int MUSIC_SLIDER = 44;
+ static final int SOUND_EFFECT_SLIDER = 50;
+ static final int AREA_SOUND_SLIDER = 56;
+ }
+
+ static class AchievementDiary
+ {
+ static final int CONTAINER = 2;
+ }
+
+ static class Skills
+ {
+ static final int CONTAINER = 0;
+ }
}
diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java
index 1566ccd00f..2385b4b40b 100644
--- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java
+++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java
@@ -774,7 +774,15 @@ public enum WidgetInfo
JEWELLERY_BOX_COMB_BRAC(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.COMB_BRAC),
JEWELLERY_BOX_SKIL_NECK(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.SKIL_NECK),
JEWELLERY_BOX_RING_OFGP(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.RING_OFGP),
- JEWELLERY_BOX_AMUL_GLOR(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.AMUL_GLOR);
+ JEWELLERY_BOX_AMUL_GLOR(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.AMUL_GLOR),
+
+ OPTIONS_MUSIC_SLIDER(WidgetID.OPTIONS_GROUP_ID, WidgetID.Options.MUSIC_SLIDER),
+ OPTIONS_SOUND_EFFECT_SLIDER(WidgetID.OPTIONS_GROUP_ID, WidgetID.Options.SOUND_EFFECT_SLIDER),
+ OPTIONS_AREA_SOUND_SLIDER(WidgetID.OPTIONS_GROUP_ID, WidgetID.Options.AREA_SOUND_SLIDER),
+
+ ACHIEVEMENT_DIARY_CONTAINER(WidgetID.ACHIEVEMENT_DIARY_GROUP_ID, WidgetID.AchievementDiary.CONTAINER),
+
+ SKILLS_CONTAINER(WidgetID.SKILLS_GROUP_ID, WidgetID.Skills.CONTAINER);
private final int groupId;
private final int childId;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KaramjaDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KaramjaDiaryRequirement.java
index f6523bc667..fc906cccb4 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KaramjaDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KaramjaDiaryRequirement.java
@@ -120,9 +120,6 @@ public class KaramjaDiaryRequirement extends GenericDiaryRequirement
new CombatLevelRequirement(100),
new SkillRequirement(Skill.SLAYER, 50),
new QuestRequirement(Quest.SHILO_VILLAGE));
- add("Kill a metal dragon in Brimhaven Dungeon.",
- new SkillRequirement(Skill.AGILITY, 12),
- new SkillRequirement(Skill.WOODCUTTING, 34));
// ELITE
add("Craft 56 Nature runes at once.",
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 039e70770c..3d833104d7 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
@@ -168,6 +168,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati
.put(new WorldPoint(3051, 3736, 0), "East of the Wilderness Obelisk in 28 Wilderness.")
.put(new WorldPoint(2316, 3814, 0), "West of Neitiznot, near the bridge.")
.put(new WorldPoint(2872, 3937, 0), "Weiss.")
+ .put(new WorldPoint(2835, 2998, 0), "Northeast corner of the Island of Stone.")
// Master
.put(new WorldPoint(2178, 3209, 0), "South of Elf Camp.")
.put(new WorldPoint(2155, 3100, 0), "South of Port Tyras (BJS).")
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 677e969181..0a9baea1ac 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
@@ -312,7 +312,9 @@ public class ExaminePlugin extends Plugin
|| WidgetInfo.CLUE_SCROLL_REWARD_ITEM_CONTAINER.getGroupId() == widgetGroup
|| WidgetInfo.LOOTING_BAG_CONTAINER.getGroupId() == widgetGroup
|| WidgetID.SEED_VAULT_INVENTORY_GROUP_ID == widgetGroup
- || WidgetID.SEED_BOX_GROUP_ID == widgetGroup)
+ || WidgetID.SEED_BOX_GROUP_ID == widgetGroup
+ || WidgetID.PLAYER_TRADE_SCREEN_GROUP_ID == widgetGroup
+ || WidgetID.PLAYER_TRADE_INVENTORY_GROUP_ID == widgetGroup)
{
Widget[] children = widget.getDynamicChildren();
if (actionParam < children.length)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java
index 01d7454e4a..5ccee0e752 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java
@@ -24,6 +24,7 @@
*/
package net.runelite.client.plugins.fishing;
+import java.awt.Color;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
@@ -76,7 +77,40 @@ public interface FishingConfig extends Config
}
@ConfigItem(
- position = 4,
+ keyName = "overlayColor",
+ name = "Overlay Color",
+ description = "Color of overlays",
+ position = 4
+ )
+ default Color getOverlayColor()
+ {
+ return Color.CYAN;
+ }
+
+ @ConfigItem(
+ keyName = "minnowsOverlayColor",
+ name = "Minnows Overlay Color",
+ description = "Color of overlays for Minnows",
+ position = 5
+ )
+ default Color getMinnowsOverlayColor()
+ {
+ return Color.RED;
+ }
+
+ @ConfigItem(
+ keyName = "aerialOverlayColor",
+ name = "Aerial Overlay Color",
+ description = "Color of overlays when 1-tick aerial fishing",
+ position = 6
+ )
+ default Color getAerialOverlayColor()
+ {
+ return Color.GREEN;
+ }
+
+ @ConfigItem(
+ position = 7,
keyName = "statTimeout",
name = "Reset stats (minutes)",
description = "The time until fishing session data is reset in minutes."
@@ -87,7 +121,7 @@ public interface FishingConfig extends Config
}
@ConfigItem(
- position = 5,
+ position = 8,
keyName = "showFishingStats",
name = "Show Fishing session stats",
description = "Display the fishing session stats."
@@ -98,7 +132,7 @@ public interface FishingConfig extends Config
}
@ConfigItem(
- position = 6,
+ position = 9,
keyName = "showMinnowOverlay",
name = "Show Minnow Movement overlay",
description = "Display the minnow progress pie overlay."
@@ -109,7 +143,7 @@ public interface FishingConfig extends Config
}
@ConfigItem(
- position = 7,
+ position = 10,
keyName = "trawlerNotification",
name = "Trawler activity notification",
description = "Send a notification when fishing trawler activity drops below 15%."
@@ -120,7 +154,7 @@ public interface FishingConfig extends Config
}
@ConfigItem(
- position = 8,
+ position = 11,
keyName = "trawlerTimer",
name = "Trawler timer in MM:SS",
description = "Trawler Timer will display a more accurate timer in MM:SS format."
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java
index d25e5c84aa..532d03b84c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.fishing;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides;
+import java.awt.Color;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
@@ -157,6 +158,12 @@ public class FishingPlugin extends Plugin
private boolean showMinnowOverlay;
private boolean trawlerNotification;
private boolean trawlerTimer;
+ @Getter(AccessLevel.PACKAGE)
+ private Color overlayColor;
+ @Getter(AccessLevel.PACKAGE)
+ private Color minnowsOverlayColor;
+ @Getter(AccessLevel.PACKAGE)
+ private Color aerialOverlayColor;
@Override
protected void startUp() throws Exception
@@ -404,6 +411,7 @@ public class FishingPlugin extends Plugin
if (regionID != TRAWLER_SHIP_REGION_NORMAL && regionID != TRAWLER_SHIP_REGION_SINKING)
{
log.debug("Trawler session ended");
+ trawlerStartTime = null;
return;
}
@@ -477,5 +485,8 @@ public class FishingPlugin extends Plugin
this.showMinnowOverlay = config.showMinnowOverlay();
this.trawlerNotification = config.trawlerNotification();
this.trawlerTimer = config.trawlerTimer();
+ this.overlayColor = config.getOverlayColor();
+ this.minnowsOverlayColor = config.getMinnowsOverlayColor();
+ this.aerialOverlayColor = config.getAerialOverlayColor();
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotMinimapOverlay.java
index e7ffedbb02..d102e75551 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotMinimapOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotMinimapOverlay.java
@@ -76,7 +76,9 @@ class FishingSpotMinimapOverlay extends Overlay
continue;
}
- Color color = npc.getSpotAnimation() == GraphicID.FLYING_FISH ? Color.RED : Color.CYAN;
+ Color color = npc.getSpotAnimation() == GraphicID.FLYING_FISH
+ ? plugin.getMinnowsOverlayColor()
+ : plugin.getOverlayColor();
net.runelite.api.Point minimapLocation = npc.getMinimapLocation();
if (minimapLocation != null)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotOverlay.java
index 99b669811e..6aae4252fd 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotOverlay.java
@@ -107,15 +107,15 @@ class FishingSpotOverlay extends Overlay
Color color;
if (npc.getSpotAnimation() == GraphicID.FLYING_FISH)
{
- color = Color.RED;
+ color = plugin.getMinnowsOverlayColor();
}
else if (spot == FishingSpot.COMMON_TENCH && npc.getWorldLocation().distanceTo2D(client.getLocalPlayer().getWorldLocation()) <= ONE_TICK_AERIAL_FISHING)
{
- color = Color.GREEN;
+ color = plugin.getAerialOverlayColor();
}
else
{
- color = Color.CYAN;
+ color = plugin.getOverlayColor();
}
if (spot == FishingSpot.MINNOW && plugin.isShowMinnowOverlay())
@@ -161,7 +161,7 @@ class FishingSpotOverlay extends Overlay
if (spot == FishingSpot.COMMON_TENCH
&& npc.getWorldLocation().distanceTo2D(client.getLocalPlayer().getWorldLocation()) <= ONE_TICK_AERIAL_FISHING)
{
- fishImage = ImageUtil.outlineImage(itemManager.getImage(spot.getFishSpriteId()), Color.GREEN);
+ fishImage = ImageUtil.outlineImage(itemManager.getImage(spot.getFishSpriteId()), color);
}
if (fishImage != null)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java
index 16e0099c2b..1b69fc4da2 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java
@@ -46,6 +46,7 @@ import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.border.EmptyBorder;
@@ -90,6 +91,10 @@ class LootTrackerPanel extends PluginPanel
private static final String HTML_LABEL_TEMPLATE =
"%s%s";
+ private static final String SYNC_RESET_ALL_WARNING_TEXT =
+ "This will permanently delete the current loot from both the client and the RuneLite website.";
+ private static final String NO_SYNC_RESET_ALL_WARNING_TEXT =
+ "This will permanently delete the current loot from the client.";
// When there is no loot, display this
private final PluginErrorPanel errorPanel = new PluginErrorPanel();
@@ -385,6 +390,18 @@ class LootTrackerPanel extends PluginPanel
final JMenuItem reset = new JMenuItem("Reset All");
reset.addActionListener(e ->
{
+ final LootTrackerClient client = plugin.getLootTrackerClient();
+ final boolean syncLoot = client != null && config.syncPanel();
+ final int result = JOptionPane.showOptionDialog(overallPanel,
+ syncLoot ? SYNC_RESET_ALL_WARNING_TEXT : NO_SYNC_RESET_ALL_WARNING_TEXT,
+ "Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
+ null, new String[]{"Yes", "No"}, "No");
+
+ if (result != JOptionPane.YES_OPTION)
+ {
+ return;
+ }
+
// If not in detailed view, remove all, otherwise only remove for the currently detailed title
records.removeIf(r -> r.matches(currentView));
boxes.removeIf(b -> b.matches(currentView));
@@ -393,8 +410,7 @@ class LootTrackerPanel extends PluginPanel
logsContainer.repaint();
// Delete all loot, or loot matching the current view
- LootTrackerClient client = plugin.getLootTrackerClient();
- if (client != null && config.syncPanel())
+ if (syncLoot)
{
client.delete(currentView);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
index da4639a628..04e766674f 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
@@ -703,6 +703,10 @@ public class LootTrackerPlugin extends Plugin
eventType = "Kingdom of Miscellania";
container = client.getItemContainer(InventoryID.KINGDOM_OF_MISCELLANIA);
break;
+ case (WidgetID.FISHING_TRAWLER_REWARD_GROUP_ID):
+ eventType = "Fishing Trawler";
+ container = client.getItemContainer(InventoryID.FISHING_TRAWLER_REWARD);
+ break;
default:
return;
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java
index fc0afadc7e..43c0885d27 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java
@@ -28,10 +28,9 @@ package net.runelite.client.plugins.randomevents;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides;
import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
+import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Actor;
import net.runelite.api.Client;
import net.runelite.api.MenuOpcode;
@@ -39,10 +38,9 @@ import net.runelite.api.NPC;
import net.runelite.api.NpcID;
import net.runelite.api.Player;
import net.runelite.api.events.ConfigChanged;
-import net.runelite.api.events.GameTick;
import net.runelite.api.events.InteractingChanged;
import net.runelite.api.events.MenuEntryAdded;
-import net.runelite.api.events.NpcSpawned;
+import net.runelite.api.events.NpcDespawned;
import net.runelite.client.Notifier;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.EventBus;
@@ -54,6 +52,7 @@ import net.runelite.client.plugins.PluginDescriptor;
description = "Notify when random events appear and remove talk/dismiss options on events that aren't yours.",
enabledByDefault = false
)
+@Slf4j
public class RandomEventPlugin extends Plugin
{
private static final Set EVENT_NPCS = ImmutableSet.of(
@@ -86,10 +85,8 @@ public class RandomEventPlugin extends Plugin
);
private static final int RANDOM_EVENT_TIMEOUT = 150;
- private Map spawnedNpcs = new HashMap<>();
private NPC currentRandomEvent;
- // event npcs teleport to you to stay in range, we need to throttle spawns
- private int lastEventTick = -RANDOM_EVENT_TIMEOUT;
+ private int lastNotificationTick = -RANDOM_EVENT_TIMEOUT; // to avoid double notifications
@Inject
private Client client;
@@ -132,73 +129,54 @@ public class RandomEventPlugin extends Plugin
{
eventBus.unregister(this);
- lastEventTick = 0;
+ lastNotificationTick = 0;
currentRandomEvent = null;
- spawnedNpcs.clear();
}
private void addSubscriptions()
{
- eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned);
eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged);
- eventBus.subscribe(GameTick.class, this, this::onGameTick);
eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded);
eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged);
}
-
- private void onNpcSpawned(NpcSpawned event)
- {
- NPC npc = event.getNpc();
-
- if (!EVENT_NPCS.contains(npc.getId()))
- {
- return;
- }
-
- // only occasionally do event npcs spawn with non-null interacting
- if (npc.getInteracting() == client.getLocalPlayer())
- {
- if (client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT)
- {
- currentRandomEvent = npc;
- lastEventTick = client.getTickCount();
- }
- }
- else
- {
- spawnedNpcs.put(npc, client.getTickCount());
- }
- }
-
private void onInteractingChanged(InteractingChanged event)
{
Actor source = event.getSource();
Actor target = event.getTarget();
+ Player player = client.getLocalPlayer();
- if (spawnedNpcs.containsKey(source))
+ // Check that the npc is interacting with the player and the player isn't interacting with the npc, so
+ // that the notification doesn't fire from talking to other user's randoms
+ if (player == null
+ || target != player
+ || player.getInteracting() == source
+ || !(source instanceof NPC)
+ || !EVENT_NPCS.contains(((NPC) source).getId()))
{
- Player player = client.getLocalPlayer();
- if (player == target && client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT)
+ return;
+ }
+
+ log.debug("Random event spawn: {}", source.getName());
+
+ currentRandomEvent = (NPC) source;
+
+ if (client.getTickCount() - lastNotificationTick > RANDOM_EVENT_TIMEOUT)
+ {
+ lastNotificationTick = client.getTickCount();
+
+ if (shouldNotify(currentRandomEvent.getId()))
{
- currentRandomEvent = (NPC) source;
- if (shouldNotify(currentRandomEvent.getId()))
- {
- notifier.notify("Random event spawned: " + currentRandomEvent.getName());
- }
+ notifier.notify("Random event spawned: " + currentRandomEvent.getName());
}
}
}
- private void onGameTick(GameTick event)
+ private void onNpcDespawned(NpcDespawned npcDespawned)
{
- if (!spawnedNpcs.isEmpty())
- {
- // allow 2 ticks for interacting to get set
- spawnedNpcs.entrySet().removeIf(entry -> client.getTickCount() - entry.getValue() >= 2);
- }
+ NPC npc = npcDespawned.getNpc();
- if (client.getTickCount() - lastEventTick > RANDOM_EVENT_TIMEOUT)
+ if (npc == currentRandomEvent)
{
currentRandomEvent = null;
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java
index 4434aa92fd..6a73c5ed9b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java
@@ -1,4 +1,4 @@
-/*
+/**
* Copyright (c) 2018, Kruithne
* Copyright (c) 2018, Psikoi
* All rights reserved.
@@ -132,6 +132,9 @@ class SkillCalculator extends JPanel
// Clear the search bar
searchBar.setText(null);
+ // Clear the combined action slots
+ clearCombinedSlots();
+
// Add in checkboxes for available skill bonuses.
renderBonusOptions();
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java
index 9a455a5fe0..7df7b00989 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java
@@ -117,7 +117,7 @@ public class TimersPlugin extends Plugin
private static final String KILLED_TELEBLOCK_OPPONENT_TEXT = "Your Tele Block has been removed because you killed ";
private static final String PRAYER_ENHANCE_EXPIRED = "Your prayer enhance effect has worn off.";
private static final Pattern DEADMAN_HALF_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 1 minute, 15 seconds\\.");
- private static final Pattern FULL_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 5 minutes, 0 seconds\\.");
+ private static final Pattern FULL_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 5 minutes\\.");
private static final Pattern HALF_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 2 minutes, 30 seconds\\.");
private static final Pattern DIVINE_POTION_PATTERN = Pattern.compile("You drink some of your divine (.+) potion\\.");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java
index 52d0a87ba2..cceb3fb268 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java
@@ -361,7 +361,7 @@ public class WikiPlugin extends Plugin
}
if ((WidgetInfo.TO_GROUP(widgetID) == WidgetID.SKILLS_GROUP_ID && event.getOption().startsWith("View"))
- || (WidgetInfo.TO_GROUP(widgetID) == WidgetID.DIARY_GROUP_ID && event.getOption().startsWith("Open")))
+ || (WidgetInfo.TO_GROUP(widgetID) == WidgetID.ACHIEVEMENT_DIARY_GROUP_ID && event.getOption().startsWith("Open")))
{
client.insertMenuItem(
MENUOP_WIKI,
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java
index bfb3e446ae..eaadd3a5be 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java
@@ -35,13 +35,13 @@ enum FarmingPatchLocation
new WorldPoint(3793, 2836, 0),
new WorldPoint(1269, 3730, 0)
),
+ ALLOTMENT_FLOWER("Allotment/Flower", new WorldPoint(3289, 6100, 0)),
ALLOTMENT_HERB_FLOWER("Allotment/Herb/Flower",
new WorldPoint(1809, 3490, 0),
new WorldPoint(3598, 3524, 0),
new WorldPoint(3052, 3309, 0),
new WorldPoint(2810, 3462, 0),
- new WorldPoint(2663, 3375, 0),
- new WorldPoint(3289, 6100, 0)
+ new WorldPoint(2663, 3375, 0)
),
ANIMA_HERB("Anima/Herb", new WorldPoint(1235, 3724, 0)),
BELLADONNA("Belladonna", new WorldPoint(3084, 3356, 0)),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java
index 1f47124afa..5991410161 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java
@@ -96,6 +96,7 @@ enum QuestStartLocation
THE_FORSAKEN_TOWER(Quest.THE_FORSAKEN_TOWER, new WorldPoint(1484, 3747, 0)),
THE_FREMENNIK_ISLES(Quest.THE_FREMENNIK_ISLES, new WorldPoint(2645, 3711, 0)),
THE_FREMENNIK_TRIALS(Quest.THE_FREMENNIK_TRIALS, new WorldPoint(2657, 3669, 0)),
+ THE_FREMENNIK_EXILES(Quest.THE_FREMENNIK_EXILES, new WorldPoint(2658, 3669, 0)),
GARDEN_OF_TRANQUILLITY(Quest.GARDEN_OF_TRANQUILLITY, new WorldPoint(3227, 3477, 0)),
GERTRUDES_CAT_RATCATCHERS(Quest.GERTRUDES_CAT, new WorldPoint(3150, 3411, 0)),
GHOSTS_AHOY(Quest.GHOSTS_AHOY, new WorldPoint(3677, 3510, 0)),
@@ -117,7 +118,7 @@ enum QuestStartLocation
LEGENDS_QUEST(Quest.LEGENDS_QUEST, new WorldPoint(2725, 3367, 0)),
LOST_CITY(Quest.LOST_CITY, new WorldPoint(3149, 3205, 0)),
THE_LOST_TRIBE(Quest.THE_LOST_TRIBE, new WorldPoint(3211, 3224, 0)),
- LUNAR_DIPLOMACY(Quest.LUNAR_DIPLOMACY, new WorldPoint(2619, 3689, 0)),
+ LUNAR_DIPLOMACY(Quest.LUNAR_DIPLOMACY, new WorldPoint(2618, 3691, 0)),
MAKING_FRIENDS_WITH_MY_ARM(Quest.MAKING_FRIENDS_WITH_MY_ARM, new WorldPoint(2904, 10092, 0)),
MAKING_HISTORY(Quest.MAKING_HISTORY, new WorldPoint(2435, 3346, 0)),
MONKS_FRIEND(Quest.MONKS_FRIEND, new WorldPoint(2605, 3209, 0)),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java
index 1d627eb1d0..b1ea7baf2a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java
@@ -49,6 +49,7 @@ enum TransportationPointLocation
FISHINGPLAT_TO_ARDOUGNE("Ship to Ardougne", new WorldPoint(2779, 3271, 0), new WorldPoint(2722, 3304, 0)),
HARMLESS_TO_PORT_PHASMATYS("Ship to Port Phasmatys", new WorldPoint(3682, 2951, 0), new WorldPoint(3709, 3497, 0)),
ICEBERG_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2657, 3988, 0), new WorldPoint(2707, 3735, 0)),
+ ISLAND_OF_STONE_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2470, 3994, 0), new WorldPoint(2621, 3692, 0)),
ISLAND_TO_APE_ATOLL("Ship to Ape Atoll", new WorldPoint(2891, 2726, 0), new WorldPoint(2802, 2706, 0)),
JATIZSO_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2420, 3780, 0), new WorldPoint(2639, 3710, 0)),
KARAMJA_TO_PORT_SARIM("Ship to Port Sarim", new WorldPoint(2955, 3145, 0), new WorldPoint(3029, 3218, 0)),
@@ -59,7 +60,7 @@ enum TransportationPointLocation
NEITIZNOT_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2310, 3779, 0), new WorldPoint(2639, 3710, 0)),
PESTCONTROL_TO_PORTSARIM("Ship to Port Sarim", new WorldPoint(2659, 2675, 0), new WorldPoint(3039, 3201, 0)),
PIRATES_COVE_TO_LUNAR_ISLE("Ship to Lunar Isle", new WorldPoint(2223, 3796, 0), new WorldPoint(2137, 3899, 0)),
- PIRATES_COVE_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2212, 3794, 0), new WorldPoint(2656, 3680, 0)),
+ PIRATES_COVE_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2212, 3794, 0), new WorldPoint(2620, 3695, 0)),
PORT_PHASMATYS_TO_DRAGONTOOTH("Ship to Dragontooth Island", new WorldPoint(3703, 3487, 0), new WorldPoint(3791, 3561, 0)),
PORT_PHASMATYS_TO_HARMLESS("Ship to Mos Le'Harmless", new WorldPoint(3709, 3497, 0), new WorldPoint(3682, 2951, 0)),
PORT_PISCARILIUS_TO_PORTSARIM_LANDSEND("Ship to Port Sarim/Land's End", new WorldPoint(1823, 3692, 0)),
@@ -70,11 +71,12 @@ enum TransportationPointLocation
PORTSARIM_TO_PEST_CONTROL("Ship to Pest Control", new WorldPoint(3039, 3201, 0), new WorldPoint(2659, 2675, 0)),
RELLEKKA_TO_JATIZSO_NEITIZNOT("Ship to Jatizso/Neitiznot", new WorldPoint(2639, 3710, 0)),
RELLEKKA_TO_MISCELLANIA("Ship to Miscellania", new WorldPoint(2627, 3692, 0), new WorldPoint(2579, 3846, 0)),
- RELLEKKA_TO_WATERBIRTH("Ship to Waterbirth", new WorldPoint(2621, 3683, 0), new WorldPoint(2549, 3758, 0)),
+ RELLEKKA_TO_PIRATES_COVE("Ship to Pirates' Cove", new WorldPoint(2620, 3695, 0), new WorldPoint(2212, 3794, 0)),
+ RELLEKKA_TO_WATERBIRTH("Ship to Waterbirth", new WorldPoint(2618, 3685, 0), new WorldPoint(2549, 3758, 0)),
RELLEKKA_TO_WEISS_ICEBERG("Ship to Weiss/Iceberg", new WorldPoint(2707, 3735, 0)),
RELLEKKA_TO_UNGAEL("Ship to Ungael", new WorldPoint(2638, 3698, 0), new WorldPoint(2276, 4034, 0)),
RIMMINGTON_TO_CORSAIR_COVE("Ship to Corsair Cove", new WorldPoint(2909, 3227, 0 ), new WorldPoint(2577, 2839, 0)),
- WATERBIRTH_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2549, 3758, 0), new WorldPoint(2621, 3683, 0)),
+ WATERBIRTH_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2549, 3758, 0), new WorldPoint(2618, 3685, 0)),
WEISS_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2847, 3967, 0), new WorldPoint(2707, 3735, 0)),
UNGAEL_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2276, 4034, 0), new WorldPoint(2638, 3698, 0)),
diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java
index 0f996c94fa..269e113b6a 100644
--- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java
@@ -51,6 +51,7 @@ public class WidgetOverlay extends Overlay
.put(WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.PVP_BOUNTY_HUNTER_INFO, OverlayPosition.TOP_RIGHT)
+ .put(WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT)
.put(WidgetInfo.KOUREND_FAVOUR_OVERLAY, OverlayPosition.TOP_CENTER)
.put(WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT)
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json
index 5953579264..805b2b365c 100644
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json
+++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json
@@ -187,7 +187,7 @@
"xp": 6218.4
},
{
- "level": 57,
+ "level": 58,
"icon": 22932,
"name": "White lily",
"xp": 292
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json
index 7da4e7236c..e64e32c28d 100644
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json
+++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json
@@ -486,6 +486,24 @@
"name": "Amethyst Broad Bolts",
"xp": 10.6
},
+ {
+ "level": 78,
+ "icon": 21952,
+ "name": "Magic Stock",
+ "xp": 70
+ },
+ {
+ "level": 78,
+ "icon": 21921,
+ "name": "Dragon Crossbow (U)",
+ "xp": 135
+ },
+ {
+ "level": 78,
+ "icon": 21902,
+ "name": "Dragon Crossbow",
+ "xp": 70
+ },
{
"level": 80,
"icon": 861,
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json
index 1337d233cb..a50c2164d6 100644
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json
+++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json
@@ -318,6 +318,12 @@
"name": "Ninja Impling (Gielinor)",
"xp": 240
},
+ {
+ "level": 80,
+ "icon": 23768,
+ "name": "Crystal Impling",
+ "xp": 280
+ },
{
"level": 83,
"icon": 11256,
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json
index 7c7c3abd49..728f204861 100644
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json
+++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json
@@ -126,6 +126,12 @@
"name": "Mithril Ore",
"xp": 80
},
+ {
+ "level": 70,
+ "icon": 1761,
+ "name": "Soft Clay",
+ "xp": 5
+ },
{
"level": 70,
"icon": 449,
diff --git a/runelite-client/src/main/scripts/options_allsounds.hash b/runelite-client/src/main/scripts/options_allsounds.hash
new file mode 100644
index 0000000000..84863d9bd2
--- /dev/null
+++ b/runelite-client/src/main/scripts/options_allsounds.hash
@@ -0,0 +1 @@
+950ADB6A28E029005D24F99A65EF4D2AC4486EDC680D8770F4435F0300AA1299
\ No newline at end of file
diff --git a/runelite-client/src/main/scripts/options_allsounds.rs2asm b/runelite-client/src/main/scripts/options_allsounds.rs2asm
new file mode 100644
index 0000000000..2d4e94e9ce
--- /dev/null
+++ b/runelite-client/src/main/scripts/options_allsounds.rs2asm
@@ -0,0 +1,140 @@
+.id 358
+.int_stack_count 6
+.string_stack_count 0
+.int_var_count 6
+.string_var_count 0
+; callback "optionsAllSounds"
+; Used by the MusicPlugin to hide the vanilla (blue) volume handles
+; Enable the MusicPlugin and go to the volume options panel. There should
+; only be a green handle on the slider
+ iload 0
+ sconst "optionsAllSounds"
+ runelite_callback
+ istore 0
+ iload 0
+ iconst 4
+ if_icmpeq LABEL4
+ jump LABEL20
+LABEL4:
+ iconst 687
+ iload 1
+ if_setgraphic
+ iconst 693
+ iload 2
+ if_setgraphic
+ iconst 694
+ iload 3
+ if_setgraphic
+ iconst 695
+ iload 4
+ if_setgraphic
+ iconst 696
+ iload 5
+ if_setgraphic
+ jump LABEL115
+LABEL20:
+ iload 0
+ iconst 3
+ if_icmpeq LABEL24
+ jump LABEL40
+LABEL24:
+ iconst 692
+ iload 1
+ if_setgraphic
+ iconst 688
+ iload 2
+ if_setgraphic
+ iconst 694
+ iload 3
+ if_setgraphic
+ iconst 695
+ iload 4
+ if_setgraphic
+ iconst 696
+ iload 5
+ if_setgraphic
+ jump LABEL115
+LABEL40:
+ iload 0
+ iconst 2
+ if_icmpeq LABEL44
+ jump LABEL60
+LABEL44:
+ iconst 692
+ iload 1
+ if_setgraphic
+ iconst 693
+ iload 2
+ if_setgraphic
+ iconst 689
+ iload 3
+ if_setgraphic
+ iconst 695
+ iload 4
+ if_setgraphic
+ iconst 696
+ iload 5
+ if_setgraphic
+ jump LABEL115
+LABEL60:
+ iload 0
+ iconst 1
+ if_icmpeq LABEL64
+ jump LABEL80
+LABEL64:
+ iconst 692
+ iload 1
+ if_setgraphic
+ iconst 693
+ iload 2
+ if_setgraphic
+ iconst 694
+ iload 3
+ if_setgraphic
+ iconst 690
+ iload 4
+ if_setgraphic
+ iconst 696
+ iload 5
+ if_setgraphic
+ jump LABEL115
+LABEL80:
+ iload 0
+ iconst 0
+ if_icmpeq LABEL84
+ jump LABEL100
+LABEL84:
+ iconst 692
+ iload 1
+ if_setgraphic
+ iconst 693
+ iload 2
+ if_setgraphic
+ iconst 694
+ iload 3
+ if_setgraphic
+ iconst 695
+ iload 4
+ if_setgraphic
+ iconst 691
+ iload 5
+ if_setgraphic
+ jump LABEL115
+LABEL100:
+ iconst 692
+ iload 1
+ if_setgraphic
+ iconst 693
+ iload 2
+ if_setgraphic
+ iconst 694
+ iload 3
+ if_setgraphic
+ iconst 695
+ iload 4
+ if_setgraphic
+ iconst 696
+ iload 5
+ if_setgraphic
+LABEL115:
+ return
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java
index ce8f85c9a0..f2b1dd1db6 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java
@@ -51,7 +51,7 @@ import org.mockito.junit.MockitoJUnitRunner;
public class TimersPluginTest
{
private static final String DMM_HALF_TELEBLOCK_MESSAGE = "A Tele Block spell has been cast on you by Runelite. It will expire in 1 minute, 15 seconds.";
- private static final String FULL_TELEBLOCK_MESSAGE = "A Tele Block spell has been cast on you by Runelite. It will expire in 5 minutes, 0 seconds.";
+ private static final String FULL_TELEBLOCK_MESSAGE = "A Tele Block spell has been cast on you by Runelite. It will expire in 5 minutes.";
private static final String HALF_TELEBLOCK_MESSAGE = "A Tele Block spell has been cast on you by Runelite. It will expire in 2 minutes, 30 seconds.";
@Inject