User:Cow Taurog/Walk sound
Jump to navigation
Jump to search
This script will loop a sound while you're pressing the forward key (walking). Drop it into any attachment. Click it to toggle on/off, hold to bring up a menu of loops to choose from. If you add/remove loops, the name and the key for that song must be in the same position in both of the lists. <lsl> // -Options- list glNames=[
"Jump", "Insane", "Rollout", "Purple", "Blueberry", "Stand up"]; // List of menu buttons
list glKeys=[
"4b41e5b0-effa-5183-8247-488b67f9349e", "e3be4540-8d19-2f20-ad19-66929c6419a3", "9b004577-b55c-2459-2a0c-eaaf0ae786ab", "e2eba00c-0556-6d33-f4e7-54626b502c1e", "674ce8ee-9e64-238a-e695-19c3ee8d8527", "3eaa225b-d9d2-6d83-c41e-0f9091584ab0"]; // List of sound UUIDs
float gfHold=2; // How long to click and hold for the menu (default is 2) float gfVol=1; // Volume (default is 1)
// -Declarations- integer listen0; // Listen handle integer giChan; // Menu channel integer giHold; // Counter key gkSound; // Selected sound
// -Default state- default{
on_rez(integer param){llResetScript();} changed(integer change){if(change&CHANGED_OWNER){llResetScript();}} state_entry(){llStopSound();gkSound=llList2Key(glKeys,0);state waiting;}
}
// -Waiting state- state waiting{
on_rez(integer param){llResetScript();} changed(integer change){if(change&CHANGED_OWNER){llResetScript();}} state_entry(){ giChan=llRound(llFrand((3000-1000)+3000)); llStopSound(); llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS); } run_time_permissions(integer perm){if(perm&PERMISSION_TAKE_CONTROLS){llTakeControls(CONTROL_FWD,TRUE,TRUE);}} control(key id,integer level,integer edge){integer pressed=level&edge;if(pressed&CONTROL_FWD){state running;}} touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){giHold=FALSE;llSetTimerEvent(gfHold);}} touch_end(integer num){if(giHold==FALSE){llSetTimerEvent(0);state off;}} timer(){ giHold=TRUE; llSetTimerEvent(0); listen0=llListen(giChan,"",llGetOwner(),""); llDialog(llGetOwner(),"Pick a sound...",glNames,giChan); } listen(integer chan,string name,key id,string mess){ gkSound=llList2Key(glKeys,llListFindList(glNames,[mess])); llListenRemove(listen0); }
}
// -Running state- state running{
on_rez(integer param){llResetScript();} changed(integer change){if(change&CHANGED_OWNER){llResetScript();}} state_entry(){llLoopSound(gkSound,gfVol);llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS);} run_time_permissions(integer perm){if(perm&PERMISSION_TAKE_CONTROLS){llTakeControls(CONTROL_FWD,TRUE,TRUE);}} control(key id,integer level,integer edge){integer released=~level&edge;if(released&CONTROL_FWD){state waiting;}} touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){giHold=FALSE;llSetTimerEvent(gfHold);}} touch_end(integer num){if(giHold==FALSE){llSetTimerEvent(0);state off;}} timer(){ giHold=TRUE; llSetTimerEvent(0); listen0=llListen(giChan,"",llGetOwner(),""); llDialog(llGetOwner(),"Pick a sound...",glNames,giChan); } listen(integer chan,string name,key id,string mess){ gkSound=llList2Key(glKeys,llListFindList(glNames,[mess])); llListenRemove(listen0); }
} // -Off state- state off{
on_rez(integer param){llResetScript();} changed(integer change){if(change&CHANGED_OWNER){llResetScript();}} state_entry(){llStopSound();} touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){giHold=FALSE;llSetTimerEvent(gfHold);}} touch_end(integer num){if(giHold==FALSE){llSetTimerEvent(0);state waiting;}} timer(){ giHold=TRUE; llSetTimerEvent(0); listen0=llListen(giChan,"",llGetOwner(),""); llDialog(llGetOwner(),"Pick a sound...",glNames,giChan); } listen(integer chan,string name,key id,string mess){ gkSound=llList2Key(glKeys,llListFindList(glNames,[mess])); llListenRemove(listen0); }
} </lsl>