User:Zai Lynch/Sandbox/LSL Goodies: Difference between revisions
TP via map |
zlBuzzer |
||
| Line 247: | Line 247: | ||
<div id="box"> | <div id="box"> | ||
== | == Teleport via Map == | ||
<div style="padding: 0.5em"> | <div style="padding: 0.5em"> | ||
Set the description of the prim this script is attached to, to: ''SIMNAME/X/Y/Z''<br> | Set the description of the prim this script is attached to, to: ''SIMNAME/X/Y/Z''<br> | ||
| Line 321: | Line 321: | ||
<div id="box"> | |||
== Buzzer == | |||
<div style="padding: 0.5em"> | |||
This script is supposed to be used during meetings so a speaker isn't interrupted by questions while people can still indicate that they would like to speak. Up to 8 people might leave their indication by clicking the item where the script is attached to. Every name will only be listed once. | |||
Click and hold it clicked for more than 3 seconds to delete the upmost name. | |||
<lsl> | |||
////////////////////////////////////////////////////// | |||
// // | |||
// zlBuzzer // | |||
// released under // | |||
// Creative Commons Attribution-Share Alike 3.0 // | |||
// by Zai Lynch // | |||
// // | |||
////////////////////////////////////////////////////// | |||
integer time; | |||
string q0 = "User with questions:"; | |||
string q1 = ""; | |||
string q2 = ""; | |||
string q3 = ""; | |||
string q4 = ""; | |||
string q5 = ""; | |||
string q6 = ""; | |||
string q7 = ""; | |||
string q8 = ""; | |||
erase() | |||
{ | |||
q1 = q2; | |||
q2 = q3; | |||
q3 = q4; | |||
q4 = q5; | |||
q5 = q6; | |||
q6 = q7; | |||
q7 = q8; | |||
q8 = ""; | |||
} | |||
add(string name) | |||
{ | |||
if ((name != q1) && (name != q2) && (name != q3) && (name != q4) && | |||
(name != q5) && (name != q6) && (name != q7) && (name != q8)) | |||
if (q1=="") q1=name; | |||
else if (q2 == "") q2=name; | |||
else if (q3 == "") q3=name; | |||
else if (q4 == "") q4=name; | |||
else if (q5 == "") q5=name; | |||
else if (q6 == "") q6=name; | |||
else if (q7 == "") q7=name; | |||
else if (q8 == "") q8=name; | |||
} | |||
default | |||
{ | |||
state_entry() | |||
{ | |||
llSetText(q0,<1,1,1>,1); | |||
} | |||
touch_start(integer total_number) | |||
{ | |||
time = llGetUnixTime(); | |||
} | |||
touch_end(integer num_detected) | |||
{ | |||
if (llGetUnixTime() < time + 3) | |||
add(llDetectedName(0)); | |||
else erase(); | |||
llSetText(q0+"\n"+q1+"\n"+q2+"\n"+q3+"\n"+q4+"\n" | |||
+q5+"\n"+q6+"\n"+q7+"\n"+q8, <1,1,1>,1); | |||
} | |||
} | |||
</lsl> | |||
</div></div> | |||
|valign="top" width="200 px"| | |valign="top" width="200 px"| | ||
{|align="center" width="200 px" | {|align="center" width="200 px" | ||
Revision as of 20:26, 6 July 2008
IntroSo just for the record: I'm a complete LSL n00b. So don't expect much from this page. 'Cause I love the Open Source concept, I'd like to share some of my scripts with other SL Residents =)
Simple CountdownThis script displays a hovering countdown above the item it's placed in.
llSetText(TEXT+"\n"+(string)(SECONDS/86400)+" days, "
+(string)((SECONDS%86400)/3600)+" hours, "
+(string)(((SECONDS%86400)%3600)/60)+" minutes, "
+(string)(((SECONDS%86400)%3600)%60)+ "seconds.",COLOR,1);
}
default { state_entry()
{
SECONDS = SECONDS + MINUTES * 60 + HOURS * 3600 + DAYS * 86400;
llSetTimerEvent(1);
countdown();
}
timer()
{
if (SECONDS > 0)
{
SECONDS = SECONDS - 1;
countdown();
}
else
{
llSetText(FINISHED, COLOR,1);
llSetTimerEvent(0);
}
}
} </lsl>
Basic Notecard-ReaderThis script reads notecards placed in the same prim as the script itself. <lsl> ////////////////////////////////////////////////////// // // // Basic Notecard-Reader // // released under // // Creative Commons Attribution-Share Alike 3.0 // // by Zai Lynch // // // //////////////////////////////////////////////////////
integer CHANNEL = 2130214; list MENU = ["Forward", "Backward", "Load", "Play", "Stop", "Time"]; // Variables list gMenuNC; integer gLine = 0; integer gTime = 5; string gNC = "";
integer i;
integer n = llGetInventoryNumber(INVENTORY_NOTECARD);
string name;
gMenuNC = [];
if (n > 0)
{
for (i=0; i<n; i++)
{
name = llGetInventoryName(INVENTORY_NOTECARD, i);
if (llStringLength(name) < 25)
gMenuNC = gMenuNC + [name];
else
{
llSay(0, "Name: "+name + " is to long.");
llRemoveInventory(name);
llSay(0, "Notecard removed.");
}
}
}
if (gNC == "") gNC=llGetInventoryName(INVENTORY_NOTECARD,0);
}
default { state_entry()
{
zlGenerateList();
llListen(CHANNEL, "", llGetOwner(), "");
llListen(CHANNEL+1, "", llGetOwner(), "");
}
on_rez(integer start_param)
{
llResetScript();
}
changed(integer change)
{
if (change == CHANGED_INVENTORY) zlGenerateList();
}
touch_start(integer num)
{
if (llDetectedKey(0) == llGetOwner()) llDialog(llGetOwner()," ",MENU,CHANNEL);
}
listen(integer cha, string name, key id, string msg)
{
if (cha == CHANNEL)
{
if (msg == "Stop")
{
llSetTimerEvent(0);
llDialog(llGetOwner()," ",MENU,CHANNEL);
}
if (msg == "Play")
{
llSetTimerEvent(gTime);
llGetNotecardLine(gNC, gLine);
llDialog(llGetOwner()," ",MENU,CHANNEL);
}
if (msg == "Forward")
{
gLine = gLine + 1;
llGetNotecardLine(gNC, gLine);
llDialog(llGetOwner()," ",MENU,CHANNEL);
llSetTimerEvent(0);
}
if ((msg == "Backward") && (gLine > 0))
{
gLine = gLine - 1;
llGetNotecardLine(gNC, gLine);
llDialog(llGetOwner()," ",MENU,CHANNEL);
llSetTimerEvent(0);
}
if (msg == "Load")
llDialog(llGetOwner(), " ", gMenuNC, CHANNEL+1);
if (msg == "Time")
state listening;
}
if (cha == (CHANNEL+1))
{
gNC = msg;
gLine = 0;
llDialog(llGetOwner()," ",MENU,CHANNEL);
}
}
timer()
{
gLine = gLine+1;
llGetNotecardLine(gNC, gLine);
}
dataserver(key qid, string data)
{
llSay(0, data);
}
state_exit()
{
llSetTimerEvent(0);
}
} state listening { state_entry()
{
llSetTimerEvent(30);
llListen(0, "", llGetOwner(), "");
llSay(0,"Please tell me the desired updatetime in seconds.");
}
listen(integer cha, string name, key id, string msg)
{
gTime = (integer)msg;
llSay(0, "Time set.");
state default;
}
timer()
{
llSay(0,"Sorry, the request timed out.");
state default;
}
state_exit()
{
llSetTimerEvent(0);
llDialog(llGetOwner()," ",MENU,CHANNEL);
}
} </lsl>
Teleport via MapSet the description of the prim this script is attached to, to: SIMNAME/X/Y/Z <lsl> ////////////////////////////////////////////////////// // // // Teleport via Map // // released under // // Creative Commons Attribution-Share Alike 3.0 // // by Zai Lynch // // // ////////////////////////////////////////////////////// string simname; vector pos; integer touchStartTime;
init() { if (llGetObjectDesc() != "")
{
string desc = llGetObjectDesc();
simname = llGetSubString(desc,0,llSubStringIndex(desc,"/")-1);
desc = llGetSubString(desc,llSubStringIndex(desc,"/")+1,llStringLength(desc)+1);
integer x = (integer)llGetSubString(desc,0,llSubStringIndex(desc,"/")-1);
desc = llGetSubString(desc,llSubStringIndex(desc,"/")+1,llStringLength(desc)+1);
integer y = (integer)llGetSubString(desc,0,llSubStringIndex(desc,"/")-1);
desc = llGetSubString(desc,llSubStringIndex(desc,"/")+1,llStringLength(desc)+1);
integer z = (integer)llGetSubString(desc,0,llStringLength(desc)-1);
pos = <x,y,z>;
}
else
{
simname="Omidyar";
pos=<130,86,200>;
}
}
state_entry()
{
init();
}
touch_start(integer num_detected)
{
touchStartTime = llGetUnixTime();
}
touch_end(integer num_detected)
{
if (llGetUnixTime() > touchStartTime + 4)
{
llSay(0,"Resetting...");
init();
}
else
llMapDestination(simname, pos, <1,1,1> );
}
} </lsl>
BuzzerThis script is supposed to be used during meetings so a speaker isn't interrupted by questions while people can still indicate that they would like to speak. Up to 8 people might leave their indication by clicking the item where the script is attached to. Every name will only be listed once. Click and hold it clicked for more than 3 seconds to delete the upmost name. <lsl> ////////////////////////////////////////////////////// // // // zlBuzzer // // released under // // Creative Commons Attribution-Share Alike 3.0 // // by Zai Lynch // // // //////////////////////////////////////////////////////
string q0 = "User with questions:"; string q1 = ""; string q2 = ""; string q3 = ""; string q4 = ""; string q5 = ""; string q6 = ""; string q7 = ""; string q8 = ""; erase() { q1 = q2; q2 = q3; q3 = q4; q4 = q5; q5 = q6; q6 = q7; q7 = q8; q8 = ""; } add(string name) { if ((name != q1) && (name != q2) && (name != q3) && (name != q4) && (name != q5) && (name != q6) && (name != q7) && (name != q8)) if (q1=="") q1=name; else if (q2 == "") q2=name; else if (q3 == "") q3=name; else if (q4 == "") q4=name; else if (q5 == "") q5=name; else if (q6 == "") q6=name; else if (q7 == "") q7=name; else if (q8 == "") q8=name; }
state_entry()
{
llSetText(q0,<1,1,1>,1);
}
touch_start(integer total_number)
{
time = llGetUnixTime();
}
touch_end(integer num_detected)
{
if (llGetUnixTime() < time + 3)
add(llDetectedName(0));
else erase();
llSetText(q0+"\n"+q1+"\n"+q2+"\n"+q3+"\n"+q4+"\n"
+q5+"\n"+q6+"\n"+q7+"\n"+q8, <1,1,1>,1);
}
} </lsl> |
|