# Vanilla 1.12.1 Event Table Snapshot of the engine's event-name table (`[VAR_EVENT_TABLE_BASE_PTR]`, `0x00CEEF68`) as captured via `_classicapi_DumpAllEvents()` on a 1.12.1 client with only ClassicAPI. Reflects what `frame:RegisterEvent` will accept at runtime in that configuration. Indices are the engine's runtime event IDs (the values `Event::Custom::Lookup` returns and the dispatcher's `mov eax, eventID * 0x10` arithmetic uses). Gaps in the numbering are NULL slots — the table's input array at `0x00BE1198` has ~200 unwritten entries scattered through the range that the engine's `RebuildEventTable` preserves as NULLs. NULL slots are what ClassicAPI and other DLLs claim for custom events. ``` [0] UNIT_PET [2] UNIT_PET [16] UNIT_HEALTH [17] UNIT_MANA [18] UNIT_RAGE [19] UNIT_FOCUS [20] UNIT_ENERGY [21] UNIT_HAPPINESS [22] UNIT_MAXHEALTH [23] UNIT_MAXMANA [24] UNIT_MAXRAGE [25] UNIT_MAXFOCUS [26] UNIT_MAXENERGY [27] UNIT_MAXHAPPINESS [28] UNIT_LEVEL [29] UNIT_FACTION [30] UNIT_DISPLAYPOWER [40] UNIT_FLAGS [41] UNIT_AURA [107] UNIT_AURA [120] UNIT_ATTACK_SPEED [121] UNIT_ATTACK_SPEED [122] UNIT_RANGEDDAMAGE [128] UNIT_DAMAGE [129] UNIT_DAMAGE [130] UNIT_DAMAGE [131] UNIT_DAMAGE [132] UNIT_LOYALTY [135] UNIT_PET_EXPERIENCE [136] UNIT_PET_EXPERIENCE [137] UNIT_DYNAMIC_FLAGS [143] UNIT_PET_TRAINING_POINTS [144] UNIT_STATS [145] UNIT_STATS [146] UNIT_STATS [147] UNIT_STATS [148] UNIT_STATS [149] UNIT_RESISTANCES [150] UNIT_RESISTANCES [151] UNIT_RESISTANCES [152] UNIT_RESISTANCES [153] UNIT_RESISTANCES [154] UNIT_RESISTANCES [155] UNIT_RESISTANCES [159] UNIT_ATTACK_POWER [160] UNIT_ATTACK_POWER [161] UNIT_ATTACK_POWER [162] UNIT_RANGED_ATTACK_POWER [163] UNIT_RANGED_ATTACK_POWER [164] UNIT_RANGED_ATTACK_POWER [165] UNIT_RANGEDDAMAGE [166] UNIT_RANGEDDAMAGE [167] UNIT_MANA [174] UNIT_MANA [182] UNIT_COMBAT [183] UNIT_NAME_UPDATE [184] UNIT_PORTRAIT_UPDATE [185] UNIT_MODEL_CHANGED [186] UNIT_INVENTORY_CHANGED [187] UNIT_CLASSIFICATION_CHANGED [188] ITEM_LOCK_CHANGED [189] PLAYER_XP_UPDATE [190] PLAYER_REGEN_DISABLED [191] PLAYER_REGEN_ENABLED [192] PLAYER_AURAS_CHANGED [193] PLAYER_ENTER_COMBAT [194] PLAYER_LEAVE_COMBAT [195] PLAYER_TARGET_CHANGED [196] PLAYER_CONTROL_LOST [197] PLAYER_CONTROL_GAINED [198] PLAYER_FARSIGHT_FOCUS_CHANGED [199] PLAYER_LEVEL_UP [200] PLAYER_MONEY [201] PLAYER_DAMAGE_DONE_MODS [202] PLAYER_COMBO_POINTS [203] ZONE_CHANGED [204] ZONE_CHANGED_INDOORS [205] ZONE_CHANGED_NEW_AREA [206] MINIMAP_ZONE_CHANGED [207] MINIMAP_UPDATE_ZOOM [208] SCREENSHOT_SUCCEEDED [209] SCREENSHOT_FAILED [210] ACTIONBAR_SHOWGRID [211] ACTIONBAR_HIDEGRID [212] ACTIONBAR_PAGE_CHANGED [213] ACTIONBAR_SLOT_CHANGED [214] ACTIONBAR_UPDATE_STATE [215] ACTIONBAR_UPDATE_USABLE [216] ACTIONBAR_UPDATE_COOLDOWN [217] UPDATE_BONUS_ACTIONBAR [218] PARTY_MEMBERS_CHANGED [219] PARTY_LEADER_CHANGED [220] PARTY_MEMBER_ENABLE [221] PARTY_MEMBER_DISABLE [222] PARTY_LOOT_METHOD_CHANGED [223] SYSMSG [224] UI_ERROR_MESSAGE [225] UI_INFO_MESSAGE [226] UPDATE_CHAT_COLOR [227] CHAT_MSG_ADDON [228] CHAT_MSG_SAY [229] CHAT_MSG_PARTY [230] CHAT_MSG_RAID [231] CHAT_MSG_GUILD [232] CHAT_MSG_OFFICER [233] CHAT_MSG_YELL [234] CHAT_MSG_WHISPER [235] CHAT_MSG_WHISPER_INFORM [236] CHAT_MSG_EMOTE [237] CHAT_MSG_TEXT_EMOTE [238] CHAT_MSG_SYSTEM [239] CHAT_MSG_MONSTER_SAY [240] CHAT_MSG_MONSTER_YELL [241] CHAT_MSG_MONSTER_WHISPER [242] CHAT_MSG_MONSTER_EMOTE [243] CHAT_MSG_CHANNEL [244] CHAT_MSG_CHANNEL_JOIN [245] CHAT_MSG_CHANNEL_LEAVE [246] CHAT_MSG_CHANNEL_LIST [247] CHAT_MSG_CHANNEL_NOTICE [248] CHAT_MSG_CHANNEL_NOTICE_USER [249] CHAT_MSG_AFK [250] CHAT_MSG_DND [251] CHAT_MSG_COMBAT_LOG [252] CHAT_MSG_IGNORED [253] CHAT_MSG_SKILL [254] CHAT_MSG_LOOT [255] CHAT_MSG_MONEY [256] CHAT_MSG_RAID_LEADER [257] CHAT_MSG_RAID_WARNING [258] LANGUAGE_LIST_CHANGED [259] TIME_PLAYED_MSG [260] SPELLS_CHANGED [261] CURRENT_SPELL_CAST_CHANGED [262] SPELL_UPDATE_COOLDOWN [263] SPELL_UPDATE_USABLE [264] CHARACTER_POINTS_CHANGED [265] SKILL_LINES_CHANGED [266] ITEM_PUSH [267] LOOT_OPENED [268] LOOT_SLOT_CLEARED [269] LOOT_CLOSED [270] PLAYER_LOGIN [271] PLAYER_LOGOUT [272] PLAYER_ENTERING_WORLD [273] PLAYER_LEAVING_WORLD [274] PLAYER_ALIVE [275] PLAYER_DEAD [276] PLAYER_CAMPING [277] PLAYER_QUITING [278] LOGOUT_CANCEL [279] RESURRECT_REQUEST [280] PARTY_INVITE_REQUEST [281] PARTY_INVITE_CANCEL [282] GUILD_INVITE_REQUEST [283] GUILD_INVITE_CANCEL [284] GUILD_MOTD [285] TRADE_REQUEST [286] TRADE_REQUEST_CANCEL [287] LOOT_BIND_CONFIRM [288] EQUIP_BIND_CONFIRM [289] AUTOEQUIP_BIND_CONFIRM [290] USE_BIND_CONFIRM [291] DELETE_ITEM_CONFIRM [292] CURSOR_UPDATE [293] ITEM_TEXT_BEGIN [294] ITEM_TEXT_TRANSLATION [295] ITEM_TEXT_READY [296] ITEM_TEXT_CLOSED [297] GOSSIP_SHOW [298] GOSSIP_ENTER_CODE [299] GOSSIP_CLOSED [300] QUEST_GREETING [301] QUEST_DETAIL [302] QUEST_PROGRESS [303] QUEST_COMPLETE [304] QUEST_FINISHED [305] QUEST_ITEM_UPDATE [306] TAXIMAP_OPENED [307] TAXIMAP_CLOSED [308] QUEST_LOG_UPDATE [309] TRAINER_SHOW [310] TRAINER_UPDATE [311] TRAINER_CLOSED [312] CVAR_UPDATE [313] TRADE_SKILL_SHOW [314] TRADE_SKILL_UPDATE [315] TRADE_SKILL_CLOSE [316] MERCHANT_SHOW [317] MERCHANT_UPDATE [318] MERCHANT_CLOSED [319] TRADE_SHOW [320] TRADE_CLOSED [321] TRADE_UPDATE [322] TRADE_ACCEPT_UPDATE [323] TRADE_TARGET_ITEM_CHANGED [324] TRADE_PLAYER_ITEM_CHANGED [325] TRADE_MONEY_CHANGED [326] PLAYER_TRADE_MONEY [327] BAG_OPEN [328] BAG_UPDATE [329] BAG_CLOSED [330] BAG_UPDATE_COOLDOWN [331] LOCALPLAYER_PET_RENAMED [332] UNIT_ATTACK [333] UNIT_DEFENSE [334] PET_ATTACK_START [335] PET_ATTACK_STOP [336] UPDATE_MOUSEOVER_UNIT [337] SPELLCAST_START [338] SPELLCAST_STOP [339] SPELLCAST_FAILED [340] SPELLCAST_INTERRUPTED [341] SPELLCAST_DELAYED [342] SPELLCAST_CHANNEL_START [343] SPELLCAST_CHANNEL_UPDATE [344] SPELLCAST_CHANNEL_STOP [345] PLAYER_GUILD_UPDATE [346] QUEST_ACCEPT_CONFIRM [347] PLAYERBANKSLOTS_CHANGED [348] BANKFRAME_OPENED [349] BANKFRAME_CLOSED [350] PLAYERBANKBAGSLOTS_CHANGED [351] FRIENDLIST_UPDATE [352] IGNORELIST_UPDATE [353] PET_BAR_UPDATE [354] PET_BAR_UPDATE_COOLDOWN [355] PET_BAR_SHOWGRID [356] PET_BAR_HIDEGRID [357] MINIMAP_PING [358] CHAT_MSG_COMBAT_MISC_INFO [359] CRAFT_SHOW [360] CRAFT_UPDATE [361] CRAFT_CLOSE [362] MIRROR_TIMER_START [363] MIRROR_TIMER_PAUSE [364] MIRROR_TIMER_STOP [365] WORLD_MAP_UPDATE [366] WORLD_MAP_NAME_UPDATE [367] AUTOFOLLOW_BEGIN [368] AUTOFOLLOW_END [370] CINEMATIC_START [371] CINEMATIC_STOP [372] UPDATE_FACTION [373] CLOSE_WORLD_MAP [374] OPEN_TABARD_FRAME [375] CLOSE_TABARD_FRAME [376] TABARD_CANSAVE_CHANGED [377] SHOW_COMPARE_TOOLTIP [378] GUILD_REGISTRAR_SHOW [379] GUILD_REGISTRAR_CLOSED [380] DUEL_REQUESTED [381] DUEL_OUTOFBOUNDS [382] DUEL_INBOUNDS [383] DUEL_FINISHED [384] TUTORIAL_TRIGGER [385] PET_DISMISS_START [386] UPDATE_BINDINGS [387] UPDATE_SHAPESHIFT_FORMS [388] WHO_LIST_UPDATE [389] UPDATE_LFG [390] PETITION_SHOW [391] PETITION_CLOSED [392] EXECUTE_CHAT_LINE [393] UPDATE_MACROS [394] UPDATE_TICKET [395] UPDATE_CHAT_WINDOWS [396] CONFIRM_XP_LOSS [397] CORPSE_IN_RANGE [398] CORPSE_IN_INSTANCE [399] CORPSE_OUT_OF_RANGE [400] UPDATE_GM_STATUS [401] PLAYER_UNGHOST [402] BIND_ENCHANT [403] REPLACE_ENCHANT [404] TRADE_REPLACE_ENCHANT [405] PLAYER_UPDATE_RESTING [406] UPDATE_EXHAUSTION [407] PLAYER_FLAGS_CHANGED [408] GUILD_ROSTER_UPDATE [409] GM_PLAYER_INFO [410] MAIL_SHOW [411] MAIL_CLOSED [412] SEND_MAIL_MONEY_CHANGED [413] SEND_MAIL_COD_CHANGED [414] MAIL_SEND_INFO_UPDATE [415] MAIL_SEND_SUCCESS [416] MAIL_INBOX_UPDATE [417] BATTLEFIELDS_SHOW [418] BATTLEFIELDS_CLOSED [419] UPDATE_BATTLEFIELD_STATUS [420] UPDATE_BATTLEFIELD_SCORE [421] AUCTION_HOUSE_SHOW [422] AUCTION_HOUSE_CLOSED [423] NEW_AUCTION_UPDATE [424] AUCTION_ITEM_LIST_UPDATE [425] AUCTION_OWNED_LIST_UPDATE [426] AUCTION_BIDDER_LIST_UPDATE [427] PET_UI_UPDATE [428] PET_UI_CLOSE [429] ADDON_LOADED [430] VARIABLES_LOADED [431] MACRO_ACTION_FORBIDDEN [432] ADDON_ACTION_FORBIDDEN [433] MEMORY_EXHAUSTED [434] MEMORY_RECOVERED [435] START_AUTOREPEAT_SPELL [436] STOP_AUTOREPEAT_SPELL [437] PET_STABLE_SHOW [438] PET_STABLE_UPDATE [439] PET_STABLE_UPDATE_PAPERDOLL [440] PET_STABLE_CLOSED [441] CHAT_MSG_COMBAT_SELF_HITS [442] CHAT_MSG_COMBAT_SELF_MISSES [443] CHAT_MSG_COMBAT_PET_HITS [444] CHAT_MSG_COMBAT_PET_MISSES [445] CHAT_MSG_COMBAT_PARTY_HITS [446] CHAT_MSG_COMBAT_PARTY_MISSES [447] CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS [448] CHAT_MSG_COMBAT_FRIENDLYPLAYER_MISSES [449] CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS [450] CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES [451] CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS [452] CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES [453] CHAT_MSG_COMBAT_CREATURE_VS_PARTY_HITS [454] CHAT_MSG_COMBAT_CREATURE_VS_PARTY_MISSES [455] CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_HITS [456] CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_MISSES [457] CHAT_MSG_COMBAT_FRIENDLY_DEATH [458] CHAT_MSG_COMBAT_HOSTILE_DEATH [459] CHAT_MSG_COMBAT_XP_GAIN [460] CHAT_MSG_COMBAT_HONOR_GAIN [461] CHAT_MSG_SPELL_SELF_DAMAGE [462] CHAT_MSG_SPELL_SELF_BUFF [463] CHAT_MSG_SPELL_PET_DAMAGE [464] CHAT_MSG_SPELL_PET_BUFF [465] CHAT_MSG_SPELL_PARTY_DAMAGE [466] CHAT_MSG_SPELL_PARTY_BUFF [467] CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE [468] CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF [469] CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE [470] CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF [471] CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE [472] CHAT_MSG_SPELL_CREATURE_VS_SELF_BUFF [473] CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE [474] CHAT_MSG_SPELL_CREATURE_VS_PARTY_BUFF [475] CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE [476] CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF [477] CHAT_MSG_SPELL_TRADESKILLS [478] CHAT_MSG_SPELL_DAMAGESHIELDS_ON_SELF [479] CHAT_MSG_SPELL_DAMAGESHIELDS_ON_OTHERS [480] CHAT_MSG_SPELL_AURA_GONE_SELF [481] CHAT_MSG_SPELL_AURA_GONE_PARTY [482] CHAT_MSG_SPELL_AURA_GONE_OTHER [483] CHAT_MSG_SPELL_ITEM_ENCHANTMENTS [484] CHAT_MSG_SPELL_BREAK_AURA [485] CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE [486] CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS [487] CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE [488] CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS [489] CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE [490] CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS [491] CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE [492] CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS [493] CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE [494] CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS [495] CHAT_MSG_SPELL_FAILED_LOCALPLAYER [496] CHAT_MSG_BG_SYSTEM_NEUTRAL [497] CHAT_MSG_BG_SYSTEM_ALLIANCE [498] CHAT_MSG_BG_SYSTEM_HORDE [499] RAID_ROSTER_UPDATE [500] UPDATE_PENDING_MAIL [501] UPDATE_INVENTORY_ALERTS [502] UPDATE_TRADESKILL_RECAST [503] OPEN_MASTER_LOOT_LIST [504] UPDATE_MASTER_LOOT_LIST [505] START_LOOT_ROLL [506] CANCEL_LOOT_ROLL [507] CONFIRM_LOOT_ROLL [508] INSTANCE_BOOT_START [509] INSTANCE_BOOT_STOP [510] LEARNED_SPELL_IN_TAB [511] DISPLAY_SIZE_CHANGED [512] CONFIRM_TALENT_WIPE [513] CONFIRM_BINDER [514] MAIL_FAILED [515] CLOSE_INBOX_ITEM [516] CONFIRM_SUMMON [517] BILLING_NAG_DIALOG [518] IGR_BILLING_NAG_DIALOG [519] MEETINGSTONE_CHANGED [520] PLAYER_SKINNED [521] TABARD_SAVE_PENDING [522] UNIT_QUEST_LOG_CHANGED [523] PLAYER_PVP_KILLS_CHANGED [524] PLAYER_PVP_RANK_CHANGED [525] INSPECT_HONOR_UPDATE [526] UPDATE_WORLD_STATES [527] AREA_SPIRIT_HEALER_IN_RANGE [528] AREA_SPIRIT_HEALER_OUT_OF_RANGE [529] CONFIRM_PET_UNLEARN [530] PLAYTIME_CHANGED [531] UPDATE_LFG_TYPES [532] UPDATE_LFG_LIST [533] CHAT_MSG_COMBAT_FACTION_CHANGE [534] START_MINIGAME [535] MINIGAME_UPDATE [536] READY_CHECK [537] RAID_TARGET_UPDATE [538] GMSURVEY_DISPLAY [539] UPDATE_INSTANCE_INFO [541] CHAT_MSG_RAID_BOSS_EMOTE [542] COMBAT_TEXT_UPDATE [543] LOTTERY_SHOW [544] CHAT_MSG_FILTERED [545] QUEST_WATCH_UPDATE [546] CHAT_MSG_BATTLEGROUND [547] CHAT_MSG_BATTLEGROUND_LEADER [548] LOTTERY_ITEM_UPDATE ``` ## Notes on specific entries - **`[336] UPDATE_MOUSEOVER_UNIT` now fires on loss too (ClassicAPI).** Stock 1.12 fires this only when a mouseover unit is *gained*; moving the cursor off a unit clears the mouseover and signals nothing. ClassicAPI co-hooks the engine's mouseover set/clear chokepoint (`0x00492890`, the sole writer of the mouseover GUID) and fires `UPDATE_MOUSEOVER_UNIT` on the unit→non-unit transition, matching retail. Gated on the *old* mouseover being a unit and the *new* one not, so moving off a gameobject / item (which never fired a gain) doesn't spuriously fire. No payload either way — handlers read `UnitExists("mouseover")`, false at fire time on loss. See [API.md](API.md#update_mouseover_unit-event-loss-fire-fix). - **Repeated `UNIT_*` entries at low indices** (e.g. four slots named `UNIT_DAMAGE` at 128–131, five `UNIT_STATS` at 144–148, seven `UNIT_RESISTANCES` at 149–155) — these are the per-stat / per-resistance / per-damage-school broadcast events. They share a name because the engine routes them to the same dispatch path; addons registering `UNIT_DAMAGE` get hits from any of the four slots. - **`[543] LOTTERY_SHOW` and `[548] LOTTERY_ITEM_UPDATE`** — both stock Blizzard events, strings at VAs `0x008514E8` and `0x00851474` in the unmodified 1.12.1 binary, written into the input array by `FUN_0051AB30` (the event-table initializer). Neither has a known public feature in vanilla, which makes them natural targets for other DLLs to repurpose: SuperWoWhook overwrites slot 548's `.rdata` string in-place to `UNIT_CASTEVENT`, and Turtle WoW's binary replaces slot 543's content with `CHAT_MSG_HARDCORE`. See [CLAUDE.md § Other DLLs can inject events by patching `.rdata` strings](../CLAUDE.md#other-dlls-can-inject-events-by-patching-rdata-strings-in-place). On a stock-binary client neither override fires — those are the events you see only on the respective patched build. - **`[534] START_MINIGAME` / `[535] MINIGAME_UPDATE`** — both stock Blizzard events, verified by finding the strings at VAs `0x00851584` / `0x00851574` in an unmodified 1.12.1 binary. The binary even contains a build-path debug string `"E:\build\buildWoW\WoW\Source\Minigame\Minigame_C.cpp"`, so Blizzard had an actual `Minigame_C` source module compiled in — the events are real engine surface, just for a system that never shipped publicly. - **`[545] QUEST_WATCH_UPDATE`, `[544] CHAT_MSG_FILTERED`, `[546] CHAT_MSG_BATTLEGROUND`, `[547] CHAT_MSG_BATTLEGROUND_LEADER`** — all stock Blizzard, verified present in the 1.12.1 binary's strings (`0x008514c0`, `0x008514d4`, `0x008514a8`, `0x00851488`). Several of these were added between 1.11 and 1.12 — e.g. `CHAT_MSG_FILTERED` is not in the 1.11 strings — so the 1.11→1.12 patch did expand the event set, which means absence from a 1.11 binary isn't sufficient to prove an event is Turtle. - **Gaps in numbering** (1, 3–15, 31–39, 42–106, 108–119, etc.) — NULL slots in the table. These are claimable by DLLs running on this client. ClassicAPI claims 11 of them for its custom events; `VanillaMinimapTracking` claims one for `MINIMAP_UPDATE_TRACKING`; SuperWoWhook (when present) likewise claims slots for its injections. ## References - [shagu/wow-vanilla-api: events.md](https://github.com/shagu/wow-vanilla-api/blob/master/events.md) — community-maintained reference documenting each event's payload, when it fires, and (for the ones documented) which expansion introduced it. ## Regenerating Run `/script _classicapi_DumpAllEvents()` in-game with ClassicAPI loaded. Output goes to `WTF\Account\\debug.log`. To regenerate this doc after a binary update, dump fresh and strip the 11 entries listed in [API.md § Events](API.md#events) (plus `MINIMAP_UPDATE_TRACKING` if VMT was loaded during the capture).