Back to legacygamers.net
WARPGATE

Game Skills

CSkillMgr, CSkillList, CSkillEntry, CQuestMgr, CQuestNpcManager, CAchievementMgr

Functions 212Code 63 KBAddresses 0x00660F70 to 0x00E12CB0Group Game Logic
212 functions
AddressSizeNameDescription
0x00660F70490CQuestNpcManager__ctorConstructor 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.
0x006629D0412CQuestNpcManager__dtor_006629d0CPacketQueue 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.
0x00662B70154CQuestNpcManager__inner_dtorCPacketQueue 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.
0x0066337030CQuestNpcManager__vtable_entry_scalar_deleting_dtorVtable entry scalar deleting destructor for a 4-byte object (likely base class pointer). Conditionally frees memory.
0x0066339035CQuestNpcManager__scalar_deleting_dtorScalar deleting destructor for CQuestNpcManager (0x68 bytes). Calls CPacketQueue__dtor then conditionally frees memory.
0x006633C0175CQuestNpcManager__dtorDestructor 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).
0x006635C0178CQuestNpcManager__get_or_create_singletonGets 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.
0x0066368027CQuestNpcManager__destroy_singletonDestroys the CQuestNpcManager singleton. Calls virtual destructor (flag=1 for delete) then sets global pointer to null.
0x006636A0483CQuestNpcManager__clear_list_and_rebuild_sortedClears 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.
0x00663890313CQuestNpcManager__filter_by_level_range_to_listClears 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.
0x006639D0500CQuestNpcManager__clear_list_and_rebuild_sorted_by_typeClears 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.
0x0066CF90242CAchievementMgr__find_or_insert_infoLooks 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).
0x0066D090250CAchievementMgr__find_or_insert_tabLooks 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).
0x0066D190250CAchievementMgr__find_or_insert_tab_entrySame as find_or_insert_tab but used for a different tree. Allocates 0x20-byte nodes. Returns pointer to data area at node+0x14.
0x0066D290266CAchievementMgr__scalar_deleting_dtorScalar 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.
0x0066D3A0308CAchievementMgr__get_instanceSingleton 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.
0x0066D4E031CAchievementMgr__index_to_row_colConverts 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).
0x0066D50027CAchievementMgr__destroy_instanceDestroys 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.
0x0066D52017CAchievementMgr__row_col_to_indexConverts row/col coordinates to a flat index. Returns this->stride * row + col.
0x0066D540252CAchievementMgr__get_achievement_dataRetrieves 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.
0x0066D640212CAchievementMgr__get_name_by_idReturns the achievement name string (at info node offset 0x30) for a given achievement ID. Returns empty string if ID not found in the map.
0x0066D720212CAchievementMgr__get_reward_name_by_idReturns the reward name string (at info node offset 0x68) for a given achievement ID. Returns empty string if ID not found.
0x0066D8002629CAchievementMgr__build_all_entriesBuilds 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.
0x0066E25077CAchievementMgr__get_reward_buff_idReturns the reward buff ID (int at info node offset 0x48) for a given achievement ID. Returns -1 (0xFFFFFFFF) if not found.
0x0066E2A0212CAchievementMgr__get_description_by_idReturns the achievement description string (at info node offset 0x18) for a given achievement ID. Returns empty string if not found.
0x0066E380209CAchievementMgr__get_first_string_by_idReturns the first string field (at info node base, offset 0x14 from tree node) for a given achievement ID. Returns empty string if not found.
0x0066E46077CAchievementMgr__get_reward_title_idReturns the reward title ID (int at info node offset 0x50) for a given achievement ID. Returns -1 (0xFFFFFFFF) if not found.
0x0066E4B0381CAchievementMgr__count_items_in_tabsCounts 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.
0x0066E630966CAchievementMgr__count_completed_achievementsCounts 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.
0x0066EA00155CAchievementMgr__find_achievement_positionSearches 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.
0x0066EAA0740CAchievementMgr__load_lua_dataLoads 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.
0x0066ED90984CAchievementMgr__insert_achievement_infoInserts 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.
0x0066F170724CAchievementMgr__insert_achievement_resourceInserts 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.
0x0066F450283CAchievementMgr__set_reward_buffSets 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.
0x0066F570283CAchievementMgr__set_reward_itemSets 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.
0x0066F690283CAchievementMgr__set_reward_titleSets 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.
0x0066F7B0323CAchievementMgr__set_ui_typeSets 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.
0x0066F900106CAchievementMgr__has_rewardsChecks 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.
0x0066F970369CAchievementMgr__add_tab_to_achievementAdds 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.
0x0066FAF092CAchievementMgr__destroy_string_arrayIterates 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.
0x0066FD60177CAchievementMgr__clear_string_vectorClears 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.
0x0066FED0617CAchievementMgr__lua_InsertAchieveInfoLua 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.
0x00670140475CAchievementMgr__lua_InsertAchieveResourceLua 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.
0x00670320367CAchievementMgr__lua_InsertAchieveRewardBuffLua 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.
0x00670490367CAchievementMgr__lua_InsertAchieveRewardItemLua 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.
0x00670600367CAchievementMgr__lua_InsertAchieveRewardTitleLua 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.
0x00670770587CAchievementMgr__lua_InsertAchieveUITypeLua 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.
0x006709C0427CAchievementMgr__lua_SetAchieveIDByTabLua 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.
0x00679C20475CQuestMgr__serialize_quest_list_to_bufferSerializes 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.
0x00679E0075CQuestMgr__calc_serialized_quest_buffer_sizeCalculates 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.
0x00679E501710CQuestMgr__init_quest_lua_and_load_dataInitializes 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.
0x0067A500298CQuestMgr__insert_or_replace_ongoing_questInserts 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.
0x0067A6301707CQuestMgr__load_ongoing_quest_info_from_luaLoads 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.
0x0067ACE0458CQuestMgr__insert_recommended_quest_entryInserts 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.
0x0067AEB078CQuestMgr__has_ongoing_questChecks 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.
0x0067AF00298CQuestMgr__check_quest_filter_matchChecks 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.
0x0067B0301059CQuestMgr__lua_add_quest_filter_infoLua 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.
0x0067B460434CQuestMgr__lua_add_quest_icon_tooltipLua 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.
0x0067B62034CQuestMgr__open_quest_detail_windowOpens the quest detail window (type 0x2719) and selects a specific quest entry in it via UIQuestWnd__select_quest_entry.
0x0067B65049CQuestMgr__refresh_and_select_questOpens 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.
0x0067B69027CQuestMgr__refresh_quest_detail_listFinds the quest detail window (type 0x2719) and refreshes its quest list via UIQuestWnd__refresh_quest_list.
0x0067B6B047CQuestMgr__notify_quest_update_and_refreshNotifies 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.
0x0067B6E0285CQuestMgr__send_quest_id_list_packetSends 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).
0x0067B80070CQuestMgr__set_ongoing_quest_display_flagSets 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.
0x0067B85070CQuestMgr__set_recommended_quest_active_flagSets 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.
0x0067B8A073CQuestMgr__set_ongoing_quest_expanded_flagSets 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.
0x0067B8F01681CQuestMgr__process_quest_list_packetProcesses 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.
0x0067BF9022CQuestMgr__set_quest_versionSets the quest system version number. Only updates if param_2 matches the expected quest packet ID 0xDAE, storing param_3 at offset 0x18.
0x0067BFB01507CQuestMgr__save_ongoing_simple_view_listSaves 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.
0x0067C5A01504CQuestMgr__save_recommended_active_listSaves 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.
0x0067E020320CQuestMgr__erase_ongoing_quests_by_rangeErases 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.
0x0067E160306CQuestMgr__erase_recommended_quests_by_rangeErases 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.
0x0067E370336CQuestMgr__lua_add_ongoing_descriptionLua 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.
0x0067E4C0168CQuestMgr__lua_add_ongoing_reward_infoLua 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.
0x0067E570509CQuestMgr__lua_add_recommended_quest_infoLua 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.
0x0067E770635CQuestMgr__lua_insert_recommended_quest_infoLua 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.
0x00745F8042CSkillEntry__constructorConstructor for CSkillEntry. Stores skill ID and level, initializes remaining 4 fields to zero (cooldown, state, etc).
0x0076FB70499CSkillMgr__ctorCSkillMgr 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.
0x0076FD70362CSkillEntry__copy_ctorCSkillEntry copy constructor. Copies ~0x32 bytes of skill data fields plus a dynamic vector of 8-byte pairs at offset 0x38.
0x0077079067CSkillEntry__set_vtableSets the CSkillEntry vtable pointer at this+4 to the skill entry vtable. SEH protected.
0x00770830261CSkillMgr__dtorCSkillMgr destructor. Destroys all internal containers in reverse order: linked lists with virtual dtors, trees, unordered maps, and vectors.
0x00770A40250CSkillMgr__tree_insert_or_find_20Inserts 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).
0x00770B40220CSkillMgr__tree_insert_or_find_18Inserts 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).
0x00770D40282CSkillMgr__scalar_deleting_dtorScalar 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.
0x00770E6035CSkillEntry__scalar_deleting_dtorScalar deleting destructor for CSkillEntry. Calls CSkillEntry__dtor then conditionally frees the 0x44-byte object. Easily mistaken for basic_stringbuf.
0x00770E9036CSkillEntryBase__scalar_deleting_dtorScalar deleting destructor for CSkillEntry base. Sets vtable to skill entry vtable, then conditionally frees the 0xc-byte object. Easily mistaken for MemMapBase.
0x00770EC087CSkillMgr__update_or_add_skillUpdates 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.
0x00770F20166CSkillMgr__update_skill_rangeUpdates 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.
0x00770FD0127CSkillMgr__clear_skill_treesClears 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.
0x00771050270CSkillMgr__process_pending_removalsProcesses 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.
0x00771160238CSkillMgr__remove_skill_by_keyRemoves 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.
0x00771250102CSkillMgr__find_skill_level_infoLooks 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}.
0x007712C0207CSkillMgr__remove_skill_levelRemoves 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.
0x0077139080CSkillMgr__remove_flag_nodeRemoves 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.
0x007713E097CSkillMgr__add_skill_with_refreshAdds 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.
0x0077145080CSkillMgr__clear_linked_listClears 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.
0x007714A0177CSkillMgr__remove_skill_by_idRemoves 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, ...).
0x0077156043CSkillMgr__find_skill_node_by_idSearches 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.
0x0077159028CSkillMgr__reassign_indicesWalks 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.
0x007715B043CSkillMgr__find_skill_entry_by_idSearches 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.
0x007715E048CSkillMgr__find_skill_entry_safeSafe 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.
0x00771610150CSkillMgr__get_skill_entry_by_indexGets 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.
0x007716B0312CSkillMgr__get_skill_entry_by_idGets 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.
0x007717F0137CSkillMgr__find_in_unordered_mapLooks 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.
0x00771880150CSkillMgr__get_skill_entry_from_listGets 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.
0x0077192044CSkillMgr__mark_all_flags_dirtyMarks 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++.
0x0077195036CSkillMgr__has_skill_in_listChecks 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.
0x0077198039CSkillMgr__is_skill_level_exceededChecks 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.
0x007719B026CSkillMgr__is_homunculus_skillChecks 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.
0x007719D0127CSkillMgr__check_and_enqueue_updateChecks 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.
0x00771A50150CSkillMgr__swap_skill_rangeSwaps 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.
0x00771AF017CSkillMgr__reset_first_skill_fieldResets field [6] (range/level delta) to 0 on the first node of the 0x20-node tree at +0x48. No-op if tree is empty.
0x00771B1034CSkillMgr__convert_homunculus_idConverts homunculus skill IDs 0x19b2 and 0x19b3 to their base skill IDs by calling resolve_skill_upgrade_chain. No-op for other IDs.
0x00771B40188CSkillMgr__for_each_skill_callbackIterates 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.
0x00771C00275CSkillMgr__register_skill_groupRegisters 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.
0x00771D2037CSkillMgr__clear_skill_groupsClears all skill groups from the RB-tree at offset +0x2c. Destroys all nodes and resets the tree sentinel to empty state.
0x00771D5079CSkillMgr__find_skill_in_groupsSearches 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.
0x00771DA0242CSkillMgr__get_or_create_skill_listGets 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.
0x00771EA0130CSkillMgr__find_group_id_for_skillFinds 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.
0x00771F3072CSkillMgr__get_skill_count_for_groupLooks 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.
0x00771F8028CSkillMgr__get_skill_levelGets 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.
0x00771FA029CSkillMgr__set_skill_level_by_idSets 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.
0x00771FC0363CSkillMgr__update_skill_entryUpdates 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.
0x007732E0170CSkillList__push_backPushes 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.
0x00773390101CSkillList__add_and_link_entryAdds 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.
0x00773400123CSkillEntry__ctor_defaultDefault constructor for CSkillEntry. Sets vtable, type=0, name="Unknown Skill", zeroes remaining fields.
0x00773480121CSkillEntry__ctor_type1Constructor for CSkillEntry with type=1. Sets vtable, type=1, zeroes name and remaining fields.
0x0077350074CSkillEntry__dtorDestructor for CSkillEntry. Sets vtable, clears and frees internal vector/pair data.
0x00773550194CSkillManager__GetLevelUseApAmountCalls Lua function "GetLevelUseApAmount" to get AP cost for a skill at a given level. Allocates string and invokes script engine.
0x00773620194CSkillManager__GetLevelUseSpAmountCalls Lua function "GetLevelUseSpAmount" to get SP cost for a skill at a given level. Allocates string and invokes script engine.
0x007736F0196CSkillManager__GetSkillNameGets the display name for a skill via Lua "GetSkillName". Maps skill IDs 0x13B2->0x13A4 and 0x13B3->0x13AC before lookup. Returns "Unknown Skill" on failure.
0x007737C0169CSkillManager__GetSkillIdNameGets the internal ID name for a skill via Lua "GetSkillIdName". Takes skill entry as param, returns "Zero Skill" on failure.
0x00773870167CSkillManager__GetSkillIdNameByIdGets the internal ID name for a skill by raw skill ID (not skill entry). Calls Lua "GetSkillIdName", returns "Zero Skill" on failure.
0x00773920194CSkillManager__GetSkillNameByIdGets skill display name by raw skill ID. Maps 0x13B2->0x13A4 and 0x13B3->0x13AC before Lua "GetSkillName" lookup. Returns "Unknown Skill" on failure.
0x00773A00159CSkill__IsGroundTargetSkillReturns 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.
0x00773CB026CSkill__IsSpecialPassiveSkillReturns 1 if skill ID is 0x1998 or 0x19C9 (special passive skills), 0 otherwise.
0x00773CD0705CSkill__GetSkillEffectCallbackGets 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.
0x00774500164CSkillManager__IsLevelUseSkillCalls Lua "IsLevelUseSkill" to check if a skill can be used at a given level. Returns boolean result from script engine.
0x007745B092CSkill__RequiresTargetReturns 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).
0x007B10E0998CSkillMgr__sort_three_way_partition_by_field_2cThree-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.
0x007B14D0376CSkillMgr__heap_sift_down_by_field_2cHeap 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.
0x007B1650858CSkillMgr__introsort_by_field_2cIntrosort 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.
0x007FBE00312CQuestData__ctorConstructor 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.
0x007FE130361CQuestData__init_treesInitializes 3 quest data trees at offsets 0x20/0x28/0x30 with sentinel nodes, clears all fields
0x007FE360196CQuestData__destroy_all_treesDestroys all 3 quest data trees at offsets 0x30/0x28/0x20 in reverse order
0x007FE43099CQuestData__node_dtor_stringsDestructor for quest data node, destroys 3 embedded std::string members
0x007FE500217CQuestData__dtorDestructor for CQuestData: destroys all 3 trees then optionally frees the 0x38-byte struct
0x007FEDD0325CAchievementWnd__ctorConstructor 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.
0x007FEFE0150CAchievementWnd__dtorDestructor 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.
0x007FF08099CQuestData__dtor_stringsDestroys 3 STL strings belonging to a quest data node. Used during tree node cleanup before freeing the node memory.
0x007FF0F0174CAchievementWnd__scalar_deleting_dtorScalar deleting destructor for CAchievementWnd. Runs dtor (destroy detail window, hash table, base), frees 0x108 bytes if bit 0 set.
0x007FF26038CAchievementWnd__RenderTabLabelRenders a tab label string. Gets raw string pointer (handles SSO), renders text via FUN_00a80580 with font size 0xc.
0x007FF290359CAchievementWnd__ShowAchievementDetailShows 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.
0x007FF400154CAchievementWnd__OnTabOrButtonHandles 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.
0x007FF520208CAchievementWnd__OnItemSlotClickHandles 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.
0x007FF710552CAchievementWnd__ShowRewardDetailShows 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.
0x007FF940591CAchievementWnd__ShowRewardDetailAltAlternative 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.
0x007FFB902279CAchievementWnd__CreateChildWidgetsCreates 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.
0x00800480169CAchievementWnd__CreateScrollbarCreates 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.
0x008005302194CAchievementWnd__RenderMain 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.
0x00800ED0198CAchievementWnd__OnMouseDownMouse 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.
0x00800FA0525CAchievementWnd__OnMouseHoverMouse 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.
0x008011D0206CAchievementWnd__OnDoubleClickDouble-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.
0x008012A0145CAchievementWnd__OnMessageMain 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.
0x00801CC018CAchievementWnd__UpdateSearchLabelUpdates the search text label on the achievement window. Calls virtual method 0xd4 on the child widget at offset 0xb4.
0x00809C80748CAchievementWnd__FilterAndRefreshByNameFilters 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.
0x00809F70748CAchievementWnd__FilterAndRefreshByNameAltAlternative 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.
0x0080A310597CQuestSystemData__InitInitializes 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.
0x0080A57070CQuestSystemData__FreeExtraNodeFrees an extra tree node (0x118 bytes) at offset 0x4 if not null.
0x0080A5C079CQuestSystemData__DestroyTreeDestroys 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.
0x0080A620143CQuestSystemData__DestroyNodeWithStringsDestroys a tree node at offset 0x4 that contains 2 embedded strings. Destroys both strings, then frees the 0x118-byte node.
0x0080A6B081CQuestSystemData__FreeExtraNodeAltFrees extra tree node (0x118 bytes) at offset 0x4 if not null. Alternative version with different calling context.
0x0080A71090CQuestSystemData__DestroyTreeAltDestroys RB-tree by recursively freeing all nodes (0x118 bytes each) and the sentinel. Alternative version.
0x0080A770100CQuestSystemData__DestroyTwoStringsDestroys two STL strings. Used as cleanup for tree node data that contains 2 embedded strings.
0x0080A7E0189CQuestSystemData__dtorDestructor for CQuestSystemData (0x478 bytes). Destroys 4 embedded strings, then destroys the RB-tree at offset 0x27c (recursive node destruction + sentinel free).
0x0080A8A0213CQuestSystemData__scalar_deleting_dtorScalar deleting destructor for CQuestSystemData. Runs dtor (destroy strings + tree), frees 0x478 bytes if bit 0 set.
0x0080A980540CQuestSystemData__AddItemEntryAdds 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.
0x0080ABA076CQuestSystemData__ResetFieldsResets 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.
0x0080ABF0161CQuestSystemData__GetInstanceSingleton 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.
0x0080ACA028CQuestSystemData__DestroyInstanceDestroys the CQuestSystemData singleton. Calls scalar_deleting_dtor(1) to destroy and free the instance at DAT_01456e88, then nulls the pointer.
0x00994439575CSkillListWnd__add_skill_entry_and_show_info_popupCSkillListWnd: add skill entry and show info popup
0x00CCC7F0156CSkill__does_skill_override_actionChecks 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.
0x00CCC890204CSkill__is_self_cast_skillChecks 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.
0x00CCCA9066CSkill__has_custom_targeting_behaviorChecks 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.
0x00CD52F0467CSkill__get_total_attack_rangeCalculates 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.
0x00CD5800164CSkill__has_skill_descriptionChecks 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.
0x00CD7180315CSkill__check_skill_target_action_overrideChecks 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.
0x00D53370375CQuestData__move_constructMove 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.
0x00D54D70250CQuestData__copy_constructCopy 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.
0x00D5E9301394CSkill__handle_skill_effect_on_targetHandles 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.
0x00D5F5C0616CSkill__apply_color_effect_on_targetApplies 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.
0x00E0848046CSkillMgr__remove_skill_and_notifyRemoves a skill by key and by ID. If remove_by_id succeeds (returns 1), notifies equipment and status windows to refresh.
0x00E084B0122CSkillMgr__clear_hotbar_guild_skillsIterates 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.
0x00E08530108CSkillMgr__update_or_remove_skillChecks 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.
0x00E085A0150CSkillMgr__remove_skill_from_list_and_notifySearches 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.
0x00E0864070CSkillMgr__check_skill_usableChecks 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.
0x00E0869084CSkillMgr__find_skill_before_timestampLooks 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.
0x00E086F084CSkillMgr__find_skill_before_timestamp_altSimilar 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.
0x00E08750138CSkillMgr__get_skill_data_by_idLooks 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.
0x00E088A0254CSkillMgr__get_skill_entry_by_rangeRoutes 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.
0x00E09510150CSkillList__get_entry_by_indexGets 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.
0x00E095B0150CSkillList__get_entry_by_idGets 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.
0x00E09650153CSkillList__get_passive_entry_by_indexGets 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.
0x00E096F0150CSkillList__get_passive_entry_by_idGets 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.
0x00E09970153CSkillList__get_third_list_entry_by_indexGets 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.
0x00E09A10150CSkillList__get_third_list_entry_by_idGets 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.
0x00E12B5063CSkillList__get_entry_ptr_by_indexReturns 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.
0x00E12B9058CSkillList__find_entry_ptr_by_idSearches 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.
0x00E12BD067CSkillList__get_passive_entry_ptr_by_indexReturns 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.
0x00E12C2060CSkillList__find_passive_entry_ptr_by_idSearches 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.
0x00E12C6067CSkillList__get_third_list_entry_ptr_by_indexReturns 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.
0x00E12CB060CSkillList__find_third_list_entry_ptr_by_idSearches the third skill linked list (this+0x8C/0x90) for an entry with matching skill ID. Returns pointer to skill data or NULL.