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 {
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 cacheversion = 165
@@ -368,7 +368,21 @@ public interface Actor extends Renderable, Locatable
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
*/
@@ -206,7 +206,7 @@ public final class AnimationID
public static final int LEAGUE_HOME_TELEPORT_6 = 8807;
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 PISCARILIUS_CRANE_REPAIR = 7199;
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 OLD_NOTE_25829 = 25829;
public static final int SHAYZIA_MILITARY_ORDERS = 25831;
public static final int RAW_BOAR_MEAT = 25833;
/* 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_25830 = 25830;
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. */
}
@@ -21752,5 +21752,6 @@ public final class ObjectID
public static final int BAR_42426 = 42426;
public static final int YEW_42427 = 42427;
public static final int GRANDFATHER_CLOCK_42428 = 42428;
public static final int LADDER_42487 = 42487;
/* 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_SELECTED = 296;
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_MINIMAP_MARKER_RED_ITEM = 300;
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_PISCARILIUS_ICON = 1245;
public static final int KOUREND_FAVOUR_SHAYZIEN_ICON = 1246;
public static final int SPELL_REANIMATE_GOBLIN = 1247;
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;
/* Unmapped: 1247~1296 */
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 TAB_QUESTS_GREEN_ACHIEVEMENT_DIARIES = 1299;
public static final int SPELL_RESPAWN_TELEPORT = 1300;
public static final int SPELL_SALVE_GRAVEYARD_TELEPORT = 1301;
public static final int SPELL_FENKENSTRAINS_CASTLE_TELEPORT = 1302;
public static final int SPELL_WEST_ARDOUGNE_TELEPORT = 1303;
public static final int SPELL_HARMONY_ISLAND_TELEPORT = 1304;
public static final int SPELL_CEMETARY_TELEPORT = 1305;
public static final int SPELL_BARROWS_TELEPORT = 1306;
public static final int SPELL_APE_ATOLL_TELEPORT = 1307;
public static final int SPELL_REANIMATE_CROPS = 1308;
/* Unmapped: 1309~1318 */
public static final int SPELL_RESPAWN_TELEPORT_DISABLED = 1319;
public static final int SPELL_SALVE_GRAVEYARD_TELEPORT_DISABLED = 1320;
public static final int SPELL_FENKENSTRAINS_CASTLE_TELEPORT_DISABLED = 1321;
public static final int SPELL_WEST_ARDOUGNE_TELEPORT_DISABLED = 1322;
public static final int SPELL_HARMONY_ISLAND_TELEPORT_DISABLED = 1323;
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 */
/* Unmapped: 1300~1305 */
public static final int SPELL_WARD_OF_ARCEUUS = 1306;
/* Unmapped: 1307~1309 */
public static final int SPELL_DEATH_CHARGE = 1310;
/* Unmapped: 1311~1314 */
public static final int SPELL_SHADOW_VEIL = 1315;
/* Unmapped: 1316~1324 */
public static final int SPELL_WARD_OF_ARCEUUS_DISABLED = 1325;
/* Unmapped: 1326 */
public static final int SPELL_GREATER_CORRUPTION_DISABLED = 1327;
/* Unmapped: 1328 */
public static final int SPELL_DEATH_CHARGE_DISABLED = 1329;
/* Unmapped: 1330~1333 */
public static final int SPELL_SHADOW_VEIL_DISABLED = 1334;
/* Unmapped: 1335~1337 */
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_ADD_FAVOURITE = 1341;
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_CRAZY_DANCE_LOCKED = 1356;
public static final int EMOTE_PREMIER_SHIELD_LOCKED = 1357;
public static final int HITSPLAT_BLUE_NO_DAMAGE = 1358;
public static final int HITSPLAT_RED_DAMAGE = 1359;
/* Unmapped: 1358~1359 */
public static final int HITSPLAT_GREEN_POISON = 1360;
public static final int HITSPLAT_ORANGE = 1361;
public static final int HITSPLAT_ORANGE_DISEASE = 1362;
public static final int HITSPLAT_GREY = 1363;
/* Unmapped: 1361~1363 */
public static final int BOUNTY_HUNTER_SKIP_TARGET = 1364;
public static final int BOUNTY_HUNTER_SKIP_TARGET_HOVERED = 1365;
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_YELLOW_BAR = 1417;
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_AUGURY = 1421;
/* 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_YELLOW_TOUCH_ANIMATION_1 = 1625;
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;
/* Unmapped: 1627~1701 */
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_DOUBLE_CHEVRON_CORPORAL = 2832;
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_RED = 2859;
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
*/
VENGEANCE_COOLDOWN(2451),
CORRUPTION_COOLDOWN(12288),
/**
* Amount of items in each bank tab
@@ -186,10 +186,11 @@ public class WidgetID
{
static final int MAPVIEW = 7;
static final int OVERVIEW_MAP = 10;
static final int SEARCH = 25;
static final int SURFACE_SELECTOR = 33;
static final int TOOLTIP = 41;
static final int OPTION = 46;
static final int BOTTOM_BAR = 23;
static final int SEARCH = 26;
static final int SURFACE_SELECTOR = 34;
static final int TOOLTIP = 43;
static final int OPTION = 48;
}
static class SlayerRewards
@@ -197,6 +198,11 @@ public class WidgetID
static final int TOP_BAR = 12;
}
static class DialogOption
{
static final int OPTIONS = 1;
}
static class DialogNPC
{
static final int HEAD_MODEL = 6;
@@ -204,44 +210,38 @@ public class WidgetID
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 final int WORLD_SWITCHER_BUTTON = 3;
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 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 ACTIVITY_PROGRESS = 14;
static final int PURPLE_ICON = 17;
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 BLUE_SHIELD = 16;
static final int YELLOW_SHIELD = 17;
static final int RED_SHIELD = 18;
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 final int PURPLE_HEALTH = 21;
static final int BLUE_HEALTH = 22;
static final int YELLOW_HEALTH = 23;
static final int RED_HEALTH = 24;
}
static class FriendList
@@ -418,16 +418,15 @@ public class WidgetID
{
static final int XP_ORB = 1;
static final int HEALTH_ORB = 2;
static final int PRAYER_ORB = 12;
static final int QUICK_PRAYER_ORB = 14; // Has the "Quick-prayers" name
static final int PRAYER_ORB_TEXT = 15;
static final int RUN_ORB = 20;
static final int TOGGLE_RUN_ORB = 22; // Has the "Toggle run" name
static final int RUN_ORB_TEXT = 23;
static final int SPEC_ORB = 28;
static final int SPEC_CLICKBOX = 30;
static final int WORLDMAP_ORB = 41;
static final int WIKI_BANNER = 43;
static final int PRAYER_ORB = 13;
static final int QUICK_PRAYER_ORB = 15; // Has the "Quick-prayers" name
static final int PRAYER_ORB_TEXT = 16;
static final int RUN_ORB = 21;
static final int TOGGLE_RUN_ORB = 23; // Has the "Toggle run" name
static final int RUN_ORB_TEXT = 24;
static final int SPEC_ORB = 29;
static final int WORLDMAP_ORB = 43;
static final int WIKI_BANNER = 45;
}
static class LoginClickToPlayScreen
@@ -435,59 +434,12 @@ public class WidgetID
static final int MESSAGE_OF_THE_DAY = 7;
}
static class Viewport
{
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 class FixedViewport
{
static final int MINIMAP = 3;
static final int MINIMAP_DRAW_AREA = 8;
public static final int MULTICOMBAT_INDICATOR = 21;
static final int FRIENDS_CHAT_TAB = 34;
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 FIXED_VIEWPORT = 20;
static final int MULTICOMBAT_INDICATOR = 24;
static final int FRIENDS_CHAT_TAB = 39;
static final int FRIENDS_TAB = 41;
static final int IGNORES_TAB = 40;
@@ -502,56 +454,89 @@ public class WidgetID
static final int OPTIONS_ICON = 50;
static final int EMOTES_ICON = 51;
static final int MUSIC_ICON = 52;
static final int COMBAT_TAB = 55;
static final int STATS_TAB = 56;
static final int QUESTS_TAB = 57;
static final int INVENTORY_TAB = 58;
static final int EQUIPMENT_TAB = 59;
static final int PRAYER_TAB = 60;
static final int MAGIC_TAB = 61;
static final int COMBAT_ICON = 62;
static final int STATS_ICON = 63;
static final int QUESTS_ICON = 64;
static final int INVENTORY_ICON = 65;
static final int EQUIPMENT_ICON = 66;
static final int PRAYER_ICON = 67;
static final int MAGIC_ICON = 68;
static final int INTERFACE_CONTAINER = 69;
static final int INVENTORY_CONTAINER = 75;
static final int COMBAT_TAB = 56;
static final int STATS_TAB = 57;
static final int QUESTS_TAB = 58;
static final int INVENTORY_TAB = 59;
static final int EQUIPMENT_TAB = 60;
static final int PRAYER_TAB = 61;
static final int MAGIC_TAB = 62;
static final int COMBAT_ICON = 63;
static final int STATS_ICON = 64;
static final int QUESTS_ICON = 65;
static final int INVENTORY_ICON = 66;
static final int EQUIPMENT_ICON = 67;
static final int PRAYER_ICON = 68;
static final int MAGIC_ICON = 69;
static final int ROOT_INTERFACE_CONTAINER = 70;
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 final int LOGOUT_BUTTON_OVERLAY = 32;
static final int CMB_TAB = 50;
static final int CMB_ICON = 60;
static final int SKILLS_TAB = 51;
static final int SKILLS_ICON = 61;
static final int QUESTS_TAB = 52;
static final int QUESTS_ICON = 62;
static final int INVENTORY_TAB = 56;
static final int INVENTORY_ICON = 63;
static final int EQUIP_TAB = 54;
static final int EQUIP_ICON = 64;
static final int PRAYER_TAB = 58;
static final int PRAYER_ICON = 65;
static final int SPELL_TAB = 56;
static final int SPELL_ICON = 53;
static final int FC_TAB = 35;
static final int FC_ICON = 44;
static final int IGNORE_TAB = 36;
static final int IGNORE_ICON = 42;
static final int FRIEND_TAB = 37;
static final int FRIEND_ICON = 46;
static final int SETTINGS_TAB = 38;
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 final int RESIZABLE_VIEWPORT_BOTTOM_LINE = 19;
static final int MINIMAP = 25;
static final int MINIMAP_DRAW_AREA = 33;
static final int MINIMAP_ORB_HOLDER = 36;
static final int LOGOUT_BUTTON_OVERLAY = 37;
static final int MINIMAP_LOGOUT_BUTTON = 38;
static final int FC_ICON = 49;
static final int FRIEND_ICON = 51;
static final int SETTINGS_ICON = 52;
static final int EMOTE_ICON = 53;
static final int MUSIC_ICON = 54;
static final int INVENTORY_TAB = 61;
static final int PRAYER_TAB = 63;
static final int CMB_ICON = 65;
static final int SKILLS_ICON = 66;
static final int QUESTS_ICON = 67;
static final int INVENTORY_ICON = 68;
static final int EQUIP_ICON = 69;
static final int PRAYER_ICON = 70;
static final int MAGIC_ICON = 71;
static final int INTERFACE_CONTAINER = 74;
static final int INVENTORY_CONTAINER = 80;
}
static class Chatbox
@@ -671,72 +656,40 @@ public class WidgetID
static class VolcanicMine
{
static final int GENERAL_INFOBOX_GROUP_ID = 4;
static final int TIME_LEFT = 8;
static final int POINTS = 10;
static final int STABILITY = 12;
static final int PLAYER_COUNT = 14;
static final int STABILITY_INFOBOX_GROUP_ID = 5;
static final int VENTS_INFOBOX_GROUP_ID = 16;
static final int VENT_A_PERCENTAGE = 19;
static final int VENT_B_PERCENTAGE = 20;
static final int VENT_C_PERCENTAGE = 21;
static final int VENT_A_STATUS = 23;
static final int VENT_B_STATUS = 24;
static final int VENT_C_STATUS = 25;
static final int TIME_LEFT = 6;
static final int POINTS = 8;
static final int STABILITY = 10;
static final int PLAYER_COUNT = 12;
static final int VENT_A_PERCENTAGE = 16;
static final int VENT_B_PERCENTAGE = 17;
static final int VENT_C_PERCENTAGE = 18;
static final int VENT_A_STATUS = 20;
static final int VENT_B_STATUS = 21;
static final int VENT_C_STATUS = 22;
}
static class BarbarianAssault
{
static class ATK
{
static final int ROLE_SPRITE = 12;
static final int ROLE = 13;
static final int ROLE_SPRITE = 11;
static final int ROLE = 12;
}
static class HLR
{
static final int TEAMMATE1 = 19;
static final int TEAMMATE2 = 23;
static final int TEAMMATE3 = 27;
static final int TEAMMATE4 = 31;
static final int TEAMMATE1 = 18;
static final int TEAMMATE2 = 22;
static final int TEAMMATE3 = 26;
static final int TEAMMATE4 = 30;
}
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 = 12;
static final int ROLE_SPRITE = 10;
static final int ROLE = 11;
static final int REWARD_TEXT = 57;
}
static class GWD
{
static final int CONTAINER = 7;
}
static class LevelUp
{
static final int SKILL = 1;
@@ -751,24 +704,12 @@ public class WidgetID
static class Raids
{
static final int POINTS_INFOBOX = 7;
static final int POINTS_INFOBOX = 3;
}
static class Tob
{
static final int PARTY_INTERFACE = 6;
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 final int PARTY_STATS = 7;
}
static class PuzzleBox
@@ -831,9 +772,8 @@ public class WidgetID
static class Barrows
{
static final int BARROWS_BROTHERS = 9;
static final int BARROWS_POTENTIAL = 10;
static final int BARROWS_REWARD_INVENTORY = 3;
static final int BARROWS_BROTHERS = 4;
static final int BARROWS_POTENTIAL = 5;
}
static class Diary
@@ -872,11 +812,6 @@ public class WidgetID
static final int LOGOUT_BUTTON = 23;
}
static class FossilOxygen
{
static final int FOSSIL_ISLAND_OXYGEN_BAR = 4;
}
static class Minigames
{
static final int TELEPORT_BUTTON = 26;
@@ -905,15 +840,10 @@ public class WidgetID
static class Pvp
{
static final int FOG_OVERLAY = 1;
static final int PVP_WIDGET_CONTAINER = 54; // OUTDATED?
static final int SKULL = 56; // OUTDATED?
static final int ATTACK_RANGE = 59; // OUTDATED?
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 final int KILLDEATH_RATIO = 26;
static final int SKULL_CONTAINER = 45;
static final int SAFE_ZONE = 47;
static final int WILDERNESS_LEVEL = 49; // this can also be the Deadman Mode "Protection" text
}
static class KourendFavour
@@ -923,7 +853,7 @@ public class WidgetID
static class Zeah
{
static final int MESS_HALL_COOKING_DISPLAY = 3;
static final int MESS_HALL_COOKING_DISPLAY = 2;
}
static class LootingBag
@@ -933,12 +863,7 @@ public class WidgetID
static class Skotizo
{
static final int CONTAINER = 3;
}
public static class FullScreenMap
{
public static final int ROOT = 27;
static final int CONTAINER = 2;
}
static class QuestList
@@ -961,17 +886,7 @@ public class WidgetID
static class Barrows_Puzzle
{
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_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 = 13;
static final int ANSWER2_CONTAINER = 14;
@@ -995,10 +910,10 @@ public class WidgetID
static class SettingsSide
{
static final int CAMERA_ZOOM_SLIDER_TRACK = 59;
static final int MUSIC_SLIDER = 13;
static final int SOUND_EFFECT_SLIDER = 17;
static final int AREA_SOUND_SLIDER = 21;
static final int CAMERA_ZOOM_SLIDER_TRACK = 61;
static final int MUSIC_SLIDER = 14;
static final int SOUND_EFFECT_SLIDER = 18;
static final int AREA_SOUND_SLIDER = 22;
}
static class Settings
@@ -1018,12 +933,12 @@ public class WidgetID
static class Lms
{
static final int INFO = 3;
static final int INFO = 2;
}
static class LmsKDA
{
static final int INFO = 6;
static final int INFO = 7;
}
static class AdventureLog
@@ -1070,11 +985,6 @@ public class WidgetID
static final int BUTTON_10 = 34;
}
static class EncounterHealthBar
{
static final int CONTAINER = 6;
}
static class TrailblazerAreas
{
static final int TELEPORT = 59;
@@ -1085,30 +995,12 @@ public class WidgetID
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 final int TEXT = 0;
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 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_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_SURFACE_SELECTOR(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.SURFACE_SELECTOR),
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_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_BLUE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.BLUE_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_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_POINTS(WidgetID.VOLCANIC_MINE_GROUP_ID, WidgetID.VolcanicMine.POINTS),
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_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_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),
@@ -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_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_BANK_CONTAINER(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.BANK_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_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_DRAW_AREA(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_DRAW_AREA),
RESIZABLE_MINIMAP_ORB_HOLDER(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_ORB_HOLDER),
RESIZABLE_MINIMAP_LOGOUT_BUTTON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.MINIMAP_RESIZABLE_LOGOUT_BUTTON),
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_MINIMAP_STONES_WIDGET(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MINIMAP),
RESIZABLE_MINIMAP_STONES_DRAW_AREA(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MINIMAP_DRAW_AREA),
RESIZABLE_MINIMAP_STONES_ORB_HOLDER(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MINIMAP_ORB_HOLDER),
RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX),
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_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_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_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),
@@ -333,6 +327,7 @@ public enum WidgetInfo
COMBAT_AUTO_RETALIATE(WidgetID.COMBAT_GROUP_ID, WidgetID.Combat.AUTO_RETALIATE),
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_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_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),
@@ -398,8 +394,6 @@ public enum WidgetInfo
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),
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),
TOB_PARTY_INTERFACE(WidgetID.TOB_PARTY_GROUP_ID, WidgetID.Tob.PARTY_INTERFACE),
TOB_PARTY_STATS(WidgetID.TOB_PARTY_GROUP_ID, WidgetID.Tob.PARTY_STATS),
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_BOTTOM_BAR(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.BOTTOM_BAR),
FISHING_TRAWLER_CONTRIBUTION(WidgetID.FISHING_TRAWLER_GROUP_ID, 14),
FISHING_TRAWLER_TIMER(WidgetID.FISHING_TRAWLER_GROUP_ID, 15),
FISHING_TRAWLER_CONTRIBUTION(WidgetID.FISHING_TRAWLER_GROUP_ID, 13),
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_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_ANSWER1(WidgetID.BARROWS_PUZZLE_GROUP_ID, WidgetID.Barrows_Puzzle.ANSWER1),
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),
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),
SPELL_LUMBRIDGE_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.StandardSpellBook.LUMBRIDGE_HOME_TELEPORT),
@@ -493,12 +482,8 @@ public enum WidgetInfo
PVP_SKULL_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SKULL_CONTAINER),
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_BOUNTY_HUNTER_INFO(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.BOUNTY_HUNTER_INFO),
PVP_KILLDEATH_COUNTER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.KILLDEATH_RATIO),
KOUREND_FAVOUR_OVERLAY(WidgetID.KOUREND_FAVOUR_GROUP_ID, WidgetID.KourendFavour.KOUREND_FAVOUR_OVERLAY),
@@ -534,10 +519,8 @@ public enum WidgetInfo
GAUNTLET_TIMER_CONTAINER(WidgetID.GAUNTLET_TIMER_GROUP_ID, WidgetID.GauntletTimer.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),
MULTICOMBAT_FIXED(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MULTICOMBAT_INDICATOR),
MULTICOMBAT_RESIZEABLE_MODERN(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewport.MULTICOMBAT_INDICATOR),
MULTICOMBAT_RESIZEABLE_CLASSIC(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.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_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_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_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),
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_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),
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_CONTINUE(WidgetID.DIALOG_PLAYER_GROUP_ID, WidgetID.DialogPlayer.CONTINUE),
DIALOG_NOTIFICATION_TEXT(WidgetID.DIALOG_NOTIFICATION_GROUP_ID, WidgetID.DialogNotification.TEXT),
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),
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_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_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),
FULLSCREEN_MAP_ROOT(WidgetID.FULLSCREEN_CONTAINER_TLI, WidgetID.FullScreenMap.ROOT),
MUSICTAB_INTERFACE(WidgetID.MUSICTAB_GROUP_ID, 1),
MUSICTAB_SONG_BOX(WidgetID.MUSICTAB_GROUP_ID, 2),
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_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_GAME_NECK(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.GAME_NECK),
JEWELLERY_BOX_COMB_BRAC(WidgetID.JEWELLERY_BOX_GROUP_ID, WidgetID.JewelBox.COMB_BRAC),
@@ -395,6 +395,7 @@ public class RuneLite
// Add core overlays
WidgetOverlay.createOverlays(client).forEach(overlayManager::add);
overlayManager.add(worldMapOverlay.get());
eventBus.register(worldMapOverlay.get());
overlayManager.add(tooltipOverlay.get());
playerManager.get();
@@ -165,7 +165,7 @@ public class ChatIconManager
private static int clanRankToIdx(int key)
{
// keys are -5 to 264, with no 0
return key < 0 ? ~key : (key + 4);
// keys are -6 to 265, with no 0
return key < 0 ? ~key : (key + 5);
}
}
@@ -109,7 +109,7 @@ public class LumbridgeDiaryRequirement extends GenericDiaryRequirement
new SkillRequirement(Skill.FARMING, 63));
add("Light your mining helmet in the Lumbridge castle basement.",
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));
add("Craft, string and enchant an Amulet of Power in Lumbridge.",
new SkillRequirement(Skill.CRAFTING, 70),
@@ -32,6 +32,7 @@ import net.runelite.api.coords.WorldPoint;
enum Courses
{
GNOME(86.5, 46, 9781),
SHAYZIEN_BASIC(133.2, 92, 6200),
DRAYNOR(120.0, 79, 12338),
AL_KHARID(180.0, 0, 13105, new WorldPoint(3299, 3194, 0)),
PYRAMID(722.0, 0, 13356, new WorldPoint(3364, 2830, 0)),
@@ -40,6 +41,7 @@ enum Courses
BARBARIAN(139.5, 60, 10039),
CANIFIS(240.0, 175, 13878),
APE_ATOLL(580.0, 300, 11050),
SHAYZIEN_ADVANCED(474.3, 382, 5944),
FALADOR(440, 180, 12084),
WILDERNESS(571.0, 499, 11837),
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,
// Rellekka Lighthouse
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(
@@ -31,13 +31,10 @@ import javax.inject.Inject;
import lombok.AllArgsConstructor;
import lombok.Getter;
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.WidgetInfo;
import net.runelite.client.ui.overlay.Overlay;
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;
class HealerOverlay extends Overlay
@@ -74,7 +71,6 @@ class HealerOverlay extends Overlay
this.client = client;
this.plugin = plugin;
this.config = config;
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "B.A. overlay"));
}
@Override
@@ -29,12 +29,9 @@ import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.inject.Inject;
import net.runelite.api.Client;
import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG;
import net.runelite.api.widgets.Widget;
import net.runelite.client.ui.overlay.Overlay;
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;
class TimerOverlay extends Overlay
@@ -52,7 +49,6 @@ class TimerOverlay extends Overlay
this.client = client;
this.plugin = plugin;
this.config = config;
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "B.A. overlay"));
}
@Override
@@ -51,6 +51,7 @@ class ClueScrollWorldMapPoint extends WorldMapPoint
this.plugin = plugin;
this.setSnapToEdge(true);
this.setJumpOnClick(true);
this.setName("Clue Scroll");
this.setImage(clueScrollWorldImage);
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("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("OUR OWN NEEDS", "Nurse Wooned", new WorldPoint(1511, 3619, 0), "Shayzien Infirmary", "How many wounded soldiers are in the camp?", "19"),
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("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(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("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"),
@@ -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("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("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("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"),
@@ -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("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("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;
@@ -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(2919, 3535, 0), new CoordinateClueInfo("East of Burthorpe pub."))
.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(2681, 3653, 0), new CoordinateClueInfo("Rellekka, in the garden of the south-east house."))
.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("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("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;
@@ -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 in the Digsite, near the eastern winch. Bow before you talk to me. Equip a green gnome hat, snakeskin boots and an iron pickaxe.", "Digsite", DIGSITE, new WorldPoint(3370, 3425, 0), BECKON, BOW, item(GREEN_HAT), item(SNAKESKIN_BOOTS), item(IRON_PICKAXE)),
new EmoteClue("Beckon in Tai Bwo Wannai. Clap before you talk to me. Equip green dragonhide chaps, a ring of dueling and a mithril medium helmet.", "Tai Bwo Wannai", SOUTH_OF_THE_SHRINE_IN_TAI_BWO_WANNAI_VILLAGE, new WorldPoint(2803, 3073, 0), BECKON, CLAP, item(GREEN_DHIDE_CHAPS), any("Ring of dueling", item(RING_OF_DUELING1), item(RING_OF_DUELING2), item(RING_OF_DUELING3), item(RING_OF_DUELING4), item(RING_OF_DUELING5), item(RING_OF_DUELING6), item(RING_OF_DUELING7), item(RING_OF_DUELING8)), item(MITHRIL_MED_HELM)),
new EmoteClue("Beckon in the combat ring of Shayzien. Show your anger before you talk to me. Equip an adamant platebody, adamant full helm and adamant platelegs.", "Shayzien combat ring", WEST_OF_THE_SHAYZIEN_COMBAT_RING, new WorldPoint(1545, 3594, 0), BECKON, ANGRY, item(ADAMANT_PLATELEGS), item(ADAMANT_PLATEBODY), item(ADAMANT_FULL_HELM)),
new EmoteClue("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 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)),
@@ -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 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 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("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)),
@@ -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 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 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("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("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("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_BALLOT_X = "\u2717";
@@ -79,7 +79,7 @@ public enum STASHUnit
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)),
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)),
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)),
@@ -109,7 +109,7 @@ public enum STASHUnit
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)),
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)),
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)),
@@ -138,7 +138,9 @@ public enum STASHUnit
GYPSY_TENT_ENTRANCE(NullObjectID.NULL_34736, new WorldPoint(3206, 3422, 0)),
FINE_CLOTHES_ENTRANCE(NullObjectID.NULL_34737, new WorldPoint(3209, 3416, 0)),
BOB_AXES_ENTRANCE(NullObjectID.NULL_34738, new WorldPoint(3233, 3200, 0)),
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 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_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_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_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),
@@ -29,7 +29,6 @@ import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.events.GameTick;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.crowdsourcing.CrowdsourcingManager;
@@ -44,6 +43,7 @@ public class CrowdsourcingDialogue
@Inject
private CrowdsourcingManager manager;
private boolean inDialogue = false;
private String lastNpcDialogueText = null;
private String lastPlayerDialogueText = null;
private Widget[] dialogueOptions;
@@ -58,6 +58,23 @@ public class CrowdsourcingDialogue
public void onGameTick(GameTick tick)
{
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))
{
lastNpcDialogueText = npcDialogueTextWidget.getText();
@@ -66,7 +83,6 @@ public class CrowdsourcingDialogue
manager.storeEvent(data);
}
Widget playerDialogueTextWidget = client.getWidget(WidgetID.DIALOG_PLAYER_GROUP_ID, 4);
if (playerDialogueTextWidget != null && !playerDialogueTextWidget.getText().equals(lastPlayerDialogueText))
{
lastPlayerDialogueText = playerDialogueTextWidget.getText();
@@ -74,7 +90,6 @@ public class CrowdsourcingDialogue
manager.storeEvent(data);
}
Widget playerDialogueOptionsWidget = client.getWidget(WidgetID.DIALOG_OPTION_GROUP_ID, 1);
if (playerDialogueOptionsWidget != null && playerDialogueOptionsWidget.getChildren() != dialogueOptions)
{
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();
Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
Float pixelsPerTile = ro.getWorldMapZoom();
float pixelsPerTile = ro.getWorldMapZoom();
if (map == null)
{
@@ -32,7 +32,6 @@ import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Named;
@@ -250,27 +249,16 @@ class DiscordState
final Duration actionTimeout = Duration.ofMinutes(config.actionTimeout());
final Instant now = Instant.now();
final AtomicBoolean updatedAny = new AtomicBoolean();
final boolean removedAny = events.removeAll(events.stream()
// Only include clearable events
.filter(event -> event.getType().isShouldBeCleared())
// Find only events that should time out
.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())
);
if (removedAny || updatedAny.get())
if (removedAny)
{
updatePresenceWithLatestEvent();
}
@@ -43,6 +43,7 @@ public enum LoginScreenOverride
MONKEY_MADNESS_2("mm2.jpg"),
PRIFDDINAS("prifddinas.jpg"),
THEATRE_OF_BLOOD("tob.jpg"),
A_KINGDOM_DIVIDED("akd.jpg"),
CUSTOM;
@Getter
@@ -67,6 +67,7 @@ import net.runelite.api.InventoryID;
import net.runelite.api.ItemComposition;
import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID;
import net.runelite.api.MenuAction;
import net.runelite.api.MessageNode;
import net.runelite.api.NPC;
import net.runelite.api.ObjectID;
@@ -817,52 +818,70 @@ 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)
// 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());
}
if (event.getMenuOption().equals("Take") && event.getId() == ItemID.SEED_PACK)
{
setEvent(LootRecordType.EVENT, SEEDPACK_EVENT);
takeInventorySnapshot();
}
if (event.getMenuOption().equals("Open") && SHADE_CHEST_OBJECTS.containsKey(event.getId()))
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();
}
if (event.getMenuOption().equals("Search") && BIRDNEST_IDS.contains(event.getId()))
else if (isItemOp(event.getMenuAction()))
{
setEvent(LootRecordType.EVENT, BIRDNEST_EVENT, event.getId());
takeInventorySnapshot();
if (event.getMenuOption().equals("Take") && event.getId() == ItemID.SEED_PACK)
{
setEvent(LootRecordType.EVENT, SEEDPACK_EVENT);
takeInventorySnapshot();
}
else if (event.getMenuOption().equals("Search") && BIRDNEST_IDS.contains(event.getId()))
{
setEvent(LootRecordType.EVENT, BIRDNEST_EVENT, event.getId());
takeInventorySnapshot();
}
else if (event.getMenuOption().equals("Open"))
{
switch (event.getId())
{
case ItemID.CASKET:
setEvent(LootRecordType.EVENT, CASKET_EVENT);
takeInventorySnapshot();
break;
case ItemID.SUPPLY_CRATE:
case ItemID.EXTRA_SUPPLY_CRATE:
setEvent(LootRecordType.EVENT, WINTERTODT_SUPPLY_CRATE_EVENT);
takeInventorySnapshot();
break;
case ItemID.SPOILS_OF_WAR:
setEvent(LootRecordType.EVENT, SPOILS_OF_WAR_EVENT);
takeInventorySnapshot();
break;
case ItemID.CASKET_25590:
setEvent(LootRecordType.EVENT, TEMPOROSS_CASKET_EVENT);
takeInventorySnapshot();
break;
}
}
}
}
if (event.getMenuOption().equals("Open") && event.getId() == ItemID.CASKET)
{
setEvent(LootRecordType.EVENT, CASKET_EVENT);
takeInventorySnapshot();
}
private static boolean isItemOp(MenuAction menuAction)
{
final int id = menuAction.getId();
return id >= MenuAction.ITEM_FIRST_OPTION.getId() && id <= MenuAction.ITEM_FIFTH_OPTION.getId();
}
if (event.getMenuOption().equals("Open") && (event.getId() == ItemID.SUPPLY_CRATE || event.getId() == ItemID.EXTRA_SUPPLY_CRATE))
{
setEvent(LootRecordType.EVENT, WINTERTODT_SUPPLY_CRATE_EVENT);
takeInventorySnapshot();
}
private static boolean isNPCOp(MenuAction menuAction)
{
final int id = menuAction.getId();
return id >= MenuAction.NPC_FIRST_OPTION.getId() && id <= MenuAction.NPC_FIFTH_OPTION.getId();
}
if (event.getMenuOption().equals("Open") && event.getId() == ItemID.SPOILS_OF_WAR)
{
setEvent(LootRecordType.EVENT, SPOILS_OF_WAR_EVENT);
takeInventorySnapshot();
}
if (event.getMenuOption().equals("Open") && event.getId() == ItemID.CASKET_25590)
{
setEvent(LootRecordType.EVENT, TEMPOROSS_CASKET_EVENT);
takeInventorySnapshot();
}
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(
@@ -283,6 +283,7 @@ public class MenuEntrySwapperPlugin extends Plugin
swap("enter", "the gauntlet", "enter-corrupted", config::swapGauntlet);
swap("enter", "quick-enter", config::swapQuick);
swap("enter-crypt", "quick-enter", config::swapQuick);
swap("ring", "quick-start", 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.setSnapToEdge(true);
this.setJumpOnClick(true);
this.setName(member.getName());
this.setImagePoint(new Point(
ARROW.getWidth() / 2,
ARROW.getHeight()));
@@ -76,7 +76,16 @@ enum GameTimer
DIVINE_BATTLEMAGE(ItemID.DIVINE_BATTLEMAGE_POTION4, GameTimerImageType.ITEM, "Divine Battlemage", 5, ChronoUnit.MINUTES),
ANTIPOISON(ItemID.ANTIPOISON4, GameTimerImageType.ITEM, "Antipoison", 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
private final Duration duration;
@@ -263,4 +263,24 @@ public interface TimersConfig extends Config
{
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.GameTimer.*;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.RSTimeUnit;
import org.apache.commons.lang3.ArrayUtils;
@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 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 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 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 lastPoisonVarp;
private int lastPvpVarb;
private int lastCorruptionVarb;
private int nextPoisonTick;
private WorldPoint lastPoint;
private TeleportWidget lastTeleportClicked;
@@ -202,6 +212,7 @@ public class TimersPlugin extends Plugin
int isVengeancedVarb = client.getVar(Varbits.VENGEANCE_ACTIVE);
int poisonVarp = client.getVar(VarPlayer.POISON);
int pvpVarb = client.getVar(Varbits.PVP_SPEC_ORB);
int corruptionCooldownVarb = client.getVar(Varbits.CORRUPTION_COOLDOWN);
if (lastRaidVarb != raidVarb)
{
@@ -224,6 +235,20 @@ public class TimersPlugin extends Plugin
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 (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())
{
log.debug("Stopping tzhaar timer");
@@ -46,6 +46,7 @@ enum AgilityCourseLocation
PRIFDDINAS_AGILITY_COURSE("Prifddinas Agility Course", new WorldPoint(3253, 6109, 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)),
SHAYZIEN_COURSE("Shayzien Agility Course", new WorldPoint(1551, 3632, 0)),
VARROCK_ROOFTOP_COURSE("Varrock Rooftop Course", new WorldPoint(3219, 3414, 0)),
WEREWOLF_AGILITY_COURSE("Werewolf Agility Course", new WorldPoint(3542, 3463, 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_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_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_COMBAT_RING("Shayzien Task (60%) - Combat Ring", new WorldPoint(1539, 3589, 0)),
SHAYZIEN_ORGANIZED_CRIME("Shayzien Task (40%) - Organized Crime", new WorldPoint(1504, 3635, 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));
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)),
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)),
SHAYZIEN_EAST(new WorldPoint(1597, 3653, 0), new Rock(3, Ore.CLAY), new Rock(1, Ore.MITHRIL), new Rock(1, Ore.ADAMANTITE)),
SHAYZIEN_WEST(new WorldPoint(1586, 3650, 0),
new Rock(4, Ore.IRON), new Rock(4, Ore.COAL), new Rock(1, Ore.MITHRIL), new Rock(1, Ore.ADAMANTITE)),
SHAYZIEN(new WorldPoint(1601, 3645, 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)),
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)),
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)),
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)),
A_KINGDOM_DIVIDED(Quest.A_KINGDOM_DIVIDED, new WorldPoint(1663, 3672, 0)),
KINGS_RANSOM(Quest.KINGS_RANSOM, new WorldPoint(2741, 3554, 0)),
LEGENDS_QUEST(Quest.LEGENDS_QUEST, new WorldPoint(2725, 3367, 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)),
MY_ARMS_BIG_ADVENTURE(Quest.MY_ARMS_BIG_ADVENTURE, new WorldPoint(2908, 10088, 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)),
OLAFS_QUEST(Quest.OLAFS_QUEST, new WorldPoint(2723, 3729, 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)),
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)),
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)),
TEARS_OF_GUTHIX(Quest.TEARS_OF_GUTHIX, new WorldPoint(3251, 9517, 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(1671, 3657, 0),
new WorldPoint(1680, 3657, 0),
new WorldPoint(1572, 3618, 0),
new WorldPoint(1553, 3551, 0),
new WorldPoint(1496, 3582, 0),
// Tirannwn
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"),
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_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_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"),
@@ -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.WorldMapPointManager;
import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.Text;
@PluginDescriptor(
name = "World Map",
@@ -327,6 +328,7 @@ public class WorldMapPlugin extends Plugin
.image(BLANK_ICON)
.target(l.getTarget())
.jumpOnClick(l.getTarget() != null)
.name(Text.titleCase(l))
.tooltip(l.getTooltip())
.build()
)
@@ -42,15 +42,10 @@ public class WidgetOverlay extends Overlay
return Arrays.asList(
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.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_LEFT),
new XpTrackerWidgetOverlay(client, WidgetInfo.EXPERIENCE_TRACKER_WIDGET, 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.GWD_KC, 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.PVP_KILLDEATH_COUNTER, 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.GAUNTLET_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.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_RESIZEABLE_MODERN, 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;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Area;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import net.runelite.api.Client;
import net.runelite.api.MenuAction;
import net.runelite.api.MenuEntry;
import net.runelite.api.Point;
import net.runelite.api.RenderOverview;
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.WidgetID;
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.JagexColors;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.OverlayPriority;
import net.runelite.client.util.ColorUtil;
@Singleton
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_WIDTH = 5;
private static final int TOOLTIP_PADDING_HEIGHT = 1;
@@ -63,12 +73,12 @@ public class WorldMapOverlay extends Overlay
private final WorldMapPointManager worldMapPointManager;
private final Client client;
private final List<MenuEntry> mapMenuEntries = new ArrayList<>();
@Inject
private WorldMapOverlay(
Client client,
WorldMapPointManager worldMapPointManager,
MouseManager mouseManager,
WorldMapOverlayMouseListener worldMapOverlayMouseListener)
WorldMapPointManager worldMapPointManager)
{
this.client = client;
this.worldMapPointManager = worldMapPointManager;
@@ -76,7 +86,6 @@ public class WorldMapOverlay extends Overlay
setPriority(OverlayPriority.HIGHEST);
setLayer(OverlayLayer.MANUAL);
drawAfterInterface(WidgetID.WORLD_MAP_GROUP_ID);
mouseManager.registerMouseListener(worldMapOverlayMouseListener);
}
@Override
@@ -90,17 +99,44 @@ public class WorldMapOverlay extends Overlay
}
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;
}
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 Area mapViewArea = getWorldMapClipArea(worldMapRectangle);
final Rectangle canvasBounds = new Rectangle(0, 0, client.getCanvasWidth(), client.getCanvasHeight());
final Area canvasViewArea = getWorldMapClipArea(canvasBounds);
Area currentClip = null;
Point mousePos = client.getMouseCanvasPosition();
if (!canvasViewArea.contains(mousePos.getX(), mousePos.getY()))
{
mousePos = null;
}
mapMenuEntries.clear();
WorldMapPoint tooltipPoint = null;
for (WorldMapPoint worldPoint : points)
@@ -111,10 +147,8 @@ public class WorldMapOverlay extends Overlay
if (image != null && point != null)
{
Point drawPoint = mapWorldPointToGraphicsPoint(point);
if (drawPoint == null)
{
worldPoint.setClickbox(null);
continue;
}
@@ -183,15 +217,40 @@ public class WorldMapOverlay extends Overlay
graphics.drawImage(image, drawX, drawY, null);
Rectangle clickbox = new Rectangle(drawX, drawY, image.getWidth(), image.getHeight());
worldPoint.setClickbox(clickbox);
if (worldPoint.isTooltipVisible())
if (mousePos != null && clickbox.contains(mousePos.getX(), mousePos.getY()))
{
tooltipPoint = worldPoint;
if (!Strings.isNullOrEmpty(worldPoint.getTooltip()))
{
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)
{
drawTooltip(graphics, tooltipPoint);
@@ -200,8 +259,24 @@ public class WorldMapOverlay extends Overlay
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
*
* @param worldPoint WorldPoint to get screen coordinates of
* @return Point of screen coordinates of the center of the world point
*/
@@ -214,7 +289,7 @@ public class WorldMapOverlay extends Overlay
return null;
}
Float pixelsPerTile = ro.getWorldMapZoom();
float pixelsPerTile = ro.getWorldMapZoom();
Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
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;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.annotation.Nullable;
import lombok.Data;
@@ -53,8 +51,6 @@ public class WorldMapPoint
*/
private Point imagePoint;
private Rectangle clickbox;
private boolean snapToEdge;
private boolean currentlyEdgeSnapped;
@@ -64,7 +60,10 @@ public class WorldMapPoint
*/
private boolean jumpOnClick;
private boolean tooltipVisible;
/**
* Name in menu option when {@link #jumpOnClick} is set
*/
private String name;
private String tooltip;
@@ -74,11 +73,6 @@ public class WorldMapPoint
this.image = image;
}
public MouseEvent onClick(MouseEvent e)
{
return e;
}
public void onEdgeSnap()
{
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

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