string animation;
string BTN_90 = "90°";
string BTN_180 = "180°";
string BTN_270 = "270°";
string BTN_360 = "360°";
vector rot_90 = <0,0,90>;
vector rot_180 = <0,0,180>;
vector rot_270 = <0,0,270>;
vector rot_360 = <0,0,0>;
integer menu_channel;
integer menu_handler;
key av;
// =========================================================================
MoveLinkedAv(key av, rotation avrot)
{
integer linknum = llGetNumberOfPrims();
while (av != llGetLinkKey(linknum)) --linknum;
vector size = llGetAgentSize(av);
if(size)
{
rotation localrot = ZERO_ROTATION;
if(llGetLinkNumber() > 1) localrot = llGetLocalRot();
llSetLinkPrimitiveParamsFast(linknum,[PRIM_ROTATION,avrot*localrot/llGetRootRotation()]);
}
}
default
{
on_rez(integer num)
{
llResetScript();
}
state_entry()
{
llSitTarget(<0,0,1>,ZERO_ROTATION);
animation = llGetInventoryName(INVENTORY_ANIMATION, 0); // einfach die erste zur demonstration
if(animation == "") animation = "stand";
av = "";
}
touch_start(integer num)
{
menu_channel = (integer)(llFrand(99999.0) * -1);
menu_handler = llListen(menu_channel,"","","");
llDialog(llDetectedKey(0),"AvatarOnSitTargetRotation",[BTN_90,BTN_180,BTN_270,BTN_360],menu_channel);
llSetTimerEvent(90);
}
listen(integer channel, string name, key id, string message)
{
llListenRemove(menu_handler);
llSetTimerEvent(0);
if (message == BTN_90) MoveLinkedAv(av, llEuler2Rot(rot_90*DEG_TO_RAD));
else if(message == BTN_180) MoveLinkedAv(av, llEuler2Rot(rot_180*DEG_TO_RAD));
else if(message == BTN_270) MoveLinkedAv(av, llEuler2Rot(rot_270*DEG_TO_RAD));
else if(message == BTN_360) MoveLinkedAv(av, llEuler2Rot(rot_360*DEG_TO_RAD));
}
run_time_permissions(integer perms)
{
if (perms & PERMISSION_TRIGGER_ANIMATION)
{
llStopAnimation("sit");
llStartAnimation(animation);
}
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
av = llAvatarOnSitTarget();
if(av) llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);
else
{
if(llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) llStopAnimation(animation);
llReleaseControls();
}
}
}
timer()
{
llSetTimerEvent(0);
llListenRemove(menu_handler);
}
}