Merge remote-tracking branch 'upstream/master' into master

This commit is contained in:
ThatGamerBlue
2021-06-23 13:00:32 +01:00
66 changed files with 1586 additions and 1219 deletions
+2 -2
View File
@@ -25,9 +25,9 @@
object ProjectVersions { object ProjectVersions {
const val launcherVersion = "2.2.0" const val launcherVersion = "2.2.0"
const val rlVersion = "1.7.12" const val rlVersion = "1.7.13"
const val openosrsVersion = "4.8.2" const val openosrsVersion = "4.9.0"
const val rsversion = 197 const val rsversion = 197
const val cacheversion = 165 const val cacheversion = 165
@@ -368,7 +368,21 @@ public interface Actor extends Renderable, Locatable
int getActionFrameCycle(); int getActionFrameCycle();
/** /**
* Returns true if this NPC has died * Get the number of cycles/client ticks remaining before the overhead text is timed out
*
* @return
*/
int getOverheadCycle();
/**
* Set the number of cycles/client ticks before the overhead text is timed out
*
* @param cycles
*/
void setOverheadCycle(int cycles);
/**
* Returns true if this actor has died
* *
* @return * @return
*/ */
@@ -206,7 +206,7 @@ public final class AnimationID
public static final int LEAGUE_HOME_TELEPORT_6 = 8807; public static final int LEAGUE_HOME_TELEPORT_6 = 8807;
public static final int CONSTRUCTION = 3676; public static final int CONSTRUCTION = 3676;
public static final int CONSTRUCTION_IMCANDO = 8192; public static final int CONSTRUCTION_IMCANDO = 8912;
public static final int SAND_COLLECTION = 895; public static final int SAND_COLLECTION = 895;
public static final int PISCARILIUS_CRANE_REPAIR = 7199; public static final int PISCARILIUS_CRANE_REPAIR = 7199;
public static final int HOME_MAKE_TABLET = 4067; public static final int HOME_MAKE_TABLET = 4067;
@@ -11955,5 +11955,6 @@ public final class ItemID
public static final int LIZARDKICKER = 25826; public static final int LIZARDKICKER = 25826;
public static final int OLD_NOTE_25829 = 25829; public static final int OLD_NOTE_25829 = 25829;
public static final int SHAYZIA_MILITARY_ORDERS = 25831; public static final int SHAYZIA_MILITARY_ORDERS = 25831;
public static final int RAW_BOAR_MEAT = 25833;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -13667,5 +13667,7 @@ public final class NullItemID
public static final int NULL_25828 = 25828; public static final int NULL_25828 = 25828;
public static final int NULL_25830 = 25830; public static final int NULL_25830 = 25830;
public static final int NULL_25832 = 25832; public static final int NULL_25832 = 25832;
public static final int NULL_25834 = 25834;
public static final int NULL_25835 = 25835;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -21752,5 +21752,6 @@ public final class ObjectID
public static final int BAR_42426 = 42426; public static final int BAR_42426 = 42426;
public static final int YEW_42427 = 42427; public static final int YEW_42427 = 42427;
public static final int GRANDFATHER_CLOCK_42428 = 42428; public static final int GRANDFATHER_CLOCK_42428 = 42428;
public static final int LADDER_42487 = 42487;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -313,7 +313,7 @@ public final class SpriteID
public static final int COMBAT_STYLE_BUTTON_THIN = 295; public static final int COMBAT_STYLE_BUTTON_THIN = 295;
public static final int COMBAT_STYLE_BUTTON_THIN_SELECTED = 296; public static final int COMBAT_STYLE_BUTTON_THIN_SELECTED = 296;
public static final int DIALOG_BACKGROUND = 297; public static final int DIALOG_BACKGROUND = 297;
public static final int RS2_HITSPLAT_BLUE_NO_DAMAGE = 298; /* Unmapped: 298 */
public static final int RS2_YELLOW_CLICK_ANIMATION_1 = 299; public static final int RS2_YELLOW_CLICK_ANIMATION_1 = 299;
public static final int RS2_MINIMAP_MARKER_RED_ITEM = 300; public static final int RS2_MINIMAP_MARKER_RED_ITEM = 300;
public static final int RS2_SWORD_POINTED_LEFT = 301; public static final int RS2_SWORD_POINTED_LEFT = 301;
@@ -1209,81 +1209,27 @@ public final class SpriteID
public static final int KOUREND_FAVOUR_LOVAKENGJ_ICON = 1244; public static final int KOUREND_FAVOUR_LOVAKENGJ_ICON = 1244;
public static final int KOUREND_FAVOUR_PISCARILIUS_ICON = 1245; public static final int KOUREND_FAVOUR_PISCARILIUS_ICON = 1245;
public static final int KOUREND_FAVOUR_SHAYZIEN_ICON = 1246; public static final int KOUREND_FAVOUR_SHAYZIEN_ICON = 1246;
public static final int SPELL_REANIMATE_GOBLIN = 1247; /* Unmapped: 1247~1296 */
public static final int SPELL_REANIMATE_DEMON = 1248;
public static final int SPELL_REANIMATE_DRAGON = 1249;
public static final int SPELL_REANIMATE_ELF = 1250;
public static final int SPELL_REANIMATE_CHAOS_DRUID = 1251;
public static final int SPELL_REANIMATE_TROLL = 1252;
public static final int SPELL_REANIMATE_DAGANNOTH = 1253;
public static final int SPELL_REANIMATE_OGRE = 1254;
public static final int SPELL_REANIMATE_GIANT = 1255;
public static final int SPELL_REANIMATE_BEAR = 1256;
public static final int SPELL_REANIMATE_SCORPION = 1257;
public static final int SPELL_REANIMATE_IMP = 1258;
public static final int SPELL_REANIMATE_MINOTAUR = 1259;
public static final int SPELL_REANIMATE_UNICORN = 1260;
public static final int SPELL_REANIMATE_KALPHITE = 1261;
public static final int SPELL_REANIMATE_TZHAAR = 1262;
public static final int SPELL_REANIMATE_AVIANSIE = 1263;
public static final int SPELL_REANIMATE_MONKEY = 1264;
public static final int SPELL_REANIMATE_ABYSSAL_CREATURE = 1265;
public static final int SPELL_REANIMATE_HORROR = 1266;
public static final int SPELL_REANIMATE_BLOODVELD = 1267;
public static final int SPELL_REANIMATE_DOG = 1268;
public static final int SPELL_LUMBRIDGE_GRAVEYARD_TELEPORT = 1269;
public static final int SPELL_DRAYNOR_MANOR_TELEPORT = 1270;
public static final int SPELL_MIND_ALTAR_TELEPORT = 1271;
public static final int SPELL_REANIMATE_GOBLIN_DISABLED = 1272;
public static final int SPELL_REANIMATE_DEMON_DISABLED = 1273;
public static final int SPELL_REANIMATE_DRAGON_DISABLED = 1274;
public static final int SPELL_REANIMATE_ELF_DISABLED = 1275;
public static final int SPELL_REANIMATE_CHAOS_DRUID_DISABLED = 1276;
public static final int SPELL_REANIMATE_TROLL_DISABLED = 1277;
public static final int SPELL_REANIMATE_DAGANNOTH_DISABLED = 1278;
public static final int SPELL_REANIMATE_OGRE_DISABLED = 1279;
public static final int SPELL_REANIMATE_GIANT_DISABLED = 1280;
public static final int SPELL_REANIMATE_BEAR_DISABLED = 1281;
public static final int SPELL_REANIMATE_SCORPION_DISABLED = 1282;
public static final int SPELL_REANIMATE_IMP_DISABLED = 1283;
public static final int SPELL_REANIMATE_MINOTAUR_DISABLED = 1284;
public static final int SPELL_REANIMATE_UNICORN_DISABLED = 1285;
public static final int SPELL_REANIMATE_KALPHITE_DISABLED = 1286;
public static final int SPELL_REANIMATE_TZHAAR_DISABLED = 1287;
public static final int SPELL_REANIMATE_AVIANSIE_DISABLED = 1288;
public static final int SPELL_REANIMATE_MONKEY_DISABLED = 1289;
public static final int SPELL_REANIMATE_ABYSSAL_CREATURE_DISABLED = 1290;
public static final int SPELL_REANIMATE_HORROR_DISABLED = 1291;
public static final int SPELL_REANIMATE_BLOODVELD_DISABLED = 1292;
public static final int SPELL_REANIMATE_DOG_DISABLED = 1293;
public static final int SPELL_LUMBRIDGE_GRAVEYARD_TELEPORT_DISABLED = 1294;
public static final int SPELL_DRAYNOR_MANOR_TELEPORT_DISABLED = 1295;
public static final int SPELL_MIND_ALTAR_TELEPORT_DISABLED = 1296;
public static final int QUESTS_PAGE_ICON_PURPLE_KOUREND = 1297; public static final int QUESTS_PAGE_ICON_PURPLE_KOUREND = 1297;
public static final int UNUSED_TAB_QUESTS_GREEN_ACHIEVEMENT_DIARIES = 1298; public static final int UNUSED_TAB_QUESTS_GREEN_ACHIEVEMENT_DIARIES = 1298;
public static final int TAB_QUESTS_GREEN_ACHIEVEMENT_DIARIES = 1299; public static final int TAB_QUESTS_GREEN_ACHIEVEMENT_DIARIES = 1299;
public static final int SPELL_RESPAWN_TELEPORT = 1300; /* Unmapped: 1300~1305 */
public static final int SPELL_SALVE_GRAVEYARD_TELEPORT = 1301; public static final int SPELL_WARD_OF_ARCEUUS = 1306;
public static final int SPELL_FENKENSTRAINS_CASTLE_TELEPORT = 1302; /* Unmapped: 1307~1309 */
public static final int SPELL_WEST_ARDOUGNE_TELEPORT = 1303; public static final int SPELL_DEATH_CHARGE = 1310;
public static final int SPELL_HARMONY_ISLAND_TELEPORT = 1304; /* Unmapped: 1311~1314 */
public static final int SPELL_CEMETARY_TELEPORT = 1305; public static final int SPELL_SHADOW_VEIL = 1315;
public static final int SPELL_BARROWS_TELEPORT = 1306; /* Unmapped: 1316~1324 */
public static final int SPELL_APE_ATOLL_TELEPORT = 1307; public static final int SPELL_WARD_OF_ARCEUUS_DISABLED = 1325;
public static final int SPELL_REANIMATE_CROPS = 1308; /* Unmapped: 1326 */
/* Unmapped: 1309~1318 */ public static final int SPELL_GREATER_CORRUPTION_DISABLED = 1327;
public static final int SPELL_RESPAWN_TELEPORT_DISABLED = 1319; /* Unmapped: 1328 */
public static final int SPELL_SALVE_GRAVEYARD_TELEPORT_DISABLED = 1320; public static final int SPELL_DEATH_CHARGE_DISABLED = 1329;
public static final int SPELL_FENKENSTRAINS_CASTLE_TELEPORT_DISABLED = 1321; /* Unmapped: 1330~1333 */
public static final int SPELL_WEST_ARDOUGNE_TELEPORT_DISABLED = 1322; public static final int SPELL_SHADOW_VEIL_DISABLED = 1334;
public static final int SPELL_HARMONY_ISLAND_TELEPORT_DISABLED = 1323; /* Unmapped: 1335~1337 */
public static final int SPELL_CEMETARY_TELEPORT_DISABLED = 1324;
public static final int SPELL_BARROWS_TELEPORT_DISABLED = 1325;
public static final int SPELL_APE_ATOLL_TELEPORT_DISABLED = 1326;
public static final int SPELL_REANIMATE_CROPS_DISABLED = 1327;
/* Unmapped: 1328~1337 */
public static final int WORLD_SWITCHER_WORLD_STAR_BLUE = 1338; public static final int WORLD_SWITCHER_WORLD_STAR_BLUE = 1338;
public static final int HITSPLAT_DARK_GREEN_VENOM = 1339; /* Unmapped: 1339 */
public static final int FAIRY_RING_REMOVE_FAVOURITE = 1340; public static final int FAIRY_RING_REMOVE_FAVOURITE = 1340;
public static final int FAIRY_RING_ADD_FAVOURITE = 1341; public static final int FAIRY_RING_ADD_FAVOURITE = 1341;
public static final int BANK_PLACEHOLDERS_LOCK = 1342; public static final int BANK_PLACEHOLDERS_LOCK = 1342;
@@ -1302,12 +1248,9 @@ public final class SpriteID
public static final int EMOTE_SMOOTH_DANCE_LOCKED = 1355; public static final int EMOTE_SMOOTH_DANCE_LOCKED = 1355;
public static final int EMOTE_CRAZY_DANCE_LOCKED = 1356; public static final int EMOTE_CRAZY_DANCE_LOCKED = 1356;
public static final int EMOTE_PREMIER_SHIELD_LOCKED = 1357; public static final int EMOTE_PREMIER_SHIELD_LOCKED = 1357;
public static final int HITSPLAT_BLUE_NO_DAMAGE = 1358; /* Unmapped: 1358~1359 */
public static final int HITSPLAT_RED_DAMAGE = 1359;
public static final int HITSPLAT_GREEN_POISON = 1360; public static final int HITSPLAT_GREEN_POISON = 1360;
public static final int HITSPLAT_ORANGE = 1361; /* Unmapped: 1361~1363 */
public static final int HITSPLAT_ORANGE_DISEASE = 1362;
public static final int HITSPLAT_GREY = 1363;
public static final int BOUNTY_HUNTER_SKIP_TARGET = 1364; public static final int BOUNTY_HUNTER_SKIP_TARGET = 1364;
public static final int BOUNTY_HUNTER_SKIP_TARGET_HOVERED = 1365; public static final int BOUNTY_HUNTER_SKIP_TARGET_HOVERED = 1365;
public static final int HOUSE_VIEWER_ROTATE_CLOCKWISE = 1366; public static final int HOUSE_VIEWER_ROTATE_CLOCKWISE = 1366;
@@ -1361,7 +1304,7 @@ public final class SpriteID
public static final int UNKNOWN_BLUE_BAR = 1416; public static final int UNKNOWN_BLUE_BAR = 1416;
public static final int UNKNOWN_YELLOW_BAR = 1417; public static final int UNKNOWN_YELLOW_BAR = 1417;
public static final int UNKNOWN_RED_BAR = 1418; public static final int UNKNOWN_RED_BAR = 1418;
public static final int HITSPLAT_MAGENTA_ENEMY_HEALING = 1419; /* Unmapped: 1419 */
public static final int PRAYER_RIGOUR = 1420; public static final int PRAYER_RIGOUR = 1420;
public static final int PRAYER_AUGURY = 1421; public static final int PRAYER_AUGURY = 1421;
/* Unmapped: 1422, 1423 */ /* Unmapped: 1422, 1423 */
@@ -1554,6 +1497,9 @@ public final class SpriteID
public static final int MOBILE_FUNCTION_MODE_DISABLED = 1624; public static final int MOBILE_FUNCTION_MODE_DISABLED = 1624;
public static final int MOBILE_YELLOW_TOUCH_ANIMATION_1 = 1625; public static final int MOBILE_YELLOW_TOUCH_ANIMATION_1 = 1625;
public static final int MOBILE_YELLOW_TOUCH_ANIMATION_2 = 1626; public static final int MOBILE_YELLOW_TOUCH_ANIMATION_2 = 1626;
/* Unmapped: 1627~1631 */
public static final int HITSPLAT_DARK_GREEN_VENOM = 1632;
/* Unmapped: 1633~1652 */
public static final int MOBILE_FINGER_ON_INTERFACE = 1653; public static final int MOBILE_FINGER_ON_INTERFACE = 1653;
/* Unmapped: 1627~1701 */ /* Unmapped: 1627~1701 */
public static final int BUTTON_FRIENDS = 1702; public static final int BUTTON_FRIENDS = 1702;
@@ -1596,8 +1542,12 @@ public final class SpriteID
public static final int FRIENDS_CHAT_RANK_TRIPLE_CHEVRON_SERGEANT = 2831; public static final int FRIENDS_CHAT_RANK_TRIPLE_CHEVRON_SERGEANT = 2831;
public static final int FRIENDS_CHAT_RANK_DOUBLE_CHEVRON_CORPORAL = 2832; public static final int FRIENDS_CHAT_RANK_DOUBLE_CHEVRON_CORPORAL = 2832;
public static final int FRIENDS_CHAT_RANK_SINGLE_CHEVRON_RECRUIT = 2833; public static final int FRIENDS_CHAT_RANK_SINGLE_CHEVRON_RECRUIT = 2833;
/* Unmapped: 2834~2857 */
public static final int SETTINGS_SLIDER_HANDLE_BLUE = 2858; public static final int SETTINGS_SLIDER_HANDLE_BLUE = 2858;
public static final int SETTINGS_SLIDER_HANDLE_RED = 2859; public static final int SETTINGS_SLIDER_HANDLE_RED = 2859;
public static final int SETTINGS_SLIDER_HANDLE_GREEN = 2860; public static final int SETTINGS_SLIDER_HANDLE_GREEN = 2860;
/* Unmapped: 2861~2980 */
public static final int SPELL_RESURRECT_SUPERIOR_SKELETON = 2981;
/* Unmapped: 2982~2986 */
public static final int SPELL_RESURRECT_SUPERIOR_SKELETON_DISABLED = 2987;
} }
@@ -552,6 +552,7 @@ public enum Varbits
* Spell cooldowns * Spell cooldowns
*/ */
VENGEANCE_COOLDOWN(2451), VENGEANCE_COOLDOWN(2451),
CORRUPTION_COOLDOWN(12288),
/** /**
* Amount of items in each bank tab * Amount of items in each bank tab
@@ -186,10 +186,11 @@ public class WidgetID
{ {
static final int MAPVIEW = 7; static final int MAPVIEW = 7;
static final int OVERVIEW_MAP = 10; static final int OVERVIEW_MAP = 10;
static final int SEARCH = 25; static final int BOTTOM_BAR = 23;
static final int SURFACE_SELECTOR = 33; static final int SEARCH = 26;
static final int TOOLTIP = 41; static final int SURFACE_SELECTOR = 34;
static final int OPTION = 46; static final int TOOLTIP = 43;
static final int OPTION = 48;
} }
static class SlayerRewards static class SlayerRewards
@@ -197,6 +198,11 @@ public class WidgetID
static final int TOP_BAR = 12; static final int TOP_BAR = 12;
} }
static class DialogOption
{
static final int OPTIONS = 1;
}
static class DialogNPC static class DialogNPC
{ {
static final int HEAD_MODEL = 6; static final int HEAD_MODEL = 6;
@@ -204,44 +210,38 @@ public class WidgetID
static final int TEXT = 5; static final int TEXT = 5;
} }
static class DialogPlayer
{
static final int NAME = 3;
static final int TEXT = 5;
static final int HEAD_MODEL = 6;
}
static class LogoutPanel static class LogoutPanel
{ {
static final int WORLD_SWITCHER_BUTTON = 3; static final int WORLD_SWITCHER_BUTTON = 3;
static final int LOGOUT_BUTTON = 6; static final int LOGOUT_BUTTON = 6;
} }
static class PestControlBoat
{
static final int INFO = 3;
static final int NEXT_DEPARTURE = 4;
static final int PLAYERS_READY = 5;
static final int POINTS = 6;
}
static class PestControl static class PestControl
{ {
static final int INFO = 3; static final int ACTIVITY_BAR = 10;
static final int ACTIVITY_PROGRESS = 12;
static final int TIME = 6; static final int PURPLE_SHIELD = 13;
static final int BLUE_SHIELD = 14;
static final int YELLOW_SHIELD = 15;
static final int RED_SHIELD = 16;
static final int ACTIVITY_BAR = 12; static final int PURPLE_ICON = 17;
static final int ACTIVITY_PROGRESS = 14; static final int BLUE_ICON = 18;
static final int YELLOW_ICON = 19;
static final int RED_ICON = 20;
static final int PURPLE_SHIELD = 15; static final int PURPLE_HEALTH = 21;
static final int BLUE_SHIELD = 16; static final int BLUE_HEALTH = 22;
static final int YELLOW_SHIELD = 17; static final int YELLOW_HEALTH = 23;
static final int RED_SHIELD = 18; static final int RED_HEALTH = 24;
static final int PURPLE_ICON = 19;
static final int BLUE_ICON = 20;
static final int YELLOW_ICON = 21;
static final int RED_ICON = 22;
static final int PURPLE_HEALTH = 23;
static final int BLUE_HEALTH = 24;
static final int YELLOW_HEALTH = 25;
static final int RED_HEALTH = 26;
} }
static class FriendList static class FriendList
@@ -418,16 +418,15 @@ public class WidgetID
{ {
static final int XP_ORB = 1; static final int XP_ORB = 1;
static final int HEALTH_ORB = 2; static final int HEALTH_ORB = 2;
static final int PRAYER_ORB = 12; static final int PRAYER_ORB = 13;
static final int QUICK_PRAYER_ORB = 14; // Has the "Quick-prayers" name static final int QUICK_PRAYER_ORB = 15; // Has the "Quick-prayers" name
static final int PRAYER_ORB_TEXT = 15; static final int PRAYER_ORB_TEXT = 16;
static final int RUN_ORB = 20; static final int RUN_ORB = 21;
static final int TOGGLE_RUN_ORB = 22; // Has the "Toggle run" name static final int TOGGLE_RUN_ORB = 23; // Has the "Toggle run" name
static final int RUN_ORB_TEXT = 23; static final int RUN_ORB_TEXT = 24;
static final int SPEC_ORB = 28; static final int SPEC_ORB = 29;
static final int SPEC_CLICKBOX = 30; static final int WORLDMAP_ORB = 43;
static final int WORLDMAP_ORB = 41; static final int WIKI_BANNER = 45;
static final int WIKI_BANNER = 43;
} }
static class LoginClickToPlayScreen static class LoginClickToPlayScreen
@@ -435,59 +434,12 @@ public class WidgetID
static final int MESSAGE_OF_THE_DAY = 7; static final int MESSAGE_OF_THE_DAY = 7;
} }
static class Viewport static class FixedViewport
{
static final int MINIMAP_RESIZABLE_WIDGET = 20;
static final int MINIMAP_RESIZABLE_DRAW_AREA = 28;
static final int MINIMAP_RESIZABLE_ORB_HOLDER = 31;
static final int MINIMAP_RESIZABLE_LOGOUT_BUTTON = 33;
static final int FIXED_VIEWPORT = 17;
static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX = 14;
static final int RESIZABLE_VIEWPORT_BOTTOM_LINE = 14;
}
public static class FixedViewport
{ {
static final int MINIMAP = 3; static final int MINIMAP = 3;
static final int MINIMAP_DRAW_AREA = 8; static final int MINIMAP_DRAW_AREA = 8;
public static final int MULTICOMBAT_INDICATOR = 21; static final int FIXED_VIEWPORT = 20;
static final int FRIENDS_CHAT_TAB = 34; static final int MULTICOMBAT_INDICATOR = 24;
static final int FRIENDS_TAB = 36;
static final int IGNORES_TAB = 35;
static final int LOGOUT_TAB = 37;
static final int OPTIONS_TAB = 38;
static final int EMOTES_TAB = 39;
static final int MUSIC_TAB = 40;
static final int FRIENDS_CHAT_ICON = 41;
static final int FRIENDS_ICON = 43;
static final int IGNORES_ICON = 42;
static final int LOGOUT_ICON = 44;
static final int OPTIONS_ICON = 45;
static final int EMOTES_ICON = 46;
static final int MUSIC_ICON = 47;
static final int COMBAT_TAB = 51;
static final int STATS_TAB = 52;
static final int QUESTS_TAB = 53;
static final int INVENTORY_TAB = 54;
static final int EQUIPMENT_TAB = 55;
static final int PRAYER_TAB = 56;
static final int MAGIC_TAB = 57;
static final int COMBAT_ICON = 58;
static final int STATS_ICON = 59;
static final int QUESTS_ICON = 60;
static final int INVENTORY_ICON = 61;
static final int EQUIPMENT_ICON = 62;
static final int PRAYER_ICON = 63;
static final int MAGIC_ICON = 64;
static final int ROOT_INTERFACE_CONTAINER = 65;
static final int BANK_CONTAINER = 67;
static final int INTERFACE_CONTAINER = 68;
static final int INVENTORY_CONTAINER = 72;
}
static class ResizableViewport
{
static final int MULTICOMBAT_INDICATOR = 18;
static final int FRIENDS_CHAT_TAB = 39; static final int FRIENDS_CHAT_TAB = 39;
static final int FRIENDS_TAB = 41; static final int FRIENDS_TAB = 41;
static final int IGNORES_TAB = 40; static final int IGNORES_TAB = 40;
@@ -502,56 +454,89 @@ public class WidgetID
static final int OPTIONS_ICON = 50; static final int OPTIONS_ICON = 50;
static final int EMOTES_ICON = 51; static final int EMOTES_ICON = 51;
static final int MUSIC_ICON = 52; static final int MUSIC_ICON = 52;
static final int COMBAT_TAB = 55; static final int COMBAT_TAB = 56;
static final int STATS_TAB = 56; static final int STATS_TAB = 57;
static final int QUESTS_TAB = 57; static final int QUESTS_TAB = 58;
static final int INVENTORY_TAB = 58; static final int INVENTORY_TAB = 59;
static final int EQUIPMENT_TAB = 59; static final int EQUIPMENT_TAB = 60;
static final int PRAYER_TAB = 60; static final int PRAYER_TAB = 61;
static final int MAGIC_TAB = 61; static final int MAGIC_TAB = 62;
static final int COMBAT_ICON = 62; static final int COMBAT_ICON = 63;
static final int STATS_ICON = 63; static final int STATS_ICON = 64;
static final int QUESTS_ICON = 64; static final int QUESTS_ICON = 65;
static final int INVENTORY_ICON = 65; static final int INVENTORY_ICON = 66;
static final int EQUIPMENT_ICON = 66; static final int EQUIPMENT_ICON = 67;
static final int PRAYER_ICON = 67; static final int PRAYER_ICON = 68;
static final int MAGIC_ICON = 68; static final int MAGIC_ICON = 69;
static final int INTERFACE_CONTAINER = 69; static final int ROOT_INTERFACE_CONTAINER = 70;
static final int INVENTORY_CONTAINER = 75; static final int BANK_CONTAINER = 73;
static final int INTERFACE_CONTAINER = 74;
static final int INVENTORY_CONTAINER = 78;
}
static class ResizableViewport
{
static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX = 19;
static final int MULTICOMBAT_INDICATOR = 23;
static final int MINIMAP = 25;
static final int MINIMAP_DRAW_AREA = 33;
static final int MINIMAP_ORB_HOLDER = 36;
static final int FRIENDS_CHAT_TAB = 45;
static final int IGNORES_TAB = 46;
static final int FRIENDS_TAB = 47;
static final int LOGOUT_TAB = 48;
static final int OPTIONS_TAB = 49;
static final int EMOTES_TAB = 50;
static final int MUSIC_TAB = 51;
static final int FRIENDS_CHAT_ICON = 52;
static final int FRIENDS_ICON = 54;
static final int IGNORES_ICON = 53;
static final int LOGOUT_ICON = 55;
static final int OPTIONS_ICON = 56;
static final int EMOTES_ICON = 57;
static final int MUSIC_ICON = 58;
static final int COMBAT_TAB = 61;
static final int STATS_TAB = 62;
static final int QUESTS_TAB = 63;
static final int INVENTORY_TAB = 64;
static final int EQUIPMENT_TAB = 65;
static final int PRAYER_TAB = 66;
static final int MAGIC_TAB = 67;
static final int COMBAT_ICON = 68;
static final int STATS_ICON = 69;
static final int QUESTS_ICON = 70;
static final int INVENTORY_ICON = 71;
static final int EQUIPMENT_ICON = 72;
static final int PRAYER_ICON = 73;
static final int MAGIC_ICON = 74;
static final int INTERFACE_CONTAINER = 75;
static final int INVENTORY_CONTAINER = 81;
} }
static class ResizableViewportBottomLine static class ResizableViewportBottomLine
{ {
static final int LOGOUT_BUTTON_OVERLAY = 32; static final int RESIZABLE_VIEWPORT_BOTTOM_LINE = 19;
static final int CMB_TAB = 50; static final int MINIMAP = 25;
static final int CMB_ICON = 60; static final int MINIMAP_DRAW_AREA = 33;
static final int SKILLS_TAB = 51; static final int MINIMAP_ORB_HOLDER = 36;
static final int SKILLS_ICON = 61; static final int LOGOUT_BUTTON_OVERLAY = 37;
static final int QUESTS_TAB = 52; static final int MINIMAP_LOGOUT_BUTTON = 38;
static final int QUESTS_ICON = 62; static final int FC_ICON = 49;
static final int INVENTORY_TAB = 56; static final int FRIEND_ICON = 51;
static final int INVENTORY_ICON = 63; static final int SETTINGS_ICON = 52;
static final int EQUIP_TAB = 54; static final int EMOTE_ICON = 53;
static final int EQUIP_ICON = 64; static final int MUSIC_ICON = 54;
static final int PRAYER_TAB = 58; static final int INVENTORY_TAB = 61;
static final int PRAYER_ICON = 65; static final int PRAYER_TAB = 63;
static final int SPELL_TAB = 56; static final int CMB_ICON = 65;
static final int SPELL_ICON = 53; static final int SKILLS_ICON = 66;
static final int FC_TAB = 35; static final int QUESTS_ICON = 67;
static final int FC_ICON = 44; static final int INVENTORY_ICON = 68;
static final int IGNORE_TAB = 36; static final int EQUIP_ICON = 69;
static final int IGNORE_ICON = 42; static final int PRAYER_ICON = 70;
static final int FRIEND_TAB = 37; static final int MAGIC_ICON = 71;
static final int FRIEND_ICON = 46; static final int INTERFACE_CONTAINER = 74;
static final int SETTINGS_TAB = 38; static final int INVENTORY_CONTAINER = 80;
static final int SETTINGS_ICON = 47;
static final int EMOTE_TAB = 39;
static final int EMOTE_ICON = 48;
static final int MUSIC_TAB = 40;
static final int MUSIC_ICON = 49;
static final int MAGIC_ICON = 66;
static final int INTERFACE_CONTAINER = 68;
static final int INVENTORY_CONTAINER = 74;
} }
static class Chatbox static class Chatbox
@@ -671,70 +656,38 @@ public class WidgetID
static class VolcanicMine static class VolcanicMine
{ {
static final int GENERAL_INFOBOX_GROUP_ID = 4; static final int TIME_LEFT = 6;
static final int TIME_LEFT = 8; static final int POINTS = 8;
static final int POINTS = 10; static final int STABILITY = 10;
static final int STABILITY = 12; static final int PLAYER_COUNT = 12;
static final int PLAYER_COUNT = 14; static final int VENT_A_PERCENTAGE = 16;
static final int STABILITY_INFOBOX_GROUP_ID = 5; static final int VENT_B_PERCENTAGE = 17;
static final int VENTS_INFOBOX_GROUP_ID = 16; static final int VENT_C_PERCENTAGE = 18;
static final int VENT_A_PERCENTAGE = 19; static final int VENT_A_STATUS = 20;
static final int VENT_B_PERCENTAGE = 20; static final int VENT_B_STATUS = 21;
static final int VENT_C_PERCENTAGE = 21; static final int VENT_C_STATUS = 22;
static final int VENT_A_STATUS = 23;
static final int VENT_B_STATUS = 24;
static final int VENT_C_STATUS = 25;
} }
static class BarbarianAssault static class BarbarianAssault
{ {
static class ATK static class ATK
{ {
static final int ROLE_SPRITE = 12;
static final int ROLE = 13;
}
static class HLR
{
static final int TEAMMATE1 = 19;
static final int TEAMMATE2 = 23;
static final int TEAMMATE3 = 27;
static final int TEAMMATE4 = 31;
}
static class HORN_GLORY
{
static final int ATTACKER = 5;
static final int DEFENDER = 6;
static final int COLLECTOR = 7;
static final int HEALER = 8;
}
static class REWARD_VALUES
{
static final int RUNNERS_PASSED = 14;
static final int HITPOINTS_REPLENISHED = 19;
static final int WRONG_POISON_PACKS_USED = 20;
static final int EGGS_COLLECTED = 21;
static final int FAILED_ATTACKER_ATTACKS = 22;
static final int RUNNERS_PASSED_POINTS = 24;
static final int RANGERS_KILLED = 25;
static final int FIGHTERS_KILLED = 26;
static final int HEALERS_KILLED = 27;
static final int RUNNERS_KILLED = 28;
static final int HITPOINTS_REPLENISHED_POINTS = 29;
static final int WRONG_POISON_PACKS_USED_POINTS = 30;
static final int EGGS_COLLECTED_POINTS = 31;
static final int FAILED_ATTACKER_ATTACKS_POINTS = 32;
static final int BASE_POINTS = 33;
static final int HONOUR_POINTS_REWARD = 49;
}
static final int ROLE_SPRITE = 11; static final int ROLE_SPRITE = 11;
static final int ROLE = 12; static final int ROLE = 12;
static final int REWARD_TEXT = 57;
} }
static class GWD static class HLR
{ {
static final int CONTAINER = 7; static final int TEAMMATE1 = 18;
static final int TEAMMATE2 = 22;
static final int TEAMMATE3 = 26;
static final int TEAMMATE4 = 30;
}
static final int ROLE_SPRITE = 10;
static final int ROLE = 11;
static final int REWARD_TEXT = 57;
} }
static class LevelUp static class LevelUp
@@ -751,24 +704,12 @@ public class WidgetID
static class Raids static class Raids
{ {
static final int POINTS_INFOBOX = 7; static final int POINTS_INFOBOX = 3;
} }
static class Tob static class Tob
{ {
static final int PARTY_INTERFACE = 6; static final int PARTY_STATS = 7;
static final int PARTY_STATS = 10;
}
public static class ExperienceDrop
{
public static final int DROP_1 = 15;
public static final int DROP_2 = 16;
public static final int DROP_3 = 17;
public static final int DROP_4 = 18;
public static final int DROP_5 = 19;
public static final int DROP_6 = 20;
public static final int DROP_7 = 21;
} }
static class PuzzleBox static class PuzzleBox
@@ -831,9 +772,8 @@ public class WidgetID
static class Barrows static class Barrows
{ {
static final int BARROWS_BROTHERS = 9; static final int BARROWS_BROTHERS = 4;
static final int BARROWS_POTENTIAL = 10; static final int BARROWS_POTENTIAL = 5;
static final int BARROWS_REWARD_INVENTORY = 3;
} }
static class Diary static class Diary
@@ -872,11 +812,6 @@ public class WidgetID
static final int LOGOUT_BUTTON = 23; static final int LOGOUT_BUTTON = 23;
} }
static class FossilOxygen
{
static final int FOSSIL_ISLAND_OXYGEN_BAR = 4;
}
static class Minigames static class Minigames
{ {
static final int TELEPORT_BUTTON = 26; static final int TELEPORT_BUTTON = 26;
@@ -905,15 +840,10 @@ public class WidgetID
static class Pvp static class Pvp
{ {
static final int FOG_OVERLAY = 1; static final int KILLDEATH_RATIO = 26;
static final int PVP_WIDGET_CONTAINER = 54; // OUTDATED? static final int SKULL_CONTAINER = 45;
static final int SKULL = 56; // OUTDATED? static final int SAFE_ZONE = 47;
static final int ATTACK_RANGE = 59; // OUTDATED? static final int WILDERNESS_LEVEL = 49; // this can also be the Deadman Mode "Protection" text
static final int BOUNTY_HUNTER_INFO = 6;
static final int KILLDEATH_RATIO = 28;
static final int SKULL_CONTAINER = 48;
static final int SAFE_ZONE = 50;
static final int WILDERNESS_LEVEL = 53; // this can also be the Deadman Mode "Protection" text
} }
static class KourendFavour static class KourendFavour
@@ -923,7 +853,7 @@ public class WidgetID
static class Zeah static class Zeah
{ {
static final int MESS_HALL_COOKING_DISPLAY = 3; static final int MESS_HALL_COOKING_DISPLAY = 2;
} }
static class LootingBag static class LootingBag
@@ -933,12 +863,7 @@ public class WidgetID
static class Skotizo static class Skotizo
{ {
static final int CONTAINER = 3; static final int CONTAINER = 2;
}
public static class FullScreenMap
{
public static final int ROOT = 27;
} }
static class QuestList static class QuestList
@@ -961,17 +886,7 @@ public class WidgetID
static class Barrows_Puzzle static class Barrows_Puzzle
{ {
static final int PARENT = 0; static final int PARENT = 0;
static final int CONTAINER = 1;
static final int TOP_ROW_PUZZLE = 2;
static final int SEQUENCE_1 = 3; static final int SEQUENCE_1 = 3;
static final int SEQUENCE_1_TEXT = 4;
static final int SEQUENCE_2 = 5;
static final int SEQUENCE_2_TEXT = 6;
static final int SEQUENCE_3 = 7;
static final int SEQUENCE_3_TEXT = 8;
static final int SEQUENCE_4 = 9;
static final int SEQUENCE_4_TEXT = 10;
static final int NEXT_SHAPE_TEXT = 11;
static final int ANSWER1_CONTAINER = 12; static final int ANSWER1_CONTAINER = 12;
static final int ANSWER1 = 13; static final int ANSWER1 = 13;
static final int ANSWER2_CONTAINER = 14; static final int ANSWER2_CONTAINER = 14;
@@ -995,10 +910,10 @@ public class WidgetID
static class SettingsSide static class SettingsSide
{ {
static final int CAMERA_ZOOM_SLIDER_TRACK = 59; static final int CAMERA_ZOOM_SLIDER_TRACK = 61;
static final int MUSIC_SLIDER = 13; static final int MUSIC_SLIDER = 14;
static final int SOUND_EFFECT_SLIDER = 17; static final int SOUND_EFFECT_SLIDER = 18;
static final int AREA_SOUND_SLIDER = 21; static final int AREA_SOUND_SLIDER = 22;
} }
static class Settings static class Settings
@@ -1018,12 +933,12 @@ public class WidgetID
static class Lms static class Lms
{ {
static final int INFO = 3; static final int INFO = 2;
} }
static class LmsKDA static class LmsKDA
{ {
static final int INFO = 6; static final int INFO = 7;
} }
static class AdventureLog static class AdventureLog
@@ -1070,11 +985,6 @@ public class WidgetID
static final int BUTTON_10 = 34; static final int BUTTON_10 = 34;
} }
static class EncounterHealthBar
{
static final int CONTAINER = 6;
}
static class TrailblazerAreas static class TrailblazerAreas
{ {
static final int TELEPORT = 59; static final int TELEPORT = 59;
@@ -1085,30 +995,12 @@ public class WidgetID
static final int STATUS_INDICATOR = 4; static final int STATUS_INDICATOR = 4;
} }
static class DialogPlayer
{
static final int HEAD_MODEL = 1;
static final int NAME = 2;
static final int CONTINUE = 3;
static final int TEXT = 4;
}
static class DialogNotification static class DialogNotification
{ {
static final int TEXT = 0; static final int TEXT = 0;
static final int CONTINUE = 1; static final int CONTINUE = 1;
} }
static class DialogOption
{
static final int TEXT = 0;
static final int OPTION1 = 1;
static final int OPTION2 = 2;
static final int OPTION3 = 3;
static final int OPTION4 = 4;
static final int OPTION5 = 5;
}
static class PestControlExchangeWindow static class PestControlExchangeWindow
{ {
static final int ITEM_LIST = 2; static final int ITEM_LIST = 2;
@@ -51,6 +51,7 @@ public enum WidgetInfo
WORLD_MAP_VIEW(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.MAPVIEW), WORLD_MAP_VIEW(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.MAPVIEW),
WORLD_MAP_OVERVIEW_MAP(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.OVERVIEW_MAP), WORLD_MAP_OVERVIEW_MAP(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.OVERVIEW_MAP),
WORLD_MAP_BOTTOM_BAR(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.BOTTOM_BAR),
WORLD_MAP_SEARCH(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.SEARCH), WORLD_MAP_SEARCH(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.SEARCH),
WORLD_MAP_SURFACE_SELECTOR(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.SURFACE_SELECTOR), WORLD_MAP_SURFACE_SELECTOR(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.SURFACE_SELECTOR),
WORLD_MAP_TOOLTIP(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.TOOLTIP), WORLD_MAP_TOOLTIP(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.TOOLTIP),
@@ -73,8 +74,6 @@ public enum WidgetInfo
DIARY_QUEST_WIDGET_TITLE(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TITLE), DIARY_QUEST_WIDGET_TITLE(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TITLE),
DIARY_QUEST_WIDGET_TEXT(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TEXT), DIARY_QUEST_WIDGET_TEXT(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TEXT),
PEST_CONTROL_BOAT_INFO(WidgetID.PEST_CONTROL_BOAT_GROUP_ID, WidgetID.PestControlBoat.INFO),
PEST_CONTROL_INFO(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.INFO),
PEST_CONTROL_PURPLE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.PURPLE_SHIELD), PEST_CONTROL_PURPLE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.PURPLE_SHIELD),
PEST_CONTROL_BLUE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.BLUE_SHIELD), PEST_CONTROL_BLUE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.BLUE_SHIELD),
PEST_CONTROL_YELLOW_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.YELLOW_SHIELD), PEST_CONTROL_YELLOW_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.YELLOW_SHIELD),
@@ -90,13 +89,10 @@ public enum WidgetInfo
PEST_CONTROL_ACTIVITY_BAR(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.ACTIVITY_BAR), PEST_CONTROL_ACTIVITY_BAR(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.ACTIVITY_BAR),
PEST_CONTROL_ACTIVITY_PROGRESS(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.ACTIVITY_PROGRESS), PEST_CONTROL_ACTIVITY_PROGRESS(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.ACTIVITY_PROGRESS),
VOLCANIC_MINE_GENERAL_INFOBOX_GROUP(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.GENERAL_INFOBOX_GROUP_ID),
VOLCANIC_MINE_TIME_LEFT(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.TIME_LEFT), VOLCANIC_MINE_TIME_LEFT(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.TIME_LEFT),
VOLCANIC_MINE_POINTS(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.POINTS), VOLCANIC_MINE_POINTS(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.POINTS),
VOLCANIC_MINE_STABILITY(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.STABILITY), VOLCANIC_MINE_STABILITY(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.STABILITY),
VOLCANIC_MINE_PLAYER_COUNT(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.PLAYER_COUNT), VOLCANIC_MINE_PLAYER_COUNT(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.PLAYER_COUNT),
VOLCANIC_MINE_VENTS_INFOBOX_GROUP(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.VENTS_INFOBOX_GROUP_ID),
VOLCANIC_MINE_STABILITY_INFOBOX_GROUP(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.STABILITY_INFOBOX_GROUP_ID),
VOLCANIC_MINE_VENT_A_PERCENTAGE(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.VENT_A_PERCENTAGE), VOLCANIC_MINE_VENT_A_PERCENTAGE(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.VENT_A_PERCENTAGE),
VOLCANIC_MINE_VENT_B_PERCENTAGE(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.VENT_B_PERCENTAGE), VOLCANIC_MINE_VENT_B_PERCENTAGE(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.VENT_B_PERCENTAGE),
VOLCANIC_MINE_VENT_C_PERCENTAGE(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.VENT_C_PERCENTAGE), VOLCANIC_MINE_VENT_C_PERCENTAGE(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.VENT_C_PERCENTAGE),
@@ -189,7 +185,7 @@ public enum WidgetInfo
LOGIN_CLICK_TO_PLAY_SCREEN(WidgetID.LOGIN_CLICK_TO_PLAY_GROUP_ID, 0), LOGIN_CLICK_TO_PLAY_SCREEN(WidgetID.LOGIN_CLICK_TO_PLAY_GROUP_ID, 0),
LOGIN_CLICK_TO_PLAY_SCREEN_MESSAGE_OF_THE_DAY(WidgetID.LOGIN_CLICK_TO_PLAY_GROUP_ID, WidgetID.LoginClickToPlayScreen.MESSAGE_OF_THE_DAY), LOGIN_CLICK_TO_PLAY_SCREEN_MESSAGE_OF_THE_DAY(WidgetID.LOGIN_CLICK_TO_PLAY_GROUP_ID, WidgetID.LoginClickToPlayScreen.MESSAGE_OF_THE_DAY),
FIXED_VIEWPORT(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.Viewport.FIXED_VIEWPORT), FIXED_VIEWPORT(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.FIXED_VIEWPORT),
FIXED_VIEWPORT_ROOT_INTERFACE_CONTAINER(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.ROOT_INTERFACE_CONTAINER), FIXED_VIEWPORT_ROOT_INTERFACE_CONTAINER(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.ROOT_INTERFACE_CONTAINER),
FIXED_VIEWPORT_BANK_CONTAINER(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.BANK_CONTAINER), FIXED_VIEWPORT_BANK_CONTAINER(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.BANK_CONTAINER),
FIXED_VIEWPORT_INTERFACE_CONTAINER(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.INTERFACE_CONTAINER), FIXED_VIEWPORT_INTERFACE_CONTAINER(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.INTERFACE_CONTAINER),
@@ -225,16 +221,10 @@ public enum WidgetInfo
FIXED_VIEWPORT_MINIMAP(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MINIMAP), FIXED_VIEWPORT_MINIMAP(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MINIMAP),
FIXED_VIEWPORT_MINIMAP_DRAW_AREA(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MINIMAP_DRAW_AREA), FIXED_VIEWPORT_MINIMAP_DRAW_AREA(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MINIMAP_DRAW_AREA),
RESIZABLE_MINIMAP_WIDGET(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_WIDGET), RESIZABLE_MINIMAP_STONES_WIDGET(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MINIMAP),
RESIZABLE_MINIMAP_DRAW_AREA(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_DRAW_AREA), RESIZABLE_MINIMAP_STONES_DRAW_AREA(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MINIMAP_DRAW_AREA),
RESIZABLE_MINIMAP_ORB_HOLDER(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_ORB_HOLDER), RESIZABLE_MINIMAP_STONES_ORB_HOLDER(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MINIMAP_ORB_HOLDER),
RESIZABLE_MINIMAP_LOGOUT_BUTTON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_LOGOUT_BUTTON), RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX),
RESIZABLE_MINIMAP_STONES_WIDGET(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_WIDGET),
RESIZABLE_MINIMAP_STONES_DRAW_AREA(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_DRAW_AREA),
RESIZABLE_MINIMAP_STONES_ORB_HOLDER(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_ORB_HOLDER),
RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX),
RESIZABLE_VIEWPORT_COMBAT_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.COMBAT_TAB), RESIZABLE_VIEWPORT_COMBAT_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.COMBAT_TAB),
RESIZABLE_VIEWPORT_STATS_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.STATS_TAB), RESIZABLE_VIEWPORT_STATS_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.STATS_TAB),
RESIZABLE_VIEWPORT_QUESTS_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.QUESTS_TAB), RESIZABLE_VIEWPORT_QUESTS_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.QUESTS_TAB),
@@ -266,7 +256,11 @@ public enum WidgetInfo
RESIZABLE_VIEWPORT_INTERFACE_CONTAINER(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.INTERFACE_CONTAINER), RESIZABLE_VIEWPORT_INTERFACE_CONTAINER(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.INTERFACE_CONTAINER),
RESIZABLE_VIEWPORT_INVENTORY_CONTAINER(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.INVENTORY_CONTAINER), RESIZABLE_VIEWPORT_INVENTORY_CONTAINER(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.INVENTORY_CONTAINER),
RESIZABLE_VIEWPORT_BOTTOM_LINE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_BOTTOM_LINE), RESIZABLE_MINIMAP_WIDGET(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.MINIMAP),
RESIZABLE_MINIMAP_DRAW_AREA(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.MINIMAP_DRAW_AREA),
RESIZABLE_MINIMAP_ORB_HOLDER(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.MINIMAP_ORB_HOLDER),
RESIZABLE_MINIMAP_LOGOUT_BUTTON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.MINIMAP_LOGOUT_BUTTON),
RESIZABLE_VIEWPORT_BOTTOM_LINE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.RESIZABLE_VIEWPORT_BOTTOM_LINE),
RESIZABLE_VIEWPORT_BOTTOM_LINE_LOGOUT_BUTTON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.LOGOUT_BUTTON_OVERLAY), RESIZABLE_VIEWPORT_BOTTOM_LINE_LOGOUT_BUTTON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.LOGOUT_BUTTON_OVERLAY),
RESIZABLE_VIEWPORT_BOTTOM_LINE_QUESTS_ICON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.QUESTS_ICON), RESIZABLE_VIEWPORT_BOTTOM_LINE_QUESTS_ICON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.QUESTS_ICON),
RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.INVENTORY_TAB), RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.INVENTORY_TAB),
@@ -333,6 +327,7 @@ public enum WidgetInfo
COMBAT_AUTO_RETALIATE(WidgetID.COMBAT_GROUP_ID, WidgetID.Combat.AUTO_RETALIATE), COMBAT_AUTO_RETALIATE(WidgetID.COMBAT_GROUP_ID, WidgetID.Combat.AUTO_RETALIATE),
DIALOG_OPTION(WidgetID.DIALOG_OPTION_GROUP_ID, 0), DIALOG_OPTION(WidgetID.DIALOG_OPTION_GROUP_ID, 0),
DIALOG_OPTION_OPTIONS(WidgetID.DIALOG_OPTION_GROUP_ID, WidgetID.DialogOption.OPTIONS),
DIALOG_SPRITE(WidgetID.DIALOG_SPRITE_GROUP_ID, 0), DIALOG_SPRITE(WidgetID.DIALOG_SPRITE_GROUP_ID, 0),
DIALOG_SPRITE_SPRITE(WidgetID.DIALOG_SPRITE_GROUP_ID, WidgetID.DialogSprite.SPRITE), DIALOG_SPRITE_SPRITE(WidgetID.DIALOG_SPRITE_GROUP_ID, WidgetID.DialogSprite.SPRITE),
@@ -343,6 +338,7 @@ public enum WidgetInfo
DIALOG_NPC_HEAD_MODEL(WidgetID.DIALOG_NPC_GROUP_ID, WidgetID.DialogNPC.HEAD_MODEL), DIALOG_NPC_HEAD_MODEL(WidgetID.DIALOG_NPC_GROUP_ID, WidgetID.DialogNPC.HEAD_MODEL),
DIALOG_PLAYER(WidgetID.DIALOG_PLAYER_GROUP_ID, 0), DIALOG_PLAYER(WidgetID.DIALOG_PLAYER_GROUP_ID, 0),
DIALOG_PLAYER_TEXT(WidgetID.DIALOG_PLAYER_GROUP_ID, WidgetID.DialogPlayer.TEXT),
PRIVATE_CHAT_MESSAGE(WidgetID.PRIVATE_CHAT, 0), PRIVATE_CHAT_MESSAGE(WidgetID.PRIVATE_CHAT, 0),
@@ -398,8 +394,6 @@ public enum WidgetInfo
MOTHERLODE_MINE(WidgetID.MOTHERLODE_MINE_GROUP_ID, 0), MOTHERLODE_MINE(WidgetID.MOTHERLODE_MINE_GROUP_ID, 0),
GWD_KC(WidgetID.GWD_KC_GROUP_ID, WidgetID.GWD.CONTAINER),
PUZZLE_BOX(WidgetID.PUZZLE_BOX_GROUP_ID, WidgetID.PuzzleBox.VISIBLE_BOX), PUZZLE_BOX(WidgetID.PUZZLE_BOX_GROUP_ID, WidgetID.PuzzleBox.VISIBLE_BOX),
LIGHT_BOX(WidgetID.LIGHT_BOX_GROUP_ID, WidgetID.LightBox.LIGHT_BOX), LIGHT_BOX(WidgetID.LIGHT_BOX_GROUP_ID, WidgetID.LightBox.LIGHT_BOX),
@@ -421,7 +415,6 @@ public enum WidgetInfo
RAIDS_POINTS_INFOBOX(WidgetID.RAIDS_GROUP_ID, WidgetID.Raids.POINTS_INFOBOX), RAIDS_POINTS_INFOBOX(WidgetID.RAIDS_GROUP_ID, WidgetID.Raids.POINTS_INFOBOX),
TOB_PARTY_INTERFACE(WidgetID.TOB_PARTY_GROUP_ID, WidgetID.Tob.PARTY_INTERFACE),
TOB_PARTY_STATS(WidgetID.TOB_PARTY_GROUP_ID, WidgetID.Tob.PARTY_STATS), TOB_PARTY_STATS(WidgetID.TOB_PARTY_GROUP_ID, WidgetID.Tob.PARTY_STATS),
BLAST_FURNACE_COFFER(WidgetID.BLAST_FURNACE_GROUP_ID, 2), BLAST_FURNACE_COFFER(WidgetID.BLAST_FURNACE_GROUP_ID, 2),
@@ -432,15 +425,13 @@ public enum WidgetInfo
EXPERIENCE_TRACKER_WIDGET(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.WIDGET), EXPERIENCE_TRACKER_WIDGET(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.WIDGET),
EXPERIENCE_TRACKER_BOTTOM_BAR(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.BOTTOM_BAR), EXPERIENCE_TRACKER_BOTTOM_BAR(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.BOTTOM_BAR),
FISHING_TRAWLER_CONTRIBUTION(WidgetID.FISHING_TRAWLER_GROUP_ID, 14), FISHING_TRAWLER_CONTRIBUTION(WidgetID.FISHING_TRAWLER_GROUP_ID, 13),
FISHING_TRAWLER_TIMER(WidgetID.FISHING_TRAWLER_GROUP_ID, 15), FISHING_TRAWLER_TIMER(WidgetID.FISHING_TRAWLER_GROUP_ID, 14),
TITHE_FARM(WidgetID.TITHE_FARM_GROUP_ID, 3), TITHE_FARM(WidgetID.TITHE_FARM_GROUP_ID, 2),
BARROWS_INFO(WidgetID.BARROWS_GROUP_ID, 0),
BARROWS_BROTHERS(WidgetID.BARROWS_GROUP_ID, WidgetID.Barrows.BARROWS_BROTHERS), BARROWS_BROTHERS(WidgetID.BARROWS_GROUP_ID, WidgetID.Barrows.BARROWS_BROTHERS),
BARROWS_POTENTIAL(WidgetID.BARROWS_GROUP_ID, WidgetID.Barrows.BARROWS_POTENTIAL), BARROWS_POTENTIAL(WidgetID.BARROWS_GROUP_ID, WidgetID.Barrows.BARROWS_POTENTIAL),
BARROWS_REWARD_INVENTORY(WidgetID.BARROWS_REWARD_GROUP_ID, WidgetID.Barrows.BARROWS_REWARD_INVENTORY),
BARROWS_PUZZLE_PARENT(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.PARENT), BARROWS_PUZZLE_PARENT(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.PARENT),
BARROWS_PUZZLE_ANSWER1(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER1), BARROWS_PUZZLE_ANSWER1(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER1),
BARROWS_PUZZLE_ANSWER1_CONTAINER(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER1_CONTAINER), BARROWS_PUZZLE_ANSWER1_CONTAINER(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER1_CONTAINER),
@@ -481,8 +472,6 @@ public enum WidgetInfo
WORLD_SWITCHER_LIST(WidgetID.WORLD_SWITCHER_GROUP_ID, WidgetID.WorldSwitcher.WORLD_LIST), WORLD_SWITCHER_LIST(WidgetID.WORLD_SWITCHER_GROUP_ID, WidgetID.WorldSwitcher.WORLD_LIST),
FOSSIL_ISLAND_OXYGENBAR(WidgetID.FOSSIL_ISLAND_OXYGENBAR_ID, WidgetID.FossilOxygen.FOSSIL_ISLAND_OXYGEN_BAR),
MINIGAME_TELEPORT_BUTTON(WidgetID.MINIGAME_TAB_ID, WidgetID.Minigames.TELEPORT_BUTTON), MINIGAME_TELEPORT_BUTTON(WidgetID.MINIGAME_TAB_ID, WidgetID.Minigames.TELEPORT_BUTTON),
SPELL_LUMBRIDGE_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.StandardSpellBook.LUMBRIDGE_HOME_TELEPORT), SPELL_LUMBRIDGE_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.StandardSpellBook.LUMBRIDGE_HOME_TELEPORT),
@@ -494,11 +483,7 @@ public enum WidgetInfo
PVP_SKULL_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SKULL_CONTAINER), PVP_SKULL_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SKULL_CONTAINER),
PVP_WORLD_SAFE_ZONE(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SAFE_ZONE), PVP_WORLD_SAFE_ZONE(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SAFE_ZONE),
PVP_FOG_OVERLAY(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.FOG_OVERLAY),
PVP_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.PVP_WIDGET_CONTAINER),
PVP_WILDERNESS_LEVEL(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.WILDERNESS_LEVEL), PVP_WILDERNESS_LEVEL(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.WILDERNESS_LEVEL),
PVP_BOUNTY_HUNTER_INFO(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.BOUNTY_HUNTER_INFO),
PVP_KILLDEATH_COUNTER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.KILLDEATH_RATIO), PVP_KILLDEATH_COUNTER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.KILLDEATH_RATIO),
KOUREND_FAVOUR_OVERLAY(WidgetID.KOUREND_FAVOUR_GROUP_ID, WidgetID.KourendFavour.KOUREND_FAVOUR_OVERLAY), KOUREND_FAVOUR_OVERLAY(WidgetID.KOUREND_FAVOUR_GROUP_ID, WidgetID.KourendFavour.KOUREND_FAVOUR_OVERLAY),
@@ -534,8 +519,6 @@ public enum WidgetInfo
GAUNTLET_TIMER_CONTAINER(WidgetID.GAUNTLET_TIMER_GROUP_ID, WidgetID.GauntletTimer.CONTAINER), GAUNTLET_TIMER_CONTAINER(WidgetID.GAUNTLET_TIMER_GROUP_ID, WidgetID.GauntletTimer.CONTAINER),
HALLOWED_SEPULCHRE_TIMER_CONTAINER(WidgetID.HALLOWED_SEPULCHRE_TIMER_GROUP_ID, WidgetID.HallowedSepulchreTimer.CONTAINER), HALLOWED_SEPULCHRE_TIMER_CONTAINER(WidgetID.HALLOWED_SEPULCHRE_TIMER_GROUP_ID, WidgetID.HallowedSepulchreTimer.CONTAINER),
HEALTH_OVERLAY_BAR(WidgetID.HEALTH_OVERLAY_BAR_GROUP_ID, WidgetID.EncounterHealthBar.CONTAINER),
TRAILBLAZER_AREA_TELEPORT(WidgetID.TRAILBLAZER_AREAS_GROUP_ID, WidgetID.TrailblazerAreas.TELEPORT), TRAILBLAZER_AREA_TELEPORT(WidgetID.TRAILBLAZER_AREAS_GROUP_ID, WidgetID.TrailblazerAreas.TELEPORT),
MULTICOMBAT_FIXED(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MULTICOMBAT_INDICATOR), MULTICOMBAT_FIXED(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MULTICOMBAT_INDICATOR),
@@ -568,9 +551,6 @@ public enum WidgetInfo
PEST_CONTROL_EXCHANGE_WINDOW(WidgetID.PEST_CONTROL_EXCHANGE_WINDOW_GROUP_ID, 0), PEST_CONTROL_EXCHANGE_WINDOW(WidgetID.PEST_CONTROL_EXCHANGE_WINDOW_GROUP_ID, 0),
PEST_CONTROL_EXCHANGE_WINDOW_POINTS(WidgetID.PEST_CONTROL_EXCHANGE_WINDOW_GROUP_ID, WidgetID.PestControlExchangeWindow.POINTS), PEST_CONTROL_EXCHANGE_WINDOW_POINTS(WidgetID.PEST_CONTROL_EXCHANGE_WINDOW_GROUP_ID, WidgetID.PestControlExchangeWindow.POINTS),
PEST_CONTROL_BOAT_INFO_POINTS(WidgetID.PEST_CONTROL_BOAT_GROUP_ID, WidgetID.PestControlBoat.POINTS),
PEST_CONTROL_INFO_TIME(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.TIME),
BANK_UNNOTED_BUTTON(WidgetID.BANK_GROUP_ID, WidgetID.Bank.UNNOTED_BUTTON), BANK_UNNOTED_BUTTON(WidgetID.BANK_GROUP_ID, WidgetID.Bank.UNNOTED_BUTTON),
BANK_NOTED_BUTTON(WidgetID.BANK_GROUP_ID, WidgetID.Bank.NOTED_BUTTON), BANK_NOTED_BUTTON(WidgetID.BANK_GROUP_ID, WidgetID.Bank.NOTED_BUTTON),
@@ -615,12 +595,8 @@ public enum WidgetInfo
SMITHING_ANVIL_EXCLUSIVE1(WidgetID.SMITHING_GROUP_ID, WidgetID.Smithing.EXCLUSIVE1), SMITHING_ANVIL_EXCLUSIVE1(WidgetID.SMITHING_GROUP_ID, WidgetID.Smithing.EXCLUSIVE1),
SMITHING_ANVIL_EXCLUSIVE2(WidgetID.SMITHING_GROUP_ID, WidgetID.Smithing.EXCLUSIVE2), SMITHING_ANVIL_EXCLUSIVE2(WidgetID.SMITHING_GROUP_ID, WidgetID.Smithing.EXCLUSIVE2),
MINIMAP_SPEC_CLICKBOX(WidgetID.MINIMAP_GROUP_ID, WidgetID.Minimap.SPEC_CLICKBOX),
MINIMAP_WORLD_ORB(WidgetID.MINIMAP_GROUP_ID, WidgetID.Minimap.WORLDMAP_ORB), MINIMAP_WORLD_ORB(WidgetID.MINIMAP_GROUP_ID, WidgetID.Minimap.WORLDMAP_ORB),
RESIZABLE_VIEWPORT_BOTTOM_LINE_MAGIC_TAB(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.SPELL_TAB),
COMBAT_WEAPON(WidgetID.COMBAT_GROUP_ID, WidgetID.Combat.WEAPON_NAME), COMBAT_WEAPON(WidgetID.COMBAT_GROUP_ID, WidgetID.Combat.WEAPON_NAME),
COMBAT_SPECIAL_ATTACK(WidgetID.COMBAT_GROUP_ID, WidgetID.Combat.SPECIAL_ATTACK_BAR), COMBAT_SPECIAL_ATTACK(WidgetID.COMBAT_GROUP_ID, WidgetID.Combat.SPECIAL_ATTACK_BAR),
@@ -636,37 +612,11 @@ public enum WidgetInfo
DIALOG2_SPRITE_CONTINUE(WidgetID.DIALOG_SPRITE2_ID, WidgetID.DialogSprite2.CONTINUE), DIALOG2_SPRITE_CONTINUE(WidgetID.DIALOG_SPRITE2_ID, WidgetID.DialogSprite2.CONTINUE),
DIALOG_PLAYER_NAME(WidgetID.DIALOG_PLAYER_GROUP_ID, WidgetID.DialogPlayer.NAME), DIALOG_PLAYER_NAME(WidgetID.DIALOG_PLAYER_GROUP_ID, WidgetID.DialogPlayer.NAME),
DIALOG_PLAYER_TEXT(WidgetID.DIALOG_PLAYER_GROUP_ID, WidgetID.DialogPlayer.TEXT),
DIALOG_PLAYER_HEAD_MODEL(WidgetID.DIALOG_PLAYER_GROUP_ID, WidgetID.DialogPlayer.HEAD_MODEL), DIALOG_PLAYER_HEAD_MODEL(WidgetID.DIALOG_PLAYER_GROUP_ID, WidgetID.DialogPlayer.HEAD_MODEL),
DIALOG_PLAYER_CONTINUE(WidgetID.DIALOG_PLAYER_GROUP_ID, WidgetID.DialogPlayer.CONTINUE),
DIALOG_NOTIFICATION_TEXT(WidgetID.DIALOG_NOTIFICATION_GROUP_ID, WidgetID.DialogNotification.TEXT), DIALOG_NOTIFICATION_TEXT(WidgetID.DIALOG_NOTIFICATION_GROUP_ID, WidgetID.DialogNotification.TEXT),
DIALOG_NOTIFICATION_CONTINUE(WidgetID.DIALOG_NOTIFICATION_GROUP_ID, WidgetID.DialogNotification.CONTINUE), DIALOG_NOTIFICATION_CONTINUE(WidgetID.DIALOG_NOTIFICATION_GROUP_ID, WidgetID.DialogNotification.CONTINUE),
DIALOG_OPTION_TEXT(WidgetID.DIALOG_OPTION_GROUP_ID, WidgetID.DialogOption.TEXT),
DIALOG_OPTION_OPTION1(WidgetID.DIALOG_OPTION_GROUP_ID, WidgetID.DialogOption.OPTION1),
DIALOG_OPTION_OPTION2(WidgetID.DIALOG_OPTION_GROUP_ID, WidgetID.DialogOption.OPTION2),
DIALOG_OPTION_OPTION3(WidgetID.DIALOG_OPTION_GROUP_ID, WidgetID.DialogOption.OPTION3),
DIALOG_OPTION_OPTION4(WidgetID.DIALOG_OPTION_GROUP_ID, WidgetID.DialogOption.OPTION4),
DIALOG_OPTION_OPTION5(WidgetID.DIALOG_OPTION_GROUP_ID, WidgetID.DialogOption.OPTION5),
BA_RUNNERS_PASSED(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.RUNNERS_PASSED),
BA_HITPOINTS_REPLENISHED(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.HITPOINTS_REPLENISHED),
BA_WRONG_POISON_PACKS(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.WRONG_POISON_PACKS_USED),
BA_EGGS_COLLECTED(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.EGGS_COLLECTED),
BA_FAILED_ATTACKER_ATTACKS(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.FAILED_ATTACKER_ATTACKS),
BA_RUNNERS_PASSED_POINTS(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.RUNNERS_PASSED_POINTS),
BA_RANGERS_KILLED(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.RANGERS_KILLED),
BA_FIGHTERS_KILLED(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.FIGHTERS_KILLED),
BA_HEALERS_KILLED(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.HEALERS_KILLED),
BA_RUNNERS_KILLED(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.RUNNERS_KILLED),
BA_HITPOINTS_REPLENISHED_POINTS(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.HITPOINTS_REPLENISHED_POINTS),
BA_WRONG_POISON_PACKS_POINTS(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.WRONG_POISON_PACKS_USED_POINTS),
BA_EGGS_COLLECTED_POINTS(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.EGGS_COLLECTED_POINTS),
BA_FAILED_ATTACKER_ATTACKS_POINTS(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.FAILED_ATTACKER_ATTACKS_POINTS),
BA_HONOUR_POINTS_REWARD(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.HONOUR_POINTS_REWARD),
BA_BASE_POINTS(WidgetID.BA_REWARD_GROUP_ID, WidgetID.BarbarianAssault.REWARD_VALUES.BASE_POINTS),
LEVEL_UP_CONTINUE(WidgetID.LEVEL_UP_GROUP_ID, WidgetID.LevelUp.CONTINUE), LEVEL_UP_CONTINUE(WidgetID.LEVEL_UP_GROUP_ID, WidgetID.LevelUp.CONTINUE),
THEATRE_OF_BLOOD_PARTY(WidgetID.THEATRE_OF_BLOOD_PARTY_GROUP_ID, WidgetID.TheatreOfBloodParty.CONTAINER), THEATRE_OF_BLOOD_PARTY(WidgetID.THEATRE_OF_BLOOD_PARTY_GROUP_ID, WidgetID.TheatreOfBloodParty.CONTAINER),
@@ -687,9 +637,6 @@ public enum WidgetInfo
FOSSIL_MUSHROOM_SWAMP(WidgetID.FOSSIL_ISLAND_MUSHROOM_TELE_GROUP_ID, WidgetID.FossilMushroomTeleport.SWAMP), FOSSIL_MUSHROOM_SWAMP(WidgetID.FOSSIL_ISLAND_MUSHROOM_TELE_GROUP_ID, WidgetID.FossilMushroomTeleport.SWAMP),
FOSSIL_MUSHROOM_MEADOW(WidgetID.FOSSIL_ISLAND_MUSHROOM_TELE_GROUP_ID, WidgetID.FossilMushroomTeleport.MUSHROOM_MEADOW), FOSSIL_MUSHROOM_MEADOW(WidgetID.FOSSIL_ISLAND_MUSHROOM_TELE_GROUP_ID, WidgetID.FossilMushroomTeleport.MUSHROOM_MEADOW),
PVP_SKULL(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SKULL),
PVP_ATTACK_RANGE(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.ATTACK_RANGE),
SPELLBOOK(WidgetID.SPELLBOOK_GROUP_ID, 0), SPELLBOOK(WidgetID.SPELLBOOK_GROUP_ID, 0),
SPELLBOOK_FILTERED_BOUNDS(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FILTERED_SPELLS_BOUNDS), SPELLBOOK_FILTERED_BOUNDS(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FILTERED_SPELLS_BOUNDS),
@@ -868,8 +815,6 @@ public enum WidgetInfo
MULTICOMBAT_RESIZEABLE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewport.MULTICOMBAT_INDICATOR), MULTICOMBAT_RESIZEABLE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewport.MULTICOMBAT_INDICATOR),
FULLSCREEN_MAP_ROOT(WidgetID.FULLSCREEN_CONTAINER_TLI, WidgetID.FullScreenMap.ROOT),
MUSICTAB_INTERFACE(WidgetID.MUSICTAB_GROUP_ID, 1), MUSICTAB_INTERFACE(WidgetID.MUSICTAB_GROUP_ID, 1),
MUSICTAB_SONG_BOX(WidgetID.MUSICTAB_GROUP_ID, 2), MUSICTAB_SONG_BOX(WidgetID.MUSICTAB_GROUP_ID, 2),
MUSICTAB_ALL_SONGS(WidgetID.MUSICTAB_GROUP_ID, 3), MUSICTAB_ALL_SONGS(WidgetID.MUSICTAB_GROUP_ID, 3),
@@ -910,14 +855,6 @@ public enum WidgetInfo
BANK_PIN_9(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_9), BANK_PIN_9(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_9),
BANK_PIN_10(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_10), BANK_PIN_10(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_10),
XP_DROP_1(WidgetID.EXPERIENCE_DROP_GROUP_ID, WidgetID.ExperienceDrop.DROP_1),
XP_DROP_2(WidgetID.EXPERIENCE_DROP_GROUP_ID, WidgetID.ExperienceDrop.DROP_2),
XP_DROP_3(WidgetID.EXPERIENCE_DROP_GROUP_ID, WidgetID.ExperienceDrop.DROP_3),
XP_DROP_4(WidgetID.EXPERIENCE_DROP_GROUP_ID, WidgetID.ExperienceDrop.DROP_4),
XP_DROP_5(WidgetID.EXPERIENCE_DROP_GROUP_ID, WidgetID.ExperienceDrop.DROP_5),
XP_DROP_6(WidgetID.EXPERIENCE_DROP_GROUP_ID, WidgetID.ExperienceDrop.DROP_6),
XP_DROP_7(WidgetID.EXPERIENCE_DROP_GROUP_ID, WidgetID.ExperienceDrop.DROP_7),
JEWELLERY_BOX_DUEL_RING(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.DUEL_RING), JEWELLERY_BOX_DUEL_RING(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.DUEL_RING),
JEWELLERY_BOX_GAME_NECK(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.GAME_NECK), JEWELLERY_BOX_GAME_NECK(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.GAME_NECK),
JEWELLERY_BOX_COMB_BRAC(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.COMB_BRAC), JEWELLERY_BOX_COMB_BRAC(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.COMB_BRAC),
@@ -395,6 +395,7 @@ public class RuneLite
// Add core overlays // Add core overlays
WidgetOverlay.createOverlays(client).forEach(overlayManager::add); WidgetOverlay.createOverlays(client).forEach(overlayManager::add);
overlayManager.add(worldMapOverlay.get()); overlayManager.add(worldMapOverlay.get());
eventBus.register(worldMapOverlay.get());
overlayManager.add(tooltipOverlay.get()); overlayManager.add(tooltipOverlay.get());
playerManager.get(); playerManager.get();
@@ -165,7 +165,7 @@ public class ChatIconManager
private static int clanRankToIdx(int key) private static int clanRankToIdx(int key)
{ {
// keys are -5 to 264, with no 0 // keys are -6 to 265, with no 0
return key < 0 ? ~key : (key + 4); return key < 0 ? ~key : (key + 5);
} }
} }
@@ -109,7 +109,7 @@ public class LumbridgeDiaryRequirement extends GenericDiaryRequirement
new SkillRequirement(Skill.FARMING, 63)); new SkillRequirement(Skill.FARMING, 63));
add("Light your mining helmet in the Lumbridge castle basement.", add("Light your mining helmet in the Lumbridge castle basement.",
new SkillRequirement(Skill.FIREMAKING, 65)); new SkillRequirement(Skill.FIREMAKING, 65));
add("Recharge your prayer at Clan Wars with Smite activated.", add("Recharge your prayer at the Duel Arena with Smite activated.",
new SkillRequirement(Skill.PRAYER, 52)); new SkillRequirement(Skill.PRAYER, 52));
add("Craft, string and enchant an Amulet of Power in Lumbridge.", add("Craft, string and enchant an Amulet of Power in Lumbridge.",
new SkillRequirement(Skill.CRAFTING, 70), new SkillRequirement(Skill.CRAFTING, 70),
@@ -32,6 +32,7 @@ import net.runelite.api.coords.WorldPoint;
enum Courses enum Courses
{ {
GNOME(86.5, 46, 9781), GNOME(86.5, 46, 9781),
SHAYZIEN_BASIC(133.2, 92, 6200),
DRAYNOR(120.0, 79, 12338), DRAYNOR(120.0, 79, 12338),
AL_KHARID(180.0, 0, 13105, new WorldPoint(3299, 3194, 0)), AL_KHARID(180.0, 0, 13105, new WorldPoint(3299, 3194, 0)),
PYRAMID(722.0, 0, 13356, new WorldPoint(3364, 2830, 0)), PYRAMID(722.0, 0, 13356, new WorldPoint(3364, 2830, 0)),
@@ -40,6 +41,7 @@ enum Courses
BARBARIAN(139.5, 60, 10039), BARBARIAN(139.5, 60, 10039),
CANIFIS(240.0, 175, 13878), CANIFIS(240.0, 175, 13878),
APE_ATOLL(580.0, 300, 11050), APE_ATOLL(580.0, 300, 11050),
SHAYZIEN_ADVANCED(474.3, 382, 5944),
FALADOR(440, 180, 12084), FALADOR(440, 180, 12084),
WILDERNESS(571.0, 499, 11837), WILDERNESS(571.0, 499, 11837),
WEREWOLF(730.0, 380, 14234), WEREWOLF(730.0, 380, 14234),
@@ -98,7 +98,13 @@ class Obstacles
ROPE_BRIDGE_36233, TIGHTROPE_36234, ROPE_BRIDGE_36235, TIGHTROPE_36236, TIGHTROPE_36237, DARK_HOLE_36238, ROPE_BRIDGE_36233, TIGHTROPE_36234, ROPE_BRIDGE_36235, TIGHTROPE_36236, TIGHTROPE_36237, DARK_HOLE_36238,
// Rellekka Lighthouse // Rellekka Lighthouse
BASALT_ROCK, BASALT_ROCK_4553, BASALT_ROCK_4554, BASALT_ROCK_4556, BASALT_ROCK_4558, ROCKY_SHORE, BASALT_ROCK, BASALT_ROCK_4553, BASALT_ROCK_4554, BASALT_ROCK_4556, BASALT_ROCK_4558, ROCKY_SHORE,
BASALT_ROCK_4557, BASALT_ROCK_4555, BASALT_ROCK_4552, BEACH BASALT_ROCK_4557, BASALT_ROCK_4555, BASALT_ROCK_4552, BEACH,
// Shayzien
LADDER_42209, MONKEYBARS_42211, TIGHTROPE_42212,
// Shayzien basic
BAR_42213, TIGHTROPE_42214, TIGHTROPE_42215, GAP_42216,
// Shayzien hard
BEAM, EDGE_42218, EDGE_42219, BEAM_42220, ZIPLINE
); );
static final Set<Integer> PORTAL_OBSTACLE_IDS = ImmutableSet.of( static final Set<Integer> PORTAL_OBSTACLE_IDS = ImmutableSet.of(
@@ -31,13 +31,10 @@ import javax.inject.Inject;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import net.runelite.api.Client; import net.runelite.api.Client;
import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayLayer;
import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
class HealerOverlay extends Overlay class HealerOverlay extends Overlay
@@ -74,7 +71,6 @@ class HealerOverlay extends Overlay
this.client = client; this.client = client;
this.plugin = plugin; this.plugin = plugin;
this.config = config; this.config = config;
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "B.A. overlay"));
} }
@Override @Override
@@ -29,12 +29,9 @@ import java.awt.Graphics2D;
import java.awt.Rectangle; import java.awt.Rectangle;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.Client; import net.runelite.api.Client;
import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayLayer;
import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
class TimerOverlay extends Overlay class TimerOverlay extends Overlay
@@ -52,7 +49,6 @@ class TimerOverlay extends Overlay
this.client = client; this.client = client;
this.plugin = plugin; this.plugin = plugin;
this.config = config; this.config = config;
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "B.A. overlay"));
} }
@Override @Override
@@ -51,6 +51,7 @@ class ClueScrollWorldMapPoint extends WorldMapPoint
this.plugin = plugin; this.plugin = plugin;
this.setSnapToEdge(true); this.setSnapToEdge(true);
this.setJumpOnClick(true); this.setJumpOnClick(true);
this.setName("Clue Scroll");
this.setImage(clueScrollWorldImage); this.setImage(clueScrollWorldImage);
this.setImagePoint(clueScrollWorldImagePoint); this.setImagePoint(clueScrollWorldImagePoint);
} }
@@ -126,8 +126,8 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
new AnagramClue("O BIRDZ A ZANY EN PC", "Cap'n Izzy No-Beard", new WorldPoint(2807, 3191, 0), "Brimhaven Agility Arena", "How many Banana Trees are there in the plantation?", "33"), new AnagramClue("O BIRDZ A ZANY EN PC", "Cap'n Izzy No-Beard", new WorldPoint(2807, 3191, 0), "Brimhaven Agility Arena", "How many Banana Trees are there in the plantation?", "33"),
new AnagramClue("OK CO", "Cook", new WorldPoint(3207, 3214, 0), "Ground floor of Lumbridge Castle", "How many cannons does Lumbridge Castle have?", "9"), new AnagramClue("OK CO", "Cook", new WorldPoint(3207, 3214, 0), "Ground floor of Lumbridge Castle", "How many cannons does Lumbridge Castle have?", "9"),
new AnagramClue("OR ZINC FUMES WARD", "Wizard Frumscone", new WorldPoint(2594, 3086, 0), "Downstairs in the Wizards' Guild"), new AnagramClue("OR ZINC FUMES WARD", "Wizard Frumscone", new WorldPoint(2594, 3086, 0), "Downstairs in the Wizards' Guild"),
new AnagramClue("OUR OWN NEEDS", "Nurse Wooned", new WorldPoint(1511, 3619, 0), "Shayzien Infirmary", "How many wounded soldiers are in the camp?", "19"), new AnagramClue("OUR OWN NEEDS", "Nurse Wooned", new WorldPoint(1511, 3619, 0), "Shayzien Infirmary", "How many wounded soldiers are in the camp?", "16"),
new AnagramClue("PACINNG A TAIE", "Captain Ginea", new WorldPoint(1561, 3602, 0), "Building east of Shayzien combat ring", "1 soldier can deal with 6 lizardmen. How many soldiers do we need for an army of 678 lizardmen?", "113"), new AnagramClue("PACINNG A TAIE", "Captain Ginea", new WorldPoint(1504, 3632, 0), "Tent east of Shayzien Encampment war tent", "1 soldier can deal with 6 lizardmen. How many soldiers do we need for an army of 678 lizardmen?", "113"),
new AnagramClue("PEAK REFLEX", "Flax keeper", new WorldPoint(2744, 3444, 0), "Flax field south of Seers Village", "If I have 1014 flax, and I spin a third of them into bowstring, how many flax do I have left?", "676"), new AnagramClue("PEAK REFLEX", "Flax keeper", new WorldPoint(2744, 3444, 0), "Flax field south of Seers Village", "If I have 1014 flax, and I spin a third of them into bowstring, how many flax do I have left?", "676"),
new AnagramClue("PEATY PERT", "Party Pete", new WorldPoint(3047, 3376, 0), "Falador Party Room"), new AnagramClue("PEATY PERT", "Party Pete", new WorldPoint(3047, 3376, 0), "Falador Party Room"),
new AnagramClue("PROFS LOSE WRONG PIE", "Professor Onglewip", new WorldPoint(3113, 3162, 0), "Ground floor of Wizards Tower"), new AnagramClue("PROFS LOSE WRONG PIE", "Professor Onglewip", new WorldPoint(3113, 3162, 0), "Ground floor of Wizards Tower"),
@@ -149,7 +149,7 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
new AnagramClue("TEN WIGS ON", "Wingstone", new WorldPoint(3389, 2877, 0), "Between Nardah & Agility Pyramid"), new AnagramClue("TEN WIGS ON", "Wingstone", new WorldPoint(3389, 2877, 0), "Between Nardah & Agility Pyramid"),
new AnagramClue("THEM CAL CAME", "Cam the Camel", new WorldPoint(3300, 3231, 0), "Just outside of the Duel Arena"), new AnagramClue("THEM CAL CAME", "Cam the Camel", new WorldPoint(3300, 3231, 0), "Just outside of the Duel Arena"),
new AnagramClue("THICKNO", "Hickton", new WorldPoint(2822, 3442, 0), "Catherby fletching shop", "How many ranges are there in Catherby?", "2"), new AnagramClue("THICKNO", "Hickton", new WorldPoint(2822, 3442, 0), "Catherby fletching shop", "How many ranges are there in Catherby?", "2"),
new AnagramClue("TWENTY CURE IRON", "New recruit Tony", new WorldPoint(1498, 3544, 0), "Shayzien Graveyard"), new AnagramClue("TWENTY CURE IRON", "New recruit Tony", new WorldPoint(1503, 3553, 0), "Shayzien Graveyard"),
new AnagramClue("UNLEASH NIGHT MIST", "Sigli the Huntsman", new WorldPoint(2660, 3654, 0), "Rellekka", "What is the combined slayer requirement of every monster in the slayer cave?", "302"), new AnagramClue("UNLEASH NIGHT MIST", "Sigli the Huntsman", new WorldPoint(2660, 3654, 0), "Rellekka", "What is the combined slayer requirement of every monster in the slayer cave?", "302"),
new AnagramClue("VESTE", "Steve", new WorldPoint(2432, 3423, 0), "Upstairs Wyvern Area or Stronghold Slayer Cave", "How many farming patches are there in Gnome stronghold?", "2"), new AnagramClue("VESTE", "Steve", new WorldPoint(2432, 3423, 0), "Upstairs Wyvern Area or Stronghold Slayer Cave", "How many farming patches are there in Gnome stronghold?", "2"),
new AnagramClue("VEIL VEDA", "Evil Dave", new WorldPoint(3079, 9892, 0), "Doris' basement, Edgeville", "What is 333 multiplied by 2?", "666"), new AnagramClue("VEIL VEDA", "Evil Dave", new WorldPoint(3079, 9892, 0), "Doris' basement, Edgeville", "What is 333 multiplied by 2?", "666"),
@@ -167,7 +167,8 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
new AnagramClue("TAUNT ROOF", "Fortunato", new WorldPoint(3080, 3250, 0), "Draynor Village Market"), 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", "How many graves are there in the city graveyard?", "38"), new AnagramClue("HICK JET", "Jethick", new WorldPoint(2541, 3305, 0), "West Ardougne", "How many graves are there in the city graveyard?", "38"),
new AnagramClue("RUE GO", "Goreu", new WorldPoint(2335, 3162, 0), "Lletya"), new AnagramClue("RUE GO", "Goreu", new WorldPoint(2335, 3162, 0), "Lletya"),
new AnagramClue("BRUCIE CATNAP", "Captain Bruce", new WorldPoint(1520, 3558, 0), "Graveyard of Heroes") new AnagramClue("BRUCIE CATNAP", "Captain Bruce", new WorldPoint(1520, 3558, 0), "Graveyard of Heroes"),
new AnagramClue("UESNKRL NRIEDDO", "Drunken soldier", new WorldPoint(1551, 3565, 0), "Shayzien pub", "If 13 Shayzien Soldiers kill 46 Lizardmen each in a day, how many Lizardmen have they killed in total in a single day?", "598")
); );
private final String text; private final String text;
@@ -111,7 +111,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati
.put(new WorldPoint(2363, 3531, 0), new CoordinateClueInfo("North-east of Eagles' Peak (AKQ).")) .put(new WorldPoint(2363, 3531, 0), new CoordinateClueInfo("North-east of Eagles' Peak (AKQ)."))
.put(new WorldPoint(2919, 3535, 0), new CoordinateClueInfo("East of Burthorpe pub.")) .put(new WorldPoint(2919, 3535, 0), new CoordinateClueInfo("East of Burthorpe pub."))
.put(new WorldPoint(3548, 3560, 0), new CoordinateClueInfo("Inside Fenkenstrain's Castle.")) .put(new WorldPoint(3548, 3560, 0), new CoordinateClueInfo("Inside Fenkenstrain's Castle."))
.put(new WorldPoint(1476, 3566, 0), new CoordinateClueInfo("Graveyard of Heroes west of Shayzien (DJR).")) .put(new WorldPoint(1476, 3566, 0), new CoordinateClueInfo("Graveyard of Heroes in west Shayzien."))
.put(new WorldPoint(2735, 3638, 0), new CoordinateClueInfo("East of Rellekka, north-west of Golden Apple Tree (AJR).")) .put(new WorldPoint(2735, 3638, 0), new CoordinateClueInfo("East of Rellekka, north-west of Golden Apple Tree (AJR)."))
.put(new WorldPoint(2681, 3653, 0), new CoordinateClueInfo("Rellekka, in the garden of the south-east house.")) .put(new WorldPoint(2681, 3653, 0), new CoordinateClueInfo("Rellekka, in the garden of the south-east house."))
.put(new WorldPoint(2537, 3881, 0), new CoordinateClueInfo("Miscellania (CIP).")) .put(new WorldPoint(2537, 3881, 0), new CoordinateClueInfo("Miscellania (CIP)."))
@@ -324,7 +324,12 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
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("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?", "Mawrth", new WorldPoint(2333, 3165, 0), "Talk to Mawrth in Lletya."), new CrypticClue("Has no one told you it is rude to ask a lady her age?", "Mawrth", new WorldPoint(2333, 3165, 0), "Talk to Mawrth in Lletya."),
new CrypticClue("Elvish onions.", new WorldPoint(3303, 6092, 0), "Dig in the onion patch east of the Prifddinas allotments.") new CrypticClue("Elvish onions.", new WorldPoint(3303, 6092, 0), "Dig in the onion patch east of the Prifddinas allotments."),
new CrypticClue("Dig by the Giant's Den entrance, looking out over Lake Molch.", new WorldPoint(1418, 3591, 0), "South-east of Lake Molch in Zeah, outside the cave entrance."),
new CrypticClue("Search the crates in the fruit store just east of the Hosidius town centre.", CRATES_27533, new WorldPoint(1798, 3612, 0), "Search the crates in the back room of the Hosidius fruit store."),
new CrypticClue("A graceful man of many colours, his crates must be full of many delights.", "Hill Giant", CRATE_42067, new WorldPoint(1506, 3591, 2), "Kill any Hill Giant for a medium key. Then search the crate on the top floor of Osten's clothing shop in Shayzien."),
new CrypticClue("Search the basket of apples in an orchard, south of the unknown grave surrounded by white roses.", APPLE_BASKET, new WorldPoint(1718, 3626, 0), "Search the middle apple basket in the apple orchard north of Hosidius."),
new CrypticClue("Dig in the lair of red wings, within the temple of the Sun and Moon.", new WorldPoint(1820, 9935, 0), "Forthos Dungeon. In the center of the red dragons.")
); );
private final String text; private final String text;
@@ -83,7 +83,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
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), DOUBLE_AGENT_141, BECKON, range("Bryophyta's staff", BRYOPHYTAS_STAFF_UNCHARGED, BRYOPHYTAS_STAFF), item(NATURE_TIARA)), 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), DOUBLE_AGENT_141, BECKON, range("Bryophyta's staff", 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 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 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("Beckon in the Shayzien Combat Ring. 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(1543, 3623, 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 charged crystal bow.", "Lord Iorwerth's camp", TENT_IN_LORD_IORWERTHS_ENCAMPMENT, new WorldPoint(2205, 3252, 0), DOUBLE_AGENT_141, BOW, any("Crystal Bow", item(CRYSTAL_BOW), item(CRYSTAL_BOW_24123))), 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), DOUBLE_AGENT_141, 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), DOUBLE_AGENT_141, 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), DOUBLE_AGENT_141, 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 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)),
@@ -151,7 +151,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
new EmoteClue("Shrug in the mine near Rimmington. Equip a gold necklace, a gold ring and a bronze spear.", "Rimmington mine", RIMMINGTON_MINE, new WorldPoint(2976, 3238, 0), SHRUG, item(GOLD_NECKLACE), item(GOLD_RING), item(BRONZE_SPEAR)), new EmoteClue("Shrug in the mine near Rimmington. Equip a gold necklace, a gold ring and a bronze spear.", "Rimmington mine", RIMMINGTON_MINE, new WorldPoint(2976, 3238, 0), SHRUG, item(GOLD_NECKLACE), item(GOLD_RING), item(BRONZE_SPEAR)),
new EmoteClue("Shrug in Catherby bank. Yawn before you talk to me. Equip a maple longbow, green d'hide chaps and an iron med helm.", "Catherby", OUTSIDE_CATHERBY_BANK, new WorldPoint(2808, 3440, 0), SHRUG, YAWN, item(MAPLE_LONGBOW), item(GREEN_DHIDE_CHAPS), item(IRON_MED_HELM)), new EmoteClue("Shrug in Catherby bank. Yawn before you talk to me. Equip a maple longbow, green d'hide chaps and an iron med helm.", "Catherby", OUTSIDE_CATHERBY_BANK, new WorldPoint(2808, 3440, 0), SHRUG, YAWN, item(MAPLE_LONGBOW), item(GREEN_DHIDE_CHAPS), item(IRON_MED_HELM)),
new EmoteClue("Shrug in the Zamorak temple found in the Eastern Wilderness. Beware of double agents! Equip rune platelegs, an iron platebody and blue dragonhide vambraces.", "Chaos temple", CHAOS_TEMPLE_IN_THE_SOUTHEASTERN_WILDERNESS, new WorldPoint(3239, 3611, 0), DOUBLE_AGENT_65, SHRUG, item(RUNE_PLATELEGS), item(IRON_PLATEBODY), item(BLUE_DHIDE_VAMBRACES)), new EmoteClue("Shrug in the Zamorak temple found in the Eastern Wilderness. Beware of double agents! Equip rune platelegs, an iron platebody and blue dragonhide vambraces.", "Chaos temple", CHAOS_TEMPLE_IN_THE_SOUTHEASTERN_WILDERNESS, new WorldPoint(3239, 3611, 0), DOUBLE_AGENT_65, SHRUG, item(RUNE_PLATELEGS), item(IRON_PLATEBODY), item(BLUE_DHIDE_VAMBRACES)),
new EmoteClue("Shrug in the Shayzien command tent. Equip a blue mystic robe bottom, a rune kiteshield and any bob shirt.", "Shayzien command tent", SHAYZIEN_WAR_TENT, new WorldPoint(1555, 3537, 0), SHRUG, item(MYSTIC_ROBE_BOTTOM), item(RUNE_KITESHIELD), range("Any bob shirt", BOBS_RED_SHIRT, BOBS_PURPLE_SHIRT)), new EmoteClue("Shrug in the Shayzien war tent. Equip a blue mystic robe bottom, a rune kiteshield and any bob shirt.", "Shayzien war tent", SHAYZIEN_WAR_TENT, new WorldPoint(1487, 3635, 0), SHRUG, item(MYSTIC_ROBE_BOTTOM), item(RUNE_KITESHIELD), range("Any bob shirt", BOBS_RED_SHIRT, BOBS_PURPLE_SHIRT)),
new EmoteClue("Slap your head in the centre of the Kourend catacombs. Beware of double agents! Equip the arclight and the amulet of the damned.", "Kourend catacombs", CENTRE_OF_THE_CATACOMBS_OF_KOUREND, new WorldPoint(1663, 10045, 0), DOUBLE_AGENT_141, SLAP_HEAD, item(ARCLIGHT), any("Amulet of the damned", item(AMULET_OF_THE_DAMNED), item(AMULET_OF_THE_DAMNED_FULL))), new EmoteClue("Slap your head in the centre of the Kourend catacombs. Beware of double agents! Equip the arclight and the amulet of the damned.", "Kourend catacombs", CENTRE_OF_THE_CATACOMBS_OF_KOUREND, new WorldPoint(1663, 10045, 0), DOUBLE_AGENT_141, SLAP_HEAD, item(ARCLIGHT), any("Amulet of the damned", item(AMULET_OF_THE_DAMNED), item(AMULET_OF_THE_DAMNED_FULL))),
new EmoteClue("Spin at the crossroads north of Rimmington. Equip a green gnome hat, cream gnome top and leather chaps.", "Rimmington", ROAD_JUNCTION_NORTH_OF_RIMMINGTON, new WorldPoint(2981, 3276, 0), SPIN, item(GREEN_HAT), item(CREAM_ROBE_TOP), item(LEATHER_CHAPS)), new EmoteClue("Spin at the crossroads north of Rimmington. Equip a green gnome hat, cream gnome top and leather chaps.", "Rimmington", ROAD_JUNCTION_NORTH_OF_RIMMINGTON, new WorldPoint(2981, 3276, 0), SPIN, item(GREEN_HAT), item(CREAM_ROBE_TOP), item(LEATHER_CHAPS)),
new EmoteClue("Spin in Draynor Manor by the fountain. Equip an iron platebody, studded leather chaps and a bronze full helmet.", "Draynor Manor", DRAYNOR_MANOR_BY_THE_FOUNTAIN, new WorldPoint(3088, 3336, 0), SPIN, item(IRON_PLATEBODY), item(STUDDED_CHAPS), item(BRONZE_FULL_HELM)), new EmoteClue("Spin in Draynor Manor by the fountain. Equip an iron platebody, studded leather chaps and a bronze full helmet.", "Draynor Manor", DRAYNOR_MANOR_BY_THE_FOUNTAIN, new WorldPoint(3088, 3336, 0), SPIN, item(IRON_PLATEBODY), item(STUDDED_CHAPS), item(BRONZE_FULL_HELM)),
@@ -172,14 +172,15 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
new EmoteClue("Yawn in the Castle Wars lobby. Shrug before you talk to me. Equip a ruby amulet, a mithril scimitar and a Wilderness cape.", "Castle Wars", CASTLE_WARS_BANK, new WorldPoint(2440, 3092, 0), YAWN, SHRUG, item(RUBY_AMULET), item(MITHRIL_SCIMITAR), range("Any team cape", TEAM1_CAPE, TEAM50_CAPE)), new EmoteClue("Yawn in the Castle Wars lobby. Shrug before you talk to me. Equip a ruby amulet, a mithril scimitar and a Wilderness cape.", "Castle Wars", CASTLE_WARS_BANK, new WorldPoint(2440, 3092, 0), YAWN, SHRUG, item(RUBY_AMULET), item(MITHRIL_SCIMITAR), range("Any team cape", TEAM1_CAPE, TEAM50_CAPE)),
new EmoteClue("Yawn in the rogues' general store. Beware of double agents! Equip an adamant square shield, blue dragon vambraces and a rune pickaxe.", "Rogues general store", NOTERAZZOS_SHOP_IN_THE_WILDERNESS, new WorldPoint(3026, 3701, 0), DOUBLE_AGENT_65, YAWN, item(ADAMANT_SQ_SHIELD), item(BLUE_DHIDE_VAMBRACES), item(RUNE_PICKAXE)), new EmoteClue("Yawn in the rogues' general store. Beware of double agents! Equip an adamant square shield, blue dragon vambraces and a rune pickaxe.", "Rogues general store", NOTERAZZOS_SHOP_IN_THE_WILDERNESS, new WorldPoint(3026, 3701, 0), DOUBLE_AGENT_65, YAWN, item(ADAMANT_SQ_SHIELD), item(BLUE_DHIDE_VAMBRACES), item(RUNE_PICKAXE)),
new EmoteClue("Yawn at the top of Trollheim. Equip a lava battlestaff, black dragonhide vambraces and a mind shield.", "Trollheim Mountain", ON_TOP_OF_TROLLHEIM_MOUNTAIN, new WorldPoint(2887, 3676, 0), YAWN, any("Lava battlestaff", item(LAVA_BATTLESTAFF), item(LAVA_BATTLESTAFF_21198)), item(BLACK_DHIDE_VAMBRACES), item(MIND_SHIELD)), new EmoteClue("Yawn at the top of Trollheim. Equip a lava battlestaff, black dragonhide vambraces and a mind shield.", "Trollheim Mountain", ON_TOP_OF_TROLLHEIM_MOUNTAIN, new WorldPoint(2887, 3676, 0), YAWN, any("Lava battlestaff", item(LAVA_BATTLESTAFF), item(LAVA_BATTLESTAFF_21198)), item(BLACK_DHIDE_VAMBRACES), item(MIND_SHIELD)),
new EmoteClue("Yawn in the centre of Arceuus library. Nod your head before you talk to me. Equip blue dragonhide vambraces, adamant boots and an adamant dagger.", "Arceuus library", ENTRANCE_OF_THE_ARCEUUS_LIBRARY, new WorldPoint(1632, 3807, 0), YAWN, YES, item(BLUE_DHIDE_VAMBRACES), item(ADAMANT_BOOTS), item(ADAMANT_DAGGER)), new EmoteClue("Yawn in the centre of the Arceuus Library. Nod your head before you talk to me. Equip blue dragonhide vambraces, adamant boots and an adamant dagger.", "Arceuus library", ENTRANCE_OF_THE_ARCEUUS_LIBRARY, new WorldPoint(1632, 3807, 0), YAWN, YES, item(BLUE_DHIDE_VAMBRACES), item(ADAMANT_BOOTS), item(ADAMANT_DAGGER)),
new EmoteClue("Swing a bullroarer at the top of the Watchtower. Beware of double agents! Equip a dragon plateskirt, climbing boots and a dragon chainbody.", "Yanille Watchtower", TOP_FLOOR_OF_THE_YANILLE_WATCHTOWER, new WorldPoint(2930, 4717, 2), DOUBLE_AGENT_141, BULL_ROARER, any("Dragon plateskirt", item(DRAGON_PLATESKIRT), item(DRAGON_PLATESKIRT_G)), item(CLIMBING_BOOTS), any("Dragon chainbody", item(DRAGON_CHAINBODY_3140), item(DRAGON_CHAINBODY_G)), item(ItemID.BULL_ROARER)), new EmoteClue("Swing a bullroarer at the top of the Watchtower. Beware of double agents! Equip a dragon plateskirt, climbing boots and a dragon chainbody.", "Yanille Watchtower", TOP_FLOOR_OF_THE_YANILLE_WATCHTOWER, new WorldPoint(2930, 4717, 2), DOUBLE_AGENT_141, BULL_ROARER, any("Dragon plateskirt", item(DRAGON_PLATESKIRT), item(DRAGON_PLATESKIRT_G)), item(CLIMBING_BOOTS), any("Dragon chainbody", item(DRAGON_CHAINBODY_3140), item(DRAGON_CHAINBODY_G)), item(ItemID.BULL_ROARER)),
new EmoteClue("Blow a raspberry at Gypsy Aris in her tent. Equip a gold ring and a gold necklace.", "Varrock", GYPSY_TENT_ENTRANCE, new WorldPoint(3203, 3424, 0), RASPBERRY, item(GOLD_RING), item(GOLD_NECKLACE)), new EmoteClue("Blow a raspberry at Gypsy Aris in her tent. Equip a gold ring and a gold necklace.", "Varrock", GYPSY_TENT_ENTRANCE, new WorldPoint(3203, 3424, 0), RASPBERRY, item(GOLD_RING), item(GOLD_NECKLACE)),
new EmoteClue("Bow to Brugsen Bursen at the Grand Exchange.", "Grand Exchange", null, new WorldPoint(3164, 3477, 0), BOW), new EmoteClue("Bow to Brugsen Bursen at the Grand Exchange.", "Grand Exchange", null, new WorldPoint(3164, 3477, 0), BOW),
new EmoteClue("Cheer at Iffie Nitter. Equip a chef hat and a red cape.", "Varrock", FINE_CLOTHES_ENTRANCE, new WorldPoint(3205, 3416, 0), CHEER, item(CHEFS_HAT), item(RED_CAPE)), new EmoteClue("Cheer at Iffie Nitter. Equip a chef hat and a red cape.", "Varrock", FINE_CLOTHES_ENTRANCE, new WorldPoint(3205, 3416, 0), CHEER, item(CHEFS_HAT), item(RED_CAPE)),
new EmoteClue("Clap at Bob's Brilliant Axes. Equip a bronze axe and leather boots.", "Lumbridge", BOB_AXES_ENTRANCE, new WorldPoint(3231, 3203, 0), CLAP, item(BRONZE_AXE), item(LEATHER_BOOTS)), new EmoteClue("Clap at Bob's Brilliant Axes. Equip a bronze axe and leather boots.", "Lumbridge", BOB_AXES_ENTRANCE, new WorldPoint(3231, 3203, 0), CLAP, item(BRONZE_AXE), item(LEATHER_BOOTS)),
new EmoteClue("Panic at Al Kharid mine.", "Al Kharid mine", null, new WorldPoint(3300, 3314, 0), PANIC), new EmoteClue("Panic at Al Kharid mine.", "Al Kharid mine", null, new WorldPoint(3300, 3314, 0), PANIC),
new EmoteClue("Spin at Flynn's Mace Shop.", "Falador", null, new WorldPoint(2950, 3387, 0), SPIN)); new EmoteClue("Spin at Flynn's Mace Shop.", "Falador", null, new WorldPoint(2950, 3387, 0), SPIN),
new EmoteClue("Salute by the Charcoal Burners. Equip a Farmer's strawhat, Shayzien platebody (5) and Pyromancer robes.", "Charcoal Burners", CHARCOAL_BURNERS, new WorldPoint(1714, 3467, 0), SALUTE, any("Farmer's strawhat", item(FARMERS_STRAWHAT), item(FARMERS_STRAWHAT_13647)), item(SHAYZIEN_PLATEBODY_5), item(PYROMANCER_ROBE)));
private static final String UNICODE_CHECK_MARK = "\u2713"; private static final String UNICODE_CHECK_MARK = "\u2713";
private static final String UNICODE_BALLOT_X = "\u2717"; private static final String UNICODE_BALLOT_X = "\u2717";
@@ -79,7 +79,7 @@ public enum STASHUnit
OUTSIDE_HARRYS_FISHING_SHOP_IN_CATHERBY(NullObjectID.NULL_29003, new WorldPoint(2837, 3436, 0)), OUTSIDE_HARRYS_FISHING_SHOP_IN_CATHERBY(NullObjectID.NULL_29003, new WorldPoint(2837, 3436, 0)),
TZHAAR_WEAPONS_STORE(NullObjectID.NULL_29004, new WorldPoint(2479, 5146, 0)), TZHAAR_WEAPONS_STORE(NullObjectID.NULL_29004, new WorldPoint(2479, 5146, 0)),
NORTH_OF_EVIL_DAVES_HOUSE_IN_EDGEVILLE(NullObjectID.NULL_29005, new WorldPoint(3077, 3503, 0)), NORTH_OF_EVIL_DAVES_HOUSE_IN_EDGEVILLE(NullObjectID.NULL_29005, new WorldPoint(3077, 3503, 0)),
WEST_OF_THE_SHAYZIEN_COMBAT_RING(NullObjectID.NULL_29006, new WorldPoint(1534, 3591, 0)), WEST_OF_THE_SHAYZIEN_COMBAT_RING(NullObjectID.NULL_29006, new WorldPoint(1541, 3631, 0)),
ENTRANCE_OF_THE_ARCEUUS_LIBRARY(NullObjectID.NULL_29007, new WorldPoint(1642, 3809, 0)), ENTRANCE_OF_THE_ARCEUUS_LIBRARY(NullObjectID.NULL_29007, new WorldPoint(1642, 3809, 0)),
OUTSIDE_DRAYNOR_VILLAGE_JAIL(NullObjectID.NULL_29008, new WorldPoint(3130, 3250, 0)), OUTSIDE_DRAYNOR_VILLAGE_JAIL(NullObjectID.NULL_29008, new WorldPoint(3130, 3250, 0)),
CHAOS_TEMPLE_IN_THE_SOUTHEASTERN_WILDERNESS(NullObjectID.NULL_29009, new WorldPoint(3245, 3609, 0)), CHAOS_TEMPLE_IN_THE_SOUTHEASTERN_WILDERNESS(NullObjectID.NULL_29009, new WorldPoint(3245, 3609, 0)),
@@ -109,7 +109,7 @@ public enum STASHUnit
FOUNTAIN_OF_HEROES(NullObjectID.NULL_29033, new WorldPoint(2916, 9891, 0)), FOUNTAIN_OF_HEROES(NullObjectID.NULL_29033, new WorldPoint(2916, 9891, 0)),
ENTRANCE_OF_THE_CAVERN_UNDER_THE_WHIRLPOOL(NullObjectID.NULL_29034, new WorldPoint(1764, 5367, 1), new WorldPoint(1636, 5367, 1)), ENTRANCE_OF_THE_CAVERN_UNDER_THE_WHIRLPOOL(NullObjectID.NULL_29034, new WorldPoint(1764, 5367, 1), new WorldPoint(1636, 5367, 1)),
HALFWAY_DOWN_TROLLWEISS_MOUNTAIN(NullObjectID.NULL_29035, new WorldPoint(2782, 3787, 0)), HALFWAY_DOWN_TROLLWEISS_MOUNTAIN(NullObjectID.NULL_29035, new WorldPoint(2782, 3787, 0)),
SHAYZIEN_WAR_TENT(NullObjectID.NULL_29036, new WorldPoint(1550, 3541, 0)), SHAYZIEN_WAR_TENT(NullObjectID.NULL_29036, new WorldPoint(1488, 3637, 0)),
OUTSIDE_THE_LEGENDS_GUILD_DOOR(NullObjectID.NULL_29037, new WorldPoint(2727, 3371, 0)), OUTSIDE_THE_LEGENDS_GUILD_DOOR(NullObjectID.NULL_29037, new WorldPoint(2727, 3371, 0)),
NEAR_THE_GEM_STALL_IN_ARDOUGNE_MARKET(NullObjectID.NULL_29038, new WorldPoint(2672, 3302, 0)), NEAR_THE_GEM_STALL_IN_ARDOUGNE_MARKET(NullObjectID.NULL_29038, new WorldPoint(2672, 3302, 0)),
OUTSIDE_THE_BAR_BY_THE_FIGHT_ARENA(NullObjectID.NULL_29039, new WorldPoint(2571, 3150, 0)), OUTSIDE_THE_BAR_BY_THE_FIGHT_ARENA(NullObjectID.NULL_29039, new WorldPoint(2571, 3150, 0)),
@@ -138,7 +138,9 @@ public enum STASHUnit
GYPSY_TENT_ENTRANCE(NullObjectID.NULL_34736, new WorldPoint(3206, 3422, 0)), GYPSY_TENT_ENTRANCE(NullObjectID.NULL_34736, new WorldPoint(3206, 3422, 0)),
FINE_CLOTHES_ENTRANCE(NullObjectID.NULL_34737, new WorldPoint(3209, 3416, 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)); CRYSTALLINE_MAPLE_TREES(NullObjectID.NULL_34953, new WorldPoint(2213, 3427, 0)),
CHARCOAL_BURNERS(NullObjectID.NULL_41758, new WorldPoint(1712, 3469, 0)),
;
private final int objectId; private final int objectId;
private final WorldPoint[] worldPoints; private final WorldPoint[] worldPoints;
@@ -185,7 +185,7 @@ public enum HotColdLocation
ZEAH_PISCARILUS_MINE(MASTER, new WorldPoint(1768, 3705, 0), ZEAH, "South of the Piscarilius mine.", ANCIENT_WIZARDS), ZEAH_PISCARILUS_MINE(MASTER, new WorldPoint(1768, 3705, 0), ZEAH, "South of the Piscarilius mine.", ANCIENT_WIZARDS),
ZEAH_GOLDEN_FIELD_TAVERN(MASTER, new WorldPoint(1718, 3643, 0), ZEAH, "South of the gravestone in Kingstown.", BRASSICAN_MAGE), ZEAH_GOLDEN_FIELD_TAVERN(MASTER, new WorldPoint(1718, 3643, 0), ZEAH, "South of the gravestone in Kingstown.", BRASSICAN_MAGE),
ZEAH_MESS_HALL(MASTER, new WorldPoint(1656, 3621, 0), ZEAH, "East of the Mess hall.", ANCIENT_WIZARDS), ZEAH_MESS_HALL(MASTER, new WorldPoint(1656, 3621, 0), ZEAH, "East of the Mess hall.", ANCIENT_WIZARDS),
ZEAH_WATSONS_HOUSE(MASTER, new WorldPoint(1653, 3573, 0), ZEAH, "East of Watson's house.", ANCIENT_WIZARDS), ZEAH_WATSONS_HOUSE(MASTER, new WorldPoint(1653, 3573, 0), ZEAH, "East of Watson's house.", BRASSICAN_MAGE),
ZEAH_VANNAHS_FARM_STORE(MASTER, new WorldPoint(1807, 3523, 0), ZEAH, "North of Tithe Farm, next to the pond.", BRASSICAN_MAGE), ZEAH_VANNAHS_FARM_STORE(MASTER, new WorldPoint(1807, 3523, 0), ZEAH, "North of Tithe Farm, next to the pond.", BRASSICAN_MAGE),
ZEAH_FARMING_GUILD_W(MASTER, new WorldPoint(1208, 3736, 0), ZEAH, "West of the Farming Guild.", BRASSICAN_MAGE), ZEAH_FARMING_GUILD_W(MASTER, new WorldPoint(1208, 3736, 0), ZEAH, "West of the Farming Guild.", BRASSICAN_MAGE),
ZEAH_DAIRY_COW(MASTER, new WorldPoint(1324, 3722, 0), ZEAH, "North-east of the Kebos Lowlands, east of the dairy cow.", BRASSICAN_MAGE), ZEAH_DAIRY_COW(MASTER, new WorldPoint(1324, 3722, 0), ZEAH, "North-east of the Kebos Lowlands, east of the dairy cow.", BRASSICAN_MAGE),
@@ -29,7 +29,6 @@ import javax.inject.Inject;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.events.GameTick; import net.runelite.api.events.GameTick;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.crowdsourcing.CrowdsourcingManager; import net.runelite.client.plugins.crowdsourcing.CrowdsourcingManager;
@@ -44,6 +43,7 @@ public class CrowdsourcingDialogue
@Inject @Inject
private CrowdsourcingManager manager; private CrowdsourcingManager manager;
private boolean inDialogue = false;
private String lastNpcDialogueText = null; private String lastNpcDialogueText = null;
private String lastPlayerDialogueText = null; private String lastPlayerDialogueText = null;
private Widget[] dialogueOptions; private Widget[] dialogueOptions;
@@ -58,6 +58,23 @@ public class CrowdsourcingDialogue
public void onGameTick(GameTick tick) public void onGameTick(GameTick tick)
{ {
Widget npcDialogueTextWidget = client.getWidget(WidgetInfo.DIALOG_NPC_TEXT); Widget npcDialogueTextWidget = client.getWidget(WidgetInfo.DIALOG_NPC_TEXT);
Widget playerDialogueTextWidget = client.getWidget(WidgetInfo.DIALOG_PLAYER_TEXT);
Widget playerDialogueOptionsWidget = client.getWidget(WidgetInfo.DIALOG_OPTION_OPTIONS);
// If we were not in a conversation, but now one of these widgets is not null, we have started a conversation.
// Else if we were in a conversation, but now there is no widget, we have left the conversation.
if (!inDialogue && (npcDialogueTextWidget != null || playerDialogueTextWidget != null || playerDialogueOptionsWidget != null))
{
inDialogue = true;
manager.storeEvent(new StartEndData(true));
}
else if (inDialogue && npcDialogueTextWidget == null && playerDialogueTextWidget == null
&& playerDialogueOptionsWidget == null)
{
inDialogue = false;
manager.storeEvent(new StartEndData(false));
}
if (npcDialogueTextWidget != null && !npcDialogueTextWidget.getText().equals(lastNpcDialogueText)) if (npcDialogueTextWidget != null && !npcDialogueTextWidget.getText().equals(lastNpcDialogueText))
{ {
lastNpcDialogueText = npcDialogueTextWidget.getText(); lastNpcDialogueText = npcDialogueTextWidget.getText();
@@ -66,7 +83,6 @@ public class CrowdsourcingDialogue
manager.storeEvent(data); manager.storeEvent(data);
} }
Widget playerDialogueTextWidget = client.getWidget(WidgetID.DIALOG_PLAYER_GROUP_ID, 4);
if (playerDialogueTextWidget != null && !playerDialogueTextWidget.getText().equals(lastPlayerDialogueText)) if (playerDialogueTextWidget != null && !playerDialogueTextWidget.getText().equals(lastPlayerDialogueText))
{ {
lastPlayerDialogueText = playerDialogueTextWidget.getText(); lastPlayerDialogueText = playerDialogueTextWidget.getText();
@@ -74,7 +90,6 @@ public class CrowdsourcingDialogue
manager.storeEvent(data); manager.storeEvent(data);
} }
Widget playerDialogueOptionsWidget = client.getWidget(WidgetID.DIALOG_OPTION_GROUP_ID, 1);
if (playerDialogueOptionsWidget != null && playerDialogueOptionsWidget.getChildren() != dialogueOptions) if (playerDialogueOptionsWidget != null && playerDialogueOptionsWidget.getChildren() != dialogueOptions)
{ {
dialogueOptions = playerDialogueOptionsWidget.getChildren(); dialogueOptions = playerDialogueOptionsWidget.getChildren();
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2021, Weird Gloop <admin@weirdgloop.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.crowdsourcing.dialogue;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class StartEndData
{
private final boolean isStart;
}
@@ -79,7 +79,7 @@ class WorldMapRegionOverlay extends Overlay
{ {
RenderOverview ro = client.getRenderOverview(); RenderOverview ro = client.getRenderOverview();
Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW); Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
Float pixelsPerTile = ro.getWorldMapZoom(); float pixelsPerTile = ro.getWorldMapZoom();
if (map == null) if (map == null)
{ {
@@ -32,7 +32,6 @@ import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
@@ -250,27 +249,16 @@ class DiscordState
final Duration actionTimeout = Duration.ofMinutes(config.actionTimeout()); final Duration actionTimeout = Duration.ofMinutes(config.actionTimeout());
final Instant now = Instant.now(); final Instant now = Instant.now();
final AtomicBoolean updatedAny = new AtomicBoolean();
final boolean removedAny = events.removeAll(events.stream() final boolean removedAny = events.removeAll(events.stream()
// Only include clearable events
.filter(event -> event.getType().isShouldBeCleared())
// Find only events that should time out // Find only events that should time out
.filter(event -> event.getType().isShouldTimeout() && now.isAfter(event.getUpdated().plus(actionTimeout))) .filter(event -> event.getType().isShouldTimeout() && now.isAfter(event.getUpdated().plus(actionTimeout)))
// Reset start times on timed events that should restart
.peek(event ->
{
if (event.getType().isShouldRestart())
{
event.setStart(null);
updatedAny.set(true);
}
})
// Now filter out events that should restart as we do not want to remove them
.filter(event -> !event.getType().isShouldRestart())
.filter(event -> event.getType().isShouldBeCleared())
.collect(Collectors.toList()) .collect(Collectors.toList())
); );
if (removedAny || updatedAny.get()) if (removedAny)
{ {
updatePresenceWithLatestEvent(); updatePresenceWithLatestEvent();
} }
@@ -43,6 +43,7 @@ public enum LoginScreenOverride
MONKEY_MADNESS_2("mm2.jpg"), MONKEY_MADNESS_2("mm2.jpg"),
PRIFDDINAS("prifddinas.jpg"), PRIFDDINAS("prifddinas.jpg"),
THEATRE_OF_BLOOD("tob.jpg"), THEATRE_OF_BLOOD("tob.jpg"),
A_KINGDOM_DIVIDED("akd.jpg"),
CUSTOM; CUSTOM;
@Getter @Getter
@@ -67,6 +67,7 @@ import net.runelite.api.InventoryID;
import net.runelite.api.ItemComposition; import net.runelite.api.ItemComposition;
import net.runelite.api.ItemContainer; import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.api.MenuAction;
import net.runelite.api.MessageNode; import net.runelite.api.MessageNode;
import net.runelite.api.NPC; import net.runelite.api.NPC;
import net.runelite.api.ObjectID; import net.runelite.api.ObjectID;
@@ -817,53 +818,71 @@ public class LootTrackerPlugin extends Plugin
{ {
// There are some pickpocket targets who show up in the chat box with a different name (e.g. H.A.M. members -> man/woman) // There are some pickpocket targets who show up in the chat box with a different name (e.g. H.A.M. members -> man/woman)
// We use the value selected from the right-click menu as a fallback for the event lookup in those cases. // We use the value selected from the right-click menu as a fallback for the event lookup in those cases.
if (event.getMenuOption().equals("Pickpocket")) if (isNPCOp(event.getMenuAction()) && event.getMenuOption().equals("Pickpocket"))
{ {
lastPickpocketTarget = Text.removeTags(event.getMenuTarget()); lastPickpocketTarget = Text.removeTags(event.getMenuTarget());
} }
else if (isObjectOp(event.getMenuAction()) && event.getMenuOption().equals("Open") && SHADE_CHEST_OBJECTS.containsKey(event.getId()))
{
setEvent(LootRecordType.EVENT, SHADE_CHEST_OBJECTS.get(event.getId()));
takeInventorySnapshot();
}
else if (isItemOp(event.getMenuAction()))
{
if (event.getMenuOption().equals("Take") && event.getId() == ItemID.SEED_PACK) if (event.getMenuOption().equals("Take") && event.getId() == ItemID.SEED_PACK)
{ {
setEvent(LootRecordType.EVENT, SEEDPACK_EVENT); setEvent(LootRecordType.EVENT, SEEDPACK_EVENT);
takeInventorySnapshot(); takeInventorySnapshot();
} }
else if (event.getMenuOption().equals("Search") && BIRDNEST_IDS.contains(event.getId()))
if (event.getMenuOption().equals("Open") && SHADE_CHEST_OBJECTS.containsKey(event.getId()))
{
setEvent(LootRecordType.EVENT, SHADE_CHEST_OBJECTS.get(event.getId()));
takeInventorySnapshot();
}
if (event.getMenuOption().equals("Search") && BIRDNEST_IDS.contains(event.getId()))
{ {
setEvent(LootRecordType.EVENT, BIRDNEST_EVENT, event.getId()); setEvent(LootRecordType.EVENT, BIRDNEST_EVENT, event.getId());
takeInventorySnapshot(); takeInventorySnapshot();
} }
else if (event.getMenuOption().equals("Open"))
if (event.getMenuOption().equals("Open") && event.getId() == ItemID.CASKET)
{ {
switch (event.getId())
{
case ItemID.CASKET:
setEvent(LootRecordType.EVENT, CASKET_EVENT); setEvent(LootRecordType.EVENT, CASKET_EVENT);
takeInventorySnapshot(); takeInventorySnapshot();
} break;
case ItemID.SUPPLY_CRATE:
if (event.getMenuOption().equals("Open") && (event.getId() == ItemID.SUPPLY_CRATE || event.getId() == ItemID.EXTRA_SUPPLY_CRATE)) case ItemID.EXTRA_SUPPLY_CRATE:
{
setEvent(LootRecordType.EVENT, WINTERTODT_SUPPLY_CRATE_EVENT); setEvent(LootRecordType.EVENT, WINTERTODT_SUPPLY_CRATE_EVENT);
takeInventorySnapshot(); takeInventorySnapshot();
} break;
case ItemID.SPOILS_OF_WAR:
if (event.getMenuOption().equals("Open") && event.getId() == ItemID.SPOILS_OF_WAR)
{
setEvent(LootRecordType.EVENT, SPOILS_OF_WAR_EVENT); setEvent(LootRecordType.EVENT, SPOILS_OF_WAR_EVENT);
takeInventorySnapshot(); takeInventorySnapshot();
} break;
case ItemID.CASKET_25590:
if (event.getMenuOption().equals("Open") && event.getId() == ItemID.CASKET_25590)
{
setEvent(LootRecordType.EVENT, TEMPOROSS_CASKET_EVENT); setEvent(LootRecordType.EVENT, TEMPOROSS_CASKET_EVENT);
takeInventorySnapshot(); takeInventorySnapshot();
break;
} }
} }
}
}
private static boolean isItemOp(MenuAction menuAction)
{
final int id = menuAction.getId();
return id >= MenuAction.ITEM_FIRST_OPTION.getId() && id <= MenuAction.ITEM_FIFTH_OPTION.getId();
}
private static boolean isNPCOp(MenuAction menuAction)
{
final int id = menuAction.getId();
return id >= MenuAction.NPC_FIRST_OPTION.getId() && id <= MenuAction.NPC_FIFTH_OPTION.getId();
}
private static boolean isObjectOp(MenuAction menuAction)
{
final int id = menuAction.getId();
return (id >= MenuAction.GAME_OBJECT_FIRST_OPTION.getId() && id <= MenuAction.GAME_OBJECT_FOURTH_OPTION.getId())
|| id == MenuAction.GAME_OBJECT_FIFTH_OPTION.getId();
}
@Schedule( @Schedule(
period = 5, period = 5,
@@ -283,6 +283,7 @@ public class MenuEntrySwapperPlugin extends Plugin
swap("enter", "the gauntlet", "enter-corrupted", config::swapGauntlet); swap("enter", "the gauntlet", "enter-corrupted", config::swapGauntlet);
swap("enter", "quick-enter", config::swapQuick); swap("enter", "quick-enter", config::swapQuick);
swap("enter-crypt", "quick-enter", config::swapQuick);
swap("ring", "quick-start", config::swapQuick); swap("ring", "quick-start", config::swapQuick);
swap("pass", "quick-pass", config::swapQuick); swap("pass", "quick-pass", config::swapQuick);
swap("pass", "quick pass", config::swapQuick); swap("pass", "quick pass", config::swapQuick);
@@ -45,6 +45,7 @@ class PartyWorldMapPoint extends WorldMapPoint
this.member = member; this.member = member;
this.setSnapToEdge(true); this.setSnapToEdge(true);
this.setJumpOnClick(true); this.setJumpOnClick(true);
this.setName(member.getName());
this.setImagePoint(new Point( this.setImagePoint(new Point(
ARROW.getWidth() / 2, ARROW.getWidth() / 2,
ARROW.getHeight())); ARROW.getHeight()));
@@ -76,7 +76,16 @@ enum GameTimer
DIVINE_BATTLEMAGE(ItemID.DIVINE_BATTLEMAGE_POTION4, GameTimerImageType.ITEM, "Divine Battlemage", 5, ChronoUnit.MINUTES), DIVINE_BATTLEMAGE(ItemID.DIVINE_BATTLEMAGE_POTION4, GameTimerImageType.ITEM, "Divine Battlemage", 5, ChronoUnit.MINUTES),
ANTIPOISON(ItemID.ANTIPOISON4, GameTimerImageType.ITEM, "Antipoison", false), ANTIPOISON(ItemID.ANTIPOISON4, GameTimerImageType.ITEM, "Antipoison", false),
ANTIVENOM(ItemID.ANTIVENOM4, GameTimerImageType.ITEM, "Anti-venom", false), ANTIVENOM(ItemID.ANTIVENOM4, GameTimerImageType.ITEM, "Anti-venom", false),
TELEBLOCK(SpriteID.SPELL_TELE_BLOCK, GameTimerImageType.SPRITE, "Teleblock", true); TELEBLOCK(SpriteID.SPELL_TELE_BLOCK, GameTimerImageType.SPRITE, "Teleblock", true),
SHADOW_VEIL(SpriteID.SPELL_SHADOW_VEIL, GameTimerImageType.SPRITE, "Shadow veil", true),
RESURRECT_THRALL(SpriteID.SPELL_RESURRECT_SUPERIOR_SKELETON, GameTimerImageType.SPRITE, "Resurrect thrall", false),
WARD_OF_ARCEUUS(SpriteID.SPELL_WARD_OF_ARCEUUS, GameTimerImageType.SPRITE, "Ward of Arceuus", true),
DEATH_CHARGE(SpriteID.SPELL_DEATH_CHARGE, GameTimerImageType.SPRITE, "Death charge", false),
SHADOW_VEIL_COOLDOWN(SpriteID.SPELL_SHADOW_VEIL_DISABLED, GameTimerImageType.SPRITE, "Shadow veil cooldown", 30, ChronoUnit.SECONDS),
RESURRECT_THRALL_COOLDOWN(SpriteID.SPELL_RESURRECT_SUPERIOR_SKELETON_DISABLED, GameTimerImageType.SPRITE, "Resurrect thrall cooldown", 12, GAME_TICKS),
WARD_OF_ARCEUUS_COOLDOWN(SpriteID.SPELL_WARD_OF_ARCEUUS_DISABLED, GameTimerImageType.SPRITE, "Ward of Arceuus cooldown", 30, ChronoUnit.SECONDS),
DEATH_CHARGE_COOLDOWN(SpriteID.SPELL_DEATH_CHARGE_DISABLED, GameTimerImageType.SPRITE, "Death charge cooldown", 60, ChronoUnit.SECONDS),
CORRUPTION_COOLDOWN(SpriteID.SPELL_GREATER_CORRUPTION_DISABLED, GameTimerImageType.SPRITE, "Corruption cooldown", 30, ChronoUnit.SECONDS);
@Nullable @Nullable
private final Duration duration; private final Duration duration;
@@ -263,4 +263,24 @@ public interface TimersConfig extends Config
{ {
return true; return true;
} }
@ConfigItem(
keyName = "showArceuus",
name = "Arceuus spells duration",
description = "Whether to show Arceuus spellbook spell timers"
)
default boolean showArceuus()
{
return true;
}
@ConfigItem(
keyName = "showArceuusCooldown",
name = "Arceuus spells cooldown",
description = "Whether to show cooldown timers for Arceuus spellbook spells"
)
default boolean showArceuusCooldown()
{
return false;
}
} }
@@ -76,6 +76,7 @@ import net.runelite.client.plugins.PluginDescriptor;
import static net.runelite.client.plugins.timers.GameIndicator.VENGEANCE_ACTIVE; import static net.runelite.client.plugins.timers.GameIndicator.VENGEANCE_ACTIVE;
import static net.runelite.client.plugins.timers.GameTimer.*; import static net.runelite.client.plugins.timers.GameTimer.*;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.RSTimeUnit;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
@PluginDescriptor( @PluginDescriptor(
@@ -113,6 +114,14 @@ 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 KILLED_TELEBLOCK_OPPONENT_TEXT = "Your Tele Block has been removed because you killed ";
private static final String PRAYER_ENHANCE_EXPIRED = "<col=ff0000>Your prayer enhance effect has worn off.</col>"; private static final String PRAYER_ENHANCE_EXPIRED = "<col=ff0000>Your prayer enhance effect has worn off.</col>";
private static final String ENDURANCE_EFFECT_MESSAGE = "Your Ring of endurance doubles the duration of your stamina potion's effect."; private static final String ENDURANCE_EFFECT_MESSAGE = "Your Ring of endurance doubles the duration of your stamina potion's effect.";
private static final String SHADOW_VEIL_MESSAGE = ">Your thieving abilities have been enhanced.</col>";
private static final String DEATH_CHARGE_MESSAGE = ">Upon the death of your next foe, some of your special attack energy will be restored.</col>";
private static final String DEATH_CHARGE_ACTIVATE_MESSAGE = ">Some of your special attack energy has been restored.</col>";
private static final String RESURRECT_THRALL_MESSAGE_START = ">You resurrect a ";
private static final String RESURRECT_THRALL_MESSAGE_END = " thrall.</col>";
private static final String RESURRECT_THRALL_DISAPPEAR_MESSAGE_START = ">Your ";
private static final String RESURRECT_THRALL_DISAPPEAR_MESSAGE_END = " thrall returns to the grave.</col>";
private static final String WARD_OF_ARCEUUS_MESSAGE = ">Your defence against Arceuus magic has been strengthened.</col>";
private static final Pattern TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you(?: by .+)?\\. It will expire in (?<mins>\\d+) minutes?(?:, (?<secs>\\d+) seconds?)?\\."); private static final Pattern TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you(?: by .+)?\\. It will expire in (?<mins>\\d+) minutes?(?:, (?<secs>\\d+) seconds?)?\\.");
private static final Pattern DIVINE_POTION_PATTERN = Pattern.compile("You drink some of your divine (.+) potion\\."); private static final Pattern DIVINE_POTION_PATTERN = Pattern.compile("You drink some of your divine (.+) potion\\.");
@@ -138,6 +147,7 @@ public class TimersPlugin extends Plugin
private int lastIsVengeancedVarb; private int lastIsVengeancedVarb;
private int lastPoisonVarp; private int lastPoisonVarp;
private int lastPvpVarb; private int lastPvpVarb;
private int lastCorruptionVarb;
private int nextPoisonTick; private int nextPoisonTick;
private WorldPoint lastPoint; private WorldPoint lastPoint;
private TeleportWidget lastTeleportClicked; private TeleportWidget lastTeleportClicked;
@@ -202,6 +212,7 @@ public class TimersPlugin extends Plugin
int isVengeancedVarb = client.getVar(Varbits.VENGEANCE_ACTIVE); int isVengeancedVarb = client.getVar(Varbits.VENGEANCE_ACTIVE);
int poisonVarp = client.getVar(VarPlayer.POISON); int poisonVarp = client.getVar(VarPlayer.POISON);
int pvpVarb = client.getVar(Varbits.PVP_SPEC_ORB); int pvpVarb = client.getVar(Varbits.PVP_SPEC_ORB);
int corruptionCooldownVarb = client.getVar(Varbits.CORRUPTION_COOLDOWN);
if (lastRaidVarb != raidVarb) if (lastRaidVarb != raidVarb)
{ {
@@ -224,6 +235,20 @@ public class TimersPlugin extends Plugin
lastVengCooldownVarb = vengCooldownVarb; lastVengCooldownVarb = vengCooldownVarb;
} }
if (lastCorruptionVarb != corruptionCooldownVarb && config.showArceuusCooldown())
{
if (corruptionCooldownVarb == 1)
{
createGameTimer(CORRUPTION_COOLDOWN);
}
else
{
removeGameTimer(CORRUPTION_COOLDOWN);
}
lastCorruptionVarb = corruptionCooldownVarb;
}
if (lastIsVengeancedVarb != isVengeancedVarb && config.showVengeanceActive()) if (lastIsVengeancedVarb != isVengeancedVarb && config.showVengeanceActive())
{ {
if (isVengeancedVarb == 1) if (isVengeancedVarb == 1)
@@ -665,6 +690,55 @@ public class TimersPlugin extends Plugin
} }
} }
if (config.showArceuus())
{
Duration duration = Duration.of(client.getRealSkillLevel(Skill.MAGIC), RSTimeUnit.GAME_TICKS);
if (message.endsWith(SHADOW_VEIL_MESSAGE))
{
createGameTimer(SHADOW_VEIL, duration);
}
else if (message.endsWith(WARD_OF_ARCEUUS_MESSAGE))
{
createGameTimer(WARD_OF_ARCEUUS, duration);
}
else if (message.endsWith(DEATH_CHARGE_MESSAGE))
{
createGameTimer(DEATH_CHARGE, duration);
}
else if (message.endsWith(DEATH_CHARGE_ACTIVATE_MESSAGE))
{
removeGameTimer(DEATH_CHARGE);
}
else if (message.contains(RESURRECT_THRALL_MESSAGE_START) && message.endsWith(RESURRECT_THRALL_MESSAGE_END))
{
createGameTimer(RESURRECT_THRALL, duration);
}
else if (message.contains(RESURRECT_THRALL_DISAPPEAR_MESSAGE_START) && message.endsWith(RESURRECT_THRALL_DISAPPEAR_MESSAGE_END))
{
removeGameTimer(RESURRECT_THRALL);
}
}
if (config.showArceuusCooldown())
{
if (message.endsWith(SHADOW_VEIL_MESSAGE))
{
createGameTimer(SHADOW_VEIL_COOLDOWN);
}
else if (message.endsWith(DEATH_CHARGE_MESSAGE))
{
createGameTimer(DEATH_CHARGE_COOLDOWN);
}
else if (message.endsWith(WARD_OF_ARCEUUS_MESSAGE))
{
createGameTimer(WARD_OF_ARCEUUS_COOLDOWN);
}
else if (message.contains(RESURRECT_THRALL_MESSAGE_START) && message.endsWith(RESURRECT_THRALL_MESSAGE_END))
{
createGameTimer(RESURRECT_THRALL_COOLDOWN);
}
}
if (message.equals(TZHAAR_DEFEATED_MESSAGE) || TZHAAR_COMPLETE_MESSAGE.matcher(message).matches()) if (message.equals(TZHAAR_DEFEATED_MESSAGE) || TZHAAR_COMPLETE_MESSAGE.matcher(message).matches())
{ {
log.debug("Stopping tzhaar timer"); log.debug("Stopping tzhaar timer");
@@ -46,6 +46,7 @@ enum AgilityCourseLocation
PRIFDDINAS_AGILITY_COURSE("Prifddinas Agility Course", new WorldPoint(3253, 6109, 0)), PRIFDDINAS_AGILITY_COURSE("Prifddinas Agility Course", new WorldPoint(3253, 6109, 0)),
RELLEKKA_ROOFTOP_COURSE("Rellekka Rooftop Course", new WorldPoint(2624, 3677, 0)), RELLEKKA_ROOFTOP_COURSE("Rellekka Rooftop Course", new WorldPoint(2624, 3677, 0)),
SEERS_VILLAGE_ROOFTOP_COURSE("Seers' Village Rooftop Course", new WorldPoint(2728, 3488, 0)), SEERS_VILLAGE_ROOFTOP_COURSE("Seers' Village Rooftop Course", new WorldPoint(2728, 3488, 0)),
SHAYZIEN_COURSE("Shayzien Agility Course", new WorldPoint(1551, 3632, 0)),
VARROCK_ROOFTOP_COURSE("Varrock Rooftop Course", new WorldPoint(3219, 3414, 0)), VARROCK_ROOFTOP_COURSE("Varrock Rooftop Course", new WorldPoint(3219, 3414, 0)),
WEREWOLF_AGILITY_COURSE("Werewolf Agility Course", new WorldPoint(3542, 3463, 0)), WEREWOLF_AGILITY_COURSE("Werewolf Agility Course", new WorldPoint(3542, 3463, 0)),
WILDERNESS_AGILITY_COURSE("Wilderness Agility Course", new WorldPoint(2997, 3916, 0)); WILDERNESS_AGILITY_COURSE("Wilderness Agility Course", new WorldPoint(2997, 3916, 0));
@@ -62,11 +62,11 @@ enum KourendTaskLocation
PISCARILIUS_SANDWORMS("Piscarilius Task (30%) - Hunting Sandworms", new WorldPoint(1841, 3789, 0)), PISCARILIUS_SANDWORMS("Piscarilius Task (30%) - Hunting Sandworms", new WorldPoint(1841, 3789, 0)),
PISCARILIUS_STEALING_ARTEFACTS("Piscarilius Task (75%) - Stealing Artefacts", new WorldPoint(1849, 3753, 0)), PISCARILIUS_STEALING_ARTEFACTS("Piscarilius Task (75%) - Stealing Artefacts", new WorldPoint(1849, 3753, 0)),
SHAYZIEN_HEALING_SOLDIERS("Shayzien Task (0%) - Healing Wounded Soldiers", new WorldPoint(1572, 3581, 0)), SHAYZIEN_HEALING_SOLDIERS("Shayzien Task (0%) - Healing Wounded Soldiers", new WorldPoint(1528, 3627, 0)),
SHAYZIEN_LIZARDMEN_EAST("Shayzien Task (5%) - Killing Lizardmen", new WorldPoint(1570, 3668, 0)), SHAYZIEN_LIZARDMEN_EAST("Shayzien Task (5%) - Killing Lizardmen", new WorldPoint(1570, 3668, 0)),
SHAYZIEN_LIZARDMEN_WEST("Shayzien Task (5%) - Killing Lizardmen", new WorldPoint(1471, 3686, 0)), SHAYZIEN_LIZARDMEN_WEST("Shayzien Task (5%) - Killing Lizardmen", new WorldPoint(1471, 3686, 0)),
SHAYZIEN_ORGANIZED_CRIME("Shayzien Task (40%) - Organized Crime", new WorldPoint(1565, 3605, 0)), SHAYZIEN_ORGANIZED_CRIME("Shayzien Task (40%) - Organized Crime", new WorldPoint(1504, 3635, 0)),
SHAYZIEN_COMBAT_RING("Shayzien Task (60%) - Combat Ring", new WorldPoint(1539, 3589, 0)), SHAYZIEN_COMBAT_RING("Shayzien Task (60%) - Combat Ring", new WorldPoint(1541, 3628, 0)),
SHAYZIEN_LIZARDMAN_SHAMANS("Shayzien Unlock (100%) - Lizardman Shamans", new WorldPoint(1455, 3693, 0)); SHAYZIEN_LIZARDMAN_SHAMANS("Shayzien Unlock (100%) - Lizardman Shamans", new WorldPoint(1455, 3693, 0));
private final String tooltip; private final String tooltip;
@@ -187,9 +187,8 @@ enum MiningSiteLocation
new Rock(1, Ore.COPPER), new Rock(1, Ore.TIN), new Rock(5, Ore.IRON), new Rock(2, Ore.SILVER), new Rock(1, Ore.COAL)), new Rock(1, Ore.COPPER), new Rock(1, Ore.TIN), new Rock(5, Ore.IRON), new Rock(2, Ore.SILVER), new Rock(1, Ore.COAL)),
SALT_MINE(new WorldPoint(2835, 10334, 0), SALT_MINE(new WorldPoint(2835, 10334, 0),
new Rock(7, Ore.BASALT), new Rock(15, Ore.TE_SALT), new Rock(12, Ore.EFH_SALT), new Rock(12, Ore.URT_SALT)), new Rock(7, Ore.BASALT), new Rock(15, Ore.TE_SALT), new Rock(12, Ore.EFH_SALT), new Rock(12, Ore.URT_SALT)),
SHAYZIEN_EAST(new WorldPoint(1597, 3653, 0), new Rock(3, Ore.CLAY), new Rock(1, Ore.MITHRIL), new Rock(1, Ore.ADAMANTITE)), SHAYZIEN(new WorldPoint(1601, 3645, 0),
SHAYZIEN_WEST(new WorldPoint(1586, 3650, 0), new Rock(3, Ore.CLAY), new Rock(3, Ore.IRON), new Rock(4, Ore.COAL), new Rock(2, Ore.MITHRIL), new Rock(2, Ore.ADAMANTITE)),
new Rock(4, Ore.IRON), new Rock(4, Ore.COAL), new Rock(1, Ore.MITHRIL), new Rock(1, Ore.ADAMANTITE)),
SHILO_VILLAGE_SURFACE(new WorldPoint(2822, 3001, 0), new Rock(7, Ore.GEM_ROCK)), SHILO_VILLAGE_SURFACE(new WorldPoint(2822, 3001, 0), new Rock(7, Ore.GEM_ROCK)),
SILVAREA(new WorldPoint(3371, 3498, 0), new Rock(7, Ore.LIMESTONE)), SILVAREA(new WorldPoint(3371, 3498, 0), new Rock(7, Ore.LIMESTONE)),
SLEPE_UNDERGROUND(new WorldPoint(3888, 9749, 0), new Rock(6, Ore.IRON), new Rock(14, Ore.COAL)), SLEPE_UNDERGROUND(new WorldPoint(3888, 9749, 0), new Rock(6, Ore.IRON), new Rock(14, Ore.COAL)),
@@ -116,6 +116,7 @@ enum QuestStartLocation
ICTHLARINS_LITTLE_HELPER(Quest.ICTHLARINS_LITTLE_HELPER, new WorldPoint(3314, 2849, 0)), ICTHLARINS_LITTLE_HELPER(Quest.ICTHLARINS_LITTLE_HELPER, new WorldPoint(3314, 2849, 0)),
IN_SEARCH_OF_THE_MYREQUE(Quest.IN_SEARCH_OF_THE_MYREQUE, new WorldPoint(3502, 3477, 0)), IN_SEARCH_OF_THE_MYREQUE(Quest.IN_SEARCH_OF_THE_MYREQUE, new WorldPoint(3502, 3477, 0)),
JUNGLE_POTION(Quest.JUNGLE_POTION, new WorldPoint(2809, 3086, 0)), JUNGLE_POTION(Quest.JUNGLE_POTION, new WorldPoint(2809, 3086, 0)),
A_KINGDOM_DIVIDED(Quest.A_KINGDOM_DIVIDED, new WorldPoint(1663, 3672, 0)),
KINGS_RANSOM(Quest.KINGS_RANSOM, new WorldPoint(2741, 3554, 0)), KINGS_RANSOM(Quest.KINGS_RANSOM, new WorldPoint(2741, 3554, 0)),
LEGENDS_QUEST(Quest.LEGENDS_QUEST, new WorldPoint(2725, 3367, 0)), LEGENDS_QUEST(Quest.LEGENDS_QUEST, new WorldPoint(2725, 3367, 0)),
LOST_CITY(Quest.LOST_CITY, new WorldPoint(3149, 3205, 0)), LOST_CITY(Quest.LOST_CITY, new WorldPoint(3149, 3205, 0)),
@@ -130,6 +131,7 @@ enum QuestStartLocation
MURDER_MYSTERY(Quest.MURDER_MYSTERY, new WorldPoint(2740, 3562, 0)), MURDER_MYSTERY(Quest.MURDER_MYSTERY, new WorldPoint(2740, 3562, 0)),
MY_ARMS_BIG_ADVENTURE(Quest.MY_ARMS_BIG_ADVENTURE, new WorldPoint(2908, 10088, 0)), MY_ARMS_BIG_ADVENTURE(Quest.MY_ARMS_BIG_ADVENTURE, new WorldPoint(2908, 10088, 0)),
NATURE_SPIRIT(Quest.NATURE_SPIRIT, new WorldPoint(3440, 9894, 0)), NATURE_SPIRIT(Quest.NATURE_SPIRIT, new WorldPoint(3440, 9894, 0)),
A_NIGHT_AT_THE_THEATRE(Quest.A_NIGHT_AT_THE_THEATRE, new WorldPoint(3672, 3224, 0)),
OBSERVATORY_QUEST(Quest.OBSERVATORY_QUEST, new WorldPoint(2438, 3185, 0)), OBSERVATORY_QUEST(Quest.OBSERVATORY_QUEST, new WorldPoint(2438, 3185, 0)),
OLAFS_QUEST(Quest.OLAFS_QUEST, new WorldPoint(2723, 3729, 0)), OLAFS_QUEST(Quest.OLAFS_QUEST, new WorldPoint(2723, 3729, 0)),
ONE_SMALL_FAVOUR(Quest.ONE_SMALL_FAVOUR, new WorldPoint(2834, 2985, 0)), ONE_SMALL_FAVOUR(Quest.ONE_SMALL_FAVOUR, new WorldPoint(2834, 2985, 0)),
@@ -153,7 +155,7 @@ enum QuestStartLocation
SWAN_SONG(Quest.SWAN_SONG, new WorldPoint(2345, 3652, 0)), SWAN_SONG(Quest.SWAN_SONG, new WorldPoint(2345, 3652, 0)),
TAI_BWO_WANNAI_TRIO(Quest.TAI_BWO_WANNAI_TRIO, new WorldPoint(2779, 3087, 0)), TAI_BWO_WANNAI_TRIO(Quest.TAI_BWO_WANNAI_TRIO, new WorldPoint(2779, 3087, 0)),
A_TAIL_OF_TWO_CATS(Quest.A_TAIL_OF_TWO_CATS, new WorldPoint(2917, 3557, 0)), A_TAIL_OF_TWO_CATS(Quest.A_TAIL_OF_TWO_CATS, new WorldPoint(2917, 3557, 0)),
TALE_OF_THE_RIGHTEOUS(Quest.TALE_OF_THE_RIGHTEOUS, new WorldPoint(1511, 3631, 0)), TALE_OF_THE_RIGHTEOUS(Quest.TALE_OF_THE_RIGHTEOUS, new WorldPoint(1541, 3570, 0)),
A_TASTE_OF_HOPE(Quest.A_TASTE_OF_HOPE, new WorldPoint(3668, 3216, 0)), A_TASTE_OF_HOPE(Quest.A_TASTE_OF_HOPE, new WorldPoint(3668, 3216, 0)),
TEARS_OF_GUTHIX(Quest.TEARS_OF_GUTHIX, new WorldPoint(3251, 9517, 0)), TEARS_OF_GUTHIX(Quest.TEARS_OF_GUTHIX, new WorldPoint(3251, 9517, 0)),
TEMPLE_OF_IKOV(Quest.TEMPLE_OF_IKOV, new WorldPoint(2574, 3320, 0)), TEMPLE_OF_IKOV(Quest.TEMPLE_OF_IKOV, new WorldPoint(2574, 3320, 0)),
@@ -138,6 +138,9 @@ enum RareTreeLocation
new WorldPoint(1642, 3533, 0), new WorldPoint(1642, 3533, 0),
new WorldPoint(1671, 3657, 0), new WorldPoint(1671, 3657, 0),
new WorldPoint(1680, 3657, 0), new WorldPoint(1680, 3657, 0),
new WorldPoint(1572, 3618, 0),
new WorldPoint(1553, 3551, 0),
new WorldPoint(1496, 3582, 0),
// Tirannwn // Tirannwn
new WorldPoint(2217, 3141, 0), new WorldPoint(2217, 3141, 0),
@@ -134,7 +134,7 @@ enum TeleportLocationData
TROLL_STRONGHOLD_STONY_BASALT_OUTSIDE(TeleportType.OTHER, "Stony Basalt", "Troll Stronghold", new WorldPoint(2844, 3693, 0), "stony_basalt_teleport_icon.png"), TROLL_STRONGHOLD_STONY_BASALT_OUTSIDE(TeleportType.OTHER, "Stony Basalt", "Troll Stronghold", new WorldPoint(2844, 3693, 0), "stony_basalt_teleport_icon.png"),
KHAREDSTS_MEMOIRS_HOSIDIUS(TeleportType.OTHER, "Kharedst's Memoirs", "Lunch by the Lancalliums (Hosidius)", new WorldPoint(1713, 3612, 0), "kharedsts_memoirs_teleport_icon.png"), KHAREDSTS_MEMOIRS_HOSIDIUS(TeleportType.OTHER, "Kharedst's Memoirs", "Lunch by the Lancalliums (Hosidius)", new WorldPoint(1713, 3612, 0), "kharedsts_memoirs_teleport_icon.png"),
KHAREDSTS_MEMOIRS_PISCARILIUS(TeleportType.OTHER, "Kharedst's Memoirs", "The Fisher's Flute (Piscarilius)", new WorldPoint(1802, 3748, 0), "kharedsts_memoirs_teleport_icon.png"), KHAREDSTS_MEMOIRS_PISCARILIUS(TeleportType.OTHER, "Kharedst's Memoirs", "The Fisher's Flute (Piscarilius)", new WorldPoint(1802, 3748, 0), "kharedsts_memoirs_teleport_icon.png"),
KHAREDSTS_MEMOIRS_SHAYZIEN(TeleportType.OTHER, "Kharedst's Memoirs", "History and Hearsay (Shayzien)", new WorldPoint(1476, 3580, 0), "kharedsts_memoirs_teleport_icon.png"), KHAREDSTS_MEMOIRS_SHAYZIEN(TeleportType.OTHER, "Kharedst's Memoirs", "History and Hearsay (Shayzien)", new WorldPoint(1478, 3576, 0), "kharedsts_memoirs_teleport_icon.png"),
KHAREDSTS_MEMOIRS_LOVAKENGJ(TeleportType.OTHER, "Kharedst's Memoirs", "Jewelry of Jubilation (Lovakengj)", new WorldPoint(1544, 3762, 0), "kharedsts_memoirs_teleport_icon.png"), KHAREDSTS_MEMOIRS_LOVAKENGJ(TeleportType.OTHER, "Kharedst's Memoirs", "Jewelry of Jubilation (Lovakengj)", new WorldPoint(1544, 3762, 0), "kharedsts_memoirs_teleport_icon.png"),
KHAREDSTS_MEMOIRS_ARCEUUS(TeleportType.OTHER, "Kharedst's Memoirs", "A Dark Disposition (Arceuus)", new WorldPoint(1680, 3746, 0), "kharedsts_memoirs_teleport_icon.png"), KHAREDSTS_MEMOIRS_ARCEUUS(TeleportType.OTHER, "Kharedst's Memoirs", "A Dark Disposition (Arceuus)", new WorldPoint(1680, 3746, 0), "kharedsts_memoirs_teleport_icon.png"),
PHARAOHS_SCEPTRE_JALSAVRAH(TeleportType.OTHER, "Pharaoh's Sceptre", "Jalsavrah (Pyramid Plunder)", new WorldPoint(3288, 2795, 0), "pharaohs_sceptre_teleport_icon.png"), PHARAOHS_SCEPTRE_JALSAVRAH(TeleportType.OTHER, "Pharaoh's Sceptre", "Jalsavrah (Pyramid Plunder)", new WorldPoint(3288, 2795, 0), "pharaohs_sceptre_teleport_icon.png"),
@@ -48,6 +48,7 @@ import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.worldmap.WorldMapPoint; import net.runelite.client.ui.overlay.worldmap.WorldMapPoint;
import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager;
import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.Text;
@PluginDescriptor( @PluginDescriptor(
name = "World Map", name = "World Map",
@@ -327,6 +328,7 @@ public class WorldMapPlugin extends Plugin
.image(BLANK_ICON) .image(BLANK_ICON)
.target(l.getTarget()) .target(l.getTarget())
.jumpOnClick(l.getTarget() != null) .jumpOnClick(l.getTarget() != null)
.name(Text.titleCase(l))
.tooltip(l.getTooltip()) .tooltip(l.getTooltip())
.build() .build()
) )
@@ -42,15 +42,10 @@ public class WidgetOverlay extends Overlay
return Arrays.asList( return Arrays.asList(
new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_STONES_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_STONES_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_LEFT),
new XpTrackerWidgetOverlay(client, WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT), new XpTrackerWidgetOverlay(client, WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.RAIDS_POINTS_INFOBOX, OverlayPosition.TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.RAIDS_POINTS_INFOBOX, OverlayPosition.TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.TOB_PARTY_INTERFACE, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.TOB_PARTY_STATS, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.TOB_PARTY_STATS, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.GWD_KC, OverlayPosition.TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.TITHE_FARM, OverlayPosition.TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.TITHE_FARM, OverlayPosition.TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.PEST_CONTROL_BOAT_INFO, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT),
@@ -60,10 +55,7 @@ public class WidgetOverlay extends Overlay
new WidgetOverlay(client, WidgetInfo.LMS_KDA, OverlayPosition.TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.LMS_KDA, OverlayPosition.TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.GAUNTLET_TIMER_CONTAINER, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.GAUNTLET_TIMER_CONTAINER, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.HALLOWED_SEPULCHRE_TIMER_CONTAINER, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.HALLOWED_SEPULCHRE_TIMER_CONTAINER, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.HEALTH_OVERLAY_BAR, OverlayPosition.TOP_CENTER),
new WidgetOverlay(client, WidgetInfo.NIGHTMARE_PILLAR_HEALTH, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.NIGHTMARE_PILLAR_HEALTH, OverlayPosition.TOP_LEFT),
new WidgetOverlay(client, WidgetInfo.VOLCANIC_MINE_VENTS_INFOBOX_GROUP, OverlayPosition.BOTTOM_RIGHT),
new WidgetOverlay(client, WidgetInfo.VOLCANIC_MINE_STABILITY_INFOBOX_GROUP, OverlayPosition.BOTTOM_LEFT),
new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT), new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT),
new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZEABLE_MODERN, OverlayPosition.CANVAS_TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZEABLE_MODERN, OverlayPosition.CANVAS_TOP_RIGHT),
new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZEABLE_CLASSIC, OverlayPosition.CANVAS_TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZEABLE_CLASSIC, OverlayPosition.CANVAS_TOP_RIGHT),
@@ -25,33 +25,43 @@
package net.runelite.client.ui.overlay.worldmap; package net.runelite.client.ui.overlay.worldmap;
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.MenuAction;
import net.runelite.api.MenuEntry;
import net.runelite.api.Point; import net.runelite.api.Point;
import net.runelite.api.RenderOverview; import net.runelite.api.RenderOverview;
import net.runelite.api.coords.WorldPoint; import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.widgets.JavaScriptCallback;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.input.MouseManager; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.JagexColors; import net.runelite.client.ui.JagexColors;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayPriority;
import net.runelite.client.util.ColorUtil;
@Singleton @Singleton
public class WorldMapOverlay extends Overlay public class WorldMapOverlay extends Overlay
{ {
private static final String FOCUS_ON = "Focus on";
private static final int TOOLTIP_OFFSET_HEIGHT = 25; private static final int TOOLTIP_OFFSET_HEIGHT = 25;
private static final int TOOLTIP_OFFSET_WIDTH = 5; private static final int TOOLTIP_OFFSET_WIDTH = 5;
private static final int TOOLTIP_PADDING_HEIGHT = 1; private static final int TOOLTIP_PADDING_HEIGHT = 1;
@@ -63,12 +73,12 @@ public class WorldMapOverlay extends Overlay
private final WorldMapPointManager worldMapPointManager; private final WorldMapPointManager worldMapPointManager;
private final Client client; private final Client client;
private final List<MenuEntry> mapMenuEntries = new ArrayList<>();
@Inject @Inject
private WorldMapOverlay( private WorldMapOverlay(
Client client, Client client,
WorldMapPointManager worldMapPointManager, WorldMapPointManager worldMapPointManager)
MouseManager mouseManager,
WorldMapOverlayMouseListener worldMapOverlayMouseListener)
{ {
this.client = client; this.client = client;
this.worldMapPointManager = worldMapPointManager; this.worldMapPointManager = worldMapPointManager;
@@ -76,7 +86,6 @@ public class WorldMapOverlay extends Overlay
setPriority(OverlayPriority.HIGHEST); setPriority(OverlayPriority.HIGHEST);
setLayer(OverlayLayer.MANUAL); setLayer(OverlayLayer.MANUAL);
drawAfterInterface(WidgetID.WORLD_MAP_GROUP_ID); drawAfterInterface(WidgetID.WORLD_MAP_GROUP_ID);
mouseManager.registerMouseListener(worldMapOverlayMouseListener);
} }
@Override @Override
@@ -90,17 +99,44 @@ public class WorldMapOverlay extends Overlay
} }
Widget widget = client.getWidget(WidgetInfo.WORLD_MAP_VIEW); Widget widget = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
if (widget == null) Widget bottomBar = client.getWidget(WidgetInfo.WORLD_MAP_BOTTOM_BAR);
if (widget == null || bottomBar == null)
{ {
return null; return null;
} }
bottomBar.setOnTimerListener((JavaScriptCallback) ev ->
{
if (client.isMenuOpen() || mapMenuEntries.isEmpty())
{
return;
}
MenuEntry[] entries = client.getMenuEntries();
int end = entries.length;
entries = Arrays.copyOf(entries, end + mapMenuEntries.size());
for (int i = 0; i < mapMenuEntries.size(); i++)
{
entries[end + i] = mapMenuEntries.get(i);
}
client.setMenuEntries(entries);
});
bottomBar.setHasListener(true);
final Rectangle worldMapRectangle = widget.getBounds(); final Rectangle worldMapRectangle = widget.getBounds();
final Area mapViewArea = getWorldMapClipArea(worldMapRectangle); final Area mapViewArea = getWorldMapClipArea(worldMapRectangle);
final Rectangle canvasBounds = new Rectangle(0, 0, client.getCanvasWidth(), client.getCanvasHeight()); final Rectangle canvasBounds = new Rectangle(0, 0, client.getCanvasWidth(), client.getCanvasHeight());
final Area canvasViewArea = getWorldMapClipArea(canvasBounds); final Area canvasViewArea = getWorldMapClipArea(canvasBounds);
Area currentClip = null; Area currentClip = null;
Point mousePos = client.getMouseCanvasPosition();
if (!canvasViewArea.contains(mousePos.getX(), mousePos.getY()))
{
mousePos = null;
}
mapMenuEntries.clear();
WorldMapPoint tooltipPoint = null; WorldMapPoint tooltipPoint = null;
for (WorldMapPoint worldPoint : points) for (WorldMapPoint worldPoint : points)
@@ -111,10 +147,8 @@ public class WorldMapOverlay extends Overlay
if (image != null && point != null) if (image != null && point != null)
{ {
Point drawPoint = mapWorldPointToGraphicsPoint(point); Point drawPoint = mapWorldPointToGraphicsPoint(point);
if (drawPoint == null) if (drawPoint == null)
{ {
worldPoint.setClickbox(null);
continue; continue;
} }
@@ -183,13 +217,38 @@ public class WorldMapOverlay extends Overlay
graphics.drawImage(image, drawX, drawY, null); graphics.drawImage(image, drawX, drawY, null);
Rectangle clickbox = new Rectangle(drawX, drawY, image.getWidth(), image.getHeight()); Rectangle clickbox = new Rectangle(drawX, drawY, image.getWidth(), image.getHeight());
worldPoint.setClickbox(clickbox); if (mousePos != null && clickbox.contains(mousePos.getX(), mousePos.getY()))
{
if (worldPoint.isTooltipVisible()) if (!Strings.isNullOrEmpty(worldPoint.getTooltip()))
{ {
tooltipPoint = worldPoint; tooltipPoint = worldPoint;
} }
if (worldPoint.isJumpOnClick())
{
assert worldPoint.getName() != null;
WorldPoint target = worldPoint.getTarget();
if (target == null)
{
target = worldPoint.getWorldPoint();
} }
MenuEntry entry = new MenuEntry();
entry.setType(MenuAction.RUNELITE.getId());
entry.setOption(FOCUS_ON);
entry.setTarget(ColorUtil.wrapWithColorTag(worldPoint.getName(), JagexColors.MENU_TARGET));
entry.setIdentifier(target.getPlane() << 28 | target.getX() << 14 | target.getY());
mapMenuEntries.add(entry);
}
}
}
}
final Widget rsTooltip = client.getWidget(WidgetInfo.WORLD_MAP_TOOLTIP);
if (rsTooltip != null)
{
rsTooltip.setHidden(tooltipPoint != null);
} }
if (tooltipPoint != null) if (tooltipPoint != null)
@@ -200,8 +259,24 @@ public class WorldMapOverlay extends Overlay
return null; return null;
} }
@Subscribe
private void onMenuOptionClicked(MenuOptionClicked ev)
{
if (ev.getMenuAction() == MenuAction.RUNELITE && FOCUS_ON.equals(ev.getMenuOption()))
{
int pxy = ev.getId();
WorldPoint wp = new WorldPoint(
pxy >> 14 & 0x3fff,
pxy & 0x3fff,
pxy >> 28);
client.getRenderOverview().setWorldMapPositionTarget(wp);
}
}
/** /**
* Get the screen coordinates for a WorldPoint on the world map * Get the screen coordinates for a WorldPoint on the world map
*
* @param worldPoint WorldPoint to get screen coordinates of * @param worldPoint WorldPoint to get screen coordinates of
* @return Point of screen coordinates of the center of the world point * @return Point of screen coordinates of the center of the world point
*/ */
@@ -214,7 +289,7 @@ public class WorldMapOverlay extends Overlay
return null; return null;
} }
Float pixelsPerTile = ro.getWorldMapZoom(); float pixelsPerTile = ro.getWorldMapZoom();
Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW); Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
if (map != null) if (map != null)
@@ -1,166 +0,0 @@
/*
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.ui.overlay.worldmap;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.swing.SwingUtilities;
import net.runelite.api.Client;
import net.runelite.api.Point;
import net.runelite.api.RenderOverview;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.input.MouseAdapter;
@Singleton
public class WorldMapOverlayMouseListener extends MouseAdapter
{
private final Client client;
private final WorldMapPointManager worldMapPointManager;
private WorldMapPoint tooltipPoint = null;
@Inject
private WorldMapOverlayMouseListener(Client client, WorldMapPointManager worldMapPointManager)
{
this.client = client;
this.worldMapPointManager = worldMapPointManager;
}
@Override
public MouseEvent mousePressed(MouseEvent e)
{
final List<WorldMapPoint> worldMapPoints = worldMapPointManager.getWorldMapPoints();
if (SwingUtilities.isLeftMouseButton(e) && !worldMapPoints.isEmpty())
{
Point mousePos = client.getMouseCanvasPosition();
final Widget view = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
if (view == null)
{
return e;
}
for (WorldMapPoint worldMapPoint : worldMapPoints)
{
Rectangle clickbox = worldMapPoint.getClickbox();
if (clickbox != null && clickbox.contains(mousePos.getX(), mousePos.getY()))
{
if (worldMapPoint.isJumpOnClick())
{
// jump map to target, or position of point
WorldPoint target = worldMapPoint.getTarget();
if (target == null)
{
target = worldMapPoint.getWorldPoint();
}
RenderOverview renderOverview = client.getRenderOverview();
renderOverview.setWorldMapPositionTarget(target);
}
e.consume();
return worldMapPoint.onClick(e);
}
}
}
return e;
}
@Override
public MouseEvent mouseMoved(MouseEvent mouseEvent)
{
final List<WorldMapPoint> worldMapPoints = worldMapPointManager.getWorldMapPoints();
if (worldMapPoints.isEmpty())
{
return mouseEvent;
}
final Point mousePos = client.getMouseCanvasPosition();
final Widget view = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
if (view == null)
{
return mouseEvent;
}
final Rectangle worldMapDisplay = view.getBounds();
if (worldMapDisplay == null || !worldMapDisplay.contains(mousePos.getX(), mousePos.getY()))
{
if (tooltipPoint != null)
{
tooltipPoint.setTooltipVisible(false);
tooltipPoint = null;
final Widget rsTooltip = client.getWidget(WidgetInfo.WORLD_MAP_TOOLTIP);
if (rsTooltip != null)
{
rsTooltip.setHidden(false);
}
}
return mouseEvent;
}
if (tooltipPoint != null)
{
if (tooltipPoint.getClickbox() != null
&& tooltipPoint.getClickbox().contains(mousePos.getX(), mousePos.getY()))
{
return mouseEvent;
}
else
{
tooltipPoint.setTooltipVisible(false);
tooltipPoint = null;
final Widget rsTooltip = client.getWidget(WidgetInfo.WORLD_MAP_TOOLTIP);
if (rsTooltip != null)
{
rsTooltip.setHidden(false);
}
}
}
for (WorldMapPoint worldMapPoint : worldMapPointManager.getWorldMapPoints())
{
if (worldMapPoint.getClickbox() != null
&& worldMapPoint.getClickbox().contains(mousePos.getX(), mousePos.getY())
&& worldMapPoint.getTooltip() != null)
{
worldMapPoint.setTooltipVisible(true);
tooltipPoint = worldMapPoint;
final Widget rsTooltip = client.getWidget(WidgetInfo.WORLD_MAP_TOOLTIP);
if (rsTooltip != null)
{
rsTooltip.setHidden(true);
}
return mouseEvent;
}
}
return mouseEvent;
}
}
@@ -24,8 +24,6 @@
*/ */
package net.runelite.client.ui.overlay.worldmap; package net.runelite.client.ui.overlay.worldmap;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import lombok.Data; import lombok.Data;
@@ -53,8 +51,6 @@ public class WorldMapPoint
*/ */
private Point imagePoint; private Point imagePoint;
private Rectangle clickbox;
private boolean snapToEdge; private boolean snapToEdge;
private boolean currentlyEdgeSnapped; private boolean currentlyEdgeSnapped;
@@ -64,7 +60,10 @@ public class WorldMapPoint
*/ */
private boolean jumpOnClick; private boolean jumpOnClick;
private boolean tooltipVisible; /**
* Name in menu option when {@link #jumpOnClick} is set
*/
private String name;
private String tooltip; private String tooltip;
@@ -74,11 +73,6 @@ public class WorldMapPoint
this.image = image; this.image = image;
} }
public MouseEvent onClick(MouseEvent e)
{
return e;
}
public void onEdgeSnap() public void onEdgeSnap()
{ {
} }
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

