Here is code that I had done that is similar.
;Artificial Intelligence Script
;Header
desc = Plr In Zone, activate entity specified in IF USED
;Triggers
:state=0:hudreset,hudx=38,hudy=4,hudimagefine=dialogOdysseydavid.png,hudname=playername1,hudhide=1,hudmake=display
:state=0:hudreset,hudx=38,hudy=4,hudimagefine=dialogOdysseystranger1.png,hudname=s1,hudhide=1,hudmake=display
:state=0:hudreset,hudx=38,hudy=10,hudimagefine=dialogodysseyl2_david_s1a.png,hudname=l2_ds1a,hudhide=1,hudmake=display
:state=0:hudreset,hudx=38,hudy=11,hudimagefine=dialogodysseyl2_David_s1b.png,hudname=l2_ds1b,hudhide=1,hudmake=display
:state=0:hudreset,hudx=38,hudy=9,hudimagefine=dialogodysseyl2_demon1a.png,hudname=l2_s1a,hudhide=1,hudmake=display,
:state=0:hudreset,hudx=38,hudy=10,hudimagefine=dialogodysseyl2_demon1b.png,hudname=l2_s1b,hudhide=1,hudmake=display
:state=0:hudreset,hudx=38,hudy=9,hudimagefine=dialogodysseyl2_demon1c.png,hudname=l2_s1c,hudhide=1,hudmake=display
:state=0:hudreset,hudx=38,hudy=9,hudimagefine=dialogodysseyl2_demon1d.png,hudname=l2_s1d,hudhide=1,hudmake=display
:state=0:hudreset,hudx=38,hudy=10,hudimagefine=dialogodysseyl2_demon1e.png,hudname=l2_s1e,hudhide=1,hudmake=display,state=1
:state=1,plrwithinzone=1:hudshow=s1,hudshow=l2_s1a,state=2
:state=2,plrwithinzone=1,plrusingaction=1:timerstart,hudunshow=s1,hudunshow=l2_s1a,state=3
:state=3,timergreater=200:state=10
:state=10,plrwithinzone=1:hudshow=playername1,hudshow=l2_ds1a,state=15
:state=15,plrwithinzone=1,plrusingaction=1:timerstart,hudunshow=playername1,hudunshow=l2_ds1a,state=17
:state=17,plrwithinzone=1,timergreater=200:state=20
:state=20,plrwithinzone=1:hudshow=s1,hudshow=l2_s1b,state=25
:state=25,plrwithinzone=1,plrusingaction=1:timerstart,hudunshow=s1,hudunshow=l2_s1b,state=27
:state=27,plrwithinzone=1,timergreater=200:state=30
:state=30,plrwithinzone=1:hudshow=playername1,hudshow=l2_ds1b,state=40
:state=40,plrwithinzone=1,scancodekeypressed=79:timerstart,state=50
:state=40,plrwithinzone=1,scancodekeypressed=80:timerstart,state=60
:state=50,plrwithinzone=1,timergreater=200:hudunshow=playername1,hudunshow=l2_ds1b,state=52
:state=52,plrwithinzone=1:hudshow=s1,hudshow=l2_s1c,state=54
:state=54,plrwithinzone=1,plrusingaction=1:timerstart,hudunshow=s1,hudunshow=l2_s1c,state=57
:state=57,plrwithinzone=1,timergreater=200:state=100
:state=60,plrwithinzone=1,timergreater=200:hudunshow=playername1,hudunshow=l2_ds1b,state=62
:state=62,plrwithinzone=1:hudshow=s1,hudshow=l2_s1d,state=64
:state=64,plrwithinzone=1,plrusingaction=1:timerstart,hudunshow=s1,hudunshow=l2_s1d,state=67
:state=67,plrwithinzone=1,timergreater=200:timerstart,state=70
:state=70,plrwithinzone=1,timergreater=15000:state=72
:state=72,plrwithinzone=1:hudshow=s1,hudshow=l2_s1e,state=74
:state=74,plrwithinzone=1,plrusingaction=1:timerstart,hudunshow=s1,hudunshow=l2_s1e,state=77
:state=77,plrwithinzone=1,timergreater=200:timerstart,state=100
:state=100:activateifused=1,state=105
:state=105:none
Since you are not experienced with FPSC script you may not be able to follow this. The main difference is that the player is given a choice of two responses (thus the scancodekeypressed action. 1. The player will follow the character. 2. The player will not follow the character. If he chooses that response and goes his merry way, he will most likely come back to this character. When he does, the character responds one more time and then will start off on a waypoint so that the player can follow him (thats why the activateifused action is called so that it will start the character to follow the waypoint.
Addendum:
Another point with my code. Since I want the character to walk so that the player can follow him, I use a trigger zone at the character position to do the dialog and then I use another script for the character once he is activated.