//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; } }