Vanilla fires UPDATE_MOUSEOVER_UNIT only when a mouseover unit is gained;
moving the cursor off a unit clears the mouseover and signals nothing.
Retail fires for both gain and loss, so addons watching
UnitExists("mouseover") can react when it goes false. This restores the
loss fire.
Co-hooks the engine's mouseover set/clear chokepoint (FUN_00492890) --
the ONLY writer of the mouseover GUID globals, so every gain/loss/change
flows through it. Resolves whether the mouseover is a unit before and
after the original and fires the event on the unit->non-unit transition.
Gating on unit TYPE (not just "GUID present -> absent") is load-bearing:
the same GUID slot also holds gameobjects and items, which never fire a
gain, so a naive present->absent test spuriously fired when moving off a
herb node or chest (reported in testing). The unit|player object-mask
resolve fixes that; the !hasUnit half prevents a double-fire on any
->unit transition the engine already covered inline.
Change-gated target (per-frame would spam the gain event while
hovering), so it's a cool hook. Documented in API.md (loss-fire fix
subsection + TOC) and Events.md notes.
15 KiB
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_UNITnow 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 firesUPDATE_MOUSEOVER_UNITon 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 readUnitExists("mouseover"), false at fire time on loss. See API.md.- Repeated
UNIT_*entries at low indices (e.g. four slots namedUNIT_DAMAGEat 128–131, fiveUNIT_STATSat 144–148, sevenUNIT_RESISTANCESat 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 registeringUNIT_DAMAGEget hits from any of the four slots. [543] LOTTERY_SHOWand[548] LOTTERY_ITEM_UPDATE— both stock Blizzard events, strings at VAs0x008514E8and0x00851474in the unmodified 1.12.1 binary, written into the input array byFUN_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.rdatastring in-place toUNIT_CASTEVENT, and Turtle WoW's binary replaces slot 543's content withCHAT_MSG_HARDCORE. See CLAUDE.md § Other DLLs can inject events by patching.rdatastrings. 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 VAs0x00851584/0x00851574in 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 actualMinigame_Csource 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_FILTEREDis 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;
VanillaMinimapTrackingclaims one forMINIMAP_UPDATE_TRACKING; SuperWoWhook (when present) likewise claims slots for its injections.
References
- shagu/wow-vanilla-api: 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\<acct>\debug.log. To regenerate
this doc after a binary update, dump fresh and strip the 11 entries
listed in API.md § Events (plus
MINIMAP_UPDATE_TRACKING if VMT was loaded during the capture).