diff --git a/Include/Core/Debug.hpp b/Include/Core/Debug.hpp index 6dacd47..7fe2d5b 100644 --- a/Include/Core/Debug.hpp +++ b/Include/Core/Debug.hpp @@ -3,18 +3,22 @@ #include "../../Include/Core/Types/Logger.hpp" -#define DEBUG_VERBOSE_LOG Debug::Verbose << __PRETTY_FUNCTION__ << " > " -#define DEBUG_VERBOSE_LOG_END --Debug::Verbose << __PRETTY_FUNCTION__ << " > " #define DEBUG_VERBOSE_START Debug::Verbose++ << __PRETTY_FUNCTION__ << " > Started" << std::endl - #define DEBUG_VERBOSE_SUCCESS --Debug::Verbose << __PRETTY_FUNCTION__ << " > Succeeded > " #define DEBUG_VERBOSE_SUCCESS_NOINFO --Debug::Verbose << __PRETTY_FUNCTION__ << " > Succeeded" << std::endl #define DEBUG_VERBOSE_SUCCESS_EOF --Debug::Verbose << " > Succeeded > Reached end of function" << std::endl - #define DEBUG_VERBOSE_FAIL --Debug::Verbose << __PRETTY_FUNCTION__ << " > Failed > " #define DEBUG_VERBOSE_FAIL_NOINFO --Debug::Verbose << __PRETTY_FUNCTION__ << " > Failed" << std::endl; #define DEBUG_VERBOSE_FAIL_EOF --Debug::Verbose << __PRETTY_FUNCTION__ << " > Failed > Reached end of function" << std::endl +#define DEBUG_VERBOSE_LOG Debug::Verbose << __PRETTY_FUNCTION__ << " > " +#define DEBUG_VERBOSE_LOG_SUCCESS Debug::Verbose << __PRETTY_FUNCTION__ << " > Succeeded > " +#define DEBUG_VERBOSE_LOG_SUCCESS_NOINFO Debug::Verbose << __PRETTY_FUNCTION__ << " > Succeeded" << std::endl +#define DEBUG_VERBOSE_LOG_SUCCESS_EOF Debug::Verbose << __PRETTY_FUNCTION__ << " > Succeeded > Reached end of function" << std::endl +#define DEBUG_VERBOSE_LOG_FAIL Debug::Verbose << __PRETTY_FUNCTION__ << " > Failed > " +#define DEBUG_VERBOSE_LOG_FAIL_NOINFO Debug::Verbose << __PRETTY_FUNCTION__ << " > Failed" << std::endl +#define DEBUG_VERBOSE_LOG_FAIL_EOF Debug::Verbose << __PRETTY_FUNCTION__ << " > Failed > Reached end of function" << std::endl + namespace Debug { extern Logger Info; diff --git a/Include/Core/Globals.hpp b/Include/Core/Globals.hpp new file mode 100644 index 0000000..816a7f5 --- /dev/null +++ b/Include/Core/Globals.hpp @@ -0,0 +1,445 @@ +#ifndef GLOBALS_HPP_INCLUDED +#define GLOBALS_HPP_INCLUDED + +#include +#include +#include + +namespace Globals +{ + typedef struct SettingsDef + { + std::int32_t Index = -1; + std::int32_t BitPos = -1; + std::int32_t BitMask = -1; + } SettingsDef; + + typedef struct WidgetDef + { + std::int32_t Parent = -1; + std::int32_t Child = -1; + std::int32_t Grandchild = -1; + } WidgetDef; + + inline SettingsDef SETTING_COMBAT_SPECIAL = { 300 }; + inline SettingsDef SETTING_COMBAT_SPECIAL_TOGGLE = { 301 }; + inline SettingsDef SETTING_COMBAT_AUTO_RETALIATE = { 172 }; + inline SettingsDef SETTING_COMBAT_POISON = { 102 }; + inline SettingsDef SETTING_WEAPON_STYLES = { 43 }; // How many styles the current weapon has + inline SettingsDef SETTING_ACCEPT_AID = { 427 }; // 13 = on + inline SettingsDef SETTING_RUN_MODE = { 173 }; // 1 = running + inline SettingsDef SETTING_CURRENT_PRAYER = { 83 }; // To be used with PrayerDefs + inline SettingsDef SETTING_BANK_WITHDRAW_MODE = { 115, 0 }; + inline SettingsDef SETTING_BANK_WITHDRAW_MODE_WIDGET = { 1666 }; // Which Widget is selected, 0 = 1, 4 = 5, 8 = 10, 12 = X, 16 = ALL + inline SettingsDef SETTING_BANK_DEFAULT_QUANTITY = { 304 }; // Seems to be the value / 2, so if it returns 50, then the default custom quantity is 25 + inline SettingsDef SETTING_EXCHANGE_CURRENT_SLOT_INDEX = { 375 }; + inline SettingsDef SETTING_EXCHANGE_CURRENT_SLOT_ITEM_ID = { 1151 }; + inline SettingsDef SETTING_EXCHANGE_CURRENT_SLOT_ITEM_AMOUNT = { 563 }; + inline SettingsDef SETTING_EXCHANGE_CURRENT_SLOT_PRICE = { 1043 }; + inline SettingsDef SETTING_ESC_TO_CLOSE = { 1224, 31 }; + inline SettingsDef SETTING_SHIFT_CLICK_DROP = { 1055, 17 }; + inline SettingsDef SETTING_SCROLL_WHEEL_TO_ZOOM = { 1055, 29 }; + + inline std::int32_t WIDGET_ROOT_LOBBY = 165; + inline std::int32_t WIDGET_ROOT_FIXED = 548; + inline std::int32_t WIDGET_ROOT_RESIZABLE = 161; + inline std::int32_t WIDGET_ROOT_RESIZABLE_SIDE_PANELS = 164; + + //************ Bank.cpp ************// + inline std::int32_t BANK_ITEM_CONTAINER_ID = 95; + inline std::int32_t BANK_SPRITE_ID_CURRENT_TAB = 1079; + inline std::int32_t BANK_PARENT = 12; + inline WidgetDef BANK_MAIN = { BANK_PARENT, 3 }; + inline WidgetDef BANK_CLOSE = { BANK_PARENT, 3, 11 }; + inline WidgetDef BANK_DEPOSIT_ALL = { BANK_PARENT, 42 }; + inline WidgetDef BANK_DEPOSIT_EQUIPMENT = { BANK_PARENT, 42 }; + inline WidgetDef BANK_WITHDRAW_MODE_NOTED = { BANK_PARENT, 25 }; + inline WidgetDef BANK_WITHDRAW_MODE_ITEM = { BANK_PARENT, 23 }; + inline WidgetDef BANK_ITEM_CONTAINER_WIDGET = { BANK_PARENT, 13 }; // Used for scrolling, contains all items, middle of the bank interface + inline WidgetDef BANK_TABS_CONTAINER = { BANK_PARENT, 11 }; // Has all Tab children + inline WidgetDef BANK_INVENTORY = { 15, 3 }; // When the bank is open, the Inventory has it's own widgets for items + inline std::int32_t BANK_WITHDRAW_QUANTITY_CHILDREN[6] = { 29, 31, 33, 35, 37 }; // 1, 5, 10, x, all, uses BANK_PARENT + + inline std::int32_t BANK_ENTER_PIN_PARENT = 213; + inline WidgetDef BANK_ENTER_PIN_STATUS = { BANK_ENTER_PIN_PARENT, 10 }; // Text widget, has FIRST, SECOND, THIRD, FOURTH, Submitting in it + inline std::int32_t BANK_ENTER_PIN_BUTTON_CHILDREN[10] = { 16, 18, 20, 22, 24, 26, 28, 30, 32, 34 }; // Buttons themselves, uses BANK_ENTER_PIN_PARENT, + // grandchild 0 = proper widget bounds, grandchild 1 = text + + //************ Chat.cpp ************// + typedef struct ChatWidgetDef + { + std::int32_t Parent = -1; + std::int32_t TitleChild = -1; + std::int32_t ContinueChild = -1; + std::int32_t ContentChild = -1; + } ChatWidgetDef; + + inline ChatWidgetDef CHAT_NPC_CHAT_WIDGETS = { 231, 2, 3, 4 }; + inline ChatWidgetDef CHAT_PLAYER_CHAT_WIDGETS = { 217, 2, 3, 4 }; + inline ChatWidgetDef CHAT_GAME_CHAT_WIDGETS = { 193, 2, 3, 4 }; + inline ChatWidgetDef CHAT_LEVEL_UP_CHAT_WIDGETS = { 233, 1, 2, 3 }; + inline ChatWidgetDef CHAT_BANK_PIN_ERROR_WIDGETS = { 229, 1, 2 }; + + inline WidgetDef CHAT_SELECT_OPTION_CONTAINER = { 219, 1 }; // Container for all Select Option options + inline WidgetDef CHAT_SELECT_OPTION_TITLE = { CHAT_SELECT_OPTION_CONTAINER.Parent, CHAT_SELECT_OPTION_CONTAINER.Child, 0 }; + + inline WidgetDef CHAT_ENTER_AMOUNT_TITLE = { 162, 44 }; + inline WidgetDef CHAT_ENTER_AMOUNT = { 162, 45 }; // Input widget (* when blank) + + //************ DepositBox.cpp ************// + inline std::int32_t DEPOSIT_BOX_PARENT = 192; + inline WidgetDef DEPOSIT_BOX_CLOSE = { DEPOSIT_BOX_PARENT, 1, 11 }; + inline WidgetDef DEPOSIT_BOX_DEPOSIT_ALL = { DEPOSIT_BOX_PARENT, 4 }; + inline WidgetDef DEPOSIT_BOX_DEPOSIT_EQUIPMENT = { DEPOSIT_BOX_PARENT, 6 }; + inline WidgetDef DEPOSIT_BOX_DEPOSIT_LOOT = { DEPOSIT_BOX_PARENT, 8 }; + + //************ Exchange.cpp ************// + inline std::int32_t EXCHANGE_PARENT = 465; + inline WidgetDef EXCHANGE_MAIN = { EXCHANGE_PARENT, 0 }; + inline WidgetDef EXCHANGE_BACK = { EXCHANGE_PARENT, 4 }; + inline WidgetDef EXCHANGE_CLOSE = { EXCHANGE_PARENT, 2, 11 }; + inline WidgetDef EXCHANGE_SPRITE_TYPE = { EXCHANGE_PARENT, 24, 19}; + inline WidgetDef EXCHANGE_ITEM = { EXCHANGE_PARENT, 24, 21 }; + inline WidgetDef EXCHANGE_COLLECT_CONTAINER_WIDGET = { EXCHANGE_PARENT, 6, 1 }; + inline WidgetDef EXCHANGE_COLLECT_SLOT_ONE = { EXCHANGE_PARENT, 23, 2 }; + inline WidgetDef EXCHANGE_COLLECT_SLOT_TWO = { EXCHANGE_PARENT, 23, 3 }; + inline WidgetDef EXCHANGE_AMOUNT = { EXCHANGE_PARENT, 24, 7 }; + inline WidgetDef EXCHANGE_PRICE = { EXCHANGE_PARENT, 24, 12 }; + inline WidgetDef EXCHANGE_GUIDE = { EXCHANGE_PARENT, 24, 11}; + inline WidgetDef EXCHANGE_CONFIRM = { EXCHANGE_PARENT, 27, 0 }; + inline WidgetDef EXCHANGE_ABORT = { EXCHANGE_PARENT, 22, 0 }; + + inline WidgetDef EXCHANGE_CHAT = { 162, 44 }; + inline WidgetDef EXCHANGE_CHAT_ENTER = { 162, 45 }; + inline WidgetDef EXCHANGE_CHAT_CHOOSE = { 162, 53 }; + + inline std::int32_t EXCHANGE_SLOT_START = 7; + inline std::int32_t EXCHANGE_WIDGET_SPRITE_BUY = 26; // Widget Grandchild + inline std::int32_t EXCHANGE_WIDGET_SPRITE_SELL = EXCHANGE_WIDGET_SPRITE_BUY + 1; // Widget Grandchild + + inline std::int32_t EXCHANGE_SPRITE_BUY = 1108; + inline std::int32_t EXCHANGE_SPRITE_SELL = 1106; + inline std::int32_t EXCHANGE_SPRITE_MINI_BUY = 1118; + inline std::int32_t EXCHANGE_SPRITE_MINI_SELL = 1119; + + //************ Login.cpp ************// + inline WidgetDef LOGIN_LOBBY_PLAY = { 378, 81 }; + + //************ Makescreen.cpp ************// + inline std::int32_t MAKESCREEN_PARENT = 270; + inline WidgetDef MAKESCREEN_MAKE_ONE = { MAKESCREEN_PARENT, 7, 0 }; // 0 is for the sprite + inline WidgetDef MAKESCREEN_MAKE_FIVE = { MAKESCREEN_PARENT, 8, 0 }; // 0 is for the sprite + inline WidgetDef MAKESCREEN_MAKE_TEN = { MAKESCREEN_PARENT, 9, 0 }; // 0 is for the sprite + inline WidgetDef MAKESCREEN_MAKE_CUSTOM = { MAKESCREEN_PARENT, 10, 0 }; // 0 is for the sprite + inline WidgetDef MAKESCREEN_MAKE_CUSTOM_TEXT = { MAKESCREEN_PARENT, 10, 9 }; + inline WidgetDef MAKESCREEN_MAKE_X = { MAKESCREEN_PARENT, 11 }; + inline WidgetDef MAKESCREEN_MAKE_ALL = { MAKESCREEN_PARENT, 12, 0 }; // 0 is for the sprite + inline WidgetDef MAKESCREEN_MAKE_MIDDLE = { MAKESCREEN_PARENT, 14 }; + + //************ Minimap.cpp ************// + // 0 - Fixed; 1 - Resizable; 2 - Resizable + Side Panels + inline WidgetDef MINIMAP_MIDDLE[3] = { { 548, 8 }, { 161, 25 }, { 164, 25 } }; + inline WidgetDef MINIMAP_COMPASS[3] = { { 548, 7 }, { 161, 24 }, { 164, 24 } }; + inline WidgetDef MINIMAP_CURE = { 160, 4 }; + inline WidgetDef MINIMAP_QUICK_PRAYER = { 160, 14 }; + inline WidgetDef MINIMAP_TOGGLE_RUN = { 160, 22 }; + + //************ Trade.cpp ************// + inline WidgetDef TRADE_SCREEN = { 335, 3 }; + inline std::int32_t TRADE_ITEM_CONTAINER_MY_OFFER = 90; + inline std::int32_t TRADE_ITEM_CONTAINER_THEIR_OFFER = 32858; + + //************ Item.cpp ************// + inline std::int32_t EQUIPMENT_ITEM_CONTAINER_WIDGET = 387; // Item container parent, (Index + 6) + + //************ RandomHandler.cpp ************// + inline std::vector RANDOM_NPC_NAMES = + { "Bee keeper", + "Capt' Arnav", + "Niles", + "Miles", + "Giles", + "Sergeant Damien", + "Drunken Dwarf", + "Freaky Forester", + "Frog", + "Prince", + "Princess", + "Genie", + "Evil Bob", + "Postie Pete", + "Molly", + "Leo", + "Dr. Jekyll", + "Dr Jekyll", + "Mr. Hyde", + "Mysterious Old Man", + "Mime", + "Pillory Guard", + "Flippa", + "Tilt", + "Prison Pete", + "Quiz Master", + "Rick Turpentine", + "Sandwich lady", + "Strange plant", + "Dunce", + }; + + namespace GameTabs + { + //************************************ Tabs ************************************// + // These are the "Sprite" widgets, these widgets' sprite IDs change when opened or closed + // 0 - Fixed; 1 - Resizable; 2 - Resizable + Side Panels + inline WidgetDef TAB_ACCOUNT_MANAGEMENT[3] = { { 548, 32 }, { 161, 36 }, { 164, 36 } }; + inline WidgetDef TAB_CLAN[3] = { { 548, 31 }, { 161, 35 }, { 164, 35 } }; + inline WidgetDef TAB_COMBAT[3] = { { 548, 48 }, { 161, 51 }, { 164, 50 } }; + inline WidgetDef TAB_EMOTES[3] = { { 548, 36 }, { 161, 40 }, { 164, 39 } }; + inline WidgetDef TAB_EQUIPMENT[3] = { { 548, 52 }, { 161, 55 }, { 164, 54 } }; + inline WidgetDef TAB_FRIENDS[3] = { { 548, 33 }, { 161, 37 }, { 164, 37 } }; + inline WidgetDef TAB_INVENTORY[3] = { { 548, 51 }, { 161, 54 }, { 164, 53 } }; + inline WidgetDef TAB_LOGOUT[3] = { { 548, 34 }, { 161, 38 }, { 164, 29 } }; + inline WidgetDef TAB_MAGIC[3] = { { 548, 54 }, { 161, 57 }, { 164, 56 } }; + inline WidgetDef TAB_MUSIC[3] = { { 548, 37 }, { 161, 41 }, { 164, 40 } }; + inline WidgetDef TAB_OPTIONS[3] = { { 548, 35 }, { 161, 39 }, { 164, 38 } }; + inline WidgetDef TAB_PRAYER[3] = { { 548, 53 }, { 161, 56 }, { 164, 55 } }; + inline WidgetDef TAB_QUESTS[3] = { { 548, 50 }, { 161, 53 }, { 164, 52 } }; + inline WidgetDef TAB_STATS[3] = { { 548, 49 }, { 161, 52 }, { 164, 51 } }; + + //************ Combat.cpp ************// + inline std::int32_t COMBAT_PARENT = 593 ; + inline WidgetDef COMBAT_AUTORETALIATE = { COMBAT_PARENT, 29 }; + inline WidgetDef COMBAT_SPECIAL = { COMBAT_PARENT, 34 }; + inline std::int32_t COMBAT_STYLE_CHILDREN[4] = { 3, 7, 11, 15 }; // Uses COMBAT_PARENT as Parent + + //************ Equipment.cpp ************// + inline std::int32_t EQUIPMENT_CONTAINER_ID = 94; + + //************ Inventory.cpp ************// + inline WidgetDef INVENTORY_ITEM_CONTAINER_WIDGET = { 149, 0 }; + inline WidgetDef INVENTORY_TRADE_CONTAINER_WIDGET = { 336, 0 }; // Used for GetSlotBoxes() + inline WidgetDef INVENTORY_EXCHANGE_CONTAINER_WIDGET = { 467, 0 }; // Used for GetSlotBoxes() + inline std::int32_t INVENTORY_CONTAINER_ID = 93; + + //************ Logout.cpp ************// + inline std::int32_t LOGOUT_BUTTONS_PARENT = 182; + inline WidgetDef LOGOUT_LOGOUT_BUTTON = { LOGOUT_BUTTONS_PARENT, 8 }; + inline WidgetDef LOGOUT_WORLD_SWITCHER_BUTTON = { LOGOUT_BUTTONS_PARENT, 3 }; + inline std::int32_t LOGOUT_WORLD_SWITCHER_PARENT = 69; + inline WidgetDef LOGOUT_WORLD_SWITCHER_TITLE = { LOGOUT_WORLD_SWITCHER_PARENT, 2 }; // "Current World:" or "Loading" when loading + inline WidgetDef LOGOUT_WORLD_SWITCHER_LOGOUT = { LOGOUT_WORLD_SWITCHER_PARENT, 23 }; // Logout button inside the World Switch interface + inline WidgetDef LOGOUT_WORLD_SWITCHER_WORLDS_CONTAINER = { LOGOUT_WORLD_SWITCHER_PARENT, 16 }; // 69, 15, 301 (world id) Widget has the proper switch/favorite options + inline WidgetDef LOGOUT_WORLD_SWITCHER_WORLDS_BOX = { LOGOUT_WORLD_SWITCHER_PARENT, 5 }; // Bounds/Box containing the entire list + + //************ Magic.cpp ************// + inline std::int32_t MAGIC_SPELLS_PARENT = 218; // Used with Magic spell defs + + typedef struct SpellDef + { + std::string Name; + std::int32_t WidgetID; + std::int32_t SpriteID; + std::int32_t Level; + } SpellDef; + + inline std::vector SpellDefs = // To be used with Magic:: SPELL enum + { + // Normal, 0-69 + { "Lumbridge Home Teleport", 4, 356, 0 }, + { "Wind Strike", 5, 65, 1 }, + { "Confuse", 6, 66, 3 }, + { "Enchant Crossbow Bolt", 7, 408, 0 }, + { "Water Strike", 8, 67, 5 }, + { "Lvl-1 Enchant", 9, 68, 7 }, + { "Earth Strike", 10, 69, 9 }, + { "Weaken", 11, 70, 11 }, + { "Fire Strike", 12, 71, 13 }, + { "Bones to Bananas", 13, 72, 15 }, + { "Wind Bolt", 14, 73, 17 }, + { "Curse", 15, 74, 19 }, + { "Bind", 16, 369, 20 }, + { "Low Level Alchemy", 17, 75, 21 }, + { "Water Bolt", 18, 76, 23 }, + { "Varrock Teleport", 19, 77, 25 }, + { "Lvl-2 Enchant", 20, 78, 27 }, + { "Earth Bolt", 21, 79, 29 }, + { "Lumbridge Teleport", 22, 80, 31 }, + { "Telekinetic Grab", 23, 81, 33 }, + { "Fire Bolt", 24, 82, 35 }, + { "Falador Teleport", 25, 83, 37 }, + { "Crumble Undead", 26, 84, 39 }, + { "Teleport to House", 27, 405, 40 }, + { "Wind Blast", 28, 85, 41 }, + { "Superheat Item", 29, 86, 43 }, + { "Camelot Teleport", 30, 87, 45 }, + { "Water Blast", 31, 88, 47 }, + { "Lvl-3 Enchant", 32, 89, 49 }, + { "Iban Blast", 33, 103, 50 }, + { "Snare", 34, 370, 50 }, + { "Magic Dart", 35, 374, 50 }, + { "Ardougne Teleport", 36, 104, 51 }, + { "Earth Blast", 37, 90, 53 }, + { "High Level Alchemy", 38, 91, 55 }, + { "Charge Water Orb", 39, 92, 56 }, + { "Lvl-4 Enchant", 40, 93, 57 }, + { "Watchtower Teleport", 41, 105, 58 }, + { "Fire Blast", 42, 94, 59 }, + { "Charge Earth Orb", 43, 95, 60 }, + { "Bones to Peaches", 44, 404, 60 }, + { "Saradomin strike", 45, 111, 60 }, + { "Claws of Guthix", 46, 110, 60 }, + { "Flames of Zamorak", 47, 109, 60 }, + { "Trollheim Teleport", 48, 373, 61 }, + { "Wind Wave", 49, 96, 62 }, + { "Charge Fire Orb", 50, 97, 63 }, + { "Teleport to Ape Atoll", 51, 407, 64 }, + { "Water Wave", 52, 98, 65 }, + { "Charge Air Orb", 53, 99, 66 }, + { "Vulnerability", 54, 106, 66 }, + { "Lvl-5 Enchant", 55, 100, 68 }, + { "Teleport to Kourend", 56, 410, 69 }, + { "Earth Wave", 57, 101, 70 }, + { "Enfeeble", 58, 107, 73 }, + { "Teleother Lumbridge", 59, 399, 74 }, + { "Fire Wave", 60, 102, 75 }, + { "Entangle", 61, 371, 79 }, + { "Stun", 62, 108, 80 }, + { "Charge", 63, 372, 80 }, + { "Wind Surge", 64, 412, 81 }, + { "Teleother Falador", 65, 400, 82 }, + { "Water Surge", 66, 413, 85 }, + { "Tele Block", 67, 402, 85 }, + { "Teleport to Bounty Target", 68, 409, 85 }, + { "Lvl-6 Enchant", 69, 403, 87 }, + { "Teleother Camelot", 70, 401, 90 }, + { "Earth Surge", 71, 414, 90 }, + { "Lvl-7 Enchant", 72, 411, 93 }, + { "Fire Surge", 73, 415, 95 }, + //Lunar 70-114 + { "Lunar Home Teleport", 99, 356, 0 }, + { "Bake Pie", 100, 593, 65 }, + { "Geomancy", 140, 613, 65 }, + { "Cure Plant", 101, 617, 66 }, + { "Monster Examine", 102, 627, 66 }, + { "NPC Contact", 103, 618, 67 }, + { "Cure Other", 104, 609, 68 }, + { "Humidify", 105, 628, 69 }, + { "Moonclan Teleport", 106, 594, 69 }, + { "Tele Group Moonclan", 107, 619, 70 }, + { "Cure Me", 108, 612, 71 }, + { "Ourania Teleport", 142, 636, 71 }, + { "Hunter Kit", 109, 629, 71 }, + { "Waterbirth Teleport", 110, 595, 72 }, + { "Tele Group Waterbirth", 111, 620, 73 }, + { "Cure Group", 112, 615, 74 }, + { "Stat Spy", 113, 626, 75 }, + { "Barbarian Teleport", 114, 597, 75 }, + { "Tele Group Barbarian", 115, 621, 76 }, + { "Spin Flax", 141, 635, 76 }, + { "Superglass Make", 116, 598, 77 }, + { "Tan Leather", 117, 633, 78 }, + { "Khazard Teleport", 118, 599, 78 }, + { "Tele Group Khazard", 119, 622, 79 }, + { "Dream", 120, 630, 79 }, + { "String Jewellery", 121, 600, 80 }, + { "Stat Restore Pot Share", 122, 604, 81 }, + { "Magic Imbue", 123, 602, 82 }, + { "Fertile Soil", 124, 603, 83 }, + { "Boost Potion Share", 125, 601, 84 }, + { "Fishing Guild Teleport", 126, 605, 85 }, + { "Teleport to Bounty Target", 68, 409, 85 }, + { "Tele Group Fishing Guild", 127, 623, 86 }, + { "Plank Make", 128, 631, 86 }, + { "Catherby Teleport", 129, 606, 87 }, + { "Tele Group Catherby", 130, 624, 88 }, + { "Recharge Dragonstone", 131, 634, 89 }, + { "Ice Plateau Teleport", 132, 607, 89 }, + { "Tele Group Ice Plateau", 133, 625, 90 }, + { "Energy Transfer", 134, 608, 91 }, + { "Heal Other", 135, 610, 92 }, + { "Vengeance Other", 136, 611, 93 }, + { "Vengeance", 137, 614, 94 }, + { "Heal Group", 138, 616, 95 }, + { "Spellbook Swap", 139, 632, 96 }, + //Ancients 115-140 + { "Ice Rush", 68, 375, 58 }, + { "Ice Blitz", 69, 377, 84 }, + { "Ice Burst", 70, 376, 70 }, + { "Ice Barrage", 71, 378, 94 }, + { "Blood Rush", 72, 383, 56 }, + { "Blood Blitz", 73, 385, 80 }, + { "Blood Burst", 74, 384, 68 }, + { "Blood Barrage", 75, 386, 92 }, + { "Smoke Rush", 76, 379, 50 }, + { "Smoke Blitz", 77, 381, 74 }, + { "Smoke Burst", 78, 380, 62 }, + { "Smoke Barrage", 79, 382, 86 }, + { "Shadow Rush", 80, 387, 52 }, + { "Shadow Blitz", 81, 389, 76 }, + { "Shadow Burst", 82, 388, 64 }, + { "Shadow Barrage", 83, 390, 88 }, + { "Paddewwa Teleport", 84, 391, 54 }, + { "Senntisten Teleport", 85, 392, 60 }, + { "Kharyrll Teleport", 86, 393, 66 }, + { "Lassar Teleport", 87, 394, 72 }, + { "Dareeyak Teleport", 88, 395, 78 }, + { "Carrallangar Teleport", 89, 396, 84 }, + { "Annakarl Teleport", 90, 397, 90 }, + { "Ghorrock Teleport", 91, 398, 96 }, + { "Teleport to Bounty Target", 92, 409, 85 }, + { "Edgeville Home Teleport", 93, 356, 0 }, + }; + + //************ Options.cpp ************// + inline std::int32_t OPTIONS_PARENT = 261; + inline WidgetDef OPTIONS_ACCEPT_AID = { OPTIONS_PARENT, 92 }; + inline WidgetDef OPTIONS_RUN_MODE = { OPTIONS_PARENT, 95 }; + + //************ Prayer.cpp ************// + inline std::int32_t PRAYER_PRAYERS_PARENT = 541; // To be used with PrayerDefs + + typedef struct PrayerDef + { + std::string Name; + std::int32_t BitPos; + std::int32_t WidgetID; + std::int32_t SpriteID; + std::int32_t Level; + } PrayerDef; + + static std::vector PrayerDefs = // To be used with Prayer:: PRAYERS enum + { + { "Thick Skin", 0, 5, 115, 1 }, + { "Burst of Strength", 1, 6, 116, 4 }, + { "Clarity of Thought", 2, 7, 117, 7 }, + { "Sharp Eye", 18, 23, 133, 8 }, + { "Mystic Will", 19, 24, 134, 9 }, + { "Rock Skin", 3, 8, 118, 10 }, + { "Superhuman Strength", 4, 9, 119, 13 }, + { "Improved Reflexes", 5, 10, 120, 16 }, + { "Rapid Restore", 6, 11, 121, 19 }, + { "Rapid Heal", 7, 12, 122, 22 }, + { "Protect Item", 8, 13, 123, 25 }, + { "Hawk Eye", 20, 25, 502, 26 }, + { "Mystic Lore", 21, 26, 503, 27 }, + { "Steel Skin", 9, 14, 124, 28 }, + { "Ultimate Strength", 10, 15, 125, 31 }, + { "Incredible Reflexes", 11, 16, 126, 34 }, + { "Protect from Magic", 12, 17, 127, 37 }, + { "Protect from Missiles", 13, 18, 128, 40 }, + { "Protect from Melee", 14, 19, 129, 43 }, + { "Eagle Eye", 22, 27, 504, 44 }, + { "Mystic Might", 23, 28, 505, 45 }, + { "Retribution", 15, 20, 131, 46 }, + { "Redemption", 16, 21, 130, 49 }, + { "Smite", 17, 22, 132, 52 }, + { "Preserve", 29, 33, 947, 55 }, + { "Chivalry", 25, 28, 945, 60 }, + { "Piety", 26, 30, 946, 70 }, + { "Rigour", 24, 31, 1420, 74 }, + { "Augury", 27, 32, 1421, 77 } + }; + } +} + +#endif // GLOBALS_HPP_INCLUDED \ No newline at end of file diff --git a/Include/Core/Input.hpp b/Include/Core/Input.hpp index 9b579f1..86dc8a8 100644 --- a/Include/Core/Input.hpp +++ b/Include/Core/Input.hpp @@ -7,6 +7,7 @@ typedef enum ScrollDirection { + SCROLL_NONE = -1, SCROLL_DOWN = 0, SCROLL_UP = 1 } ScrollDirection; diff --git a/Include/Core/Internal.hpp b/Include/Core/Internal.hpp index 5187a7a..2cb8df7 100644 --- a/Include/Core/Internal.hpp +++ b/Include/Core/Internal.hpp @@ -7,6 +7,7 @@ #include "Paint.hpp" #include "Script.hpp" #include "Time.hpp" +#include "Globals.hpp" #include "Types/Tile.hpp" #include "Types/Point.hpp" @@ -133,6 +134,14 @@ namespace Internal std::int32_t GetGameTick(); Deque GetGraphicsObjects(); std::vector>> GetGroundItems(); + std::int32_t GetHintArrowNPCIndex(); + std::int32_t GetHintArrowOffsetX(); + std::int32_t GetHintArrowOffsetY(); + std::int32_t GetHintArrowPlayerIndex(); + std::int32_t GetHintArrowTargetType(); + std::int32_t GetHintArrowX(); + std::int32_t GetHintArrowY(); + std::int32_t GetHintArrowZ(); bool GetIsMember(); HashTable GetItemContainers(); IndexableData GetItemIndexableData(); diff --git a/Include/Core/Math.hpp b/Include/Core/Math.hpp index 3c76282..969142b 100644 --- a/Include/Core/Math.hpp +++ b/Include/Core/Math.hpp @@ -3,7 +3,6 @@ #include #include - #include "Types/Point.hpp" /** @addtogroup Math diff --git a/Include/Core/Paint.hpp b/Include/Core/Paint.hpp index d8633be..b774323 100644 --- a/Include/Core/Paint.hpp +++ b/Include/Core/Paint.hpp @@ -5,7 +5,6 @@ #include "Types/Convex.hpp" #include "Types/Tile.hpp" - /** @addtogroup Core * @{ */ namespace Paint diff --git a/Include/Core/Types/Wireframe.hpp b/Include/Core/Types/Wireframe.hpp index d7b690c..728d094 100644 --- a/Include/Core/Types/Wireframe.hpp +++ b/Include/Core/Types/Wireframe.hpp @@ -17,6 +17,7 @@ class Wireframe Point GetHybridRandomPoint(double ProbabilityX, double ProbabilityY, double StandardDeviationX, double StandardDeviationY, double PointGenAccuracy) const; Point GetProfileHybridRandomPoint() const; Point GetProfileHybridRandomPoint(double PointGenAccuracy) const; + Point GetHighPrecisionPoint() const; Box GetBox() const; Convex GetConvex() const; bool Contains(const Point& P) const; diff --git a/Include/Game/Interfaces/GameTabs/Magic.hpp b/Include/Game/Interfaces/GameTabs/Magic.hpp index 96b1e64..8334e67 100644 --- a/Include/Game/Interfaces/GameTabs/Magic.hpp +++ b/Include/Game/Interfaces/GameTabs/Magic.hpp @@ -3,7 +3,6 @@ #include #include -#include /** @addtogroup GameTabs * @{ */ @@ -158,7 +157,6 @@ namespace Magic NONE } SPELL; - bool IsOpen(); bool Open(); diff --git a/Include/Game/Interfaces/Menu.hpp b/Include/Game/Interfaces/Menu.hpp index 8be0616..87b53d3 100644 --- a/Include/Game/Interfaces/Menu.hpp +++ b/Include/Game/Interfaces/Menu.hpp @@ -23,7 +23,6 @@ namespace Menu * @brief Opens the menu by right-clicking wherever the mouse currently is * @return true if the menu is currently open or opened by right clicking * @return false if WaitFunc fails - WaitFunc(1000, 100, Menu::IsOpen, true); - * @note Implements an %Interactable delay if succesful */ bool Open(); @@ -31,7 +30,6 @@ namespace Menu * @brief Closes the menu by moving the mouse to either left or right of the menu, uses the current mouse position as a base point * @return true if the menu isn't open, or closed by moving the mouse * @return false if the generated point is off-screen, or WaitFunc fails - WaitFunc(1000, 100, Menu::IsOpen, false); - * @note Implements an %Interactable delay if succesful */ bool Close(); @@ -45,22 +43,29 @@ namespace Menu /** * @brief Get the raw, un-filtered menu actions - * @description By default the game includes html code in menu actions/targets - * This function returns those actions without the removal of the html code * @return std::vector of raw menu actions + * @note The game includes color code in some menu actions or targets * @warning The result can be inaccurate if the menu isn't open before calling this function */ + [[deprecated("Use Internal::GetMenuActions() instead")]] std::vector GetActionsRaw(); /** - * @brief Get the raw, un-filtered menu targets - * @description By default the game includes html code in menu actions/targets - * This function returns those targets without the removal of the html code + * @brief Get the raw, un-touched menu targets * @return std::vector of targets + * @note The game includes color code in some menu actions or targets * @warning The result can be inaccurate if the menu isn't open before calling this function */ + [[deprecated("Use Internal::GetMenuTargets() instead")]] std::vector GetTargetsRaw(); + /** + * @brief Attempts to verify the order of the passed menu actions and targets + * @return true if the passed menu actions and targets are in the correct order + * @note This isn't a guarantee, but testing shows near zero failure rate + */ + bool OptionsValid(std::int32_t MenuCount, const std::vector& RawActions, const std::vector& RawTargets); + /** * @brief Get the menu actions * @@ -68,7 +73,7 @@ namespace Menu * 'Use' - action 'gold bar' - target * 'Attack' - action 'Guard (level-21)' - target * @return std::vector array of menu actions - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::vector GetActions(); @@ -79,7 +84,7 @@ namespace Menu * 'Use' - action 'gold bar' - target * 'Attack' - action 'Guard (level-21)' - target * @return std::vector array of menu targets - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::vector GetTargets(); @@ -92,9 +97,22 @@ namespace Menu * 'Use gold bar' - option * 'Attack Guard (level-21)' - option * @return std::vector array of menu options - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::vector GetOptions(); + /** + * @brief Get the menu options split into pairs instead of whole strings + * + * @description + * 'Use' - action 'gold bar' - target + * 'Attack' - action 'Guard (level-21)' - target + * 'Use gold bar' - option + * 'Attack Guard (level-21)' - option + * first is the action, second is the target + * @return std::vector> + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function + */ + std::vector> GetSplitOptions(); /** @@ -111,7 +129,7 @@ namespace Menu * @return std::int32_t The index of the first found option, -1 if the option wasn't found * @note Notice that 'Attack Guard (level-40)' has a double space after 'Guard', menu options can vary, in this case the menu option i'm looking for * has a double space after 'Guard'. - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::int32_t IndexOf(const std::string& Option); @@ -124,7 +142,7 @@ namespace Menu * @param Options %Menu options to look for, returns on first option found, the more specific the options, the more accurate the result will be * @return std::int32_t The index of the first found option, -1 if the option wasn't found * @see Menu::IndexOf(const std::string& Option) - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::int32_t IndexOf(const std::vector& Options); @@ -138,7 +156,7 @@ namespace Menu * std::string [1] = Action that was found at index * std::string [2] = Target that was found at index * @see Menu::IndexOf(const std::string& Option) - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::tuple FindOption(std::uint32_t Index); @@ -151,7 +169,7 @@ namespace Menu * std::string [1] = Action that was found * std::string [2] = Target that was found * @see Menu::IndexOf(const std::string& Option) - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::tuple FindOption(const std::string& Option); @@ -164,7 +182,7 @@ namespace Menu * std::string [1] = Action that was found * std::string [2] = Target that was found * @see Menu::IndexOf(const std::string& Options) - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::tuple FindOption(const std::vector& Options); @@ -176,7 +194,7 @@ namespace Menu * std::int32_t [0] = Index of the option that was found, -1 if the option wasn't found * std::string [1] = Action that was found * std::string [2] = Target that was found - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function * @see Menu::IndexOf(const std::string& Option) */ std::vector> FindOptions(const std::string& Option); @@ -190,7 +208,7 @@ namespace Menu * std::string [1] = Action that was found * std::string [2] = Target that was found * @see Menu::IndexOf(const std::string& Options) - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ std::vector> FindOptions(const std::vector& Options); @@ -201,7 +219,7 @@ namespace Menu * @param Option %Menu option to look for, the more specific the option, the more specific the option, the more accurate the result will be * @return true if the found index is valid (Index >= 0) * @see Menu::IndexOf(const std::string& Option) - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ bool Contains(const std::string& Option); @@ -211,7 +229,7 @@ namespace Menu * @param %Options %Menu options to look for, returns on first option found, the more specific the options, the more accurate the result will be * @return true if the found index is valid (Index >= 0) * @see Menu::IndexOf(const std::string& Options) - * @warning The result can be inaccurate if the menu isn't open before calling this function + * @warning The result can rarely be inaccurate if the menu isn't open before calling this function */ bool Contains(const std::vector& Options); @@ -248,7 +266,6 @@ namespace Menu * @param CloseMenu Close the menu if the function fails by using Menu::Close(), true by default * @return true if the function selected the option by index * @return false if the menu isn't open, the passed index is invalid (-1), the option box is off-screen, or the WaitFunc failed - WaitFunc(1000, 100, Menu::IsOpen, false) - * @note Implements an %Interactable delay if succesful */ bool Select(std::int32_t Index, bool CloseMenu = true); @@ -259,7 +276,6 @@ namespace Menu * @param CloseMenu Close the menu if the function fails by using Menu::Close(), true by default * @return true if the function selected the option by option * @return false if the menu isn't open, the found option was invalid, the option box is off-screen, or the WaitFunc failed - WaitFunc(1000, 100, Menu::IsOpen, false) - * @note Implements an %Interactable delay if succesful * @see Menu::IndexOf(const std::string& Option) */ bool Select(const std::string& Option, bool CloseMenu = true); @@ -271,7 +287,6 @@ namespace Menu * @param CloseMenu Close the menu if the function fails using Menu::Close(), true by default * @return true if the function selected the option by the first found option * @return false if the menu isn't open, the found option was invalid, the option box is off-screen, or the WaitFunc failed - WaitFunc(1000, 100, Menu::IsOpen, false) - * @note Implements an %Interactable delay if succesful * @see Menu::IndexOf(const std::string& Options) */ bool Select(const std::vector& Options, bool CloseMenu = true); diff --git a/Include/Game/Tools/Interact.hpp b/Include/Game/Tools/Interact.hpp index b2f7a9a..ac5e1f2 100644 --- a/Include/Game/Tools/Interact.hpp +++ b/Include/Game/Tools/Interact.hpp @@ -17,16 +17,16 @@ namespace Interact bool Click(const Button& B = BUTTON_LEFT); bool Click(const Point& P, const Button& B = BUTTON_LEFT); - bool Click(const Point& P, const std::string& Option); - bool Click(const Point& P, const std::vector& Options); + bool Click(const Point& P, const std::string& Option, const std::string& Target = ""); + bool Click(const Point& P, const std::vector& Options, const std::string& Target = ""); bool Click(const Box& B, const Button& Button = BUTTON_LEFT); - bool Click(const Box& B, const std::string& Option); - bool Click(const Box& B, const std::vector& Options); + bool Click(const Box& B, const std::string& Option, const std::string& Target = ""); + bool Click(const Box& B, const std::vector& Options, const std::string& Target = ""); bool Click(const Convex& C, const Button& B = BUTTON_LEFT); - bool Click(const Convex& C, const std::string& Option); - bool Click(const Convex& C, const std::vector& Options); + bool Click(const Convex& C, const std::string& Option, const std::string& Target = ""); + bool Click(const Convex& C, const std::vector& Options, const std::string& Target = ""); bool Scroll(const ScrollDirection& Direction); bool ScrollUntil(const ScrollDirection& Direction, std::int32_t Duration, const std::function& Func); diff --git a/Library/libAlpacaLibrary.a b/Library/libAlpacaLibrary.a index cf738d9..fe7f0e5 100644 Binary files a/Library/libAlpacaLibrary.a and b/Library/libAlpacaLibrary.a differ