Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

PERMISSION_TRIGGER_ANIMATION permission not...

SuezanneC Baskerville
Forums Rock!
Join date: 22 Dec 2003
Posts: 14,229
09-25-2005 19:48
I get the following error in a script taken from a free object called a hoverdisk: "Script trying to stop animations but PERMISSION_TRIGGER_ANIMATION permission not set". This error doesn't happen all the time, and the hovedisc is flyable.

This is not actually a project or problem of mine, I was helping someone with scripting in my Mentor capacity. I have have this sort of error in other old scripts, though, and the person I was helping had it also. I don't know what to tell them about the cause and the solution. It occurs to me there might have been changes in LSL since the code was written, or that some of the free scripts may just have a few bugs in them. Also I suspect possibly some oddness with the sitting on sit target.


CODE
float speed=0;
float high=2400;
float turn=25;
float lift=0;
integer sit = FALSE;
integer vertoff = FALSE;
integer adecayoff = FALSE;
integer ldecayoff = FALSE;
string Vname;
key avatar;

help()
{
//llWhisper(0,"Key Actions:");
//llWhisper(0,"Right click and 'Fly' <-- Starts " + Vname);
//llWhisper(0,"Click STAND UP button <-- Stops " + Vname + " and returns contols");
//llWhisper(0,"W or Forward <-- Accelerates or goes faster forwards");
//llWhisper(0,"S or Backwards <-- Accelerates or goes faster backwards");
//llWhisper(0,"E or Page up <-- Gains Hieght");
//llWhisper(0,"C or Page down <-- Loses Hieght");
//llWhisper(0,"A or Left <-- Turns left");
//llWhisper(0,"D or Right <-- Turns right");
}

stuntparams()
{
llSitTarget(<-0.5, 0.0, 0.3>, <0,0,0,1>);
llSetSitText("Get On");
llSetCameraEyeOffset(<-10.0, 0.0, 3.0>);
llSetCameraAtOffset(<0.0, 0.0, 0.0>);
llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
llRemoveVehicleFlags(-1);
// linear friction
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000, .1, 1000> ); //1000,2,0.5

// angular friction
llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <.1, .1, .1> );

// linear motor
llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.1 );
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1 );

// angular motor
llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 2.5 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 6 );

// no hover
llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 1 );
llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.1 );
llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 100 );
llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0.1 );

// linear deflection
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1 );
llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 10 );

// angular deflection
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 1 );
llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 );

// vertical attractor
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .1 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 );

// banking
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, .5 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .1 );//1000

// default rotation of local frame
llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );

// remove these flags
llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_WATER_ONLY
| VEHICLE_FLAG_HOVER_TERRAIN_ONLY
| VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT
| VEHICLE_FLAG_LIMIT_ROLL_ONLY
| VEHICLE_FLAG_HOVER_UP_ONLY
| VEHICLE_FLAG_LIMIT_MOTOR_UP);
}

default
{
state_entry()
{
stuntparams();
Vname=llGetObjectName();
llSetTimerEvent(0.0);
llStopSound();
llSetStatus(STATUS_PHYSICS, FALSE);
llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", NULL_KEY);
//llWhisper(0,Vname + " is ready for use");
}
on_rez(integer start_param)
{
llResetScript();
}
touch(integer total_number)
{
key owner=llGetOwner();
if (llDetectedKey(0)==owner)
{
help();
}
else
{
//llWhisper(0,llDetectedName(0) + ", Please step away from the " + Vname);
}
}
changed(integer change)
{
avatar = llAvatarOnSitTarget();
string name=llKey2Name(avatar);
if(change & CHANGED_LINK)
{
if(avatar == NULL_KEY)
{
// You have gotten off
llSetTimerEvent(0.0);
llStopSound();
llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", NULL_KEY);
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, FALSE);
llReleaseControls();
llStopAnimation("sit");
sit = FALSE;
//llPushObject(llGetOwner(), <0, 2, 7>, <0,0,0>, TRUE);
llSetStatus(STATUS_PHYSICS, FALSE);
llResetScript();
}
else if(avatar == llGetOwner())
{
// You have gotten on
llSetStatus(STATUS_PHYSICS, TRUE);
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, TRUE);
sit = TRUE;
llRequestPermissions(avatar,PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);
}
else
{
//llWhisper(0,name + ", Please step away from the " + Vname);
llUnSit(avatar);
}
}
}
run_time_permissions(integer perms)
{
if(perms & (PERMISSION_TAKE_CONTROLS))
{
llStopAnimation("sit");
llStartAnimation("stand");
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);
llMessageLinked(LINK_ALL_CHILDREN, 0, "rotor", NULL_KEY);
//llLoopSound("jet0",0.7);
llSetTimerEvent(0.2);
}
else
{
llUnSit(avatar);
}
}
control(key id, integer level, integer edge)
{
vertoff = FALSE;
adecayoff = FALSE;
ldecayoff = FALSE;

if ((level & CONTROL_FWD) && (level & CONTROL_BACK))
{
ldecayoff = TRUE;
speed=0;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>);
}

