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>