Szia!
Én úgy csinálnám, hogy:
public OnPlayerUpdate(playerid)
{
new Float:x,Float:y,Float:z ;
if(IsPlayerInRangeOfPoint(playerid,1.0,x,y,z)) // ha a játékos abban a pozícióban van (x,y,z helyére a pozíciót kell írni)
{
GetPlayerPos(playerid,x,y,z); // lekéri a pozíciót
SetPlayerPos(playerid,x-2,y,z); // arréb teszi a játékost hogy ne floodolja be neki a dialogot
ShowPlayerDialog(playerid,dialogid,style,caption[],info[],button1[],button2[]); // Dialog
}
return 1;
}
Ha pedig nem tudod hogy lehet dialogot készíteni akkor: KATT
Ezzel csak annyi a probléma hogy amíg az adott pozíción tartózkodik addig folyamatosan újra és újra megjelenítésre kerül számára a dialog.