Sample Babelswarm Scripts
Babeller Geyser
key requestid;
list letterList = [];
float offset = 1.5;
float upset = 0.6;
float yset = 0.6;
float dilation;
string currentBody = “”;
integer letterPos = 0;
integer letter;
integer rezParam;
integer MASK1 = 0xFF;
integer MASK2 = 0xFF00;
default {
state_entry() {
llShout(0,”Babel Hose Initialising!”);
state pause;
}
on_rez(integer rezno) {
llResetScript();
}
}
//end default
state check {
state_entry() {
llSetTimerEvent(0);
dilation = llGetRegionTimeDilation();
if(dilation<0.91) {
llOwnerSay(“Time dilation is
“+(string) dilation+”, waiting.”);
state wait;
}
requestid =
llHTTPRequest(“http://www.waystowave.com
/adam/secondlife/babelswarm/word
s_retrievedata_random.php”,
[HTTP_METHOD, “POST”,
HTTP_MIMETYPE, “application/xwww-
form-urlencoded”],
“caller=secondlife&words=babelswarm”);
}
http_response(key request_id, integer status, list metadata, string
body) {
if (request_id == requestid) {
currentBody = body;
llShout(0, body);
state babble;
}
}
//end http_request
touch_start(integer num) {
state pause;
}
}
//end state check
state babble {
state_entry(){
letterList=[];
letterPos = 0;
upset*= -1;
yset*= -1;
string newstring = llToLower(currentBody);
integer length = llStringLength(newstring);
integer i;
for(i=0;i<length;i++) {
offset+=0.75;
if(offset>9.75) {
offset = 1.5;
}
string nextLetter =
llGetSubString(newstring,i,i);
letterList = (letterList=[]) +
letterList + [nextLetter];
string thisLetter =
llList2String(letterList,i);
if(thisLetter != “ “) {
letterPos++;
if(thisLetter==”a”){letter=1;} if(thisLetter==”b”){letter=2;}
if(thisLetter==”c”){letter=3;} if(thisLetter==”d”){letter=4;}
if(thisLetter==”e”){letter=5;} if(thisLetter==”f”){letter=6;}
if(thisLetter==”g”){letter=7;} if(thisLetter==”h”){letter=8;}
if(thisLetter==”i”){letter=9;} if(thisLetter==”j”){letter=10;}
if(thisLetter==”k”){letter=11;} if(thisLetter==”l”){letter=12;}
if(thisLetter==”m”){letter=13;} if(thisLetter==”n”){letter=14;}
if(thisLetter==”o”){letter=15;} if(thisLetter==”p”){letter=16;}
if(thisLetter==”q”){letter=17;} if(thisLetter==”r”){letter=18;}
if(thisLetter==”s”){letter=19;} if(thisLetter==”t”){letter=20;}
if(thisLetter==”u”){letter=21;} if(thisLetter==”v”){letter=22;}
if(thisLetter==”w”){letter=23;} if(thisLetter==”x”){letter=24;}
if(thisLetter==”y”){letter=25;} if(thisLetter==”z”){letter=26;}
if(thisLetter==”0”){letter=27;} if(thisLetter==”1”){letter=28;}
if(thisLetter==”2”){letter=29;} if(thisLetter==”3”){letter=30;}
if(thisLetter==”4”){letter=31;} if(thisLetter==”5”){letter=32;}
if(thisLetter==”6”){letter=33;} if(thisLetter==”7”){letter=34;}
if(thisLetter==”8”){letter=35;} if(thisLetter==”9”){letter=36;}
if(thisLetter==”‘”){letter=37;} if(thisLetter==”,”){letter=38;}
if(thisLetter==”!”){letter=39;} if(thisLetter==”.”){letter=40;
}
if(thisLetter==”?”){
letter=41;
}
rezParam = (MASK1 &
letter) + (MASK2 & (letterPos << 8));
llRezObject(“letterPrim_geyser”,llGetPos
()+<offset,yset,upset>,ZERO_VECTO
R,ZERO_ROTATION,rezParam);
}
else {
letterPos = 0;
llRezObject(“space”,llGetPos()+<2,0,0>,
ZERO_VECTOR,ZERO_ROTATION,0);
}
}
//end for loop
letterList=[];
state check;
}
//end state_entry
on_rez(integer rezno) {
llResetScript();
}
touch_start(integer num) {
state pause;
}
}
//end state babble
state pause {
state_entry(){
llSetTimerEvent(0);
llShout(0,”Babel Geyser Off!”);
}
on_rez(integer rezno) {
llResetScript();
}
touch_start(integer num){
llShout(0,”Babel Geyser On!”);
state check;
}
}
state wait {
state_entry() {
llSetTimerEvent(10);
}
timer() {
state check;
}
on_rez(integer rezno) {
llResetScript();
}
touch_start(integer num) {
state pause;
}
}
Chat Listener
list letterList = [];
list users = [];
float offset = 1.5;
float upset = 0.6;
float yset = 0.6;
float dilation;
string currentBody = “”;
string userName;
string chat;
integer letterPos = 0;
integer letter;
integer letterColour;
integer tempColour;
integer rezParam;
integer MASK1 = 0xFF;
integer MASK2 = 0xFF00;
integer MASK3 = 0xFF0000;
integer count=0;
integer findUser;
integer colourSearch;
key user;
key requestid;
default {
state_entry() {
llShout(0, “Chat Listener Off”);
users=[];
}
touch_start(integer total_number) {
state listening;
}
on_rez(integer rezno) {
llResetScript();
}
}
state listening {
state_entry() {
//llShout(0, “Chat Listener On”);
//users=[];
llListen(-99,”chat_relay”,
NULL_KEY,”“);}
listen(integer chan,string name,key id,string msg) {
user = (key) llGetSubString(msg,0,35);
userName = llKey2Name((user));
findUser = llListFindList( users,
[user] );
if(findUser<0) {
users = (users=[]) + users + [user];
//this is ‘voodoo magic’ from wiki to
improve memory usage
@tryAgain;
tempColour=llFloor(llFrand(10));
colourSearch =
llListFindList(users,[tempColour]);
if(colourSearch<0) {
users =
(users=[])+users+[tempColour];
letterColour=tempColour;
}
else {
jump tryAgain;
}
}
else {
integer userColour =
llList2Integer(users,findUser+1);
letterColour = userColour;
}
//llShout(0, “Users: “+llDumpList2String(users,”,”));
chat = llGetSubString(msg,36,llStringLength
(msg));
//llShout(0, userName+” said: “+chat);
requestid =
llHTTPRequest(“http://www.waystowave
.com/adam/secondlife/babelswarm/inwo
rld_chat_data.php”,
[HTTP_METHOD, “POST”,
HTTP_MIMETYPE, “application/xwww-
form-urlencoded”],
“username=”+userName+”&message=”
+chat);
currentBody = chat;
state babble;
}
touch_start(integer total_number) {
llResetScript();
}
on_rez(integer rezno) {
llResetScript();
}
}
state babble {
state_entry(){
letterList = [];
dilation = llGetRegionTimeDilation();
if(dilation<0.91) {
state wait;
}
//llShout(0,currentBody);
letterPos = 0;
upset*= -1;
yset*= -1;
string newstring = llToLower(currentBody);
integer length = llStringLength(newstring);
integer i;
for(i=0;i<length;i++) {
offset+=1.25;
if(offset>10) {
offset = 1.5;
}
string nextLetter =
llGetSubString(newstring,i,i);
letterList = (letterList=[]) +
letterList + [nextLetter];
string thisLetter =
llList2String(letterList,i);
if(thisLetter != “ “) {
letterPos++;
if(thisLetter==”a”){letter=1;} if(thisLetter==”b”){letter=2;}
if(thisLetter==”c”){letter=3;} if(thisLetter==”d”){letter=4;}
if(thisLetter==”e”){letter=5;} if(thisLetter==”f”){letter=6;}
if(thisLetter==”g”){letter=7;} if(thisLetter==”h”){letter=8;}
if(thisLetter==”i”){letter=9;} if(thisLetter==”j”){letter=10;}
if(thisLetter==”k”){letter=11;} if(thisLetter==”l”){letter=12;}
if(thisLetter==”m”){letter=13;} if(thisLetter==”n”){letter=14;}
if(thisLetter==”o”){letter=15;} if(thisLetter==”p”){letter=16;}
if(thisLetter==”q”){letter=17;} if(thisLetter==”r”){letter=18;}
if(thisLetter==”s”){letter=19;} if(thisLetter==”t”){letter=20;}
if(thisLetter==”u”){letter=21;} if(thisLetter==”v”){letter=22;}
if(thisLetter==”w”){letter=23;} if(thisLetter==”x”){letter=24;}
if(thisLetter==”y”){letter=25;} if(thisLetter==”z”){letter=26;}
if(thisLetter==”0”){letter=27;} if(thisLetter==”1”){letter=28;}
if(thisLetter==”2”){letter=29;} if(thisLetter==”3”){letter=30;}
if(thisLetter==”4”){letter=31;} if(thisLetter==”5”){letter=32;}
if(thisLetter==”6”){letter=33;} if(thisLetter==”7”){letter=34;}
if(thisLetter==”8”){letter=35;} if(thisLetter==”9”){letter=36;}
if(thisLetter==”‘”){letter=37;} if(thisLetter==”,”){letter=38;}
if(thisLetter==”!”){letter=39;} if(thisLetter==”.”){letter=40;
}
if(thisLetter==”?”){
letter=41;
}
rezParam = (MASK1 &
letter) + (MASK2 & (letterPos <<
8)) + (MASK3 & (letterColour <<
16));
llRezObject(“letterPrim_chat”,
llGetPos()-<offset,yset,upset>,
ZERO_VECTOR, ZERO_ROTATION,
rezParam);
}
else {
letterPos = 0;
llRezObject(“space”,llGetPos()-
<offset,yset,upset>,ZERO_VECTOR,
ZERO_
ROTATION,0);
}
}
//end for loop
letterList=[];
state listening;
}
//end state_entry
on_rez(integer rezno) {
llResetScript();
}
touch_start(integer touchno) {
llResetScript();
}
}
//end state babble
state wait {
state_entry() {
llSetTimerEvent(10);
}
timer() {
state babble;
}
}
Translate Spawn
integer langChoice;
integer letterPos;
integer inc;
float upset;
float yset;
float offset;
integer letter;
integer rezParam;
integer MASK1 = 0xFF;
integer MASK2 = 0xFF00;
key requestid;
list letterList;
string currentBody;
string lang;
string text;
default {
state_entry() {
llListen(0,”“,NULL_KEY,”“);
letterList=[];
}
listen(integer chan,string name,key
id,string msg) {
if(llGetOwnerKey(id)==id)
//detect if speaker is agent, see
<http://forums.secondlife.com/
showthread.php?t=238069&page=1&pp=15>
{
text=msg;
langChoice=llFloor(llFrand(6));
if(langChoice==0){lang=”nl”;}if
(langChoice==1){lang=”fr”;}if
(langChoice==2){lang=”de”;}if
(langChoice==3)
{lang=”it”;}if(langChoice==4)
{lang=”pt”;}if(
langChoice==5){lang=”es”;}if
(langChoice==6){lang=”zh”;}if
(langChoice==7
){lang=”zt”;}if(langChoice==8)
{lang=”el”;}if(langChoice==9)
{lang=”ja”;}if(la
ngChoice==10){lang=”ko”;
}
if(langChoice==11){
lang=”ru”;
}
//if(langChoice==6){lang=”ar”;}
altavista doesn’t do arabic
requestid =
llHTTPRequest(“http://www.waystowave
.com/adam/secondlife/babelswarm/trans
late_av.php”,
[HTTP_METHOD, “POST”,
HTTP_MIMETYPE, “application/x-www
formurlencoded”],”
lp=en_”+lang+”&text=”+text);
//”+lang+”
// good test phrase: Very good! Isn’t
it like a blue wheeled dog melting
with sparrows in a pastry shop?
}
// end ownerKey if
//else { llOwnerSay(“Speaker is not
an agent.”);}
}
http_response(key request_id,
integer status, list metadata,
string body) {
if (request_id == requestid) {
string escape = llEscapeURL(body);
currentBody = escape;
state babble;
}
}
}
state babble {
state_entry(){
//llOwnerSay(“babble”);
letterPos = 0;
upset*= -1;
yset*= -1;
string newstring = llToLower(currentBody);
integer length = llStringLength(newstring);
integer i=0;
//for(i=0;i<length;i++) {
while(i<length) {
offset+=0.75;
if(offset>9.75) {
offset = 1.5;
}
string nextLetter =
llGetSubString(newstring,i,i);
if(nextLetter!=”%”) {
//not a special character
string thisLetter =
nextLetter;
letterList =
(letterList=[]) + letterList + [thisLetter];
letterPos++;
i++;
if(thisLetter==”a”){letter=1;} if(thisLetter==”b”){letter=2;}
if(thisLetter==”c”){letter=3;} if(thisLetter==”d”){letter=4;}
if(thisLetter==”e”){letter=5;} if(thisLetter==”f”){letter=6;}
if(thisLetter==”g”){letter=7;} if(thisLetter==”h”){letter=8;}
if(thisLetter==”i”){letter=9;} if(thisLetter==”j”){letter=10;}
if(thisLetter==”k”){letter=11;} if(thisLetter==”l”){letter=12;}
if(thisLetter==”m”){letter=13;} if(thisLetter==”n”){letter=14;}
if(thisLetter==”o”){letter=15;} if(thisLetter==”p”){letter=16;}
if(thisLetter==”q”){letter=17;} if(thisLetter==”r”){letter=18;}
if(thisLetter==”s”){letter=19;} if(thisLetter==”t”){letter=20;}
if(thisLetter==”u”){letter=21;} if(thisLetter==”v”){letter=22;}
if(thisLetter==”w”){letter=23;} if(thisLetter==”x”){letter=24;}
if(thisLetter==”y”){letter=25;} if(thisLetter==”z”){letter=26;}
if(thisLetter==”0”){letter=27;} if(thisLetter==”1”){letter=28;}
if(thisLetter==”2”){letter=29;} if(thisLetter==”3”){letter=30;}
if(thisLetter==”4”){letter=31;} if(thisLetter==”5”){letter=32;}
if(thisLetter==”6”){letter=33;} if(thisLetter==”7”){letter=34;}
if(thisLetter==”8”){letter=35;
}
if(thisLetter==”9”){
letter=36;
}
rezParam = (MASK1 &
letter) + (MASK2 & (letterPos << 8));
llRezObject(“letterPrim_trans”,
llGetPos()-
<offset,yset,upset>,ZERO_VECTOR,ZERO_
ROTATION,rezParam);
//llOwnerSay((string) thisLetter);
}
//end thisLetter!=”%” if
else if(nextLetter==”%”) {
//special charaacter
if(llGetSubString(newstring,i+1,i+1)
==”c”) // ‘c’ after ‘%’, therefore special
character
{
string
thisLetter = llGetSubString(newstring,i,i+5);
letterList
= (letterList=[]) + letterList + [thisLetter];
letterPos++;
i+=6;
if(thisLetter==”%c3%a1”){letter=42;} if(thisLetter==”%c3%a0”){letter=43;}
if(thisLetter==”%c3%a2”){letter=44;} if(thisLetter==”%c3%a4”){letter=45;}
if(thisLetter==”%c3%a3”){letter=46;} if(thisLetter==”%c3%a6”){letter=47;}
if(thisLetter==”%c3%a7”){letter=48;} if(thisLetter==”%c3%a9”){letter=49;}
if(thisLetter==”%c3%a8”){letter=50;} if(thisLetter==”%c3%aa”){letter=51;}
if(thisLetter==”%c3%ab”){letter=52;} if(thisLetter==”%c3%ad”){letter=53;}
if(thisLetter==”%c3%ac”){letter=54;} if(thisLetter==”%c3%ae”){letter=55;}
if(thisLetter==”%c3%af”){letter=56;}
if(thisLetter==”%c3%b1”){letter=57;}
if(thisLetter==”%c3%b3”){letter=58;}
if(thisLetter==”%c3%b2”){letter=59;} if(thisLetter==”%c3%b4”){letter=60;}
if(thisLetter==”%c3%b6”){letter=61;} if(thisLetter==”%c3%b5”){letter=62;}
if(thisLetter==”%c3%ba”){letter=63;} if(thisLetter==”%c3%b9”){letter=64;}
if(thisLetter==”%c3%bb”){letter=65;} if(thisLetter==”%c3%bc”){letter=66;
}
if(thisLetter==”%c3%bf”){
letter=67;
}
rezParam
= (MASK1 & letter) + (MASK2 &
(letterPos << 8));
llRezObject(“letterPrim_trans”,
llGetPos()-
<offset,yset,upset>,ZERO_VECTOR,
ZERO_ROTATION,rezParam);
//llOwnerSay((string) thisLetter);
}
//end llGetSubString “c” if;
else
if(llGetSubString(newstring,i+1,i+1)
==”2” ||
llGetSubString(newstring,i+1,i+1)
==”3”) //’2’ or ‘3’ after ‘%’,
therefore punctuation.
{
string
thisLetter = llGetSubString(newstring,i,i+2);
letterList
= (letterList=[]) + letterList + [thisLetter];
letterPos++;
i+=3;
if(thisLetter==”%27”){
letter=37;
}
//’
if(thisLetter==”%2C”){
letter=38;
}
//,
if(thisLetter==”%21”){
letter=39;
}
//!
if(thisLetter==”%2E”){
letter=40;
}
//.
if(thisLetter==”%3F”){
letter=41;
}
//?
rezParam
= (MASK1 & letter) + (MASK2 &
(letterPos << 8));
llRezObject(“letterPrim_trans”,
llGetPos()-
<offset,yset,upset>,ZERO_VECTOR,
ZERO_ROTATION,rezParam);
//llOwnerSay((string) thisLetter);
if(thisLetter==”%20”){
// space
llRezObject(“space”,llGetPos()-
<offset,yset,upset>,ZERO_VECTOR,
ZERO_ROTATION,0);
//llOwnerSay(“space”);
letterPos=0;
}
//end space if
}
//else for ‘2’ or ‘3’
}
//end ==% if
}
//end for loop
llSay(0,llUnescapeURL(newstring));
//llOwnerSay(llDumpList2String
(letterList,”,”));
//llOwnerSay(llUnescapeURL
(llDumpList2String(letterList,”“)));
letterList=[];
state default;
}
//end state_entry
on_rez(integer rezno) {
llResetScript();
}
}
//end state babble