Some scripting from Emily - First of all I made the Santa out of prims then added a Pose Ball script I picked up from somewhere I can't remember where but I copied the script and contents into another pose ball and set about figuring out how it worked.
It had something features that i didn't need but I worked around them because I didn't want to change something and find out to late that it doesn't work without it.
Before I changed anything I made sure that the Pose ball worked like if I could get off Santa's lap and if I was facing the right way. I then added other stuff after that like random talking when click (I got this from a Little Penguin that follows you around) then I added a present that's given to you when you sit on Santa at first I tried putting it in another Script file but it didn't work so I ended up putting every thing into one script I've added it here if anyone would like to try and do something cool :)
//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.
//Modified by Emily MLCFiliae - November 20th 2007.
//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 on Santa's lap"; //This text will appear in the floating title above the ball
string ANIMATION="sit"; //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. (
)
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;
string object = "Present";
key dataserver_key = NULL_KEY;
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.0, 1.0, 1.0>,1.0);
else
llSetText(TITLE,<1.0, 1.0, 1.0>, 1.0);
}
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
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,ZERO_ROTATION);
init();
}
link_message(integer sender_num, integer num, string str, key id)
{
if(num == 99)
{
if(str == "show")
{
masterswitch = FALSE;
hide();
return;
}
if(str == "hide");
{
masterswitch = TRUE;
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.");
}
touch_start(integer num)
{
integer choice = (integer)llFrand(5.0);
if(choice == 1) { llSay(0,"Ho, Ho, Ho What would you like for Christmas");}
else if(choice == 2) { llSay(0,"Cookies and Milk are the best");}
else if(choice == 3) { llSay(0,"Ho, Ho, Ho");}
else if(choice == 4) { llSay(0,"Christmas is over I don't know why I'm still here");}
else if(choice == 5) { llSay(0,"Its cold down at the North Pole");}
else { llSay(0,"I hope you like the present");}
}
changed(integer change)
{
if(change == CHANGED_LINK)
{
avatar = llAvatarOnSitTarget();
if(avatar != NULL_KEY)
{
hide();
llRequestPermissions(avatar,PERMISSION_TRIGGER_ANIMATION);
llGiveInventory(avatar,object);
}
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.0 ,1.0 ,1.0>,1.0);
}
}
listen(integer channel, string name, key id, string message)
{
if(llStringLength(message)!=4)
return;
message = llToLower(message);
if(message == "show")
{
show();
return;
}
if(message == "hide")
hide();
}
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);
}
}
}