Plugin simplemod

Hola gente. Estoy haciendo un plug script simplemod, la idea es hacer que una superficie haga un desplazamiento, como si fuera un displace, pero con otra superficie en vez de un bitmap, es decir que coge la diferencia de z respecto a 0 de esa superficie. Hice un script a pelo con dos objetos y funciona bien, pero cuando me pongo hacerlo como plug, una cosa con sus botones y todo eso, pues que me lio, esto del script se me escapa un poco. A ver si alguien me puede echar un mano.

Este es el engendro que he echo:
Plugin simplemod zplus.

Name:z+.

Classid:#(6853276,45228176).

Versión:2.
(Tlocal centro=$.position tlocal obj tfn geo_filt obj = ((getpolygoncount obj) as string.= #(0, 0)) tfn updatemesh obje = t(t rm = raymeshgridintersect() rm. Initialize 100 rm, addnode obje rm, buildgrid() t).

Parameters main ut:parámetros.

Altura type:#integer ui:altspin default:20).

Rollout parámetros param meshdisplacement width:162 height:185.
(Tspinner altspin altura rayo: pos:[22,19] width:126 height:16 range:[100,10000,20] type:#integer tbutton selectsurf select surface pos:[26,66] width:114 height:26 filter:geo_filt autodisplay:true tcheckbox chk1 update always pos:[28,152] width:118 height:13 tbutton updtemesh update pos:[28,106] width:111 height:27 ton selectsurf picked obj do (t ) t ton supdtemesh pressed do (t updatemesh obj )).

Fn updatemesh obj = t(t rm = raymeshgridintersect() rm. Initialize 100 rm, addnode obje rm, buildgrid() t on map i p do (t vert_plus=[(p.x+centro.x), (p.x+centro.x), altspin] inter= rm, intersectray vert_plus [0,0,-1] false if inter.= 0 do ( zp=altspin-(rm, gethitdist intersección) p, z=p, z+zp ) p )).