Reference library

Emotes and animations.

Search the configured world’s emotes table by name, row ID, visual state ID or message. Each row maps a name to an animation for a client version range.

  • 31,574 mappings
  • 25,249 unique names
  • 220 mappings with chat text
  • 31,354 animation-only mappings

Snapshot: October 14, 2026. These are database mappings; a client’s models and assets determine what can actually render. A listed name does not automatically register a player slash command.

Table fields and usage ↓

Build filtering uses the stored inclusive range: minimum ≤ build ≤ maximum. A maximum of 0 means no upper limit. Leave the build blank to compare all mappings for a name.

31,574 matching mappings.

Available mappings from the world database snapshot. Empty message fields are shown as —.
Row IDNameVisual state IDClient build rangeMessageTargeted messageStored self message
1044monk_attack021284 1–843 ———
6810monk_attack021284 60085–60114 ———
2923monk_attack034506 1–843 ———
7468monk_attack034506 60085–60114 ———
968monk_attack_recoil1182 1–843 ———
9063monk_attack_recoil11817 60085–60114 ———
985monk_attack_recoil011202 1–843 ———
9064monk_attack_recoil0111818 60085–60114 ———
1045monk_attack_recoil021285 1–843 ———
9065monk_attack_recoil0211819 60085–60114 ———
2924monk_attack_recoil034507 1–843 ———
9066monk_attack_recoil0311820 60085–60114 ———
525monk_backup357 1–843 ———
9067monk_backup11821 60085–60114 ———
2416monk_charge_up3011 1–843 ———
9068monk_charge_up11822 60085–60114 ———
2417monk_defensive_buff3012 1–843 ———
9069monk_defensive_buff11823 60085–60114 ———
1046monk_dodge_backhand1286 1–843 ———
6811monk_dodge_backhand1286 60085–60114 ———
1047monk_dodge_down1287 1–843 ———
6812monk_dodge_down1287 60085–60114 ———
1048monk_dodge_forehand1288 1–843 ———
9070monk_dodge_forehand11824 60085–60114 ———
2925monk_dodge_thrust4508 1–843 ———
9071monk_dodge_thrust11825 60085–60114 ———
526monk_enter366 1–843 ———
9072monk_enter11826 60085–60114 ———
527monk_exit369 1–843 ———
9073monk_exit11827 60085–60114 ———
2418monk_feint3013 1–843 ———
9074monk_feint11828 60085–60114 ———
528monk_idle372 1–843 ———
6723monk_idle372 60085–60114 ———
9075monk_idle0111829 60085–60114 ———
2113monk_kick2639 1–843 ———
9076monk_kick11830 60085–60114 ———
2114monk_kick_flying2640 1–843 ———
9077monk_kick_flying11831 60085–60114 ———
2115monk_kick_spin2641 1–843 ———
9078monk_kick_spin11832 60085–60114 ———
2419monk_knockdowntoknees3014 1–843 ———
9079monk_knockdowntoknees11833 60085–60114 ———
2420monk_knockedtoback3015 1–843 ———
9080monk_knockedtoback11834 60085–60114 ———
2421monk_knockedtoback_getup3016 1–843 ———
9081monk_knockedtoback_getup11835 60085–60114 ———
2422monk_offensive_buff3017 1–843 ———
9082monk_offensive_buff11836 60085–60114 ———
10834monk_offensive_buff_short14497 60085–60114 ———
1049monk_ouch_backhand1289 1–843 ———
9083monk_ouch_backhand11837 60085–60114 ———
1050monk_ouch_down1290 1–843 ———
9084monk_ouch_down11838 60085–60114 ———
1051monk_ouch_forehand1291 1–843 ———
9085monk_ouch_forehand11839 60085–60114 ———
2926monk_ouch_thrust4509 1–843 ———
9086monk_ouch_thrust11840 60085–60114 ———
1052monk_parry_backhand1292 1–843 ———
9087monk_parry_backhand11841 60085–60114 ———
1053monk_parry_down1293 1–843 ———
9088monk_parry_down11842 60085–60114 ———
1054monk_parry_forehand1294 1–843 ———
9089monk_parry_forehand11843 60085–60114 ———
2927monk_parry_thrust4510 1–843 ———
9090monk_parry_thrust11844 60085–60114 ———
529monk_strafe_left389 1–843 ———
9091monk_strafe_left11845 60085–60114 ———
530monk_strafe_right390 1–843 ———
9092monk_strafe_right11846 60085–60114 ———
2423monk_super_buff3018 1–843 ———
9093monk_super_buff11847 60085–60114 ———
2424monk_taunt_combat_art3019 1–843 ———
9094monk_taunt_combat_art11848 60085–60114 ———
531monk_walk391 1–843 ———
9095monk_walk11849 60085–60114 ———
2425monk_whirling_attack3020 1–843 ———
9096monk_whirling_attack11850 60085–60114 ———
2426monk_wild_swing3021 1–843 ———
7252monk_wild_swing3021 60085–60114 ———
2153mood_afraid2692 1–843 ———
9097mood_afraid11851 60085–60114 ———
2154mood_angry2693 1–843 ———
9098mood_angry11852 60085–60114 ———
2155mood_combat2694 1–843 ———
9099mood_combat11853 60085–60114 ———
11183mood_dance15970 60085–60114 ———
2156mood_happy2695 1–843 ———
9100mood_happy11854 60085–60114 ———
2157mood_idle2696 1–843 ———
9101mood_idle11855 60085–60114 ———
2158mood_sad2697 1–843 ———
9102mood_sad11856 60085–60114 ———
2159mood_tired2698 1–843 ———
9103mood_tired11857 60085–60114 ———
262moon392 1–843 shows everyone how %g3 feels about it!shows %t what %g3 feel about it.—
9104moon11858 60085–60114 shows everyone how %g3 feels about it!shows %t what %g3 feel about it.—
9105mount11859 60085–60114 ———
14902mount_attack24393 60085–60114 ———
11255mount_attack0116157 60085–60114 ———
Table fields and server behavior
Schema from the same database snapshot.
ColumnSQL typeMeaning
idint(10) unsigned Auto-increment primary key for the database row. This is not the animation ID.
namevarchar(128)
Nullable
Exact name used by the server’s animation lookup. The same name can have separate rows for different client builds.
visual_state_idint(10) unsigned Numeric animation ID sent in WS_CannedEmote for the selected mapping. IDs can change between version ranges.
messagevarchar(255)
Nullable
Default chat text, used without a different target or when targeted_message is empty. The server prefixes the originator’s name for player emotes.
targeted_messagevarchar(255)
Nullable
Chat text used when a different target exists. The %t placeholder is replaced with the target’s name.
self_messagevarchar(255)
Nullable
Stored database field. The current WorldDatabase loader does not select it and HandleEmote does not use it.
min_version_rangeint(10) unsigned Inclusive lowest client build for this mapping; 0 allows builds from zero upward.
max_version_rangeint(10) unsigned Inclusive highest client build; 0 means no upper limit.

