Thanks I ended up with this that does what I wanted
Type BOO in local and the prim rotates from flat on the ground to upright
after 5 seconds it goes back
integer listenHandle;
integer intSwing =90;
rotation rotSwing;
vector vOffset;
list l;
vector v;
rotation r;
default
{
state_entry()
{
listenHandle = llListen(0, "", NULL_KEY, "BOO");
rotSwing = llEuler2Rot(<0.0,(float)intSwing*DEG_TO_RAD,0.0>);
vector size = llGetScale();
vOffset = <(size.x*-0.5),(size.y*-0.5),(size.z*-0.5)>;
}
listen(integer channel, string name, key id, string message)
{
l = llGetPrimitiveParams([PRIM_POS_LOCAL,PRIM_ROT_LOCAL]);
v = llList2Vector(l,0);
r = llList2Rot(l,1);
llSetPrimitiveParams([PRIM_POS_LOCAL,v+(vOffset-vOffset * rotSwing)*r,PRIM_ROT_LOCAL,rotSwing*r]);
rotSwing.s*=-1;
llSetTimerEvent(5); //timer event 10 seconds
llListenControl(listenHandle, FALSE);
}
timer()
{
rotSwing = llEuler2Rot(<0.0,(float)360*DEG_TO_RAD,0.0>);
llSetPrimitiveParams([PRIM_POS_LOCAL,v+(vOffset-vOffset * rotSwing)*r,PRIM_ROT_LOCAL,rotSwing*r]);
llListenControl(listenHandle, TRUE);
llSetTimerEvent(0.0);
llResetScript();
}
on_rez(integer start_param)
{
llResetScript();
}
}