the $input (test button) dialog in this script should act like that modal dialog (test2 button) but it doesn't. instead it uses mirc main window as the parent, when it should be using the dialog as the parent.
dialog test {
  size -1 -1 90 55
  button "test",1,5 5 80 20
  button "test2",2,5 30 80 20

dialog test2 {
  size -1 -1 90 30

on *:dialog:test:sclick:1:{
  var %t = $input(Does this work,a)

on *:dialog:test:sclick:2:{
  var %t = $dialog(test2,test2,-4)

you don't need a timer to use $input from a dialog, start, or exit event, but you need it to use $input from text, notice, input, action, and other events