if (level & CONTROL_FWD)
{
ldecayoff = TRUE;
if(speed > 30) { speed = 30; }
else { speed += 1; }
lift= speed * 0.25;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>);
}

if (level & CONTROL_BACK)
{
ldecayoff = TRUE;
if(speed < -10) { speed = -10; }
else { speed -= 1; }
lift= speed * 0.25;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>);
}

if (level & CONTROL_ROT_RIGHT)
{
adecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <turn,0,0>);
}

if (level & CONTROL_ROT_LEFT)
{
adecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <-turn,0,0>);
}

if (level & CONTROL_RIGHT)
{
vertoff = TRUE;
adecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <(turn/2),0,0>);
}

if (level & CONTROL_LEFT)
{
vertoff = TRUE;
adecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <-(turn/2),0,0>);
}

if (level & CONTROL_UP)
{
ldecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,high>);
}

if (level & CONTROL_DOWN)
{

ldecayoff = TRUE;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,-(high/3)>);
}

if (vertoff)
{
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1000 );
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1000 );//1000
}

if (!vertoff)
{
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .1 );
llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 );
llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, .5 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0
llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .1 );//1000
}

if (adecayoff)
{
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 300 );
llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <6,6,6> );
}

if (!adecayoff)
{
llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, .2 );
llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <.1, .1, .1> );
}

if (ldecayoff)
{
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 30 );
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1, 6, 6> );
}

if (!ldecayoff)
{
llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 3 );
llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1, 2, .05> );
}

}
timer()
{
llSetStatus(STATUS_PHYSICS, TRUE);
}
}
_____________________
-

So long to these forums, the vBulletin forums that used to be at forums.secondlife.com. I will miss them.

I can be found on the web by searching for "SuezanneC Baskerville", or go to

http://www.google.com/profiles/suezanne

-

http://lindenlab.tribe.net/ created on 11/19/03.

Members: Ben, Catherine, Colin, Cory, Dan, Doug, Jim, Philip, Phoenix, Richard,
Robin, and Ryan

-
Keknehv Psaltery
Hacker
Join date: 11 Apr 2005
Posts: 1,185
09-25-2005 20:04
Minor nitpick-- could you use the PHP tags instead of the CODE tags in the future? Thanks...

Anyways, I don't think the "llStopAnimation("sit";)" is necessary at all in the code for when the av has gotten off. Try removing that line.
SuezanneC Baskerville
Forums Rock!
Join date: 22 Dec 2003
Posts: 14,229
09-25-2005 21:09
It bugs me that I can't enclose some code in a CODE block but have to use PHP when it's not php. Plus I don't pose enough code anymore to remember.

Thanks for the answer.
_____________________
-

So long to these forums, the vBulletin forums that used to be at forums.secondlife.com. I will miss them.

I can be found on the web by searching for "SuezanneC Baskerville", or go to

http://www.google.com/profiles/suezanne

-

http://lindenlab.tribe.net/ created on 11/19/03.

Members: Ben, Catherine, Colin, Cory, Dan, Doug, Jim, Philip, Phoenix, Richard,
Robin, and Ryan

-
Michael Martinez
Don't poke me!
Join date: 28 Jul 2004
Posts: 515
09-25-2005 21:23
Also set physics once you set Sit=TRUE, as once it is set, no need to reset on a timer..
Strife Onizuka
Moonchild
Join date: 3 Mar 2004
Posts: 5,887
09-26-2005 12:26
First off i'm going to flame Keknehv Psaltery for being an a- on second though i'm not. php tags are easier to read then code.


If it's a mutli-user vehicle there is the problem

in the change event replace
CODE
//
llReleaseControls();
llStopAnimation("sit");

with
CODE
//
if(llGetAgentSize(llGetPermissionsKey()) != ZERO_VECTOR && (llGetPermissions() & (PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION)) == (PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION))
{
llReleaseControls();
llStopAnimation("sit");
}


From my quick look at the script you don't need the "sit" variable.

You should also turn down the rate of the timer, something like 0.5 seconds should be often enough. The reason being that it may delay control events in unsatisfactory ways.
_____________________
Truth is a river that is always splitting up into arms that reunite. Islanded between the arms, the inhabitants argue for a lifetime as to which is the main river.
- Cyril Connolly

Without the political will to find common ground, the continual friction of tactic and counter tactic, only creates suspicion and hatred and vengeance, and perpetuates the cycle of violence.
- James Nachtwey