@@ -6,6 +6,12 @@
"name": "Gnome Stronghold", "name": "Gnome Stronghold",
"xp": 86.5 "xp": 86.5
}, },
{
"level": 5,
"icon": 13359,
"name": "Shayzien Basic Course",
"xp": 133.2
},
{ {
"level": 10, "level": 10,
"icon": 11849, "icon": 11849,
@@ -66,6 +72,12 @@
"name": "Ape Atoll", "name": "Ape Atoll",
"xp": 580 "xp": 580
}, },
{
"level": 48,
"icon": 13379,
"name": "Shayzien Advanced Course",
"xp": 474.3
},
{ {
"level": 50, "level": 50,
"icon": 11849, "icon": 11849,
@@ -180,12 +180,24 @@
"name": "Fire Bolt", "name": "Fire Bolt",
"xp": 22.5 "xp": 22.5
}, },
{
"level": 35,
"sprite": 1267,
"name": "Ghostly Grasp",
"xp": 22.5
},
{ {
"level": 37, "level": 37,
"sprite": 33, "sprite": 33,
"name": "Falador Teleport", "name": "Falador Teleport",
"xp": 48 "xp": 48
}, },
{
"level": 38,
"sprite": 1270,
"name": "Resurrect Lesser Thrall",
"xp": 55
},
{ {
"level": 39, "level": 39,
"sprite": 34, "sprite": 34,
@@ -222,6 +234,12 @@
"name": "Superheat Item", "name": "Superheat Item",
"xp": 53 "xp": 53
}, },
{
"level": 44,
"sprite": 1302,
"name": "Inferior Demonbane",
"xp": 27
},
{ {
"level": 45, "level": 45,
"sprite": 37, "sprite": 37,
@@ -234,6 +252,12 @@
"name": "Water Blast", "name": "Water Blast",
"xp": 28.5 "xp": 28.5
}, },
{
"level": 47,
"sprite": 1315,
"name": "Shadow Veil",
"xp": 58
},
{ {
"level": 48, "level": 48,
"sprite": 1259, "sprite": 1259,
@@ -276,6 +300,12 @@
"name": "Snare", "name": "Snare",
"xp": 60 "xp": 60
}, },
{
"level": 50,
"sprite": 1316,
"name": "Dark Lure",
"xp": 60
},
{ {
"level": 51, "level": 51,
"sprite": 54, "sprite": 54,
@@ -318,6 +348,12 @@
"name": "Blood Rush", "name": "Blood Rush",
"xp": 33 "xp": 33
}, },
{
"level": 56,
"sprite": 1268,
"name": "Skeletal Grasp",
"xp": 33
},
{ {
"level": 57, "level": 57,
"sprite": 358, "sprite": 358,
@@ -330,6 +366,12 @@
"name": "Enchant Diamond Jewellery", "name": "Enchant Diamond Jewellery",
"xp": 67 "xp": 67
}, },
{
"level": 57,
"sprite": 2981,
"name": "Resurrect Superior Thrall",
"xp": 70
},
{ {
"level": 58, "level": 58,
"sprite": 55, "sprite": 55,
@@ -348,6 +390,12 @@
"name": "Fire Blast", "name": "Fire Blast",
"xp": 34.5 "xp": 34.5
}, },
{
"level": 59,
"sprite": 1305,
"name": "Mark of Darkness",
"xp": 70
},
{ {
"level": 60, "level": 60,
"sprite": 342, "sprite": 342,
@@ -408,6 +456,12 @@
"name": "Wind Wave", "name": "Wind Wave",
"xp": 36 "xp": 36
}, },
{
"level": 62,
"sprite": 1303,
"name": "Superior Demonbane",
"xp": 36
},
{ {
"level": 63, "level": 63,
"sprite": 47, "sprite": 47,
@@ -426,6 +480,12 @@
"name": "Teleport Ape Atoll", "name": "Teleport Ape Atoll",
"xp": 74 "xp": 74
}, },
{
"level": 64,
"sprite": 1307,
"name": "Lesser Corruption",
"xp": 75
},
{ {
"level": 65, "level": 65,
"sprite": 543, "sprite": 543,
@@ -480,6 +540,12 @@
"name": "Monster Examine", "name": "Monster Examine",
"xp": 61 "xp": 61
}, },
{
"level": 66,
"sprite": 1317,
"name": "Vile Vigour",
"xp": 76
},
{ {
"level": 67, "level": 67,
"sprite": 568, "sprite": 568,
@@ -540,6 +606,12 @@
"name": "Tele Group Moonclan", "name": "Tele Group Moonclan",
"xp": 67 "xp": 67
}, },
{
"level": 70,
"sprite": 1318,
"name": "Degrime",
"xp": 83
},
{ {
"level": 71, "level": 71,
"sprite": 586, "sprite": 586,
@@ -594,6 +666,12 @@
"name": "Enfeeble", "name": "Enfeeble",
"xp": 83 "xp": 83
}, },
{
"level": 73,
"sprite": 1306,
"name": "Ward of Arceuus",
"xp": 83
},
{ {
"level": 74, "level": 74,
"sprite": 349, "sprite": 349,
@@ -648,6 +726,12 @@
"name": "Spin Flax", "name": "Spin Flax",
"xp": 75 "xp": 75
}, },
{
"level": 76,
"sprite": 2984,
"name": "Resurrect Greater Thrall",
"xp": 88
},
{ {
"level": 77, "level": 77,
"sprite": 548, "sprite": 548,
@@ -696,6 +780,12 @@
"name": "Dream", "name": "Dream",
"xp": 82 "xp": 82
}, },
{
"level": 79,
"sprite": 1269,
"name": "Undead Grasp",
"xp": 46.5
},
{ {
"level": 80, "level": 80,
"sprite": 322, "sprite": 322,
@@ -720,6 +810,12 @@
"name": "String Jewellery", "name": "String Jewellery",
"xp": 83 "xp": 83
}, },
{
"level": 80,
"sprite": 1310,
"name": "Death Charge",
"xp": 90
},
{ {
"level": 81, "level": 81,
"sprite": 554, "sprite": 554,
@@ -750,6 +846,12 @@
"name": "Ice Blitz", "name": "Ice Blitz",
"xp": 46 "xp": 46
}, },
{
"level": 82,
"sprite": 1304,
"name": "Dark Demonbane",
"xp": 43.5
},
{ {
"level": 83, "level": 83,
"sprite": 553, "sprite": 553,
@@ -774,6 +876,12 @@
"name": "Boost Potion Share", "name": "Boost Potion Share",
"xp": 88 "xp": 88
}, },
{
"level": 84,
"sprite": 1311,
"name": "Demonic Offering",
"xp": 175
},
{ {
"level": 85, "level": 85,
"sprite": 363, "sprite": 363,
@@ -798,6 +906,12 @@
"name": "Teleport To Bounty Target", "name": "Teleport To Bounty Target",
"xp": 45 "xp": 45
}, },
{
"level": 85,
"sprite": 1308,
"name": "Greater Corruption",
"xp": 95
},
{ {
"level": 86, "level": 86,
"sprite": 332, "sprite": 332,
@@ -912,6 +1026,12 @@
"name": "Heal Other", "name": "Heal Other",
"xp": 101 "xp": 101
}, },
{
"level": 92,
"sprite": 1312,
"name": "Sinister Offering",
"xp": 180
},
{ {
"level": 93, "level": 93,
"sprite": 561, "sprite": 561,
@@ -168,6 +168,41 @@
"xp": 1560, "xp": 1560,
"ignoreBonus": true "ignoreBonus": true
}, },
{
"level": 1,
"icon": 25766,
"name": "Fiendish Ashes",
"xp": 10,
"ignoreBonus": true
},
{
"level": 1,
"icon": 25769,
"name": "Vile Ashes",
"xp": 25,
"ignoreBonus": true
},
{
"level": 1,
"icon": 25772,
"name": "Malicious Ashes",
"xp": 65,
"ignoreBonus": true
},
{
"level": 1,
"icon": 25775,
"name": "Abyssal Ashes",
"xp": 85,
"ignoreBonus": true
},
{
"level": 1,
"icon": 25778,
"name": "Infernal Ashes",
"xp": 110,
"ignoreBonus": true
},
{ {
"level": 1, "level": 1,
"icon": 526, "icon": 526,
@@ -1,2 +1,2 @@
oprs.api.version=1.1.0 oprs.api.version=2.0.0
oprs.version=@open.osrs.version@ oprs.version=@open.osrs.version@
@@ -1 +1 @@
28D9B0BC06E4C832129BE800E1F53A8DD6C6C5F1277EF038C49E92C8648E9F44 D8865833BC828A91FC7D4A10B6A7629786ED2099E2F45689BECD55A9E933323D
File diff suppressed because it is too large Load Diff
@@ -1 +1 @@
4B4BC80A1E1C22193721F88794D320A50B87ED1351BD56F9C01D4D8355EA91F4 BADE5769E553D84CF031C4D278466E46B74E12CF62A3351646CD1C504D7A426A
@@ -1,8 +1,8 @@
.id 89 .id 89
.int_stack_count 1 .int_stack_count 1
.string_stack_count 0 .string_stack_count 0
.int_var_count 19 .int_var_count 20
.string_var_count 6 .string_var_count 7
iconst 0 iconst 0
istore 1 istore 1
iconst 2 iconst 2
@@ -62,7 +62,7 @@ LABEL49:
iconst 73 iconst 73
iconst 73 iconst 73
iload 6 iload 6
iconst 10551328 iconst 10551333
enum enum
if_getheight if_getheight
add add
@@ -181,71 +181,79 @@ LABEL156:
istore 14 istore 14
sconst "" sconst ""
sstore 2 sstore 2
iconst 0
istore 15
sconst "" sconst ""
sstore 3 sstore 3
sconst ""
sstore 4
iconst -1 iconst -1
istore 15
iconst 0
istore 16 istore 16
iconst 0
istore 17
sconst "<col=00ffff>" sconst "<col=00ffff>"
sstore 4 sstore 5
sconst "<col=ffff00>" sconst "<col=ffff00>"
sstore 5 sstore 6
sload 4
sload 5 sload 5
sload 6
invoke 4485 invoke 4485
sstore 6
sstore 5 sstore 5
sstore 4
get_varc_int 55 get_varc_int 55
get_varc_int 202 get_varc_int 202
if_icmpge LABEL185 if_icmpge LABEL189
jump LABEL311 jump LABEL319
LABEL185: LABEL189:
get_varc_int 55 get_varc_int 55
clientclock clientclock
iconst 3000 iconst 3000
sub sub
if_icmpgt LABEL191 if_icmpgt LABEL195
jump LABEL311 jump LABEL319
LABEL191: LABEL195:
iconst 14 iconst 14
chat_gethistorylength chat_gethistorylength
iconst 0 iconst 0
if_icmpgt LABEL196 if_icmpgt LABEL200
jump LABEL311 jump LABEL319
LABEL196: LABEL200:
iconst 14 iconst 14
iconst 0 iconst 0
chat_gethistory_bytypeandline 5030
istore 15
sstore 2
istore 14 istore 14
sstore 0 sstore 0
sstore 2 sstore 3
sstore 1 sstore 1
istore 13 istore 13
istore 12 istore 12
iload 12 iload 12
iconst -1 iconst -1
if_icmpne LABEL209 if_icmpne LABEL215
jump LABEL311 jump LABEL319
LABEL209: LABEL215:
sload 0 sload 0
invoke 2066 invoke 2066
istore 15 istore 16
sstore 3 sstore 4
sstore 0 sstore 0
iload 15 iload 16
iconst 4 iconst 4
if_icmpne LABEL221 if_icmpne LABEL227
reboottimer reboottimer
iconst 0 iconst 0
if_icmple LABEL221 if_icmple LABEL227
jump LABEL311 jump LABEL319
LABEL221: LABEL227:
iload 7 iload 7
sload 5 sload 2
sload 6
sload 0 sload 0
sconst "</col>" sconst "</col>"
join_string 3 join_string 3
invoke 4742
iload 9 iload 9
iload 10 iload 10
iconst 10682368 iconst 10682368
@@ -262,17 +270,17 @@ LABEL221:
istore 7 istore 7
iload 10 iload 10
if_clearops if_clearops
sload 3 sload 4
string_length string_length
iconst 0 iconst 0
if_icmpgt LABEL247 if_icmpgt LABEL255
jump LABEL276 jump LABEL284
LABEL247: LABEL255:
iload 15 iload 16
iconst -1 iconst -1
if_icmpne LABEL251 if_icmpne LABEL259
jump LABEL276 jump LABEL284
LABEL251: LABEL259:
iconst 6 iconst 6
sconst "Open" sconst "Open"
iload 10 iload 10
@@ -297,8 +305,8 @@ LABEL251:
sconst "Iii" sconst "Iii"
iload 10 iload 10
if_setonmouseleave if_setonmouseleave
jump LABEL284 jump LABEL292
LABEL276: LABEL284:
iconst -1 iconst -1
sconst "" sconst ""
iload 10 iload 10
@@ -307,7 +315,7 @@ LABEL276:
sconst "" sconst ""
iload 10 iload 10
if_setonmouseleave if_setonmouseleave
LABEL284: LABEL292:
iconst 9 iconst 9
sconst "Clear history" sconst "Clear history"
iload 10 iload 10
@@ -320,8 +328,8 @@ LABEL284:
if_setopbase if_setopbase
iconst 2064 iconst 2064
iconst -2147483644 iconst -2147483644
sload 3 sload 4
iload 15 iload 16
sconst "isi" sconst "isi"
iload 10 iload 10
if_setonop if_setonop
@@ -335,63 +343,65 @@ LABEL284:
iload 9 iload 9
enum enum
istore 10 istore 10
LABEL311: LABEL319:
iload 0 iload 0
istore 12 istore 12
iconst 0 iconst 0
istore 17
invoke 4487
istore 18 istore 18
invoke 4487
istore 19
get_varp 287 get_varp 287
iconst 1 iconst 1
if_icmpeq LABEL321 if_icmpeq LABEL329
jump LABEL536 jump LABEL554
LABEL321: LABEL329:
get_varc_int 41 get_varc_int 41
iconst 1337 iconst 1337
if_icmpne LABEL328 if_icmpne LABEL336
get_varbit 4089 get_varbit 4089
iconst 0 iconst 0
if_icmpeq LABEL328 if_icmpeq LABEL336
jump LABEL536 jump LABEL554
LABEL328: LABEL336:
iload 12 iload 12
iconst -1 iconst -1
if_icmpne LABEL332 if_icmpne LABEL340
jump LABEL536 jump LABEL554
LABEL332: LABEL340:
iload 10 iload 10
iconst -1 iconst -1
if_icmpne LABEL336 if_icmpne LABEL344
jump LABEL536 jump LABEL554
LABEL336: LABEL344:
iload 7 iload 7
iload 4 iload 4
sub sub
iconst 57 iconst 57
if_icmplt LABEL342 if_icmplt LABEL350
jump LABEL536 jump LABEL554
LABEL342: LABEL350:
iload 12 iload 12
chat_gethistory_byuid 5031
istore 15
sstore 2
istore 14 istore 14
sstore 0 sstore 0
sstore 2 sstore 3
sstore 1 sstore 1
istore 13 istore 13
istore 17 istore 18
iload 17 iload 18
sload 1 sload 1
iload 13 iload 13
iload 14 iload 14
invoke 91 invoke 91
iconst 1 iconst 1
if_icmpeq CHAT_FILTER ; Jump to our new label instead if_icmpeq CHAT_FILTER ; Jump to our new label instead
jump LABEL532 jump LABEL550
CHAT_FILTER: CHAT_FILTER:
sload 0 ; Load the message sload 0 ; Load the message
iconst 1 ; Gets changed to 0 if message is blocked iconst 1 ; Gets changed to 0 if message is blocked
iload 17 ; Load the messageType iload 18 ; Load the messageType
iload 12 ; Load the id of the messageNode iload 12 ; Load the id of the messageNode
sconst "chatFilterCheck" sconst "chatFilterCheck"
runelite_callback runelite_callback
@@ -399,23 +409,24 @@ CHAT_FILTER:
pop_int ; Pop the messageType pop_int ; Pop the messageType
iconst 1 ; 2nd half of conditional iconst 1 ; 2nd half of conditional
sstore 0 ; Override the message with our filtered message sstore 0 ; Override the message with our filtered message
if_icmpeq LABEL358 ; Check if we are building this message if_icmpeq LABEL368 ; Check if we are building this message
jump LABEL532 jump LABEL550
LABEL358: LABEL368:
iload 12 ; message uid iload 12 ; message uid
sconst "chatMessageBuilding" sconst "chatMessageBuilding"
runelite_callback runelite_callback
pop_int pop_int
iload 17 iload 18
switch switch
3: LABEL361 3: LABEL371
5: LABEL413 5: LABEL427
6: LABEL387 6: LABEL399
7: LABEL361 7: LABEL371
jump LABEL448 jump LABEL464
LABEL361: LABEL371:
iload 7 iload 7
sload 4 sload 2
sload 5
sconst "splitPrivChatUsernameColor" sconst "splitPrivChatUsernameColor"
runelite_callback runelite_callback
sconst "From " sconst "From "
@@ -423,7 +434,8 @@ LABEL361:
sconst ":" sconst ":"
sconst "</col>" sconst "</col>"
join_string 5 join_string 5
sload 4 invoke 4742
sload 5
sload 0 sload 0
sconst "</col>" sconst "</col>"
join_string 3 join_string 3
@@ -441,10 +453,11 @@ LABEL361:
invoke 203 invoke 203
add add
istore 7 istore 7
jump LABEL464 jump LABEL482
LABEL387: LABEL399:
iload 7 iload 7
sload 4 sload 2
sload 5
sconst "splitPrivChatUsernameColor" sconst "splitPrivChatUsernameColor"
runelite_callback runelite_callback
sconst "To " sconst "To "
@@ -452,7 +465,8 @@ LABEL387:
sconst ":" sconst ":"
sconst "</col>" sconst "</col>"
join_string 5 join_string 5
sload 4 invoke 4742
sload 5
sload 0 sload 0
sconst "</col>" sconst "</col>"
join_string 3 join_string 3
@@ -470,13 +484,15 @@ LABEL387:
invoke 203 invoke 203
add add
istore 7 istore 7
jump LABEL464 jump LABEL482
LABEL413: LABEL427:
iload 7 iload 7
sload 4 sload 2
sload 5
sload 0 sload 0
sconst "</col>" sconst "</col>"
join_string 3 join_string 3
invoke 4742
iload 9 iload 9
iload 10 iload 10
iconst 10682368 iconst 10682368
@@ -491,11 +507,11 @@ LABEL413:
invoke 199 invoke 199
add add
istore 7 istore 7
iload 18 iload 19
iconst 0 iconst 0
if_icmpeq LABEL436 if_icmpeq LABEL452
jump LABEL447 jump LABEL463
LABEL436: LABEL452:
iload 13 iload 13
iconst 500 iconst 500
add add
@@ -507,11 +523,13 @@ LABEL436:
sconst "1" sconst "1"
iconst 10616832 iconst 10616832
if_setontimer if_setontimer
LABEL447: LABEL463:
jump LABEL464 jump LABEL482
LABEL448: LABEL464:
iload 7 iload 7
sload 2
sload 0 sload 0
invoke 4742
iload 9 iload 9
iload 10 iload 10
iconst 10682368 iconst 10682368
@@ -526,31 +544,31 @@ LABEL448:
invoke 199 invoke 199
add add
istore 7 istore 7
LABEL464: LABEL482:
iload 10 iload 10
if_clearops if_clearops
iload 17 iload 18
iconst 3 iconst 3
if_icmpeq LABEL476 if_icmpeq LABEL494
iload 17 iload 18
iconst 6 iconst 6
if_icmpeq LABEL476 if_icmpeq LABEL494
iload 17 iload 18
iconst 7 iconst 7
if_icmpeq LABEL476 if_icmpeq LABEL494
jump LABEL510 jump LABEL528
LABEL476: LABEL494:
iload 14 iload 14
iconst 1 iconst 1
if_icmpeq LABEL480 if_icmpeq LABEL498
jump LABEL485 jump LABEL503
LABEL480: LABEL498:
iconst 8 iconst 8
sconst "Message" sconst "Message"
iload 10 iload 10
if_setop if_setop
jump LABEL493 jump LABEL511
LABEL485: LABEL503:
iconst 8 iconst 8
sconst "Add friend" sconst "Add friend"
iload 10 iload 10
@@ -559,7 +577,7 @@ LABEL485:
sconst "Add ignore" sconst "Add ignore"
iload 10 iload 10
if_setop if_setop
LABEL493: LABEL511:
iconst 10 iconst 10
sconst "Report" sconst "Report"
iload 10 iload 10
@@ -576,13 +594,13 @@ LABEL493:
sconst "is" sconst "is"
iload 10 iload 10
if_setonop if_setonop
jump LABEL514 jump LABEL532
LABEL510: LABEL528:
iconst -1 iconst -1
sconst "" sconst ""
iload 10 iload 10
if_setonop if_setonop
LABEL514: LABEL532:
iconst -1 iconst -1
sconst "" sconst ""
iload 10 iload 10
@@ -601,17 +619,17 @@ LABEL514:
iload 9 iload 9
enum enum
istore 10 istore 10
LABEL532: LABEL550:
iload 12 iload 12
chat_getprevuid chat_getprevuid
istore 12 istore 12
jump LABEL328 jump LABEL336
LABEL536: LABEL554:
iload 10 iload 10
iconst -1 iconst -1
if_icmpne LABEL540 if_icmpne LABEL558
jump LABEL623 jump LABEL641
LABEL540: LABEL558:
iload 10 iload 10
if_clearops if_clearops
iconst -1 iconst -1
@@ -638,14 +656,14 @@ LABEL540:
multiply multiply
cc_find cc_find
iconst 1 iconst 1
if_icmpeq LABEL568 if_icmpeq LABEL586
jump LABEL572 jump LABEL590
LABEL568: LABEL586:
sconst "" sconst ""
cc_settext cc_settext
iconst 1 iconst 1
cc_sethide cc_sethide
LABEL572: LABEL590:
iconst 10682368 iconst 10682368
iload 9 iload 9
iconst 4 iconst 4
@@ -654,14 +672,14 @@ LABEL572:
add add
cc_find cc_find
iconst 1 iconst 1
if_icmpeq LABEL582 if_icmpeq LABEL600
jump LABEL586 jump LABEL604
LABEL582: LABEL600:
sconst "" sconst ""
cc_settext cc_settext
iconst 1 iconst 1
cc_sethide cc_sethide
LABEL586: LABEL604:
iconst 10682368 iconst 10682368
iload 9 iload 9
iconst 4 iconst 4
@@ -670,14 +688,14 @@ LABEL586:
add add
cc_find cc_find
iconst 1 iconst 1
if_icmpeq LABEL596 if_icmpeq LABEL614
jump LABEL600 jump LABEL618
LABEL596: LABEL614:
sconst "" sconst ""
cc_settext cc_settext
iconst 1 iconst 1
cc_sethide cc_sethide
LABEL600: LABEL618:
iconst 10682368 iconst 10682368
iload 9 iload 9
iconst 4 iconst 4
@@ -686,12 +704,12 @@ LABEL600:
add add
cc_find cc_find
iconst 1 iconst 1
if_icmpeq LABEL610 if_icmpeq LABEL628
jump LABEL612 jump LABEL630
LABEL610: LABEL628:
iconst 1 iconst 1
cc_sethide cc_sethide
LABEL612: LABEL630:
iload 9 iload 9
iconst 1 iconst 1
add add
@@ -702,6 +720,6 @@ LABEL612:
iload 9 iload 9
enum enum
istore 10 istore 10
jump LABEL536 jump LABEL554
LABEL623: LABEL641:
return return
@@ -1 +1 @@
1D8F698FFDA4B0D72798938A0EFB4D7F58988E9AF3FA706A7CD9402FE14E201C C3095F0E7973E9EF0E8035AF4B4AC7CE28D692B71A63DE31B7820F1D2AB09F2E
@@ -20,11 +20,11 @@
1131: LABEL9 1131: LABEL9
jump LABEL204 jump LABEL204
LABEL9: LABEL9:
iconst 10747939 iconst 10747944
if_getwidth if_getwidth
iconst 33 iconst 33
sub sub
iconst 10747939 iconst 10747944
if_getheight if_getheight
istore 3 istore 3
istore 2 istore 2
@@ -33,7 +33,7 @@ LABEL9:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551328 iconst 10551333
enum enum
if_getwidth if_getwidth
sub sub
@@ -48,7 +48,7 @@ LABEL9:
LABEL29: LABEL29:
iconst 0 iconst 0
iload 3 iload 3
iconst 10747954 iconst 10747959
if_getheight if_getheight
add add
iconst 2 iconst 2
@@ -56,14 +56,14 @@ LABEL29:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10747971 iconst 10747976
enum enum
if_setposition if_setposition
iconst 0 iconst 0
iload 3 iload 3
iconst 2 iconst 2
iconst 2 iconst 2
iconst 10747954 iconst 10747959
if_setposition if_setposition
jump LABEL65 jump LABEL65
LABEL49: LABEL49:
@@ -74,14 +74,14 @@ LABEL49:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10747971 iconst 10747976
enum enum
if_setposition if_setposition
iload 2 iload 2
iconst 0 iconst 0
iconst 2 iconst 2
iconst 2 iconst 2
iconst 10747954 iconst 10747959
if_setposition if_setposition
LABEL65: LABEL65:
get_varbit 4084 get_varbit 4084
@@ -93,7 +93,7 @@ LABEL69:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551324 iconst 10551329
enum enum
2122 2122
jump LABEL84 jump LABEL84
@@ -102,7 +102,7 @@ LABEL77:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551324 iconst 10551329
enum enum
2122 2122
LABEL84: LABEL84:
@@ -119,7 +119,7 @@ LABEL91:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551324 iconst 10551329
enum enum
2122 2122
jump LABEL106 jump LABEL106
@@ -128,7 +128,7 @@ LABEL99:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551324 iconst 10551329
enum enum
2122 2122
LABEL106: LABEL106:
@@ -145,7 +145,7 @@ LABEL113:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551324 iconst 10551329
enum enum
2122 2122
jump LABEL128 jump LABEL128
@@ -154,7 +154,7 @@ LABEL121:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551324 iconst 10551329
enum enum
2122 2122
LABEL128: LABEL128:
@@ -169,15 +169,15 @@ LABEL129:
jump LABEL140 jump LABEL140
LABEL136: LABEL136:
iconst 1 iconst 1
iconst 39387169 iconst 39387175
if_sethide if_sethide
jump LABEL195 jump LABEL195
LABEL140: LABEL140:
iconst 0 iconst 0
iconst 39387169 iconst 39387175
if_sethide if_sethide
iconst 1 iconst 1
iconst 39387169 iconst 39387175
2308 2308
get_varbit 6255 get_varbit 6255
switch switch
@@ -187,38 +187,38 @@ LABEL140:
jump LABEL173 jump LABEL173
LABEL149: LABEL149:
iconst 1718 iconst 1718
iconst 39387171 iconst 39387177
if_setgraphic if_setgraphic
iconst 1 iconst 1
sconst "Toggle single-tap mode" sconst "Toggle single-tap mode"
iconst 39387169 iconst 39387175
if_setop if_setop
jump LABEL180 jump LABEL180
LABEL157: LABEL157:
iconst 1717 iconst 1717
iconst 39387171 iconst 39387177
if_setgraphic if_setgraphic
iconst 1 iconst 1
sconst "Toggle tap-to-drop mode" sconst "Toggle tap-to-drop mode"
iconst 39387169 iconst 39387175
if_setop if_setop
jump LABEL180 jump LABEL180
LABEL165: LABEL165:
iconst 1716 iconst 1716
iconst 39387171 iconst 39387177
if_setgraphic if_setgraphic
iconst 1 iconst 1
sconst "Show Keyboard" sconst "Show Keyboard"
iconst 39387169 iconst 39387175
if_setop if_setop
jump LABEL180 jump LABEL180
LABEL173: LABEL173:
iconst 1715 iconst 1715
iconst 39387171 iconst 39387177
if_setgraphic if_setgraphic
iconst 1 iconst 1
sconst "" sconst ""
iconst 39387169 iconst 39387175
if_setop if_setop
LABEL180: LABEL180:
get_varbit 6255 get_varbit 6255
@@ -232,18 +232,18 @@ LABEL184:
jump LABEL192 jump LABEL192
LABEL188: LABEL188:
iconst 155 iconst 155
iconst 39387171 iconst 39387177
if_settrans if_settrans
jump LABEL195 jump LABEL195
LABEL192: LABEL192:
iconst 0 iconst 0
iconst 39387171 iconst 39387177
if_settrans if_settrans
LABEL195: LABEL195:
invoke 2581 invoke 2581
get_varbit 6254 get_varbit 6254
invoke 633 invoke 633
iconst 39387160 iconst 39387166
if_sethide if_sethide
invoke 2526 invoke 2526
pop_int pop_int
@@ -1 +1 @@
F62F3A22CA5AEAECCEFAA3A9EEDA095D778CC8BE08CD15CC4ECDC91159924746 90BE2B2F4CE3D5C7C00D2ECF6D552D9A285FD08DC47DDA93E5BFE86529B01E6E
@@ -12,19 +12,19 @@
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551308 iconst 10551313
enum enum
istore 3 istore 3
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551302 iconst 10551305
enum enum
istore 4 istore 4
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551310 iconst 10551315
enum enum
istore 5 istore 5
iconst 103 iconst 103
@@ -76,14 +76,14 @@
LABEL70: LABEL70:
iconst 0 iconst 0
iload 16 iload 16
iconst 39387150 iconst 39387155
if_getwidth if_getwidth
sub sub
invoke 1045 invoke 1045
istore 14 istore 14
iconst 0 iconst 0
iload 17 iload 17
iconst 39387150 iconst 39387155
if_getheight if_getheight
sub sub
invoke 1045 invoke 1045
@@ -279,7 +279,7 @@ LABEL189:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551309 iconst 10551314
enum enum
iload 5 iload 5
iload 8 iload 8
@@ -291,7 +291,7 @@ LABEL268:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551309 iconst 10551314
enum enum
iload 3 iload 3
iconst 0 iconst 0
@@ -417,7 +417,7 @@ LABEL342:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551309 iconst 10551314
enum enum
iload 5 iload 5
iload 8 iload 8
@@ -429,7 +429,7 @@ LABEL385:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551309 iconst 10551314
enum enum
iload 3 iload 3
iconst 0 iconst 0
@@ -439,7 +439,7 @@ LABEL395:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551311 iconst 10551316
enum enum
istore 18 istore 18
iload 18 iload 18
@@ -503,7 +503,7 @@ LABEL449:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551313 iconst 10551318
enum enum
istore 18 istore 18
iconst 0 iconst 0
@@ -518,7 +518,7 @@ LABEL463:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551304 iconst 10551307
enum enum
if_hassub if_hassub
iconst 1 iconst 1
@@ -578,7 +578,7 @@ LABEL511:
iconst 73 iconst 73
iconst 73 iconst 73
iload 1 iload 1
iconst 10551304 iconst 10551307
enum enum
istore 18 istore 18
iconst 0 iconst 0
@@ -1 +1 @@
A1B6D1B291AA3594728DDEA47049E17119F5CCB6F8E757E1524FA89DE92F9A34 581520BBF672827101447FABB2D0F515AB1AF23FDABFAF374032DF36A82B0658
@@ -23,9 +23,9 @@
runelite_callback runelite_callback
sub sub
istore 1 istore 1
iconst 7602235 iconst 7602237
if_getwidth if_getwidth
iconst 7602236 iconst 7602238
if_getwidth if_getwidth
sub sub
istore 2 istore 2
@@ -78,6 +78,6 @@ LABEL44:
iconst 0 iconst 0
iconst 0 iconst 0
iconst 0 iconst 0
iconst 7602236 iconst 7602238
if_setposition if_setposition
return return
@@ -1 +1 @@
1CEB4F2F85A8FECA9D9CB80DCAF0CB6A1FB3670607C6CDE80363BC40E95CA1E3 1BB0517CD647510451A0AF5FC160252892F4C3627BED106FEDEE44E62027A2D4
@@ -219,18 +219,100 @@ LABEL183:
iload 1 iload 1
iconst 0 iconst 0
if_icmpeq LABEL189 if_icmpeq LABEL189
jump LABEL339 jump LABEL417
LABEL189: LABEL189:
invoke 1972 invoke 2357
iconst 0 iconst 1
if_icmpeq LABEL193 if_icmpeq LABEL193
jump LABEL273 jump LABEL267
LABEL193: LABEL193:
iload 4 iload 4
iconst 20 iconst 20
if_icmplt LABEL197 if_icmplt LABEL197
jump LABEL272 jump LABEL226
LABEL197: LABEL197:
iconst 10616867
iconst 3
iload 4
cc_create
iconst 0
iload 3
iconst 1
iconst 2
cc_setsize
iconst 0
iconst 0
iconst 1
iconst 2
cc_setposition
iconst 0
cc_setcolour
iconst 1
cc_setfill
iconst 252
cc_settrans
iload 4
iconst 1
add
iload 3
iload 2
sub
istore 3
istore 4
jump LABEL193
LABEL226:
iconst 10616886
iconst 3
iconst 0
cc_create
iconst 10616886
iconst 3
iconst 1
cc_create 1
iconst 16384
iconst 1
iconst 2
iconst 0
cc_setsize
iconst 16384
iconst 1
iconst 2
iconst 0
cc_setsize 1
iconst 0
iconst 0
iconst 0
iconst 0
cc_setposition
iconst 0
iconst 15
iconst 0
iconst 2
cc_setposition 1
iconst 16777215
cc_setcolour
iconst 16777215
cc_setcolour 1
iconst 1
cc_setfill
iconst 1
cc_setfill 1
iconst 100
cc_settrans
iconst 120
cc_settrans 1
jump LABEL417
LABEL267:
invoke 1972
iconst 0
if_icmpeq LABEL271
jump LABEL351
LABEL271:
iload 4
iconst 20
if_icmplt LABEL275
jump LABEL350
LABEL275:
iconst 10616867 iconst 10616867
iconst 3 iconst 3
iload 4 iload 4
@@ -293,7 +375,7 @@ LABEL197:
cc_setfill cc_setfill
iconst 1 iconst 1
cc_setfill 1 cc_setfill 1
iconst 251 iconst 250
cc_settrans cc_settrans
iconst 250 iconst 250
cc_settrans 1 cc_settrans 1
@@ -305,12 +387,12 @@ LABEL197:
sub sub
istore 3 istore 3
istore 4 istore 4
jump LABEL193 jump LABEL271
LABEL272: LABEL350:
sconst "chatboxBackgroundBuilt" sconst "chatboxBackgroundBuilt"
runelite_callback runelite_callback
jump LABEL339 jump LABEL417
LABEL273: LABEL351:
iconst 10616867 iconst 10616867
iconst 3 iconst 3
iload 4 iload 4
@@ -377,7 +459,7 @@ LABEL273:
cc_settrans cc_settrans
iconst 130 iconst 130
cc_settrans 1 cc_settrans 1
LABEL339: LABEL417:
iconst 10617389 iconst 10617389
iconst 1190 iconst 1190
iconst 1187 iconst 1187
@@ -389,24 +471,24 @@ LABEL339:
invoke 838 invoke 838
iload 0 iload 0
iconst 1 iconst 1
if_icmpeq LABEL352 if_icmpeq LABEL430
jump LABEL356 jump LABEL434
LABEL352: LABEL430:
iconst 255 iconst 255
iconst 10616835 iconst 10616835
if_settrans if_settrans
jump LABEL387 jump LABEL465
LABEL356: LABEL434:
invoke 1972 invoke 1972
iconst 0 iconst 0
if_icmpeq LABEL360 if_icmpeq LABEL438
jump LABEL364 jump LABEL442
LABEL360: LABEL438:
iconst 155 iconst 155
iconst 10616835 iconst 10616835
if_settrans if_settrans
jump LABEL387 jump LABEL465
LABEL364: LABEL442:
iconst 255 iconst 255
iconst 10616835 iconst 10616835
if_settrans if_settrans
@@ -430,5 +512,5 @@ LABEL364:
cc_setfill cc_setfill
iconst 225 iconst 225
cc_settrans cc_settrans
LABEL387: LABEL465:
return return
@@ -27,7 +27,6 @@ package net.runelite.client.plugins.discord;
import com.google.inject.Guice; import com.google.inject.Guice;
import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.Bind;
import com.google.inject.testing.fieldbinder.BoundFieldModule; import com.google.inject.testing.fieldbinder.BoundFieldModule;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import net.runelite.api.Client; import net.runelite.api.Client;
@@ -35,7 +34,6 @@ import net.runelite.client.discord.DiscordPresence;
import net.runelite.client.discord.DiscordService; import net.runelite.client.discord.DiscordService;
import net.runelite.client.ws.PartyService; import net.runelite.client.ws.PartyService;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -44,6 +42,7 @@ import static org.mockito.ArgumentMatchers.any;
import org.mockito.Mock; import org.mockito.Mock;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
@@ -90,13 +89,12 @@ public class DiscordStateTest
when(discordConfig.elapsedTimeType()).thenReturn(DiscordConfig.ElapsedTimeType.ACTIVITY); when(discordConfig.elapsedTimeType()).thenReturn(DiscordConfig.ElapsedTimeType.ACTIVITY);
discordState.triggerEvent(DiscordGameEventType.IN_MENU); discordState.triggerEvent(DiscordGameEventType.IN_MENU);
verify(discordService).updatePresence(any(DiscordPresence.class)); verify(discordService).updatePresence(any(DiscordPresence.class)); // menu presence
discordState.checkForTimeout(); discordState.checkForTimeout();
ArgumentCaptor<DiscordPresence> captor = ArgumentCaptor.forClass(DiscordPresence.class);
verify(discordService, times(2)).updatePresence(captor.capture()); // menu is not clearable and so no changes will be made
List<DiscordPresence> captured = captor.getAllValues(); verifyNoMoreInteractions(discordService);
assertNull(captured.get(captured.size() - 1).getEndTimestamp());
} }
@Test @Test
@@ -30,6 +30,7 @@ import com.google.inject.testing.fieldbinder.Bind;
import com.google.inject.testing.fieldbinder.BoundFieldModule; import com.google.inject.testing.fieldbinder.BoundFieldModule;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.function.Predicate;
import net.runelite.api.ChatMessageType; import net.runelite.api.ChatMessageType;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.Experience; import net.runelite.api.Experience;
@@ -37,15 +38,19 @@ import net.runelite.api.InventoryID;
import net.runelite.api.ItemContainer; import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.api.Varbits;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.events.StatChanged; import net.runelite.api.events.StatChanged;
import net.runelite.api.events.VarbitChanged;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.game.SpriteManager; import net.runelite.client.game.SpriteManager;
import net.runelite.client.ui.overlay.infobox.InfoBox; import net.runelite.client.ui.overlay.infobox.InfoBox;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.RSTimeUnit;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
@@ -377,6 +382,165 @@ public class TimersPluginTest
assertEquals("00:06", timer.getText()); assertEquals("00:06", timer.getText());
} }
// region Arceuus spells
@Test
public void testDeathChargeCast()
{
when(timersConfig.showArceuus()).thenReturn(true);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(50);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=6800bf>Upon the death of your next foe, some of your special attack energy will be restored.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
ArgumentCaptor<InfoBox> ibcaptor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(ibcaptor.capture());
TimerTimer infoBox = (TimerTimer) ibcaptor.getValue();
assertEquals(GameTimer.DEATH_CHARGE, infoBox.getTimer());
assertEquals(Duration.of(50, RSTimeUnit.GAME_TICKS), infoBox.getDuration());
}
@Test
public void testDeathChargeCooldown()
{
when(timersConfig.showArceuusCooldown()).thenReturn(true);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=6800bf>Upon the death of your next foe, some of your special attack energy will be restored.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
ArgumentCaptor<InfoBox> ibcaptor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(ibcaptor.capture());
TimerTimer infoBox = (TimerTimer) ibcaptor.getValue();
assertEquals(GameTimer.DEATH_CHARGE_COOLDOWN, infoBox.getTimer());
}
@Test
public void testDeathChargeRestore()
{
when(timersConfig.showArceuus()).thenReturn(true);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=6800bf>Some of your special attack energy has been restored.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
TimerTimer correctInfoBox = new TimerTimer(GameTimer.DEATH_CHARGE, Duration.ofSeconds(1), timersPlugin);
TimerTimer incorrectInfoBox = new TimerTimer(GameTimer.WARD_OF_ARCEUUS, Duration.ofSeconds(1), timersPlugin);
ArgumentCaptor<Predicate<InfoBox>> prcaptor = ArgumentCaptor.forClass(Predicate.class);
verify(infoBoxManager).removeIf(prcaptor.capture());
Predicate<InfoBox> pred = prcaptor.getValue();
assertTrue(pred.test(correctInfoBox));
assertFalse(pred.test(incorrectInfoBox));
}
@Test
public void testArceuusWard()
{
when(timersConfig.showArceuus()).thenReturn(true);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(57);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=0000b2>Your defence against Arceuus magic has been strengthened.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
ArgumentCaptor<InfoBox> captor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(captor.capture());
TimerTimer infoBox = (TimerTimer) captor.getValue();
assertEquals(GameTimer.WARD_OF_ARCEUUS, infoBox.getTimer());
assertEquals(Duration.of(57, RSTimeUnit.GAME_TICKS), infoBox.getDuration());
}
@Test
public void testArceuusWardCooldown()
{
when(timersConfig.showArceuusCooldown()).thenReturn(true);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=0000b2>Your defence against Arceuus magic has been strengthened.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
ArgumentCaptor<InfoBox> captor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(captor.capture());
TimerTimer infoBox = (TimerTimer) captor.getValue();
assertEquals(GameTimer.WARD_OF_ARCEUUS_COOLDOWN, infoBox.getTimer());
}
@Test
public void testCorruptionCooldown()
{
when(timersConfig.showArceuusCooldown()).thenReturn(true);
when(client.getVar(any(Varbits.class))).thenReturn(0);
when(client.getVar(Varbits.CORRUPTION_COOLDOWN)).thenReturn(1);
timersPlugin.onVarbitChanged(new VarbitChanged());
ArgumentCaptor<InfoBox> captor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(captor.capture());
TimerTimer infoBox = (TimerTimer) captor.getValue();
assertEquals(GameTimer.CORRUPTION_COOLDOWN, infoBox.getTimer());
}
@Test
public void testShadowVail()
{
when(timersConfig.showArceuus()).thenReturn(true);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(57);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=6800bf>Your thieving abilities have been enhanced.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
ArgumentCaptor<InfoBox> captor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(captor.capture());
TimerTimer infoBox = (TimerTimer) captor.getValue();
assertEquals(GameTimer.SHADOW_VEIL, infoBox.getTimer());
}
@Test
public void testShadowVailCooldown()
{
when(timersConfig.showArceuusCooldown()).thenReturn(true);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=6800bf>Your thieving abilities have been enhanced.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
ArgumentCaptor<InfoBox> captor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(captor.capture());
TimerTimer infoBox = (TimerTimer) captor.getValue();
assertEquals(GameTimer.SHADOW_VEIL_COOLDOWN, infoBox.getTimer());
}
@Test
public void testThrall()
{
when(timersConfig.showArceuus()).thenReturn(true);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(50);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=ef0083>You resurrect a greater zombified thrall.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
ArgumentCaptor<InfoBox> ibcaptor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(ibcaptor.capture());
TimerTimer infoBox = (TimerTimer) ibcaptor.getValue();
assertEquals(GameTimer.RESURRECT_THRALL, infoBox.getTimer());
}
@Test
public void testThrallCooldown()
{
when(timersConfig.showArceuusCooldown()).thenReturn(true);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=ef0083>You resurrect a greater zombified thrall.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
ArgumentCaptor<InfoBox> ibcaptor = ArgumentCaptor.forClass(InfoBox.class);
verify(infoBoxManager).addInfoBox(ibcaptor.capture());
TimerTimer infoBox = (TimerTimer) ibcaptor.getValue();
assertEquals(GameTimer.RESURRECT_THRALL_COOLDOWN, infoBox.getTimer());
}
@Test
public void testThrallEnd()
{
when(timersConfig.showArceuus()).thenReturn(true);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(50);
ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", "<col=ef0083>Your greater zombified thrall returns to the grave.</col>", "", 0);
timersPlugin.onChatMessage(chatMessage);
verify(infoBoxManager).removeIf(any());
}
// endregion
@Test @Test
public void testImbuedHeartBoost() public void testImbuedHeartBoost()
{ {
@@ -195,4 +195,10 @@ public interface RSActor extends RSRenderable, Actor
@Import("pathLength") @Import("pathLength")
int getPathLength(); int getPathLength();
@Import("overheadTextCyclesRemaining")
int getOverheadCycle();
@Import("overheadTextCyclesRemaining")
void setOverheadCycle(int cycle);
} }