Using a named animation

For example, wave maps to visual state 883 for builds 1–843 and 13287 for builds 60085–60114 in this snapshot. Search a name with the build left blank to see its variants.

In Lua, PlayAnimationString resolves the name through the emote catalog. This example plays the named animation without using the spawn’s current target:

PlayAnimationString(Spawn, "wave", nil, true)

Player canned emotes use /cannedemote wave. The separate /emote command sends custom chat text. For NPCs, HandleEmote sends the animation with an empty emote message.

Message placeholders: %t is the target’s name; %g1 becomes his/her, %g2 becomes him/her, and %g3 becomes he/she, using the originator’s gender. The current handler replaces the first occurrence of each placeholder.

The “With chat text” filter includes rows with a nonempty message or targeted_message. “Animation only” means both fields are empty. Stored self_message does not affect either filter.

Build filtering shows literal database ranges. FindAnimation also has a narrow verified fallback for bow_knockedtoback in builds 562–935 when no direct mapping exists; it does not make all modern mappings available to those builds.

Source: configured local world emotes table, exported read-only on October 14, 2026. Runtime behavior checked against WorldServer/WorldDatabase.cpp, WorldServer/Spawn/VisualStates.h, WorldServer/Zone/zoneserver.cpp, WorldServer/Commands/Commands.cpp and WorldServer/Lua/LuaFunctions.cpp. Other worlds can have different mappings.