Drop this script and up to 22 sounds into a prim. Users select sound by touch menu and sound plays. Can adjust sound volume.
//Drop this script into an object with up to 22 sound files inside.
//When anyone Touches they will get a menu with all the sounds available. Button names in menu will be first 10 characters from that item's name.
//NOTE: Sound Names may not exceed 25 characters or script error and menu fails.
float volume = 1.0; //1.0 is full volume, .5 is half volume, etc.
list sound_list;
list sound_list2;
key user = NULL_KEY;
composelist()
{
integer currentsound = 0;
integer totalsounds = llGetInventoryNumber(INVENTORY_SOUND);
if(totalsounds > 0 & totalsounds <= 12)
{
sound_list = [];
do
{
sound_list = sound_list + llGetInventoryName(INVENTORY_SOUND, currentsound);
currentsound++;
}
while (currentsound > 0 & currentsound < totalsounds);
}
if(totalsounds > 12 & totalsounds <= 22)
{
sound_list = ["Next Page"];
do
{
sound_list = sound_list + llGetInventoryName(INVENTORY_SOUND, currentsound);
currentsound++;
}
while (currentsound > 0 & currentsound < 11);
sound_list2 = ["Last Page"];
do
{
sound_list2 = sound_list2 + llGetInventoryName(INVENTORY_SOUND, currentsound);
currentsound++;
}
while (currentsound >= 11 & currentsound < totalsounds);
}
if(totalsounds > 22)
{
llWhisper(0, "You may only have a maximimum of 22 Sounds. Please remove any extra ones.");
}
if(totalsounds == 0)
{
llWhisper(0, "Please add up to 22 Sounds.");
}
}
//The Menu
integer menu_handler;
integer menu_channel;
menu(key user,string title,list sound_list)
{
menu_channel = (integer)(llFrand(99999.0) * -1); //random channel
menu_handler = llListen(menu_channel,"","","");
llDialog(user,title,sound_list,menu_channel);
llSetTimerEvent(30.0); //menu channel open for 30 seconds
}
default
{
state_entry()
{
composelist(); //make list from inventory sounds
}
touch_start(integer total_number)
{
user = llDetectedKey(0);
menu(user,"nnPlease select one below.",sound_list);
}
listen(integer channel,string name,key id,string message)
{
if (channel == menu_channel)
{
llSetTimerEvent(0.0);
llListenRemove(menu_handler);
if(message == "Next Page")
{
menu(user,"nnPlease select one below.",sound_list2);
}
else if(message == "Last Page")
{
menu(user,"nnPlease select one below.",sound_list);
}
else
{
llPlaySound(message, volume);
}
}
}
timer() //Close the Menu Listen or we'll get laggy
{
llSetTimerEvent(0.0);
llListenRemove(menu_handler);
}
changed(integer change)
{
if (change & CHANGED_INVENTORY) //inventory has changed
{
llSleep(0.5);
composelist(); //rebuild the list
}
}
}