- summary: The server opening a dialog with an NPC, in answer to a dialog NPC action. The NPC's first line follows in NpcDialogQuestionEvent.
- area: Game.Npc
The server opening a dialog with an NPC, in answer to a dialog NPC action. The NPC's first line follows in NpcDialogQuestionEvent.
Kind event · Area Game.Npc
The server opening a dialog between your character and an NPC. It is the
success answer to an NpcGenericActionRequest whose action is a dialog -
talking to an NPC, or using a portal NPC. From now on the server considers you
IN A DIALOG with that NPC, until the dialog closes (DialogLeaveEvent).
WHAT TO DO WHEN YOU RECEIVE IT
1. MATCH IT TO YOUR REQUEST. npc_id and map_id are the very ids you sent
as npc_id and npc_map_id in NpcGenericActionRequest.
2. YOU ARE IN THE DIALOG NOW. Do not walk away or start another action as if
you were free: the dialog stays open until it closes.
3. WAIT FOR NpcDialogQuestionEvent. It follows straight away and carries
what the NPC says and the replies you may choose. This message carries no
text of its own.
4. ANSWER OR LEAVE. Answer with NpcDialogReplyRequest (one reply_id of
the latest question), or close the dialog with DialogLeaveRequest.
WHAT THE OFFICIAL CLIENT DOES WITH IT
- It waits until the NPC whose actor id is npc_id exists on the current map
(it looks the actor up by that id, as a 64-bit entity id, and waits while
the lookup finds nothing). A dialog event that arrives before the map's
actors are known is therefore held, not dropped.
- It then builds the dialog window for that NPC - its look, its name - and
hands it to the dialog service, which will show the questions.
- For a DIMENSION PORTAL (portal_type set) it builds the portal dialog
instead, from map_id and portal_type. The dialog service checks that
map_id is the map you are on and gives up otherwise ("Required portal
cannot be found on map {0}."), then opens the dialog of that dimension's
portal. A portal_type it does not know is an error for the client.
- It has a path where it does not open the dialog and instead sends
DialogLeaveRequest itself, closing the dialog on the server side.
A script that shows nothing can skip the window: keep npc_id, wait for the
question, answer or leave.
npc_id IS THE NPC'S ACTOR ID ON THE MAP, not its template id: map NPCs have
negative actor ids (your capture: -20001), the ids GameRolePlayShowActorsEvent
and MapComplementaryInformationEvent give the map's actors.
LIVE CAPTURE (3.6.12.16): after NpcGenericActionRequest {npc_map_id
153880835, npc_action_id 3, npc_id -20001} on the Incarnam portal NPC, this
message arrived with npc_id -20001, map_id 153880835 and no portal type,
immediately followed by NpcDialogQuestionEvent.
Builds pad this message with an unread repeated int64 or int32, a second int32, or a nested decoy message; the client reads only the three members above.
When you may send it
- Requires
character_loadedinferred
State it changes
- Establishes
npc_dialog_openinferred — the client opens its dialog window for this NPC, and the dialog's questions and replies only make sense while it is open
Related messages
- You will receive one of
NpcDialogQuestionEventobserved — the NPC's first line and replies, in the same burst; 1 of 1 capture - You will receive one of
PrismDialogQuestionEventinferred — instead of the question when the NPC is an alliance prism: the client opens the dialog in prism mode and this empty event makes it show the prism's fixed text (IDA, 3.7.4.4) - Arrives after
NpcGenericActionRequest
Fields
| # | Field | Type | Meaning | You set it |
|---|---|---|---|---|
| 1 | portal_type | PortalType | Which dimension portal this dialog is about; absent for every other NPC. Explicit presence: absent is not the same as zero. Set only for the four dimension portals ( PortalType); absent (UNSUPPORTED) for ordinary NPCs, the Incarnam portal NPC included.When set, the client opens that dimension's portal dialog instead of the NPC's own. | never |
| 3 | map_id | int64 | The map the NPC is on - the npc_map_id of your request. (map id) Echoes NpcGenericActionRequest.npc_map_id.For a dimension portal the client checks it against the map you are on and opens nothing when they differ. | never |
| 5 | npc_id | int32 | The NPC you are now talking to, as its actor id on the map. (map actor id (negative for map NPCs)) Echoes NpcGenericActionRequest.npc_id; not the NPC's template id.The client waits until an actor with this id exists on the map before it builds the dialog. | never |