// (C) 2008 Leben Schnabel - not for commercial purposes without written consent integer OldListener; warpPos(vector d) { integer jumps = (integer)(llVecDist(d, llGetPos()) / 10.0) + 1; if (jumps > 100) jumps = 100; list rules = [PRIM_POSITION, d]; integer count = 1; while ((count = count << 1 ) < jumps) rules = (rules=[]) + rules + rules; llSetPrimitiveParams(rules + llList2List( rules, (count - jumps) << 1, count)); while (llVecDist(llGetPos(), d) > .001) llSetPos(d); } default { on_rez(integer Channel) { llListenRemove(OldListener); llListen(Channel, "", "", ""); } listen(integer Chan, string Name, key ID, string Data) { list Temp = llParseString2List(Data, ["^"], []); integer i; list PrimData; for (i = 0; i < llGetListLength(Temp); ++i) { list Parse = llParseString2List(llList2String(Temp, i), [";"], []); if (llList2String(Parse, 0) == ".Pos") {warpPos(llGetPos() + (vector)llList2String(Parse, 1));} if (llList2String(Parse, 0) == ".Scale") {PrimData = (PrimData=[]) + PrimData + [PRIM_SIZE, (vector)llList2String(Parse, 1)];} if (llList2String(Parse, 0) == ".Rot") {PrimData = (PrimData=[]) + PrimData + [PRIM_ROTATION, (rotation)llList2String(Parse, 1)];} if (llList2String(Parse, 0) == ".Sculpt") { if (llList2String(Parse, 2) == "Spheric") {PrimData = (PrimData=[]) + PrimData + [PRIM_TYPE, PRIM_TYPE_SCULPT, (key)llList2String(Parse, 1), PRIM_SCULPT_TYPE_SPHERE];} else if (llList2String(Parse, 2) == "Plane") {PrimData = (PrimData=[]) + PrimData + [PRIM_TYPE, PRIM_TYPE_SCULPT, (key)llList2String(Parse, 1), PRIM_SCULPT_TYPE_PLANE];} else if (llList2String(Parse, 2) == "Cylinder") {PrimData = (PrimData=[]) + PrimData + [PRIM_TYPE, PRIM_TYPE_SCULPT, (key)llList2String(Parse, 1), PRIM_SCULPT_TYPE_CYLINDER];} } if (llList2String(Parse, 0) == ".Texture") { PrimData = (PrimData=[]) + PrimData + [PRIM_TEXTURE, ALL_SIDES, (key)llList2String(Parse, 1), <1, 1, 0>, <0, 0, 0>, PI]; } if (llList2String(Parse, 0) == ".Name") {llSetObjectName(llList2String(Parse, 1));} } llSetPrimitiveParams(PrimData); llRemoveInventory(llGetScriptName()); } }