// Tessel Job part {k} of {n} for "{name}": generated by bridge/slbuild.py, deletes itself after use. // Template: life/making/builder/job_part.lsl (slbuild fills in the braces). The node drives parts // with link messages: "hello" -> "hi|K|", "apply|K" -> "applied|K|", "abort". // Lines: L| starts a link; P||... are llSetLinkPrimitiveParamsFast values // (i int, f float, v vector, r rotation, s %-escaped string, k key, + continues a string). list J = [ {lines} ]; integer K = {k}; list dec(string line) { list raw = llParseStringKeepNulls(line, ["|"], []); list out; integer n = llGetListLength(raw); integer i; for (i = 1; i < n; ++i) { string t = llList2String(raw, i); string c = llGetSubString(t, 0, 0); string v = llDeleteSubString(t, 0, 0); if (c == "i") out += (integer)v; else if (c == "f") out += (float)v; else if (c == "v") out += (vector)v; else if (c == "r") out += (rotation)v; else if (c == "s") out += llUnescapeURL(v); else if (c == "k") out += (key)v; else if (c == "+") out = llListReplaceList(out, [llList2String(out, -1) + llUnescapeURL(v)], -1, -1); } return out; } flush(integer link, list p) { if (link < 1 || p == []) return; if (link == 1 && llGetObjectPrimCount(llGetKey()) == 1) link = LINK_THIS; llSetLinkPrimitiveParamsFast(link, p); } default { link_message(integer s, integer num, string m, key id) { if (num != 7340) return; if (m == "hello") llMessageLinked(LINK_THIS, 7341, "hi|" + (string)K + "|" + llList2String(J, 0), ""); else if (m == "apply|" + (string)K) { integer link; integer count; list p; while (J != []) { string line = llList2String(J, 0); J = llDeleteSubList(J, 0, 0); string op = llGetSubString(line, 0, 0); if (op == "L") { flush(link, p); p = []; link = (integer)llGetSubString(line, 2, -1); ++count; } else if (op == "P") p += dec(line); } flush(link, p); llMessageLinked(LINK_THIS, 7341, "applied|" + (string)K + "|" + (string)count, ""); llRemoveInventory(llGetScriptName()); } else if (m == "abort") llRemoveInventory(llGetScriptName()); } }