I cannot download your capx at the moment, but I will try to solve your problem. I will pretend your array is called DialogArray. To get the array to work, I would first set your array to a size of (number of dialogs you want, 2, 1) on the start of the layout. In the first dimension of the array, I will store whether or not this piece of dialog has already been used, and the second dimension will be used for the text itself. Create a global variable called NumberOfDialogsUsed (or whatever you want to call it) and leave it set to 0.
I am assuming you have some variable which stores the location in the array that you want to display, and I will pretend it's called PickedDialog.
When you want to pick a dialog:
If NumberOfDialogsUsed < DialogArray.Width | PickedDialog = floor(random(DialogArray.Width))
(subevent)
While
DialogArray.At(PickedDialog) = 1 | Add 1 to PickedDialog
(subevent)
If PickedDialog > or = DialogArray.Width | Set PickedDialog = 0
(subevent)
(no conditions) | Add 1 to NumberOfDialogsUsed
| Set DialogArray.At(PickedDialog) = 1
Now to display your text, you will find it at DialogArray.At(PickedDialog, 1)
In this example, once you used up every dialog, nothing will happen when you want to display text. At this point if you would like to pick from all the dialogs again, you will have to set NumberOfDialogsUsed = 0, and loop through your array and set DialogArray.At(loopindex) = 0