Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Pesky Sit Errors (linked set, Sit Target Errors)

Parsalin Gullwing
The big PG
Join date: 16 Aug 2004
Posts: 32
12-24-2007 06:32
Hello, First off to keep flaming to a minimum...

-I dont post much if at all.
-This may have been said before, i just felt it should be shared.
-This may seem obvious to all of you.
-And may be unneeded or a better way to do it.

Oh so heres the code i use in my Animation Balls, its an edit of anothers code all of there header is still intact and unedited. Much thanks for there contribution.
The importent part:

From: someone

integer perm = llGetPermissions();
if (perm & PERMISSION_TRIGGER_ANIMATION)
{
llStopAnimation(ANIMATION);
llStopAnimation("sit";);
llStartAnimation(ANIMATION);
}


This little snippet... Obviously, Checks if the permissions have been allowed before trying to do anything. In this way it wont try to start or stop an animation unless it has permission, no more little error message when you sit on a linked set of balls.

The Full Code :
From: someone

//Pose Ball script, Revision 4.1 with Rotation
//Notecard configuration enabled, switchable link_message/touch_start/llListen support, sit_text, floating text, alpha.

//By CrystalShard Foo.
//Work started - October 10th.
//Last compile - November 7th.

//This script will let you choose if you want to turn the ball visible on CLICK, or by using a SHOW/HIDE voice command.
//You can also set the offset and the title of the ball, as well as the sit button text - all with a notecard.

//This script is free and comes without support. Dont contact me. Ask a local geek for help if it gets messy.

// ** This script is NOT FOR SALE **
//You can use it in commercial products as long as you give this script to anyone who asks for it.
//You can use this source, distribute it and modify it freely, but leave the credits intact!
//(You can add your own name to the list, ofcourse. Like, "Modified by John Doe";)


vector ROTATION = <0,0,0>; //Euler!

string TITLE="Sit here"; //This text will appear in the floating title above the ball
string ANIMATION=""; //Put the name of the pose/animation here!
vector offset=<0,0,0.5>; //You can play with these numbers to adjust how far the person sits from the ball. ( <X,Y,Z> )
integer use_voice = FALSE;

string gNotecard = "Pose ball - CONFIGURATION";
integer gLine = 0;

integer listenHandle = -1;
integer visible = TRUE;
float base_alpha = 1.0;
key avatar;

key dataserver_key = NULL_KEY;

show()
{
visible = TRUE;
llSetText(TITLE, <1,1,1>,1);
llSetAlpha(1, ALL_SIDES);
}

hide()
{
visible = FALSE;
llSetText("", <1,1,1>,1);
llSetAlpha(0, ALL_SIDES);
}

next_line()
{
gLine++;
dataserver_key = llGetNotecardLine(gNotecard,gLine);
}

use_defaults()
{
llSetSitText("Sit Here";);
if(visible == FALSE)
llSetText("",<1,1,1>,1);
else
llSetText(TITLE,<1,1,1>,1);
}

init()
{

if(llGetInventoryNumber(INVENTORY_ANIMATION) == 0) //Make sure we actually got something to pose with.
{
llWhisper(0,"Error: No animation found. Cannot pose.";);
ANIMATION = "sit";
}
else
ANIMATION = llGetInventoryName(INVENTORY_ANIMATION,0);

if(llGetInventoryNumber(INVENTORY_NOTECARD) != 0) //If the notecard is present, use it for configuration.
{
integer i;
for(i=0;i<llGetInventoryNumber(INVENTORY_NOTECARD);i++)
if(llGetInventoryName(INVENTORY_NOTECARD,i) == gNotecard)
{
gLine = 0;
dataserver_key = llGetNotecardLine(gNotecard, 0);
return;
}
use_defaults();
}
else //No configuration notecard found... lets use the defaults.
use_defaults();
}

