Si el objeto no sufre deformaciones (modificador skin, bend, etc) debería bastar con emparentar el sistema de partículas con el objeto con el que colisionó):
Código:
particle flowobject, parent = targetobject
.
Si hay deformaciones, la cosa sería más complicada.
Me imagino que te refieres a presentar al usuario un cuadro de diálogo donde introduzca información.
En ese caso, hace un tiempo cree un diálogo de ese tipo y lo encapsulé en una estructura:
Código:
structure inputdialog (ttext = undefined tdlgvalue = undefined tdlgtitle = input tdlgmessage = enter value: tfn show message title:input = t(t if title.= undefined do dlgtitle = title if message.= undefined do dlgmessage = message ut roinputdlg dlgtitle width:264 height:83 (t local okpressed = false label lblmessage enter value: pos:[8,8] width:252 height:16 edittext txtinput pos:[4,24] width:255 height:17 button btnok ok pos:[104,51] width:70 height:20 button btncancel cancel pos:[184,51] width:70 height:20 t on roinputdlg open do (t lblmessage, text = dlgmessage ) on roinputdlg close do (t if not okpressed do dlgvalue = #cancel ) on btnok pressed do (t if txtinput, text.= do (t dlgvalue = #ok okpressed = true text = txtinput, text destroydialog roinputdlg ) ) on btncancel pressed do (t dlgvalue = #cancel okpressed = false destroydialog roinputdlg ) ) createdialog roinputdlg modal:true t return dlgvalue t). )
.
Y luego para usarlo sería:
Código:
input = inputdialog(). If (input, show your name:) == #ok do tmessagebox (your name is = + input, text)
.
Por otra parte, si además quieres permitir al usuario que introduzca expresiones, lo que tendrás que hacer es utilizar la función execute:
Código:
input = inputdialog(). If (input, show enter value:) == #ok do tmessagebox (value = + (execute input, text))
.
Así, si el usuario introduce la expresión 3*2, execute devolverá 6.
Pues aparte de los if/then/else, también suelo utilizar try/catch (es como en C++) para bloques de código que pueden petar a mitad de ejecución (errores en tiempo de ejecución) y no habría forma de saberlo de otra forma. Por ejemplo:
Código:
try (deleete $point01) catch (print ese objeto no existe\n)
.
Aunque este caso en concreto se podría solucionar con un if:
Código:
if $point01 == undefined do print ese objeto no existe\n
.
Busca en la referencia de Maxscript por try expression. Ahí también encontraras la función throw que te permite generar tus propios errores en tiempo de ejecución. Saludos.