//Dialog Based sounds vendor by Kenny Jackson
//NOTES:
//1.) All sounds in the vendor will have the same price.
//2.) Set the price by changing the vendor description.
//(example. If you want the price of all the sounds in the vendor to be L$50 set the vendor description to 50.)
//3.) After adding new sounds to the vendor or changing the price or vendor name hit the RESET button to update the script. Only the owner will see the RESET button.
//4.) Just drop this script and the sounds your selling into a prim
//5.) Click the prim to get the dialog.
//6.) If your going to have more than 1 of these in a small area make sure to have a different channel number on each of them or all the vendors in the area will respond to the others dialogs.
//Kenny Jackson
integer price;
string wrong = "Sorry, that is not the correct price";
string over = "You have overpaid, here is your change";
string thank = "Thank you for your purchase";
integer finished = FALSE;
integer n = 0;
integer i;
list sounds;
integer CHANNEL = 123456;
string soundName;
string GNAME;
string Vname;
default
{
state_entry()
{
while(!finished)
{
soundName = llGetInventoryName(INVENTORY_SOUND, n);
if(soundName == "")
{
finished = TRUE;
Vname = llGetObjectName();
price = (integer)llGetObjectDesc();
state debtperm;
}
else
{
sounds = sounds + soundName;
n++;
}
}
}
}
state debtperm
{
state_entry()
{
//Do some initialization here
llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
}
run_time_permissions(integer permissions)
{
//Only wait for payment if the owner agreed to pay out money
if (permissions)
{
llSetText("Initailized Successfully...", <0,1,0>,1);
state next;
}
}
}
state ready
{
on_rez(integer start_param)
{
llResetScript();
}
state_entry()
{
GNAME = llList2String(sounds, i);
llListen(CHANNEL, "", "", "");
}
listen(integer channel, string name, key id, string message)
{
if(channel == CHANNEL && message == "Reset")
{
llSetText("Resetting...", <1,0,0>, 1);
llResetScript();
}
if(channel == CHANNEL && message == "Next")
{
i++;
if(i >= n)
{
i = 0;
state next;
}
else
{
state next;
}
}
if(channel == CHANNEL && message == "Back")
{
i--;
if(i < 0)
{
i = n - 1;
state next;
}
else
{
state next;
}
}
if(channel == CHANNEL && message == "Play")
{
llPlaySound(GNAME, 1);
state next;
}
}
touch_start(integer total_number)
{
if(llDetectedKey(0) == llGetOwner())
{
llDialog(llDetectedKey(0),"1.) Choose Next/Back to scroll through sounds.\n2.) Press Play to hear a sound.\n3.) Right Click and Pay to buy!", ["Back", "Next", "Play", "Reset"], CHANNEL);
}
else
{
llDialog(llDetectedKey(0),"1.) Choose Next/Back to scroll through sounds.\n2.) Press Play to hear a sound.\n3.) Right Click and Pay to buy!", ["Back", "Next", "Play"], CHANNEL);
}
}
money(key id, integer amount)
{
if(amount < price)
{
llSay(0, wrong);
llGiveMoney(id, amount);
}
if(amount > price)
{
llSay(0, over);
llGiveMoney(id, amount - price);
llGiveInventory(id, GNAME);
}
if(amount == price)
{
llSay(0, thank);
llGiveInventory(id, GNAME);
}
}
}
state next
{
state_entry()
{
GNAME = llList2String(sounds, i);
llSetText(".:" + Vname + ":.\nClick for a dialog!\nSound Name: " + GNAME + "\nPrice: L$" + (string)price, <1,1,1>, 1);
state ready;
}
}