AP's Guide to Custom Talking NPCs w/ MaNGOS
A few quick notes before we begin:
APPLY UPDATE every time you change a record (row).
o In Navicat, click the checkmark in the lower left.
o Navicat does this automatically if you switch rows/records.
This or a very similar approach will probably work for trinity/ascent/arcemu as well.
I use Navicat, so whenever you see that word just read it as whatever SQL program you use.
I use ID numbers far above the Blizz range to ensure no conflicts with future updates.
I use specific numbers here; just replace them with whatever you want.
To refer to certain fields within tables I use this format: table_name:column_name
If I made a mistake or left something out, I apologize. But this guide should nevertheless give you a very
good idea of what to do. ;-)
OVERVIEW
Here is the trail you must follow from where you define your creatures/NPCs to what they say:
creature_template:gossip_menu_id gossip_menu:entry
gossip_menu:text_id npc_text:ID
creature_template:gossip_menu_id gossip_menu_option:menu_id
So, in Navicat open those 3 tables from the mangos category:
creature_template, gossip_menu, npc_text, and gossip_menu_option
Note: They will be tabbed in the table editor window.
In ‘creature_template’, Sort the first column ('entry') by Ascending.
Go to the last page of the Table and/or scroll to your entry.
In the ‘npcflag’ field, enter 1 to make your NPC gossip (talk in a dialogue window).
Scroll/Tab over to the column 'gossip_menu_id'.
Enter a number <= 65535 (max allowed; please tell me if you know how to increase this).
Note: I recommend starting at 65535 and working your way down.
APPLY UPDATES!
Open the ‘gossip_menu’ table.
Insert a new record (row).
Enter these values in the following fields:
‘entry’: 65535
‘text_id’: 1000001
cond_1: 0, your NPC can only say one thing
1-7, to choose which thing to say if more than one
Note: I like to match the text_id here to my creature_template:entry to keep things more organized.
APPLY UPDATES!
To Simply Have the NPC Say One Thing
Open the ‘npc_text’ table.
Insert a new record (row).
Enter these values in the following fields:
‘ID’: 1000001
‘text0_0’: “What you want your NPC to say” [without quotes]
o Use special text: $B = line break, $N = name, $R = race, $C = class, $G = gender
‘lang0’: 0 [common], or 1-7 for a specific language
‘prob0’: 1 [use this; I’m not sure if/how probabilities work here]
o The probability the NPC will say text0_0
‘em0_0’: 0, or [see below]
o What the NPC emotes upon greeting the player
o EMOTE_STATE_DANCE = 10
o EMOTE_STATE_SLEEP = 12
o EMOTE_STATE_SIT = 13
o EMOTE_STATE_STAND = 26
o EMOTE_STATE_WORK = 28
o EMOTE_STATE_STUN = 64
o EMOTE_STATE_DEAD = 65
o EMOTE_STATE_KNEEL = 68
o EMOTE_ONESHOT_WAVE_NOSHEATHE = 70
o EMOTE_ONESHOT_CHEER_NOSHEATHE = 71
o EMOTE_ONESHOT_EAT_NOSHEATHE = 92
o EMOTE_STATE_WORK_NOSHEATHE = 173
o EMOTE_STATE_FISHING = 379
o EMOTE_ONESHOT_FISHING = 380
o EMOTE_ONESHOT_LOOT = 381
o EMOTE_STATE_WHIRLWIND = 382
o EMOTE_STATE_LAUGH = 392
o EMOTE_STATE_CANNIBALIZE = 398
o EMOTE_STATE_DANCESPECIAL = 400
o EMOTE_STATE_EXCLAIM = 412
o EMOTE_STATE_SIT_CHAIR_MED = 415
APPLY UPDATES!
To Have a Path of Dialogue/Options
Open the ‘gossip_menu_option’ table.
Insert a new record (row).
Enter these values in the following fields:
‘menu_id’: 65535
‘id’: 1, [or an integer; must be unique]
o Note: Multiple records can be created with the same ‘menu_id’, but each must have a
unique ‘id’. By doing this, you can have multiple options in the window at one time. The
records with lower ‘id’s appear at the bottom of the window.
‘option_icon’: 0 – 10
o GOSSIP_ICON_CHAT = 0, //white chat bubble
o GOSSIP_ICON_VENDOR = 1, //brown bag
o GOSSIP_ICON_TAXI = 2, //flight
o GOSSIP_ICON_TRAINER = 3, //book
o GOSSIP_ICON_INTERACT_1 = 4, //interaction wheel
o GOSSIP_ICON_INTERACT_2 = 5, //interaction wheel
o GOSSIP_ICON_MONEY_BAG = 6, //brown bag w/ yellow dot
o GOSSIP_ICON_TALK = 7, //white chat bubble w/ black dots
o GOSSIP_ICON_TABARD = 8, //tabard
o GOSSIP_ICON_BATTLE = 9, //two swords
o GOSSIP_ICON_DOT = 10, //yellow dot
‘option_text’: “The text you want displayed for this option…” [without quotes]
‘option_id’: 0 – 19
o What this option allows the NPC to do on the next screen
o GOSSIP_OPTION_NONE = 0
o GOSSIP_OPTION_GOSSIP = 1
o GOSSIP_OPTION_QUESTGIVER = 2
o GOSSIP_OPTION_VENDOR = 3
o GOSSIP_OPTION_TAXIVENDOR = 4
o GOSSIP_OPTION_TRAINER = 5
o GOSSIP_OPTION_SPIRITHEALER = 6
o GOSSIP_OPTION_SPIRITGUIDE = 7
o GOSSIP_OPTION_INNKEEPER = 8
o GOSSIP_OPTION_BANKER = 9
o GOSSIP_OPTION_PETITIONER = 10
o GOSSIP_OPTION_TABARDDESIGNER = 11
o GOSSIP_OPTION_BATTLEFIELD = 12
o GOSSIP_OPTION_AUCTIONEER = 13
o GOSSIP_OPTION_STABLEPET = 14
o GOSSIP_OPTION_ARMORER = 15
o GOSSIP_OPTION_UNLEARNTALENTS = 16
o GOSSIP_OPTION_UNLEARNPETTALENTS = 17
o GOSSIP_OPTION_LEARNDUALSPEC = 18
o GOSSIP_OPTION_OUTDOORPVP = 19
o GOSSIP_OPTION_MAX
‘npc_option_npcflag’
o Must match up to the above ‘option_id’ to have that display
‘option_id’ ‘npc_option_npcflag’
0 0
1 1
2 2
3 128
4 8192
5 16
6 16384
7 32768
8 65536
9 131072
10 262144
11 524288
12 1048576
13 2097152
14 4194304
15 4096
16 16
17 16
18 16
19 [added by code]*
* option for outdoor pvp creatures
‘action_menu_id’: 65534 [or, the next ‘menu_id’ option to go to]
‘action_poi_id’
o To make a POI (point of interest) display on the minimap, use the value from
points_of_interest:entry
‘box_coded’
o Pops up a box where you can enter some code.
‘box_money’
o Pops up a box where you can enter an amount of money.
‘box_text’: “String of text to give player a choice…” [without quotes]
o Pops up an Accept/Cancel box. Choosing Accept progresses the conversation; choosing
Cancel ends it (and won’t let you speak to that NPC again until you relog?).
To Have Your NPC Say/Yell/Whisper Something
First, open the ‘creature_template’ table.
Go to the record for your NPC.
In the ‘AIName’ column, put: “EventAI” [without quotes]
Open the ‘creature_ai_scripts’ table.
Insert a new record (row).
Enter these values in the following fields:
‘id’: 99999999
‘creature_id’: 1000001
event_type: [0 – 26, as defined below]
0 = EVENT_T_TIMER: COMBAT ONLY! - Expires first between (Param1) and (Param2)
and then between every (Param3) and (Param4).
o Parameter 1: InitialMin
o Parameter 2: InitialMax
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
1 = EVENT_T_TIMER_OOC: OUT OF COMBAT - Expires first between (Param1) and
(Param2) and then between every (Param3) and (Param4).
o Parameter 1: InitialMin
o Parameter 2: InitialMax
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
2 = EVENT_T_HP: Expires when HP is between (Param1) and (Param2). Will repeat
every (Param3) and (Param4).
o Parameter 1: HPMax% (Note: Max goes before Min here. Don't get confused.)
o Parameter 2: HPMin%
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
3 = EVENT_T_MANA: Expires once Mana% is between (Param1) and (Param2). Will
repeat every (Param3) and (Param4).
o Parameter 1: ManaMax%
o Parameter 2: ManaMin%
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
4 = EVENT_T_AGGRO: Expires upon initial aggro (does not repeat).
5 = EVENT_T_KILL: Expires upon killing a player. Will repeat every (Param1) and
(Param2).
o Parameter 1: RepeatMin
o Parameter 2: RepeatMax
6 = EVENT_T_DEATH: Expires upon Death.
7 = EVENT_T_EVADE: Expires upon creature EnterEvadeMode().
8 = EVENT_T_SPELLHIT: Expires upon Spell hit. If (param1) is set will only
expire on that spell. If (param2) will only expire on spells of that school.
Will repeat every (Param3) and (Param4) .
o Parameter 1: SpellID
o Parameter 2: School
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
9 = EVENT_T_RANGE: Expires when the highest threat target distance is greater
than (Param1) and less than (Param2). Will repeat every (Param3) and (Param4) .
o Parameter 1: MinDist
o Parameter 2: MaxDist
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
10 = EVENT_T_OOC_LOS: Expires when a unit moves within distance
(MaxAllowedRange) of a creature. If (Param1) is zero it will expire only when
unit is hostile, friendly otherwise (Param1 = 1), depends generally on faction.
Will repeat every (Param3) and (Param4). Does not expire when the creature is in
combat.
o Parameter 1: Hostile-or-Not
o Parameter 2: MaxAllowedRange
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
11 = EVENT_T_SPAWNED: Expires at initial spawn and at creature respawn (useful
for setting ranged movement type)
12 = EVENT_T_TARGET_HP: Expires when Current Target's HP is between (Param1) and
(Param2). Will repeat every (Param3) and (Param4) .
o Parameter 1: HPMax%
o Parameter 2: HPMin%
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
13 = EVENT_T_TARGET_CASTING: Expires when the player is casting a spell. Will
repeat every (Param1) and (Param2) .
o Parameter 1: RepeatMin
o Parameter 2: RepeatMax
14 = EVENT_T_FRIENDLY_HP: Expires when a friendly unit in radius(param2) has at
least (param1) hp missing. Will repeat every (Param3) and (Param4) .
o Parameter 1: HPDeficit
o Parameter 2: Radius
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
15 = EVENT_T_FRIENDLY_IS_CC: Expires when a friendly unit is Crowd controlled
within the given radius (param2). Will repeat every (Param3) and (Param4) .
o Parameter 1: DispelType
o Parameter 2: Radius
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
16 = EVENT_T_MISSING_BUFF: Expires when a friendly unit is missing aura's given
by spell (param1) within radius (param2). Will repeat every (Param3) and
(Param4) .
o Parameter 1: SpellId
o Parameter 2: Radius
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
17 = EVENT_T_SUMMONED_UNIT: Expires after creature with entry(Param1) is spawned
or for all spawns if param1 = 0. Will repeat every (Param2) and (Param3) .
o Parameter 1: CreatureId
o Parameter 2: RepeatMin
o Parameter 3: RepeatMax
18 = EVENT_T_TARGET_MANA:
o Parameter 1: ManaMax%
o Parameter 2: ManaMin%
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
21 = EVENT_T_REACHED_HOME: Expires when creature reach it's home(spawn) location
after Evade.
22 = EVENT_T_RECEIVE_EMOTE: Expires when creature receive emote with text emote
id(enum TextEmotes). Condition can be defined. If set, then most conditions has
additional value [see table enum ConditionType]
o Parameter 1: EmoteId
o Parameter 2: Condition
o Parameter 3: CondValue1
o Parameter 4: CondValue2
23 = EVENT_T_BUFFED: Expires when creature have spell (Param1) auras applied
stack greater or equal provided in Param2 amount. Will repeat every (Param3) and
(Param4).
o Parameter 1: SpellId
o Parameter 2: AmmountInStack
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
24 = EVENT_T_TARGET_BUFFED: Expires when target unit have spell (Param1) auras
applied stack greater or equal provided in (Param2) amount. Will repeat every
(Param3) and (Param4).
o Parameter 1: SpellId
o Parameter 2: AmmountInStack
o Parameter 3: RepeatMin
o Parameter 4: RepeatMax
25 = EVENT_T_SUMMONED_JUST_DIED: Expires after creature with entry = (Param1)
dies. Expires for all spawns if (Param1) = 0. Will repeat every (Param2) and
(Param3).
o Parameter 1: CreatureId
o Parameter 2: RepeatMin
o Parameter 3: RepeatMax
26 = EVENT_T_SUMMONED_JUST_DESPAWN: Expires before creature with entry =
(Param1) is despawned. Expires for all spawns if (Param1) = 0. Will repeat every
(Param2) and (Param3).
o Parameter 1: CreatureId
o Parameter 2: RepeatMin
o Parameter 3: RepeatMax
[Continuation of ‘creature_ai_scripts’]
‘event_chance”: 100
‘event_flags’: 1 [a bitmask Value from the following table]
o Add Values to allow for NPCs in instances.
Bit / Value* Name Description
Event repeats (Does not repeat if this flag is not
0 / 1 EFLAG_REPEATABLE
set)
Event only occurs in instance difficulty 0 (will not
1 / 2 EFLAG_DIFFICULTY_0
occur if not set)
Event only occurs in instance difficulty 1 (will not
2 / 4 EFLAG_DIFFICULTY_1
occur if not set)
Event only occurs in instance difficulty 2 (will not
3 / 8 EFLAG_DIFFICULTY_2
occur if not set)
Event only occurs in instance difficulty 3 (will not
4 / 16 EFLAG_DIFFICULTY_3
occur if not set)
7 / 128 EFLAG_DEBUG_ONLY Event only occurs in debug build
* = Represents what the value in the field would be with no other additive flags.
‘action1_type’: 1
‘action1_param1’: - 999999 [corresponds to creature_ai_texts:entry]
Open the ‘creature_ai_texts’ table.
Insert a new record (row).
Enter these values in the following fields:
‘entry’: -999999
o Note: This number is always negative.
‘content_default’: “What you want the NPC to say…” [without quotes]
o Note: This is the actual text presented in the default language (English).
‘type’: [value corresponding to the method of display]
Value Type
0 Say
1 Yell
2 Text Emote
3 Boss Emote
4 Whisper
5 Boss Whisper
‘sound’: The sound ID that will play with along with the text. All sounds are from [Link].
‘language’: The in-game language of the text. Languages are from [Link].
‘emote’: The emote that the creature performs along with the text.
If something in these directions did not make sense, check out:
[Link]
And… that’s it! Go spawn your NPC ;-)
Other things to try:
Use this link to read up on conditions. You can require the player to have a certain item
(equipped), complete a certain quest, have a certain aura, etc. before the NPC will say a certain
thing to them.
Thanks to: MaNGOS, Darkrulerz, [Link]