/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2011 - License: GNU GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // // rights of fair usage, the disclaimer and warranty conditions. // /////////////////////////////////////////////////////////////////////////// string pupData; key pQuery; integer line; list pos = []; list rot = []; default { state_entry() { if(llGetInventoryType("Puppet") != INVENTORY_NOTECARD) { llSay(DEBUG_CHANNEL, "Could not find a notecard named Puppet"); return; } pQuery = llGetNotecardLine("Puppet", line); } dataserver(key query_id, string data) { if (query_id != pQuery) return; if (data == EOF) { list tPup = llParseString2List(pupData, ["[K]"], [""]); pos = llParseString2List(llList2String(tPup, 0), ["#"], [""]); rot = llParseString2List(llList2String(tPup, 1), ["#"], [""]); // GC pupData = ""; return; } if(data == "") jump next; pupData += data; @next; pQuery = llGetNotecardLine("Puppet", ++line); } touch_start(integer num) { state start; } on_rez(integer num) { llResetScript(); } changed(integer change) { if(change & CHANGED_INVENTORY) llResetScript(); } } state start { state_entry() { llSetTimerEvent(1); } touch_start(integer num) { state stop; } timer() { vector p = (vector)llList2String(pos, 0); pos = llDeleteSubList(pos, 0, 0); pos += p; rotation r = (rotation)llList2String(rot, 0); rot = llDeleteSubList(rot, 0, 0); rot += r; llSetPos(p); llSetLocalRot(r); } on_rez(integer num) { llResetScript(); } changed(integer change) { if(change & CHANGED_INVENTORY) llResetScript(); } } state stop { touch_start(integer num) { state start; } }