default
{
state_entry()
{
//llSetText("Starting up", <1,1,1>,1);
llSitTarget(offset,llEuler2Rot(ROTATION));
init();
}

link_message(integer sender_num, integer num, string str, key id)
{
if(num == 99)
if(str == "show";)
hide();
else
if(str == "hide";);
show();
}

touch_start(integer detected)
{
if(use_voice == FALSE)
{
if(visible == TRUE)
hide();
else
show();
}
else
llSay(0,llDetectedName(0)+", say '/1 Hide' to hide me, or '/1 Show' to make me show. Or just right-click and sit on me to use me.";);
}

changed(integer change)
{
if(change == CHANGED_LINK)
{
avatar = llAvatarOnSitTarget();
if(avatar != NULL_KEY)
{
llRequestPermissions(avatar,PERMISSION_TRIGGER_ANIMATION);
integer perm = llGetPermissions();
if (perm & PERMISSION_TRIGGER_ANIMATION) // using & is important! perm is a bitmask!
{
llStopAnimation(ANIMATION);
llStopAnimation("sit";);
llStartAnimation(ANIMATION);
}
if(visible == TRUE)
base_alpha = llGetAlpha(ALL_SIDES);
else
base_alpha = 1.0;
llSetAlpha(0.0,ALL_SIDES);
llSetText("",<1,1,1>,1);
}
else
{
integer perm = llGetPermissions();
if (perm & PERMISSION_TRIGGER_ANIMATION) // using & is important! perm is a bitmask!
{
llStopAnimation(ANIMATION);
}

llSetAlpha(base_alpha,ALL_SIDES);
llSetText(TITLE,<1,1,1>,1);
llResetScript();
}
}

if(change == CHANGED_INVENTORY)
{
llSetText("Reloading configuration...",<1,1,1>,1);
init();
}
}

listen(integer channel, string name, key id, string message)
{
message = llToLower(message);
if(message == "show";)
{
show();
return;
}
if(message == "hide";)
{
hide();
return;
}
}

dataserver(key queryid, string data)
{
if(queryid != dataserver_key)
return;

if(data != EOF)
{
if(llGetSubString(data,0,0) != ";";)
{
if(llGetSubString(data,0,5) == "title:";)
{
TITLE = llGetSubString(data,7,-1);
next_line();
return;
}
if(llGetSubString(data,0,6) == "offset:";)
{
integer length = llStringLength(data);
if(llGetSubString(data,8,8) != "<" || llGetSubString(data,length - 1,length) != ">";)
{
llSay(0,"Error: The numbers in the offset value lack the '<' and '>' signs. (Should be something like <3,1,6> )";);
offset = <0,0,0.5>;

}
else
offset = (vector)llGetSubString(data,8,-1);

llSitTarget(offset,llEuler2Rot(ROTATION));
next_line();
return;
}
if(llGetSubString(data,0,5) == "voice:";)
{
string value = llGetSubString(data,7,-1);
value = llToLower(value);

if(listenHandle != -1)
{
llListenRemove(listenHandle);
listenHandle = -1;
}

if(value !="no" && value != "yes" && value != "true" && value != "false";)
use_voice = FALSE;
else
if(value == "no" || value == "false";)
use_voice = FALSE;
else
{
use_voice = TRUE;
listenHandle = llListen(1,"","","";);
}
next_line();
return;
}
if(llGetSubString(data,0,10) == "sit_button:";)
{
llSetSitText(llGetSubString(data,12,-1));
next_line();
return;
}
next_line();
}
}
else
{
if(visible == FALSE)
llSetText("",<1,1,1>,1);
else
llSetText(TITLE,<1,1,1>,1);
}
}
}
Seagel Neville
Far East User
Join date: 2 Jan 2005
Posts: 1,476
12-25-2007 00:54
From: Parsalin Gullwing

-And may be unneeded or a better way to do it.

Although I also agree and recommend you check the permissions, you should know that this pose ball script's problem is on the ground of disregarding the "run_time_permissions" event that is invoked just after the user has responded to a permission request.
_____________________
:) Seagel Neville :)