I have the " ? endit: exit " in there but truthfully I dont know how Im supposed to get it to end. I just delete the units when they are done talking.
endit is a global variable which must first be declared false in the init.sqs
endit = false
When your loop completes the 3 second delay it checks the condition again for status(true or false). If it has been declared true it then exits the loop, if false, it ignores the code after the "Then( : )" command and proceeds to the next line.
So...If when you desire the loop to end, in a waypoint, another script, or trigger you simply place endit = true. Keep in mind though that the loop will not immediately end since you have a delay in there between condition checks.
You can then use that same variable for other looping conversations as well as long as they are not all at the same time. This will prevent you from accumalating too many global variables and inducing the savegame bug. Just make sure to add endit = false at the end of the loop before you exit or before the next looping conversation.
? endit : endit = false; exit