Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Animation not up-to-date...

Annie Levasseur
Registered User
Join date: 11 Dec 2007
Posts: 5
12-12-2007 16:49
I would like to know how to make an avatar up-to-date with a poseball. I make the poseball move with a menu but the avatar doesn't move... I'm using a free script called Pose Ball 4 made by CrystalShard Foo to which I added a move script with a menu.

here is the code. I added * on the lines that I added.

//Pose Ball script, Revision 4.3
//Notecard configuration enabled, switchable link_message/touch_start/llListen support, sit_text, floating text, alpha.
//Version 4.3 fixs link_set hide/show and permission sensing issues.

//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";)



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,-1>;
//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 masterswitch = TRUE;
integer visible = TRUE;
float base_alpha = 1.0;

key avatar;

key dataserver_key = NULL_KEY;



/////////////////////////////////// variables added by myself to make it move
//Positive = move north, negative = move south *
float NorthSouth = 0;*
//Positive = move east, negative = move west*
float EastWest = 0.0;*
//Positive = move up, negative = move down*
float UpDown = 0.0;*

float penality = 0;*

vector Pos = <0,0,0>;*
vector Offset;*
////////////////////////////////////






show()
{
visible = TRUE;
llSetText(TITLE, <1,1,1>,1);
llSetAlpha(base_alpha, 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()
{
llSitTarget(offset,ZERO_ROTATION);
init();
llListen(0,"","","";);*
Pos = llGetLocalPos();*
llSetPos(Pos + Offset);*
llSetText("",<0,0,0>,1);
}

touch_start(integer nr)
{
*
}

on_rez(integer start_param)
{
llResetScript();*
}



link_message(integer source, integer num, string str, key id)
{
if ( num == 3 )*
{*

if (str == "Penality +5";)*
{ *
penality = penality + 0.05;*
if (penality > 1) {penality = 1;}*
Offset = <EastWest, NorthSouth, UpDown + penality>;*
llSetPos(Pos + Offset);*
}*
if (str == "Penality +10";)*
{*
penality = penality + 0.05;*
if (penality > 1) {penality = 1;}*
Offset = <EastWest, NorthSouth, UpDown + penality>;*
llSetPos(Pos + Offset);*
}*
if (str == "Penality +30";)*
{*
penality = penality + 0.30;*
if (penality > 1) {penality = 1;}*
Offset = <EastWest, NorthSouth, UpDown + penality>;*
llSetPos(Pos + Offset);*
}*



if (str == "Penality -10";)*
{*
penality = penality - 0.10;*
if (penality < 0) {penality = 0;}*
Offset = <EastWest, NorthSouth, UpDown + penality>;*
llSetPos(Pos + Offset);*
}*
if (str == "Penality -20";)*
{*
penality = penality - 0.20;*
if (penality < 0) {penality = 0;}*
Offset = <EastWest, NorthSouth, UpDown + penality>;*
llSetPos(Pos + Offset);*
}*
if (str == "Penality -50";)*
{*
penality = penality - 0.50;*
if (penality < 0) {penality = 0;}*
Offset = <EastWest, NorthSouth, UpDown + penality>;*
llSetPos(Pos + Offset);*
}*

if (str == "Penality reset";)*
{*
llSetPos(Pos);*
penality = 0;*
}*
} *
}*



changed(integer change)
{
if(change == CHANGED_LINK)
{
avatar = llAvatarOnSitTarget();
llMessageLinked(LINK_THIS, 3, "sub", avatar);*
llMessageLinked(LINK_ALL_CHILDREN, 3, "sub", avatar);*

if(avatar != NULL_KEY)
{
hide();
llRequestPermissions(avatar,PERMISSION_TRIGGER_ANIMATION);
}
else
{
if (llGetPermissionsKey() != NULL_KEY)
llStopAnimation(ANIMATION);
if(masterswitch == TRUE)
{
llSetAlpha(base_alpha,ALL_SIDES);
llSetText(TITLE,<1,1,1>,1);
}
}
}

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

run_time_permissions(integer perm)
{
if(perm == PERMISSION_TRIGGER_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);
}
}

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);

if(offset == <0,0,0>;)
offset = <0,0,0.01>;
llSitTarget(offset,ZERO_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);
}
}
}


So, is it possible to make the avatar move with the poseball?

Annie
Deanna Trollop
BZ Enterprises
Join date: 30 Jan 2006
Posts: 671
12-12-2007 22:13
From: Annie Levasseur
I make the poseball move with a menu but the avatar doesn't move...
This is because a sitting avatar becomes part of the linkset. That is, a child of the root prim, not the prim containing the sit target (if that's a child prim). So moving the prim containing the sit target doesn't move the avatar with it any more than it would move another prim in the linkset along with it.

To physically change the position of a sitting avatar (aside from playing an animation which includes hip translations), use llSetLinkPrimitiveParams (see link below), and pass it the "prim number" of the avatar. For a single sitting avatar, this will always be the return of llGetNumberOfPrims().

Annie Levasseur
Registered User
Join date: 11 Dec 2007
Posts: 5
12-13-2007 08:07
Sweeeeet! ^.^ thanks alot. I could of never guessed that :P.

Annie