Game Skills
CSkillMgr, CSkillList, CSkillEntry, CQuestMgr, CQuestNpcManager, CAchievementMgr
| Address | Size | Name | Description |
|---|---|---|---|
| 0x00660F70 | 490 | CQuestNpcManager__ctor | Constructor for a quest/NPC data manager class. Sets vtable to CPacketQueue__copy_helper_00663390, calls CLuaInstance__ctor, initializes 1 string, and creates 8 red-black tree sentinel nodes (for maps/sets of various element sizes: 0x50, 0x44, 0x34, 0x1C x4). Sets a boolean flag at offset 0x19. |
| 0x006629D0 | 412 | CQuestNpcManager__dtor_006629d0 | CPacketQueue destructor. Sets vtable, then destroys all data members in reverse order: nested 1c trees (offsets 0x5C, 0x54), nested 60-byte trees (0x4C, 0x44, 0x3C), string-vector list (0x34), 2-string 44-byte tree (0x2C), string (offset 4), 50-byte tree (offset 0xC), and finally CLuaInstance at base. |
| 0x00662B70 | 154 | CQuestNpcManager__inner_dtor | CPacketQueue inner class destructor. Sets vtable, then erases two 0x1c-byte trees: one with cleanup variant (offset 0xC) and one with standard cleanup (offset 0x4). Destroys a smaller sub-object that contains two std::map members. |
| 0x00663370 | 30 | CQuestNpcManager__vtable_entry_scalar_deleting_dtor | Vtable entry scalar deleting destructor for a 4-byte object (likely base class pointer). Conditionally frees memory. |
| 0x00663390 | 35 | CQuestNpcManager__scalar_deleting_dtor | Scalar deleting destructor for CQuestNpcManager (0x68 bytes). Calls CPacketQueue__dtor then conditionally frees memory. |
| 0x006633C0 | 175 | CQuestNpcManager__dtor | Destructor for CQuestNpcManager. Sets vtable pointer, erases two RB-trees (0x1c-byte nodes) at offsets +0x04 and +0x0C, frees their sentinels. Conditionally deletes self (0x14 bytes). |
| 0x006635C0 | 178 | CQuestNpcManager__get_or_create_singleton | Gets or creates the CQuestNpcManager singleton (global DAT_0138cf2c). If null, allocates 0x68 bytes and calls CQuestNpcManager__ctor. If flag at offset +0x64 is set, calls bulk_processor. Destroys singleton on failure. Returns 1 on success, 0 on failure. |
| 0x00663680 | 27 | CQuestNpcManager__destroy_singleton | Destroys the CQuestNpcManager singleton. Calls virtual destructor (flag=1 for delete) then sets global pointer to null. |
| 0x006636A0 | 483 | CQuestNpcManager__clear_list_and_rebuild_sorted | Clears a linked list of 0x3c-byte nodes (destroying string vectors and strings in each), then looks up a quest ID in a tree, copies matching entries to the list, and merge-sorts the list by the int field at node offset +0x10. |
| 0x00663890 | 313 | CQuestNpcManager__filter_by_level_range_to_list | Clears the output list, then iterates the tree at this+0x34. For each node whose [min,max] range contains the global level (DAT_01733c88), copies the node (string + 2 ints + vector of 0x18-byte elements) to the output list. |
| 0x006639D0 | 500 | CQuestNpcManager__clear_list_and_rebuild_sorted_by_type | Clears a linked list of 0x58-byte nodes (2 strings + vector each), selects a tree by type parameter (1->+0x3C, 3->+0x44, 4->+0x4C), looks up key in that tree, copies matching entries to list, and merge-sorts by offset+0x10 field. |
| 0x0066CF90 | 242 | CAchievementMgr__find_or_insert_info | Looks up achievement info by ID in the RB-tree map. If not found, allocates a new 0x94-byte info node, initializes it via CPacketHandler__processor, and inserts it into the tree. Returns pointer to data area (node+0x14). |
| 0x0066D090 | 250 | CAchievementMgr__find_or_insert_tab | Looks up achievement tab entry by ID in the tab RB-tree. If not found, allocates a new 0x20-byte tab node with the key and empty vector, inserts into tree. Returns pointer to data area (node+0x14). |
| 0x0066D190 | 250 | CAchievementMgr__find_or_insert_tab_entry | Same as find_or_insert_tab but used for a different tree. Allocates 0x20-byte nodes. Returns pointer to data area at node+0x14. |
| 0x0066D290 | 266 | CAchievementMgr__scalar_deleting_dtor | Scalar deleting destructor for CAchievementMgr. Sets vtable, destroys both RB-trees (info tree with 0x94-byte nodes and tab tree with 0x20-byte nodes), frees all memory. Conditionally deletes 'this' if param_2 bit 0 is set. |
| 0x0066D3A0 | 308 | CAchievementMgr__get_instance | Singleton getter for CAchievementMgr. Creates instance on first call (allocates 0x1c bytes, initializes two RB-trees for info and tabs). Calls load_lua_data to load achievement definitions from Lua script. Returns 1 on success, 0 on failure. |
| 0x0066D4E0 | 31 | CAchievementMgr__index_to_row_col | Converts a flat achievement index to row/col coordinates. Divides index by this->stride (field at offset 0x8). Outputs quotient to param_3 (row) and remainder to param_4 (col). |
| 0x0066D500 | 27 | CAchievementMgr__destroy_instance | Destroys the CAchievementMgr singleton. If the global instance (DAT_0138cf34) exists, calls its virtual destructor with delete flag=1, then sets the global pointer to NULL. |
| 0x0066D520 | 17 | CAchievementMgr__row_col_to_index | Converts row/col coordinates to a flat index. Returns this->stride * row + col. |
| 0x0066D540 | 252 | CAchievementMgr__get_achievement_data | Retrieves full achievement data by ID. Looks up the info node, then copies multiple string fields (name, description, resource strings at offsets 0x0, 0x18, 0x30), numeric fields (offset 0x48-0x54), and a sub-vector. Returns 1 if found, 0 if not. |
| 0x0066D640 | 212 | CAchievementMgr__get_name_by_id | Returns the achievement name string (at info node offset 0x30) for a given achievement ID. Returns empty string if ID not found in the map. |
| 0x0066D720 | 212 | CAchievementMgr__get_reward_name_by_id | Returns the reward name string (at info node offset 0x68) for a given achievement ID. Returns empty string if ID not found. |
| 0x0066D800 | 2629 | CAchievementMgr__build_all_entries | Builds all achievement entries by iterating through the info and tab RB-trees. For each entry, copies string fields, numeric fields, reward vectors, and UI type data into the output tree. Handles both full rebuild (param_4=-1, iterates all rows) and single-entry mode. Returns 1 on success, 0 on failure. |
| 0x0066E250 | 77 | CAchievementMgr__get_reward_buff_id | Returns the reward buff ID (int at info node offset 0x48) for a given achievement ID. Returns -1 (0xFFFFFFFF) if not found. |
| 0x0066E2A0 | 212 | CAchievementMgr__get_description_by_id | Returns the achievement description string (at info node offset 0x18) for a given achievement ID. Returns empty string if not found. |
| 0x0066E380 | 209 | CAchievementMgr__get_first_string_by_id | Returns the first string field (at info node base, offset 0x14 from tree node) for a given achievement ID. Returns empty string if not found. |
| 0x0066E460 | 77 | CAchievementMgr__get_reward_title_id | Returns the reward title ID (int at info node offset 0x50) for a given achievement ID. Returns -1 (0xFFFFFFFF) if not found. |
| 0x0066E4B0 | 381 | CAchievementMgr__count_items_in_tabs | Counts total achievement items across tabs. If param_2=0, returns total count from field at offset 0x10. If param_3=-1, iterates all rows summing vector sizes. Otherwise returns the vector size for a specific tab entry. |
| 0x0066E630 | 966 | CAchievementMgr__count_completed_achievements | Counts completed achievements by iterating entries and checking CSkillMgr__get_skill_data_by_id for each. Counts entries where skill data byte at offset 1 equals 0x01. Supports full count (param_2=0), per-row count (param_3=-1), or single-tab count. |
| 0x0066EA00 | 155 | CAchievementMgr__find_achievement_position | Searches the info RB-tree for an achievement containing a specific param_2 value in its vector (offsets 0x5-0x6 range). Returns 1 and sets row/col via index_to_row_col if found, 0 if not found. |
| 0x0066EAA0 | 740 | CAchievementMgr__load_lua_data | Loads achievement data from a Lua script. Creates CLuaHost, registers base libs, then registers 7 Lua callbacks: InsertAchieveInfo, InsertAchieveResource, InsertAchieveRewardItem, InsertAchieveRewardTitle, InsertAchieveRewardBuff, InsertAchieveUIType, SetAchieveIDByTab. Decrypts the Lua filename via XOR, loads and executes it. Shows MessageBox on error. Class name: CAchievementMgr. |
| 0x0066ED90 | 984 | CAchievementMgr__insert_achievement_info | Inserts a full achievement info entry. Looks up by ID; if exists, returns duplicate error string. Otherwise creates a new entry with 3 string fields, numeric fields, an empty reward vector, and a UI type string. Calls complex_handler for tree construction. Returns result struct with success/error status and message. |
| 0x0066F170 | 724 | CAchievementMgr__insert_achievement_resource | Inserts a resource entry into an existing achievement. Looks up achievement by ID, then searches its resource vector for duplicates by string comparison. If no duplicate found, appends the new resource entry. Returns success/error result with descriptive message. |
| 0x0066F450 | 283 | CAchievementMgr__set_reward_buff | Sets the reward buff field (at info node offset 0x68) for an achievement. Looks up by ID, sets the value if found. Returns result with success or 'cannot be found' error message. |
| 0x0066F570 | 283 | CAchievementMgr__set_reward_item | Sets the reward item field (at info node offset 0x60) for an achievement. Looks up by ID, sets the value if found. Returns result with success or 'cannot be found' error message. |
| 0x0066F690 | 283 | CAchievementMgr__set_reward_title | Sets the reward title field (at info node offset 0x64) for an achievement. Looks up by ID, sets the value if found. Returns result with success or 'cannot be found' error message. |
| 0x0066F7B0 | 323 | CAchievementMgr__set_ui_type | Sets the UI type for an achievement. Stores an integer at offset 0x78 and a string at offset 0x7c of the info node. Looks up by ID, returns result with success or 'cannot be found' error. |
| 0x0066F900 | 106 | CAchievementMgr__has_rewards | Checks if an achievement has any rewards. Returns 1 if any of the reward fields (at offsets 0x4c, 0x50, 0x54 of info node) are greater than 0. Returns 0 if no rewards or ID not found. |
| 0x0066F970 | 369 | CAchievementMgr__add_tab_to_achievement | Adds a tab number to an achievement's tab vector. Computes flat index from row*stride+col, looks up the tab entry, checks for duplicate tab number. If not duplicate, appends to the vector. Returns error with 'duplicate achievement tab number' message if already present. |
| 0x0066FAF0 | 92 | CAchievementMgr__destroy_string_array | Iterates from param_1 to param_2 in 0x20-byte strides, calling STL_string_dtor on each element. Used to destroy an array of string-containing structures. |
| 0x0066FD60 | 177 | CAchievementMgr__clear_string_vector | Clears a vector of 0x20-byte string entries. Iterates each element calling STL_string_dtor, then frees the backing memory (with aligned allocation handling for large buffers). Resets vector pointers to zero. |
| 0x0066FED0 | 617 | CAchievementMgr__lua_InsertAchieveInfo | Lua callback for InsertAchieveInfo. Validates 5 args: number (ID), 3 strings (name/desc/resource), number. Calls insert_achievement_info with parsed values. Pushes boolean success and error string to Lua. Returns 2 values. |
| 0x00670140 | 475 | CAchievementMgr__lua_InsertAchieveResource | Lua callback for InsertAchieveResource. Validates 4 args: number (ID), string (resource), 2 numbers. Calls insert_achievement_resource. Pushes boolean success and error string to Lua. Returns 2 values. |
| 0x00670320 | 367 | CAchievementMgr__lua_InsertAchieveRewardBuff | Lua callback for InsertAchieveRewardBuff. Takes 2 number args (achievement ID, buff value). Calls set_reward_buff. Pushes boolean success and error string to Lua. Returns 2 values. |
| 0x00670490 | 367 | CAchievementMgr__lua_InsertAchieveRewardItem | Lua callback for InsertAchieveRewardItem. Takes 2 number args (achievement ID, item value). Calls set_reward_item. Pushes boolean success and error string to Lua. Returns 2 values. |
| 0x00670600 | 367 | CAchievementMgr__lua_InsertAchieveRewardTitle | Lua callback for InsertAchieveRewardTitle. Takes 2 number args (achievement ID, title value). Calls set_reward_title. Pushes boolean success and error string to Lua. Returns 2 values. |
| 0x00670770 | 587 | CAchievementMgr__lua_InsertAchieveUIType | Lua callback for InsertAchieveUIType. Takes 2 numbers and 1 string arg (achievement ID, UI type value, UI type string). Calls set_ui_type. Pushes boolean success and error string to Lua. Returns 2 values. |
| 0x006709C0 | 427 | CAchievementMgr__lua_SetAchieveIDByTab | Lua callback for SetAchieveIDByTab. Takes 3 number args (achievement ID, tab row, tab col). Calls add_tab_to_achievement. Pushes boolean success and error string to Lua. Returns 2 values. |
| 0x00679C20 | 475 | CQuestMgr__serialize_quest_list_to_buffer | Serializes the ongoing quest set into a flat buffer. For each quest entry, writes quest ID, display flag, item data (DC/E0/E4), and option slots with names/IDs if the option count > 0. Uses strncpy_s for option name strings (0x33 max). Buffer starts with quest count at offset 0. |
| 0x00679E00 | 75 | CQuestMgr__calc_serialized_quest_buffer_size | Calculates the total buffer size needed to serialize the ongoing quest list. Base size = 4 + (count * 0x18). Each quest with option slots adds (option_count * 0x47) bytes per quest. |
| 0x00679E50 | 1710 | CQuestMgr__init_quest_lua_and_load_data | Initializes the quest Lua environment and loads quest data files. Registers Lua functions: AddQuestIconTooltip, AddQuestFilterInfo. Executes System_QuestClassificationInfo Lua buffer, then calls LoadQuestIconTooltip and LoadQuestFilterInfo. Registers closures: AddOngoingDescription, AddOngoingRewardInfo, InsertRecommededQuestInfo, AddRecommendedQuestInfo, SetRecommendedQuestActive. Loads data files: QuestInfo, OngoingSimpleViewList, RecommendedActiveList, and version-dependent OngoingQuestInfoList/RecommendedQuestInfoList (Sakray vs True). Finally calls RecommendedQuestInfoLoad and RecommendedQuestActiveLoad Lua functions. |
| 0x0067A500 | 298 | CQuestMgr__insert_or_replace_ongoing_quest | Inserts a quest ID into the ongoing quest tree, or replaces an existing entry. Uses _Find_lower_bound to locate position, allocates a 0x14-byte tree node if not found, then calls Insert_node. If replacing, extracts the old node via STL_rbtree_extract_and_rebalance_ongoing and deletes it. |
| 0x0067A630 | 1707 | CQuestMgr__load_ongoing_quest_info_from_lua | Loads detailed ongoing quest info by calling Lua function GetOngoingQuestInfoByID. Parses 7+ return values from Lua into the quest entry struct (strings at various offsets). Copies active status, ongoing type, and quest flags. Truncates quest name and description text to fit display width (250px). Calls GetOngoingDescription and GetOngoingRewardInfo Lua callbacks, then inserts into the ongoing quest tree. Also inserts into the quest filter tree via _Find_lower_bound + Insert_node with a 0x218-byte node. |
| 0x0067ACE0 | 458 | CQuestMgr__insert_recommended_quest_entry | Inserts a recommended quest entry into the recommended quest tree. Copies item option data and strings from the source entry, allocates a 0x104-byte tree node, performs copy construction of the entry data, then inserts via Insert_node. |
| 0x0067AEB0 | 78 | CQuestMgr__has_ongoing_quest | Checks if a given quest ID exists in the ongoing quest tree. Returns true if the quest is found and is not the sentinel node, false otherwise. Uses _Find_lower_bound for tree lookup. |
| 0x0067AF00 | 298 | CQuestMgr__check_quest_filter_match | Checks quest filter matching. For param_2==0, returns true. For param_2==1, iterates the ongoing quest tree checking each quest's filter string list against param_3/param_4 using json__buffer_equals. For param_2>=2, looks up the quest filter tree entry and checks its linked list for a match. |
| 0x0067B030 | 1059 | CQuestMgr__lua_add_quest_filter_info | Lua callback for AddQuestFilterInfo. Takes quest ID (number), filter name (string), and filter tag list (table) from Lua stack. Builds a linked list of filter tag strings from the Lua table. Inserts into the quest filter tree (offset 0x34 of quest manager) with a 0x34-byte node containing the filter name string and tag list. Returns 0. |
| 0x0067B460 | 434 | CQuestMgr__lua_add_quest_icon_tooltip | Lua callback for AddQuestIconTooltip. Takes two string args from Lua stack (icon name and tooltip text). Calls CPacketManager__major_routine_006779a0 to register the icon-tooltip mapping. Returns 0. |
| 0x0067B620 | 34 | CQuestMgr__open_quest_detail_window | Opens the quest detail window (type 0x2719) and selects a specific quest entry in it via UIQuestWnd__select_quest_entry. |
| 0x0067B650 | 49 | CQuestMgr__refresh_and_select_quest | Opens the quest list window (type 0x2718), refreshes quest lists with filter mode 0xF, and selects a specific quest by ID via UIQuestWnd__find_and_select_quest. |
| 0x0067B690 | 27 | CQuestMgr__refresh_quest_detail_list | Finds the quest detail window (type 0x2719) and refreshes its quest list via UIQuestWnd__refresh_quest_list. |
| 0x0067B6B0 | 47 | CQuestMgr__notify_quest_update_and_refresh | Notifies the game of a quest update. Calls a virtual method on the global quest object (vtable+0x98), then finds the quest list window (type 0x2718) and refreshes with filter mode 0xD. |
| 0x0067B6E0 | 285 | CQuestMgr__send_quest_id_list_packet | Sends a network packet containing the list of quest IDs. Collects quest IDs from the ongoing quest tree into a buffer (max 511 entries), prepends packet header 0xBF3, and sends via CNetworkSession__send_data_timed. Buffer size = 4 + (quest_count * 4). |
| 0x0067B800 | 70 | CQuestMgr__set_ongoing_quest_display_flag | Sets the display flag (offset 0x18) for a quest in the ongoing quest tree. Looks up quest by ID via _Find_lower_bound. Returns 1 on success, 0 if quest not found. |
| 0x0067B850 | 70 | CQuestMgr__set_recommended_quest_active_flag | Sets the active flag (offset 0x14) for a quest in the recommended quest tree. Looks up quest by ID via _Find_lower_bound. Returns 1 on success, 0 if quest not found. |
| 0x0067B8A0 | 73 | CQuestMgr__set_ongoing_quest_expanded_flag | Sets the expanded/detail flag (offset 0xCC) for a quest in the ongoing quest tree. Looks up quest by ID via _Find_lower_bound. Returns 1 on success, 0 if quest not found. |
| 0x0067B8F0 | 1681 | CQuestMgr__process_quest_list_packet | Processes a quest list packet from the server. For each quest in the packet: reads quest ID, display flag, item data, and option slots. Handles two option formats based on quest version (0x33 = 0x47 byte options, otherwise 0x2C byte options). For new quests, creates entries and calls load_ongoing_quest_info_from_lua to populate from Lua. For existing quests, just updates the display flag. After processing, notifies quest update and refreshes the quest window. |
| 0x0067BF90 | 22 | CQuestMgr__set_quest_version | Sets the quest system version number. Only updates if param_2 matches the expected quest packet ID 0xDAE, storing param_3 at offset 0x18. |
| 0x0067BFB0 | 1507 | CQuestMgr__save_ongoing_simple_view_list | Saves the ongoing quest simple view list to a file (SaveData_OngoingSimpleViewList). Opens the file, writes a header line, then iterates the ongoing quest tree writing each non-hidden quest ID as a formatted string with separator. Writes closing marker and closes file. |
| 0x0067C5A0 | 1504 | CQuestMgr__save_recommended_active_list | Saves the recommended quest active list to a file (SaveData_RecommendedActiveList). Opens the file, writes a header line, then iterates the recommended quest tree writing each non-hidden quest ID as a formatted string with separator. Writes closing marker and closes file. |
| 0x0067E020 | 320 | CQuestMgr__erase_ongoing_quests_by_range | Erases ongoing quest entries from the tree by a key range. Finds the lower and upper bounds for the given quest ID, counts matching entries, then either clears the entire tree (if erasing all) or iterates and extracts each node via STL_rbtree_extract_and_rebalance_ongoing, destroying the 0x218-byte node data. Returns the count of erased entries. |
| 0x0067E160 | 306 | CQuestMgr__erase_recommended_quests_by_range | Erases recommended quest entries from the tree by a key range. Same algorithm as the ongoing version but uses STL_rbtree_extract_and_rebalance_quest_filter and 0x104-byte nodes. Returns the count of erased entries. |
| 0x0067E370 | 336 | CQuestMgr__lua_add_ongoing_description | Lua callback for AddOngoingDescription. Takes quest ID (number) and description text (string) from Lua. Processes escape sequences in the text, looks up the quest in the ongoing tree via CPacketManager__processor_006774c0, and appends the description string to the quest's description vector (offset 0xBC). Returns 0. |
| 0x0067E4C0 | 168 | CQuestMgr__lua_add_ongoing_reward_info | Lua callback for AddOngoingRewardInfo. Takes quest ID (number), item ID (number), and count (number) from Lua. Looks up the quest entry and appends the (item_id, count) pair to the quest's reward vector (offset 0x1EC). Returns 0. |
| 0x0067E570 | 509 | CQuestMgr__lua_add_recommended_quest_info | Lua callback for AddRecommendedQuestInfo. Takes quest ID (number), slot index (number), and description text (string) from Lua. Creates or finds the quest entry in the recommended quest tree (0x104-byte nodes). Inserts the description string into the appropriate slot vector (offset 0x18 + (slot+0x11)*0xC). Returns 0. |
| 0x0067E770 | 635 | CQuestMgr__lua_insert_recommended_quest_info | Lua callback for InsertRecommededQuestInfo. Takes quest ID (number) and 6 string fields (name, description, status, etc.) plus 2 numeric fields from Lua. Initializes a recommended quest entry struct, copies all fields, truncates the name string to display width, then calls CQuestMgr__insert_recommended_quest_entry to add it to the tree. Returns 0. |
| 0x00745F80 | 42 | CSkillEntry__constructor | Constructor for CSkillEntry. Stores skill ID and level, initializes remaining 4 fields to zero (cooldown, state, etc). |
| 0x0076FB70 | 499 | CSkillMgr__ctor | CSkillMgr constructor. Initializes a complex skill manager with multiple linked lists (0x4c node size), trees (0x1c, 0x20 node sizes), hash maps, and vectors. Sets load factor to 1.0f. Total object size ~0x78 bytes. |
| 0x0076FD70 | 362 | CSkillEntry__copy_ctor | CSkillEntry copy constructor. Copies ~0x32 bytes of skill data fields plus a dynamic vector of 8-byte pairs at offset 0x38. |
| 0x00770790 | 67 | CSkillEntry__set_vtable | Sets the CSkillEntry vtable pointer at this+4 to the skill entry vtable. SEH protected. |
| 0x00770830 | 261 | CSkillMgr__dtor | CSkillMgr destructor. Destroys all internal containers in reverse order: linked lists with virtual dtors, trees, unordered maps, and vectors. |
| 0x00770A40 | 250 | CSkillMgr__tree_insert_or_find_20 | Inserts or finds a key in CSkillMgr's 0x20-byte-node tree (skill level/range tree). Uses lower_bound to find insertion point, allocates new 0x20-byte node with skill entry vtable if not found. Returns pointer to data portion (node+0x14). |
| 0x00770B40 | 220 | CSkillMgr__tree_insert_or_find_18 | Inserts or finds a key in CSkillMgr's 0x18-byte-node tree (skill flag tree). Uses lower_bound to find insertion point, allocates new 0x18-byte node with a boolean flag if not found. Returns pointer to data portion (node+0x14). |
| 0x00770D40 | 282 | CSkillMgr__scalar_deleting_dtor | Scalar deleting destructor for CSkillMgr. Runs full destructor logic (destroys all internal containers in reverse order), then conditionally frees the 0x78-byte CSkillMgr object if bit 0 of param is set. |
| 0x00770E60 | 35 | CSkillEntry__scalar_deleting_dtor | Scalar deleting destructor for CSkillEntry. Calls CSkillEntry__dtor then conditionally frees the 0x44-byte object. Easily mistaken for basic_stringbuf. |
| 0x00770E90 | 36 | CSkillEntryBase__scalar_deleting_dtor | Scalar deleting destructor for CSkillEntry base. Sets vtable to skill entry vtable, then conditionally frees the 0xc-byte object. Easily mistaken for MemMapBase. |
| 0x00770EC0 | 87 | CSkillMgr__update_or_add_skill | Updates an existing skill entry or adds a new one. Searches the linked list at offset 0x70 for matching skill ID at node+0x10. If found, updates level/range fields. If not found, calls CSkillList__push_back. |
| 0x00770F20 | 166 | CSkillMgr__update_skill_range | Updates skill range data. If the skill has a nonzero level, finds the skill group, then if current level exceeds stored level, inserts level range into the 0x20-node tree and sets the dirty flag in the 0x18-node tree. |
| 0x00770FD0 | 127 | CSkillMgr__clear_skill_trees | Clears both skill trees (0x20-node tree at +0x48 and 0x18-node tree at +0x50). Destroys all nodes, resets sentinels, zeros counts, and resets the pending vector pointer at +0x5c. |
| 0x00771050 | 270 | CSkillMgr__process_pending_removals | Processes the pending removal vector at +0x58/0x5c. For each skill ID, finds and removes corresponding nodes from both the 0x20-node tree (level/range) and 0x18-node tree (flags) at +0x48/+0x50. Resets the pending vector when done. |
| 0x00771160 | 238 | CSkillMgr__remove_skill_by_key | Removes a skill from the manager by its key. Searches linked list at offset +4, unlinks the node, calls virtual dtor, frees memory, and also removes from the unordered hash map. |
| 0x00771250 | 102 | CSkillMgr__find_skill_level_info | Looks up a skill ID in the 0x20-node tree at +0x48 using lower_bound. If found, returns {1, level_value} via output param. If not found, returns {0, 0}. |
| 0x007712C0 | 207 | CSkillMgr__remove_skill_level | Removes a skill level entry by ID. Finds and removes from the 0x20-node tree at +0x48 (level/range data), then finds and removes the corresponding flag from the 0x18-node tree at +0x50. |
| 0x00771390 | 80 | CSkillMgr__remove_flag_node | Removes a flag node from the 0x18-node tree at +0x50 by skill ID. Uses lower_bound to find the node, then extracts and frees it. |
| 0x007713E0 | 97 | CSkillMgr__add_skill_with_refresh | Adds a skill with UI refresh. Appends the skill ID to the vector at +0x40, finds the skill tree window (type 0x25) and sends a refresh message (0xa1), then pushes the skill entry to the linked list via CSkillList__push_back. |
| 0x00771450 | 80 | CSkillMgr__clear_linked_list | Clears the skill linked list at +0x34. Calls virtual destructors on each 0x4c-byte node, frees all nodes, resets sentinel pointers, zeros the count at +0x38, and resets the vector pointer at +0x3c/+0x40. |
| 0x007714A0 | 177 | CSkillMgr__remove_skill_by_id | Removes a skill by ID from the linked list at offset +0x34. Also removes from the vector at +0x3c and triggers UI refresh via FUN_00aa5f70(0x25)->vtable[0x25](0, 0xa1, ...). |
| 0x00771560 | 43 | CSkillMgr__find_skill_node_by_id | Searches the linked list at +0x34 for a node with matching skill ID at node[4]. Returns pointer to node+2 (the data portion) if found, NULL otherwise. |
| 0x00771590 | 28 | CSkillMgr__reassign_indices | Walks the linked list at +0x34 and assigns sequential indices (0, 1, 2, ...) to each node's field at node[0xb]. Used to reindex skills after additions or removals. |
| 0x007715B0 | 43 | CSkillMgr__find_skill_entry_by_id | Searches the linked list at +4 for a node with matching skill ID at node[4]. Returns pointer to node+2 (the data portion) if found, NULL otherwise. Same as find_skill_node_by_id but uses a different list. |
| 0x007715E0 | 48 | CSkillMgr__find_skill_entry_safe | Safe version of find_skill_entry_by_id. Checks that the list count at +8 is nonzero before searching. Returns pointer to node+2 data if found, NULL otherwise. |
| 0x00771610 | 150 | CSkillMgr__get_skill_entry_by_index | Gets a skill entry by sequential index. Walks the linked list at +4 counting nodes. If the target index is reached, copies the skill entry via CSkillEntry__copy_ctor. Returns a default entry if index is out of range or list is empty. |
| 0x007716B0 | 312 | CSkillMgr__get_skill_entry_by_id | Gets a skill entry by skill ID. Handles homunculus skill IDs (0x19b2, 0x19b3) by converting them. Looks up in unordered map first, then falls back to linked list search. Checks CSkillEffect::HasRequiredComponents. |
| 0x007717F0 | 137 | CSkillMgr__find_in_unordered_map | Looks up a skill ID in the unordered hash map using FNV-1a hash. If found, writes the skill entry pointer and sets found=1 in output param. If not found, sets found=0. |
| 0x00771880 | 150 | CSkillMgr__get_skill_entry_from_list | Gets a skill entry from the secondary skill list at +0x70. Searches by skill ID, copies entry via CSkillEntry__copy_ctor if found. Returns default entry if list is empty or skill not found. |
| 0x00771920 | 44 | CSkillMgr__mark_all_flags_dirty | Marks all flag nodes in the 0x18-node tree at +0x50 as dirty by setting byte at node+0x14 to 1. Iterates using tree iterator operator++. |
| 0x00771950 | 36 | CSkillMgr__has_skill_in_list | Checks if a skill ID exists in the linked list at +0x34. Searches nodes by skill ID at node[4]. Returns 1 if found, 0 otherwise. |
| 0x00771980 | 39 | CSkillMgr__is_skill_level_exceeded | Checks if a skill's current level exceeds its max level. Finds the skill group, compares level at +0x10 against max_level (short) at +0x30. Returns true if exceeded. |
| 0x007719B0 | 26 | CSkillMgr__is_homunculus_skill | Checks if a skill ID is a homunculus skill. Returns 1 for IDs 0x19b3 and 0x19b4, 0 otherwise. IDs correspond to homunculus-specific skills in RO. |
| 0x007719D0 | 127 | CSkillMgr__check_and_enqueue_update | Checks if a skill needs updating by looking up in the 0x20-node tree. If found, copies the stored level to the skill entry. If the current level matches the stored max, enqueues the skill ID to the pending removal vector at +0x5c for later processing. |
| 0x00771A50 | 150 | CSkillMgr__swap_skill_range | Swaps or retrieves skill range data. Looks up skill ID in the 0x20-node tree. If the two skill IDs match and the dirty flag is set, reads the range value and clears the flag. Otherwise inserts/finds the new skill ID's range entry. |
| 0x00771AF0 | 17 | CSkillMgr__reset_first_skill_field | Resets field [6] (range/level delta) to 0 on the first node of the 0x20-node tree at +0x48. No-op if tree is empty. |
| 0x00771B10 | 34 | CSkillMgr__convert_homunculus_id | Converts homunculus skill IDs 0x19b2 and 0x19b3 to their base skill IDs by calling resolve_skill_upgrade_chain. No-op for other IDs. |
| 0x00771B40 | 188 | CSkillMgr__for_each_skill_callback | Iterates all skill groups in the tree at +0x2c, and for each skill in each group's linked list, invokes a callback (std::function). Stops early if callback returns false. |
| 0x00771C00 | 275 | CSkillMgr__register_skill_group | Registers a skill group in the tree at offset +0x2c. Creates a tree node (0x1c bytes) with a nested linked list (0x4c sentinel), then pushes the skill to the list via CSkillList__push_back. |
| 0x00771D20 | 37 | CSkillMgr__clear_skill_groups | Clears all skill groups from the RB-tree at offset +0x2c. Destroys all nodes and resets the tree sentinel to empty state. |
| 0x00771D50 | 79 | CSkillMgr__find_skill_in_groups | Searches all skill groups for a skill with the given ID. Iterates groups in RB-tree at +0x2c, then each group's linked list. Returns pointer to the skill entry data (offset +8 from list node), or NULL if not found. |
| 0x00771DA0 | 242 | CSkillMgr__get_or_create_skill_list | Gets or lazily creates the skill list container for a given group. Uses a static singleton (DAT_01450bc4/DAT_01450bcc) with atexit cleanup. Returns pointer to the linked list at tree node offset +0x14. |
| 0x00771EA0 | 130 | CSkillMgr__find_group_id_for_skill | Finds which group ID contains a given skill ID. Iterates all groups in the tree at +0x2c, searching each group's linked list. Returns group ID or -1 if not found. |
| 0x00771F30 | 72 | CSkillMgr__get_skill_count_for_group | Looks up a skill group by group ID in the RB-tree at +0x2c. Returns the value at node offset +0x18 (skill count for that group), or 0 if group not found. |
| 0x00771F80 | 28 | CSkillMgr__get_skill_level | Gets the skill level for a given skill ID by finding it in the skill groups via CSkillMgr__find_skill_in_groups. Returns the level (offset +0x10) or 0 if not found. |
| 0x00771FA0 | 29 | CSkillMgr__set_skill_level_by_id | Sets the skill level for a skill ID by writing to the skill level array at offset +0x64. Validates ID is in range 1-0x1F3E before writing. |
| 0x00771FC0 | 363 | CSkillMgr__update_skill_entry | Updates a skill entry in the manager. Checks if the new level exceeds the range and enqueues for removal. Also handles range adjustments when new level is between min and max range. |
| 0x007732E0 | 170 | CSkillList__push_back | Pushes a new skill entry onto the linked list. Allocates a 0x4C-byte node, calls CSkillEntry constructor, increments count. Throws std::length_error if list is full. |
| 0x00773390 | 101 | CSkillList__add_and_link_entry | Adds a skill entry to the list and links it. For skill IDs 0x19B3/0x19B4, searches existing entries to find a matching skill and links the new entry's +0xC field to it. |
| 0x00773400 | 123 | CSkillEntry__ctor_default | Default constructor for CSkillEntry. Sets vtable, type=0, name="Unknown Skill", zeroes remaining fields. |
| 0x00773480 | 121 | CSkillEntry__ctor_type1 | Constructor for CSkillEntry with type=1. Sets vtable, type=1, zeroes name and remaining fields. |
| 0x00773500 | 74 | CSkillEntry__dtor | Destructor for CSkillEntry. Sets vtable, clears and frees internal vector/pair data. |
| 0x00773550 | 194 | CSkillManager__GetLevelUseApAmount | Calls Lua function "GetLevelUseApAmount" to get AP cost for a skill at a given level. Allocates string and invokes script engine. |
| 0x00773620 | 194 | CSkillManager__GetLevelUseSpAmount | Calls Lua function "GetLevelUseSpAmount" to get SP cost for a skill at a given level. Allocates string and invokes script engine. |
| 0x007736F0 | 196 | CSkillManager__GetSkillName | Gets the display name for a skill via Lua "GetSkillName". Maps skill IDs 0x13B2->0x13A4 and 0x13B3->0x13AC before lookup. Returns "Unknown Skill" on failure. |
| 0x007737C0 | 169 | CSkillManager__GetSkillIdName | Gets the internal ID name for a skill via Lua "GetSkillIdName". Takes skill entry as param, returns "Zero Skill" on failure. |
| 0x00773870 | 167 | CSkillManager__GetSkillIdNameById | Gets the internal ID name for a skill by raw skill ID (not skill entry). Calls Lua "GetSkillIdName", returns "Zero Skill" on failure. |
| 0x00773920 | 194 | CSkillManager__GetSkillNameById | Gets skill display name by raw skill ID. Maps 0x13B2->0x13A4 and 0x13B3->0x13AC before Lua "GetSkillName" lookup. Returns "Unknown Skill" on failure. |
| 0x00773A00 | 159 | CSkill__IsGroundTargetSkill | Returns 1 if the skill ID is a ground-targeting skill (e.g. Storm Gust, Meteor Storm, traps, etc.). Uses large switch table covering many skill IDs. |
| 0x00773CB0 | 26 | CSkill__IsSpecialPassiveSkill | Returns 1 if skill ID is 0x1998 or 0x19C9 (special passive skills), 0 otherwise. |
| 0x00773CD0 | 705 | CSkill__GetSkillEffectCallback | Gets effect callback for a skill ID. Large switch on skill IDs - ground target skills return 1 directly, others fall through to initialize CEffectCallbackContainer singleton (DAT_013896f4) and call FUN_0077b4a0 for the callback. |
| 0x00774500 | 164 | CSkillManager__IsLevelUseSkill | Calls Lua "IsLevelUseSkill" to check if a skill can be used at a given level. Returns boolean result from script engine. |
| 0x007745B0 | 92 | CSkill__RequiresTarget | Returns 1 if the skill requires a target (most skills), 0 for non-target skills (basic attacks 0xB-0x15, some special skills like 0x2B2, 0x2DB, 0x7D8, 0x138C, 0x9E5-0x9E8). |
| 0x007B10E0 | 998 | CSkillMgr__sort_three_way_partition_by_field_2c | Three-way partition for skill sorting. Compares elements by looking up CSkillMgr skill data and comparing field at offset +0x2C. Used by CSkillMgr__introsort_by_field_2c. NOT a generic std::sort -- game-specific comparator. |
| 0x007B14D0 | 376 | CSkillMgr__heap_sift_down_by_field_2c | Heap sift-down for skill sorting heapsort fallback. Compares elements by looking up CSkillMgr skill data and comparing field at offset +0x2C. Called by CSkillMgr__introsort_by_field_2c when recursion depth exceeded. |
| 0x007B1650 | 858 | CSkillMgr__introsort_by_field_2c | Introsort implementation for skill sorting. Uses insertion sort for small arrays (<33 elements), three-way partition for larger arrays, falls back to heapsort when recursion depth exceeded. Compares by CSkillMgr skill data field at offset +0x2C. NOT a generic std::sort. |
| 0x007FBE00 | 312 | CQuestData__ctor | Constructor for CQuestData. Copies vtable from param_3, calls CPacketManager handler, initializes SSO string at offset 0x2e, constructs 3 vector-like arrays at offsets 0x34/0x37/0x3a (element size 0xc=12, count 3) using eh_vector_constructor_iterator, then clears all entries. |
| 0x007FE130 | 361 | CQuestData__init_trees | Initializes 3 quest data trees at offsets 0x20/0x28/0x30 with sentinel nodes, clears all fields |
| 0x007FE360 | 196 | CQuestData__destroy_all_trees | Destroys all 3 quest data trees at offsets 0x30/0x28/0x20 in reverse order |
| 0x007FE430 | 99 | CQuestData__node_dtor_strings | Destructor for quest data node, destroys 3 embedded std::string members |
| 0x007FE500 | 217 | CQuestData__dtor | Destructor for CQuestData: destroys all 3 trees then optionally frees the 0x38-byte struct |
| 0x007FEDD0 | 325 | CAchievementWnd__ctor | Constructor for CAchievementWnd. Inherits from FUN_008a3700. Sets vtable to PTR_FUN_0112a750. Zeroes fields 0x2d-0x39. Allocates hash table (0x100 bytes) at offset 0x3a and initializes it. Also zeroes fields 0x3c-0x40. |
| 0x007FEFE0 | 150 | CAchievementWnd__dtor | Destructor for CAchievementWnd. Sets vtable. If detail window (0x40) exists, removes from parent and destroys it. Destroys hash table at 0x3a (frees all entries + 0x100 byte sentinel), calls base dtor FUN_008a4e90. |
| 0x007FF080 | 99 | CQuestData__dtor_strings | Destroys 3 STL strings belonging to a quest data node. Used during tree node cleanup before freeing the node memory. |
| 0x007FF0F0 | 174 | CAchievementWnd__scalar_deleting_dtor | Scalar deleting destructor for CAchievementWnd. Runs dtor (destroy detail window, hash table, base), frees 0x108 bytes if bit 0 set. |
| 0x007FF260 | 38 | CAchievementWnd__RenderTabLabel | Renders a tab label string. Gets raw string pointer (handles SSO), renders text via FUN_00a80580 with font size 0xc. |
| 0x007FF290 | 359 | CAchievementWnd__ShowAchievementDetail | Shows achievement detail view. Formats reward count string, sets it on text widget. Formats percentage via FUN_00dde5c0, sets on second widget. Stores achievement ID at 0xcc. Builds item name string from FUN_00dd9430. Toggles visibility between list view (0xb4) and detail panel (0xb8). Enables detail panel with param_5 passed to visibility control. |
| 0x007FF400 | 154 | CAchievementWnd__OnTabOrButton | Handles tab switch or button click in achievement window. If DAT_01457ad8 is 0, calls FUN_00a7bb00. Otherwise processes: button type 1 with param 1 sends message 0x26, button type 1 with other param calls FUN_00aaa310, other types call virtual method 0x18 with command 0x12. |
| 0x007FF520 | 208 | CAchievementWnd__OnItemSlotClick | Handles click on item slot within achievement reward list. Hit-tests click bounds (x: 0x1e-0xbe, y: 0x135-0x14d). Iterates linked list of items, calculates slot from x position (step 0x22). On hit, copies shop item data. Otherwise clears selection. |
| 0x007FF710 | 552 | CAchievementWnd__ShowRewardDetail | Shows reward detail popup for an achievement. Creates or reuses UIListDetailWidgetB at 0x100. Builds item tooltip string, sets detail text. Gets account string, assigns to widget field. Builds combined tooltip+account string for the detail panel's label. Calls FUN_00855150 and FUN_0089cfe0 with color 0xd630a9. |
| 0x007FF940 | 591 | CAchievementWnd__ShowRewardDetailAlt | Alternative reward detail display for achievements. Similar to ShowRewardDetail but checks count < 3 and validates item bounds before showing. Creates UIListDetailWidgetB if needed, builds tooltip from item data and account string, updates detail panel label. |
| 0x007FFB90 | 2279 | CAchievementWnd__CreateChildWidgets | Creates all child widgets for achievement window. Creates: search text box (0xb4), filter text box (0xb8), 4-tab panel (0xbc) with tab labels, 3 editable text widgets for detail fields (0xc0/0xc4/0xc8), title label (0xd0 with "TITLE" text), detail panel (0xd4, tab widget type with skin colors), toggle widget (0xdc), and button (0xd8). Configures positioning, colors, fonts. |
| 0x00800480 | 169 | CAchievementWnd__CreateScrollbar | Creates a scrollbar sprite widget for the achievement window. Allocates UISpriteWidget (0xb4 bytes), sets vtable/fields, positions it at (param_2-5, 0), stores at offset 0x130, adds as child. |
| 0x00800530 | 2194 | CAchievementWnd__Render | Main render function for achievement window. Draws background sprite, optional search icon, score display (formatted as x1000), total points, zeny display with formatted number, achievement point balance. Renders item reward slots in a 0x22-step loop with item icons and quantity labels. Handles detail popup rendering when active. |
| 0x00800ED0 | 198 | CAchievementWnd__OnMouseDown | Mouse down handler for achievement window. Delegates to FUN_008ba1e0 for title bar clicks (y<0x11). Tests item slot hit, if an item is found, calls FUN_00cfe140 to show item info dialog. |
| 0x00800FA0 | 525 | CAchievementWnd__OnMouseHover | Mouse hover handler for achievement window. Hit-tests item slots, if valid item found (atoi != 0), positions tooltip at slot location. Builds item tooltip string, optionally appends quantity info, shows via FUN_00ad6510. |
| 0x008011D0 | 206 | CAchievementWnd__OnDoubleClick | Double-click handler for achievement window. Hit-tests item slots, if valid item found, gets window 0xc (shop/trade) and sends message 0x18 with item data to it. |
| 0x008012A0 | 145 | CAchievementWnd__OnMessage | Main message handler for achievement window. Handles: msg 6/0xc9 (close), msg 6/0xd5 (search/filter with validation), msg 6/0x159 (purchase with zeny/point validation and account ID parsing), msg 0x17 (refresh item list from hash table, max 5 items), msg 0x26/0x68 (network commands), msg 0x62 (external update). Complex purchase flow validates balance against cost. |
| 0x00801CC0 | 18 | CAchievementWnd__UpdateSearchLabel | Updates the search text label on the achievement window. Calls virtual method 0xd4 on the child widget at offset 0xb4. |
| 0x00809C80 | 748 | CAchievementWnd__FilterAndRefreshByName | Filters achievement entries by name substring search. Iterates all 3 quest system tree maps (offsets 0x20, 0x28, 0x30), for each entry calls std__string_find_in_string to match filter text. Matching entries are added to vector at 0x1d8. Updates UI via UIGradeEnchantWnd__SetItemSlot. |
| 0x00809F70 | 748 | CAchievementWnd__FilterAndRefreshByNameAlt | Alternative filter and refresh by name (identical structure to FilterAndRefreshByName at 00809c80). Filters all 3 tree maps by substring match, populates vector at 0x1d8, updates item slot UI. |
| 0x0080A310 | 597 | CQuestSystemData__Init | Initializes quest system data structure. Zeroes 3 arrays of 6 entries each (32 bytes/entry) at offsets 0x1c, 0xdc, 0x19c. Allocates RB-tree sentinel (0x118 bytes) at offset 0x27c. Clears item descriptor fields, resets all tracking fields. Sets initialized flag to 1. |
| 0x0080A570 | 70 | CQuestSystemData__FreeExtraNode | Frees an extra tree node (0x118 bytes) at offset 0x4 if not null. |
| 0x0080A5C0 | 79 | CQuestSystemData__DestroyTree | Destroys the RB-tree at offset 0x0. Recursively destroys all nodes (0x118 bytes each) via std__tree__destroy_nodes_recursive_118, then frees the sentinel node. |
| 0x0080A620 | 143 | CQuestSystemData__DestroyNodeWithStrings | Destroys a tree node at offset 0x4 that contains 2 embedded strings. Destroys both strings, then frees the 0x118-byte node. |
| 0x0080A6B0 | 81 | CQuestSystemData__FreeExtraNodeAlt | Frees extra tree node (0x118 bytes) at offset 0x4 if not null. Alternative version with different calling context. |
| 0x0080A710 | 90 | CQuestSystemData__DestroyTreeAlt | Destroys RB-tree by recursively freeing all nodes (0x118 bytes each) and the sentinel. Alternative version. |
| 0x0080A770 | 100 | CQuestSystemData__DestroyTwoStrings | Destroys two STL strings. Used as cleanup for tree node data that contains 2 embedded strings. |
| 0x0080A7E0 | 189 | CQuestSystemData__dtor | Destructor for CQuestSystemData (0x478 bytes). Destroys 4 embedded strings, then destroys the RB-tree at offset 0x27c (recursive node destruction + sentinel free). |
| 0x0080A8A0 | 213 | CQuestSystemData__scalar_deleting_dtor | Scalar deleting destructor for CQuestSystemData. Runs dtor (destroy strings + tree), frees 0x478 bytes if bit 0 set. |
| 0x0080A980 | 540 | CQuestSystemData__AddItemEntry | Adds an item entry to the quest system data's RB-tree at offset 0x27c. Clears item info, creates CItemDesc, allocates 0x118-byte tree node, copies shop item data. Inserts into tree ordered by short values at offsets 0x10 and 0x12. Validates tree size != 0xea0ea0. |
| 0x0080ABA0 | 76 | CQuestSystemData__ResetFields | Resets quest system data fields. Zeroes 0x240 bytes at offset 0x1c (3 item arrays), clears tracking fields at offsets 0x8-0x18, 0x25c-0x260, and flag at 0x10. |
| 0x0080ABF0 | 161 | CQuestSystemData__GetInstance | Singleton accessor for CQuestSystemData (DAT_01456e88). Allocates 0x478 bytes on first call, initializes via CQuestSystemData__Init. Returns 1 on success, 0 on failure. Destroys on init failure. |
| 0x0080ACA0 | 28 | CQuestSystemData__DestroyInstance | Destroys the CQuestSystemData singleton. Calls scalar_deleting_dtor(1) to destroy and free the instance at DAT_01456e88, then nulls the pointer. |
| 0x00994439 | 575 | CSkillListWnd__add_skill_entry_and_show_info_popup | CSkillListWnd: add skill entry and show info popup |
| 0x00CCC7F0 | 156 | CSkill__does_skill_override_action | Checks if a skill ID overrides the normal action animation. Returns true for skills that have special animations: 0x8f, 0x107, 0x10f, 0x110, 0x111, 0x173, 0x8d5(if type==8), 0x90d, 0x916, 0x918, 0x919, 0x9d7, 0xa13, 0x1506. Falls back to CEffect handler check for unlisted skills. |
| 0x00CCC890 | 204 | CSkill__is_self_cast_skill | Checks if a skill is a self-cast/buff skill that doesn't create projectile effects. Returns 1 for skills: 0xb, 0x2f, 0x111, 0x19d, 0x2dc, 0x8d2, 0x8ec, 0x903, 0x90d-0x9d7, 0xa10, 0xbbe-0xbbf, 0x13a2-0x13b6, 0x146e-0x14c4. Falls back to CEffect__invoke_handler_bool_c for unlisted skills. |
| 0x00CCCA90 | 66 | CSkill__has_custom_targeting_behavior | Checks if a skill has custom targeting behavior (doesn't face target). Returns 1 for skills 0x1ea, 0x8d0, 0x8d1, 0xbc1. Falls back to CMapEventDispatch handler for other skills. |
| 0x00CD52F0 | 467 | CSkill__get_total_attack_range | Calculates total attack range for a skill. If skill ID is 10000, returns 5 (special case). Otherwise looks up skill info, gets base range from skill entry, then calls Lua function "GetSkillAttackRange" to get bonus range, and subtracts the delta between base and Lua-returned range. Returns final computed range. |
| 0x00CD5800 | 164 | CSkill__has_skill_description | Checks if a skill has a valid description. Calls FUN_00ddd4e0 to look up skill description data; returns 1 if the description exists (non-null and has content), 0 otherwise. |
| 0x00CD7180 | 315 | CSkill__check_skill_target_action_override | Checks if a specific skill (param_1) with a given action type (param_2) should override normal targeting. Returns true for specific skill+action combinations: skill 8 with action 6/9, skill 0x16/0xa0 with action 4/5, skill 0x21 with action 9/1, skill 0x29 with action 0xb, etc. Used to determine if skills need special handling during targeting. |
| 0x00D53370 | 375 | CQuestData__move_construct | Move constructor for a ~0x1A0 byte record. Moves 3 STL strings (at offsets 0xC, 0x2C, 0x44) and copies remaining fields including a 0x12C-byte block at offset 0x5D and trailing metadata. |
| 0x00D54D70 | 250 | CQuestData__copy_construct | Copy constructor for a ~0x1A0 byte record with 3 embedded STL strings. Copies header fields, then string-constructs at 3 offsets, copies a 0x12C-byte data block and trailing metadata. |
| 0x00D5E930 | 1394 | CSkill__handle_skill_effect_on_target | Handles skill visual effects on a target actor. Registers effect callback, invokes map event dispatch. If param_4==0 (ground target), creates a new effect object with position/time/skill data. Otherwise applies skill-specific effects on the target actor based on skill ID (0x14a4, 0x1ea, 0x89a, 0x89c, 0x8a6, 0x8bc, 0x8d3). Sets actor motion states and creates visual effects via CEffectManager. |
| 0x00D5F5C0 | 616 | CSkill__apply_color_effect_on_target | Applies color-coded skill visual effects on a target actor. Maps skill IDs to ARGB colors: 0x14b=green, 0x14c=blue, 0x291=green, 0x292=blue, 0x293=red, 0x294=magenta, 0x295=black, 0x296=white, 0x297=yellow, 0x298=pink. Sets actor visual property 0x58 with the color, then creates a visual effect via CEffectManager. Updates global position offsets for skills 0x14b and 0x14c on local player. |
| 0x00E08480 | 46 | CSkillMgr__remove_skill_and_notify | Removes a skill by key and by ID. If remove_by_id succeeds (returns 1), notifies equipment and status windows to refresh. |
| 0x00E084B0 | 122 | CSkillMgr__clear_hotbar_guild_skills | Iterates through two hotbar skill arrays (0x24 entries each, 7 bytes per entry at offsets 0x4B0 and 0x5AC). Clears hotbar entries whose skill ID falls in range 10000-10019 (guild skills). Uses set_hotbar_skill_entry to clear matching slots in bar 0 and bar 1. |
| 0x00E08530 | 108 | CSkillMgr__update_or_remove_skill | Checks if skill exists in skill groups. If found, updates its level info from find_skill_level_info. If not found, removes the skill by key and ID. Either way, notifies equipment and status windows. |
| 0x00E085A0 | 150 | CSkillMgr__remove_skill_from_list_and_notify | Searches a skill list (at this+0x754/0x758, entries 0x54 bytes each) for a skill matching param_2. If found and param_3 >= skill level, removes the entry by memcpy-shifting remaining entries down and shrinking the list. Shows a dialog box with the appropriate result message. |
| 0x00E08640 | 70 | CSkillMgr__check_skill_usable | Checks if a skill is usable by comparing parameters against stored skill data. Returns 0 (not usable) if params differ OR if IsLevelUseSkill returns true and IDs mismatch. Returns 1 if all checks pass. |
| 0x00E08690 | 84 | CSkillMgr__find_skill_before_timestamp | Looks up a skill entry using CPacket__handle_unit_spawn_appear. If the entry is valid (flag 0xd is 0), timestamp <= param_3, and not equal to this+0x784, returns the 8-byte value at entry+0x18. Otherwise returns -1. |
| 0x00E086F0 | 84 | CSkillMgr__find_skill_before_timestamp_alt | Similar to find_skill_before_timestamp but compares against this+0x78C instead of 0x784. Looks up a skill entry, validates timestamp against param_3, returns 8-byte value at entry+0x18 or -1 on failure. |
| 0x00E08750 | 138 | CSkillMgr__get_skill_data_by_id | Looks up skill data in an rbtree by ID (param_3). Uses rbtree_lower_bound_int on the tree at this+0x6144. If found, copies a 56-byte skill data structure into param_2. If not found, zeros out the output structure. |
| 0x00E088A0 | 254 | CSkillMgr__get_skill_entry_by_range | Routes skill entry lookup based on skill ID range: 8000-8060 = passive skills, 0x2008-0x2031 or 0x20D0-0x2109 = third class skills, 10000-10019 = guild skills, else fallback to CSkillMgr. Constructs a default CSkillEntry, looks up, copies result, then destroys temp entry. |
| 0x00E09510 | 150 | CSkillList__get_entry_by_index | Gets a skill entry from a linked list by positional index. Walks the linked list at this+4 and returns a copy-constructed CSkillEntry for the entry at position param_3. Returns default CSkillEntry(-1) if list is empty or index out of range. |
| 0x00E095B0 | 150 | CSkillList__get_entry_by_id | Gets a skill entry from a linked list by skill ID. Walks the linked list at this+4 and returns a copy-constructed CSkillEntry for the entry where node[4]==param_3 (skill ID match). Returns default CSkillEntry(-1) if not found. |
| 0x00E09650 | 153 | CSkillList__get_passive_entry_by_index | Gets a passive skill entry from a second linked list by positional index. Uses the list at this+0x84 (passive skills). Returns copy-constructed CSkillEntry at the given index, or default CSkillEntry(-1) if empty/out of range. |
| 0x00E096F0 | 150 | CSkillList__get_passive_entry_by_id | Gets a passive skill entry from the second linked list by skill ID. Uses the list at this+0x84 (passive skills). Returns copy-constructed CSkillEntry matching the given skill ID, or default CSkillEntry(-1) if not found. |
| 0x00E09970 | 153 | CSkillList__get_third_list_entry_by_index | Gets a skill entry from the third linked list (at this+0x8C/0x90) by positional index. Returns copy-constructed CSkillEntry or default CSkillEntry(-1) if empty/out of range. |
| 0x00E09A10 | 150 | CSkillList__get_third_list_entry_by_id | Gets a skill entry from the third linked list (at this+0x8C/0x90) by skill ID. Returns copy-constructed CSkillEntry matching the ID, or default CSkillEntry(-1) if not found. |
| 0x00E12B50 | 63 | CSkillList__get_entry_ptr_by_index | Returns a pointer to a skill entry in the primary linked list (this+4) by index. Bounds-checks against count at this+8. Supports both forward (positive index) and backward (negative index) traversal. Returns NULL if out of bounds. |
| 0x00E12B90 | 58 | CSkillList__find_entry_ptr_by_id | Searches the primary skill linked list (this+4) for an entry with matching skill ID (node[4]==param_2). Returns pointer to skill data (node+2) or NULL if not found/list empty. |
| 0x00E12BD0 | 67 | CSkillList__get_passive_entry_ptr_by_index | Returns a pointer to a passive skill entry in the secondary linked list (this+0x84) by index. Bounds-checks against count at this+0x88. Supports forward and backward traversal. |
| 0x00E12C20 | 60 | CSkillList__find_passive_entry_ptr_by_id | Searches the passive skill linked list (this+0x84) for an entry with matching skill ID. Returns pointer to skill data or NULL if not found/list empty. |
| 0x00E12C60 | 67 | CSkillList__get_third_list_entry_ptr_by_index | Returns pointer to a skill entry in the third linked list (this+0x8C/0x90) by index. Supports forward and backward traversal. Returns NULL if out of bounds. |
| 0x00E12CB0 | 60 | CSkillList__find_third_list_entry_ptr_by_id | Searches the third skill linked list (this+0x8C/0x90) for an entry with matching skill ID. Returns pointer to skill data or NULL. |
No function here matches that. Search all 47,061 functions instead.