Archive for the ‘lsl’ tag
Create an Avatar Specific Communication Channel
Sometimes you will want to create a listener that will not interfere with any other avatar using the same object near you. The basic solution of detecting the owner creates a lot of overhead, therefore a better solution is to have individual channels.
Thanks to Winter Seale, on the SecondLife scripters mailing list:
use an avatar specific
channel. To do that I would define a function:integer get_channel(key avatar, integer offset){ return (integer)("0x"+llGetSubString((string)llGetOwnerKey(),-8,-1)) + offset }Then in your script, use:
llSay( get_channel( llDetectedKey(number), -1234 ), (string)llDetectedKey(number) ); ... llListen( get_channel( llGetOwner(), -1234 ), "", "", "");* The reason this is better is that it keeps only one script (the
avatar’s) listening on this channel. Without this, a script for every
person with a HUD would have to execute code every time your in world
object was touched.
LSL tests: recursive function
It’s good practice to make code easy to maintain, so sometimes you’ll want to use less code using recursive functions. In order to find out how to this works in Second Life I created this small recusive example:
integer i = 0;
integer top = 0;
integer Monkeys()
{
llOwnerSay("monkeys");
i++;
if (i <= top)
return Monkeys();
else
return i;
}
default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}
touch_start(integer total_number)
{
i = 0;
top = Monkeys();
llOwnerSay((string)top);
}
}
This script says monkeys an increasing amount of times every time you touch it by calling itself if and keeping track of the total amount of times the function is called. First time there will be 1 monkey, next time 2 monkeys etc. Find more products at our shop in Badmoon.
LSL tests: walking states
I had to create a simple script to turn a neon sign on and off. I decided to have both versions of the sign in a single texture and changing the offset with a script. Instead of using a timer and using llSetTimeout() instead I opted to pause the script for a small amount of time. The script does not respond when it’s sleeping which should be less laggy then the timeout. All i do then at the start of a state is offsetting the texture to show the on/off alternatively.
default
{
state_entry()
{
llOffsetTexture(0.0,0.25,ALL_SIDES);
llSleep(1.37);
state off;
}
}state off
{
state_entry()
{
llOffsetTexture(0.0,0.75,ALL_SIDES);
llSleep(.723);
state default;
}
}
Hope this is of use to you. See the result in our Higher / Lower game at Badmoon.