/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2014 - 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) 2014 Wizardry and Steamworks - License: GNU GPLv3 // /////////////////////////////////////////////////////////////////////////// string wasKeyValueSet(string k, string v, string data) { if(llStringLength(k) == 0) return ""; if(llStringLength(v) == 0) return ""; if(llStringLength(data) == 0) return k + "=" + v; integer i = llListFindList( llList2ListStrided( llParseString2List(data, ["&", "="], []), 0, -1, 2 ), [ k ]); if(i != -1) return llDumpList2String( llListReplaceList( llParseString2List(data, ["&"], []), [ k + "=" + v ], i, i), "&"); return data + "&" + k + "=" + v; } string DIALOG_PREAMBLE = "\n Welcome to the Visitor Tracker.\nCreated in 2014 by Wizardry and Steamworks\n 26 July 2014: Version: 1.0"; resetScripts() { integer i = llGetInventoryNumber(INVENTORY_SCRIPT)-1; do { string name = llGetInventoryName(INVENTORY_SCRIPT, i); if(name == llGetScriptName()) jump continue; llResetOtherScript(name); @continue; } while(--i>-1); } default { touch_start(integer total_number) { key agent = llDetectedKey(0); // Owner-only access. if(agent != llGetOwner()) return; integer channel = (integer)("0x8" + llGetSubString(llGetKey(), 0, 6)); llListen(channel, "", agent, ""); llDialog(agent, DIALOG_PREAMBLE, ["⎙ Mode", "⎌ Reset"], channel); } listen(integer channel, string name, key agent, string message) { if(message == "⎌ Reset") { resetScripts(); llResetScript(); return; } if(message == "⎙ Mode") { llDialog(agent, DIALOG_PREAMBLE, ["☍ Region", "◦ Sensor", "⏏ Exit"], channel); return; } if(message == "☍ Region") { llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_DESC, wasKeyValueSet("mode", "region", llList2String(llGetLinkPrimitiveParams(LINK_THIS, [PRIM_DESC]), 0))]); resetScripts(); return; } if(message == "◦ Sensor") { llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_DESC, wasKeyValueSet("mode", "sensor", llList2String(llGetLinkPrimitiveParams(LINK_THIS, [PRIM_DESC]), 0))]); llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_DESC, wasKeyValueSet("range", "2", llList2String(llGetLinkPrimitiveParams(LINK_THIS, [PRIM_DESC]), 0))]); llDialog(agent, DIALOG_PREAMBLE, ["⏏ Exit", "2m", "4m", "8m", "16m", "32m", "64m", "96m"], channel); return; } // range for sensor if(llSubStringIndex(message, "m") == -1) return; integer range = (integer)message; llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_DESC, wasKeyValueSet("range", (string)range, llList2String(llGetLinkPrimitiveParams(LINK_THIS, [PRIM_DESC]), 0))]); resetScripts(); } on_rez(integer num) { llResetScript(); } }