User:ANSI Soderstrom/Misc useful functions
Jump to navigation
Jump to search
Leave a comment
Misc useful functions
Some are useful, some not...
<lsl>
// modify a string in ANSI-C style // returns a string with all replacements for "modifier".... based on the equivalent positions in the list-content string printf(string sentence, list insertation) {
string modifier = "%s"; if(llGetListLength(insertation)) { integer i; integer match; for(i=0;i<llGetListLength(insertation);++i) { match = llSubStringIndex(sentence,modifier); if(~match) { sentence = llDeleteSubString(sentence,match,match+llStringLength(modifier)-1); sentence = llInsertString(sentence,match,llList2String(insertation,i)); } } return sentence; } return "Error, the insertation list is empty!\n(sentence: " + sentence + ")";
}
default {
state_entry() { llOwnerSay(printf("Hello %s, How %s you?\n%s is a number.",["Avatar","are",3])); // Output: // Hello Avatar, How are you? // 3 is a number. }
} </lsl>
Multiple Timers in only one Script
<lsl> // use more than one timer in a script // by ANSI Soderstrom
// holds the timers list timers = [];
// the timer itself, call it with his name and the order to stop or not after reaching the timer time(string name, integer stopafter) {
integer pos = llListFindList(timers,[name]); if(~pos) { if(!((integer)llGetTime()%llList2Integer(timers, pos+1))) { llMessageLinked(llGetLinkNumber(),1,llList2String(timers,pos),""); if(stopafter) { timers = llDeleteSubList(timers, pos, pos+1); } } }
}
// set a timer, give it a name and a time set_timer(string name, integer time) {
integer pos = llListFindList(timers,[name]); if(~pos) { timers = llListReplaceList(timers,[name, time],pos,pos+1); } else { timers += [name, time]; }
}
// start the timers start_timers() {
llResetTime(); llSetTimerEvent(1);
}
default {
state_entry() { set_timer("timer1",10); set_timer("timer2",20); start_timers(); } timer() { time("timer1",TRUE); time("timer2",FALSE); } link_message(integer link_num, integer num, string str, key id) { if(num == 1) { if(str == "timer1") { llOwnerSay("Doing this"); } if(str == "timer2") { set_timer("timer1",10); llOwnerSay("and this"); } } }
} </lsl>