/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // // rights of fair usage, the disclaimer and warranty conditions. // /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // Copyright (C) 2013 Wizardry and Steamworks - License: GNU GPLv3 // /////////////////////////////////////////////////////////////////////////// string wasKeyValueGet(string var, string kvp) { list dVars = llParseString2List(kvp, ["&"], []); do { list data = llParseString2List(llList2String(dVars, 0), ["="], []); string k = llList2String(data, 0); if(k != var) jump continue; return llList2String(data, 1); @continue; dVars = llDeleteSubList(dVars, 0, 0); } while(llGetListLength(dVars)); return ""; } /////////////////////////////////////////////////////////////////////////// // Copyright (C) 2013 Wizardry and Steamworks - License: GNU GPLv3 // /////////////////////////////////////////////////////////////////////////// string wasKeyValueSet(string var, string val, string kvp) { list dVars = llParseString2List(kvp, ["&"], []); if(llGetListLength(dVars) == 0) return var + "=" + val; list result = []; do { list data = llParseString2List(llList2String(dVars, 0), ["="], []); string k = llList2String(data, 0); if(k == "") jump continue; if(k == var && val == "") jump continue; if(k == var) { result += k + "=" + val; val = ""; jump continue; } string v = llList2String(data, 1); if(v == "") jump continue; result += k + "=" + v; @continue; dVars = llDeleteSubList(dVars, 0, 0); } while(llGetListLength(dVars)); if(val != "") result += var + "=" + val; return llDumpList2String(result, "&"); } integer totalPaid = 0; default { touch_start(integer num) { totalPaid = 0; llSetObjectDesc(wasKeyValueSet("total", "0", llGetObjectDesc())); llSetObjectDesc(wasKeyValueSet("key", llDetectedKey(0), llGetObjectDesc())); state enter; } } state enter { state_entry() { integer comChannel = (integer)("0x8" + llGetSubString(llGetOwner(), 0, 6)); key a = wasKeyValueGet("key", llGetObjectDesc()); llListen(comChannel, "", a, ""); llTextBox(a, "\nPlease enter product price:\n", comChannel); } touch_start(integer num) { key a = wasKeyValueGet("key", llGetObjectDesc()); if(a != llDetectedKey(0)) return; integer comChannel = (integer)("0x8" + llGetSubString(llGetOwner(), 0, 6)); llListen(comChannel, "", a, ""); llDialog(a, "Enter another product?", [ "Yes", "No" ], comChannel); } listen(integer channel, string name, key id, string message) { if(message == "Yes") { llTextBox(id, "\nPlease enter product price:\n", channel); return; } if(message == "No") jump final; llSetObjectDesc(wasKeyValueSet("total", (string)((integer)message+(integer)wasKeyValueGet("total", llGetObjectDesc())), llGetObjectDesc())); llDialog(id, "Enter another product?", [ "Yes", "No" ], channel); return; @final; state open; } } state open { state_entry() { llSay(0, "The cashier is now open. The total amount the customer should pay: " + wasKeyValueGet("total", llGetObjectDesc())); //<-.20016, -.20799, -.10421> llSetLinkPrimitiveParams(2, [PRIM_POS_LOCAL, <.303145,.101628,-.000883>]); } touch_start(integer num) { state closed; } } state closed { state_entry() { llSetTimerEvent(1); } timer() { llSay(0, "Thank you for your patronage."); //<.07118, .07443, .10420> llSetLinkPrimitiveParams(2, [PRIM_POS_LOCAL, <.101338,.101619,-.000876>]); state default; } }