1. Actually, when two characters talk to each others, the script make each of the character talks to the player. Each time the player use "next" as a dialog, you just have to call the other player's dlg script at the right line.
You need a dialog line with a negatif return (exemple : -2), it will activate the dialogue script at the line. Then, you need in your script :
2.Loop for (any npc in vicinity). (To do that, each of your npc must have an internal then you write)
3.If (Current loop object) is named (num) (the npc's internal)
THEN Call script attached to current loop object at num (9) (9 is for dialog script) at line (num) with trigger (player).
ELSE Do nothing
5. Return and SKIP default (You need a SKIP default because your are in a dialogue script)
2. Make you NPC run with the "have (obj run to X: Y). Then a script at HEARTBEAT point. If (obj) is within (num) tiles of (X: Y) CALL (dlg script)
Actually, the best heartbeat script to do it is :
0. Get location of (player) and store it in X(local 0) Y(local1)
1. Distance between (player) and (attachee) store in (local2)
2. If (local2) inferior or equal ZZZ (I prefer use 3 or 5 here)
THEN Remove this script
ELSE Go to line 5
3.Call script attached to (attachee) at point 9 at line Z with trigger (player)
4.Return and RUN default
5. Have critter(attachee) run to X(local0), Y(local1)
6.Return and RUN default
With that script, the npc will run in direction to the player, even the player is moving and when it will be at least than ZZZ (3 or 5) tiles, he will talk to him/her.