User:Kuraiko Yoshikawa/sandbox/LSL Goodies/KVNSB
Sandbox SL Chatlog Wikifier | Kurai's LSL Goodies | Zai's LSL Goodies Lovely Stuff Zai's Page
Intro
Inspired by Zai's LSL Goodies I will publish from time to time some (helpfull) scripts.
I'm not a LSL Guru but all scripts are tested and I hope they're working fine. o.o
Since these are contributions to the SL Wiki, all scripts are released under Creative Commons Attribution-Share Alike 3.0 License. KVNSB (Kuraiko's VendorBox is not a Simple Box :P)
Summary:
The KVNSB can sell anything! No matter if you're selling scripts (set them not running to avoid complications with the vendors scripts), notecards, landmarks, bodyparts, textures, gestures or sounds O_O. It sells anything except freebies XD (might be released in a future workaround). The price got to be set to at least 1L$.
What is the KVNSB able to do beside selling anything?
This might be the most important features (IMHO)! If you'd like to restart the KVNSB (e.g. because you denied the permission debit request or changed the inventory (after an inventory change you GOT to restart the KVNSB or the script won't know about the new items!)) just press the prim and hold it pressed for at least 5 seconds. The Main Script (.VEND) integer gPrice = 10; // set the price of the product in L$ string gFolder = "Advanced Vendor Box"; // set the name of folder you'd like to see // created in the customers inventory o.o integer gNotify = TRUE; // if you'd like to get a notification when an item is purchased // then set this value to TRUE (the box will send you a mail) string gMail = "foobar@example.com"; // is notify TRUE then set your mail addy here string gNoteCard = ""; // have you got an info notecard? Set the name of it. // You have no info notecard? Leave it blank //(example: string gNoteCard = "";) integer gGiveNC = FALSE; // Give the notecard with other inventory // content to the customer? When YES set it to TRUE // otherwise notecard is only for information on touch // set a hover text... leave it blank for no hover! (i hate hover text o.O) (\n = new line) string gHover = "I'm a KVNSB test box\nTouch me hard :P\nBuy me!!!\nPlease *_*"; vector gHoverColor = <255,255,255>; // set the hovertext color in RGB values (example: <255,255,255> for white) //-------------------\\ // Advance Variables \\ //-------------------\\ integer gMailScripts = 5; // How many .MAIL <ID> scripts are in the PRIM inventory? //-------------------\\ // No Edit Variables \\ //-------------------\\ integer gPerms = FALSE; integer gTime; list gInventory; integer gListLength; integer gAktMail = 1; default { run_time_permissions(integer perm) { if (perm & 0x2) { gPerms = TRUE; state createInventory; } else { llSetText("Offline", <1,0,0>, 1.0); } } state_entry() { llSetText("Please Accept PERMISSION DEBIT", <0,1,0>, 1.0); if(!gNotify) gNotify = 0; if (llGetInventoryNumber(-1) > 1 + gMailScripts) llRequestPermissions(llGetOwner(), 0x2); else llSetText("Offline ~ Nothing @ Inventory o.O", <1,0,0>, 1.0); llResetTime(); } touch_start (integer t) { if (llDetectedKey(0) == llGetOwner()) { gTime = llGetUnixTime(); } } touch(integer t) { if (llDetectedKey(0) == llGetOwner()) { if (llGetUnixTime()-gTime > 5) { llResetScript(); } } } } state createInventory { state_entry() { llSetText("Read Inventory", <1,0.5,0>, 1.0); integer length = llGetInventoryNumber(-1); integer x; for (x = 0; x < length; x++) { if(llGetInventoryName(-1, x) == llGetScriptName()) { } else if (gNoteCard != "" && gGiveNC == TRUE && llGetInventoryName(-1, x) == gNoteCard) { gInventory += gNoteCard; } else { if (llGetInventoryName(-1, x) == gNoteCard || llGetSubString(llGetInventoryName(-1, x), 0, 5) == ".MAIL " ) { } else gInventory += llGetInventoryName(-1, x); } } state online; } } state online { state_entry() { llSetText(gHover, gHoverColor/255, 1.0); llSetPayPrice(gPrice, [gPrice, -1, -1]); } money(key giver, integer amount) { if (amount == gPrice) { llGiveInventoryList(giver, gFolder, gInventory); llWhisper(0, "Thanks " + llKey2Name(giver) + "!"); if (gAktMail == gMailScripts) gAktMail = 1; if(gNotify) { llMessageLinked(LINK_THIS, gAktMail, "[PURCHASER]: " + llKey2Name(giver) + "\n[PURCHASED ITEMS]: " + llList2CSV(gInventory), (key)gMail); ++gAktMail; }
} else if (amount > gPrice) { integer back = amount - gPrice; llGiveInventoryList(giver, gFolder, gInventory); llMessageLinked(LINK_THIS, 22, "You have payed too much. The excess amount will be refunded to you.", giver); llWhisper(0, "You have payed to much. The excess amount will be refunded to you."); llGiveMoney(giver, back); if (gAktMail == gMailScripts) gAktMail = 1; if(gNotify) { llMessageLinked(LINK_THIS, gAktMail, "[PURCHASER]: " + llKey2Name(giver) + "\n[PURCHASED ITEMS]: " + llList2CSV(gInventory), (key)gMail); ++gAktMail; } } else { llMessageLinked(LINK_THIS, 20, "Sorry, it's not enough.", giver); llWhisper(0, "Sorry, it's not enough."); llGiveMoney(giver, amount); } } touch_start(integer t) { if (llDetectedKey(0) == llGetOwner()) { gTime = llGetUnixTime(); } else { if(gNoteCard != "" && ~llGetInventoryType(gNoteCard) ) { llGiveInventory(llDetectedKey(0), gNoteCard); } else { llWhisper(0, "Sorry no information for this item found."); } } } touch(integer t) { if (llDetectedKey(0) == llGetOwner()) { if (llGetUnixTime()-gTime > 5) { llResetScript(); } } } } </lsl>
The Mail Script (.MAIL ID (example: .MAIL 01 (this format is very important!!! > "(dot)MAIL whitespace number" begin by one) default { state_entry() { gID = (integer)llGetSubString(llGetScriptName(), 5, -1); } link_message(integer send_num, integer num, string lmsg, key id) { if (num == gID) { llEmail(id, "[SOLD]: " + llGetObjectName(), lmsg); } } } </lsl> |
Sandbox SL Chatlog Wikifier | Kurai's LSL Goodies | Zai's LSL Goodies Lovely Stuff Zai's Page |