Quest continues, even while it waits for input. You will get the same result with this code, which is effectively two iterations of your loop:
msg ("Type non-integer to finish")
get input {
running = IsInt(result)
}
msg ("Type non-integer to finish")
get input {
running = IsInt(result)
}
It does the first get input, and then puts the code in the block on one side to do later, when it has the input. Then it goes straight on to the second msg, and then the second get input, at which point it realises it is now waiting for two inputs, and gives up.
The solution for my code is to put the second part inside the block:
msg ("Type non-integer to finish")
get input {
msg ("Type non-integer to finish")
get input {
}
}
The solution for you is somewhat more complicated... I had a quick play around and failed to get it to work wth a recursive function and with on ready.