From 10e2f77d57ecc5e306900b112d70c2600f941ae4 Mon Sep 17 00:00:00 2001 From: onefang Date: Mon, 6 Sep 2021 21:15:36 +1000 Subject: Various common tweaks. New instant message logger. Check if a prim still exists before sending it a message. New dynamic menu return option. Check menu commands at startup. --- 1AOor2.lsl | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1chatter.lsl | 73 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1ring.lsl | 50 +++++++++++++++++++++++++++++++-------- 3 files changed, 173 insertions(+), 27 deletions(-) diff --git a/1AOor2.lsl b/1AOor2.lsl index 111a3d5..e336ab7 100644 --- a/1AOor2.lsl +++ b/1AOor2.lsl @@ -45,6 +45,8 @@ integer lSUBSTITUTE = -7; integer lSUBSTITUTE_DONE = -8; integer lNEXT_WORD = -9; integer lNEXT_WORD_DONE = -10; +integer lCHECK = -11; +integer lCHECK_DONE = -12; integer lCONTROL = -13; integer lCONTROL_DONE = -14; integer lCMD = -15; @@ -64,6 +66,7 @@ d(string m) {if (DEBUG) llInstantMessage(Owner, llGetScriptName() + ": " + m);} D(string m) {llRegionSay(DEBUG_CHANNEL, llGetScriptName() + ": " + m);} s(string m) {s(Owner, m);} s(key id, string m) {if (id == Owner) llOwnerSay(m); else llInstantMessage(id, m);} +S(string m) {llInstantMessage(Owner, llGetScriptName() + ": " + m);} sendScript(integer cmd, list args) {sendScript(LibraryKey, cmd, ScriptName, args);} sendScript(key them, integer cmd, list args) {sendScript(them, cmd, inKey2Name(them), args);} sendScript(integer cmd, string name, list args) {sendScript(LibraryKey, cmd, name, args);} @@ -71,9 +74,16 @@ sendScript(key them, integer cmd, string name, list args) { llMessageLinked(LINK_SET, cmd, llDumpList2String([ScriptKey, name] + args, lSEP), them); } +integer pingPrim(key k) +{ + if (NULL_KEY != k) + return (0 != llGetListLength(llGetObjectDetails(k, [OBJECT_DESC]))); + return FALSE; +} sendPrim(key them, string cmd, list args) { - osMessageObject(them, llDumpList2String([ScriptName, cmd] + args, lSEP)); + if (pingPrim(them)) + osMessageObject(them, llDumpList2String([ScriptName, cmd] + args, lSEP)); } addEvent(float delay, string cmds) { @@ -188,7 +198,11 @@ list readCard(string card) dynamicMenu(key id, string menu, string name, string title, string entries, string command) { - sendScript(lDYNAMIC, [id, menu, name, title, entries, command]); + dynamicMenu(id, menu, name, title, entries, command, 1); +} +dynamicMenu(key id, string menu, string name, string title, string entries, string command, integer ret) +{ + sendScript(lDYNAMIC, [id, menu, name, title, entries, command, ret]); } integer Chosen; @@ -206,16 +220,27 @@ linky(integer num, string message, key id) key them = llList2Key(input, 0); string fr = llList2Key(input, 1); //d("linky " + num + " " + message); - if (lCMD == num) + if ((lCHECK == num) || (lCMD == num)) { -//d("link CHAT " + llDumpList2String(input, " ~ ")); if ((fr == (ScriptName + ".")) || (fr == "*.")) { key a = llList2Key(input, 3); string button = llList2String(input, 4); - integer r = doThing(a, button, fr, + integer r; + if (lCHECK == num) + { +//d("link CHECK " + llDumpList2String(input, " ~ ")); + r = checkThing(a, button, fr, llList2String(input, 5), llList2String(input, 6), llList2Integer(input, 2)); - sendScript(lCMD_DONE, [button, a, r]); + sendScript(num - 1, [llList2String(input, 6), a, r]); + } + else + { +//d("link CHAT " + llDumpList2String(input, " ~ ")); + r = doThing(a, button, fr, + llList2String(input, 5), llList2String(input, 6), llList2Integer(input, 2)); + sendScript(num - 1, [button, a, r]); + } } } else if (lRESET_DONE == num) @@ -237,6 +262,44 @@ d("linky RESET_DONE"); } // END boilerplate, mostly. +integer checkThing(key id, string button, string fr, string cmd, string data, integer source) +{ + if ((fr != (ScriptName + ".") && ("*." != fr))) return TRUE; + if (("POSE" == cmd) || ("SINGLE_POSE" == cmd)) + { +//d("CHECKING " + data); + // POSE piggyback,~,piggyback-sit + list p = llParseStringKeepNulls(llGetSubString(data, 5, -1), [",", "|"], []); + string name = llList2String(p, 0); + integer l = llGetListLength(p); + integer i; + + p = llListReplaceList(p, [], 0, 0); + l--; + for (i = 0; i < l; i++) + { + string a = llList2String(p, i); + integer e = FALSE; + integer f = FALSE; + list ae = splitEmote(a); + string an = llList2String(ae, 0); + + // Coz LSL doesn't short circuit, and we don't want to checkAnim("~") + if ("~" == an) + e = TRUE; + else if (!checkAnim(an, TRUE)) + e = TRUE; + if (e) + { + p = llListReplaceList(p, [], i, i); + i--; l--; + } + } + savePose(name, llDumpList2String(p, "|"), "", ""); + } + return TRUE; +} + integer doThing(key id, string button, string fr, string cmd, string data, integer source) { integer set = -1; @@ -375,7 +438,7 @@ integer doThing(key id, string button, string fr, string cmd, string data, integ keys += "|COUPLE_WITH " + llList2String(b, i); names += "|" + llList2String(b, i + 2); } - dynamicMenu(Owner, "couples", What, " Pick someone to '" + What + "' with -", + dynamicMenu(Owner, menu, What, " Pick someone to '" + What + "' with -", llGetSubString(names, 1, -1), llGetSubString(keys, 1, -1)); PIN = (integer) llFrand(DEBUG_CHANNEL - 2) + 2; vector RefPos = llGetPos(); diff --git a/1chatter.lsl b/1chatter.lsl index 9970462..b41df53 100644 --- a/1chatter.lsl +++ b/1chatter.lsl @@ -38,6 +38,8 @@ integer lSUBSTITUTE = -7; integer lSUBSTITUTE_DONE = -8; integer lNEXT_WORD = -9; integer lNEXT_WORD_DONE = -10; +integer lCHECK = -11; +integer lCHECK_DONE = -12; integer lCONTROL = -13; integer lCONTROL_DONE = -14; integer lCMD = -15; @@ -52,6 +54,7 @@ d(string m) {if (DEBUG) llInstantMessage(Owner, llGetScriptName() + ": " + m);} D(string m) {llRegionSay(DEBUG_CHANNEL, llGetScriptName() + ": " + m);} s(string m) {s(Owner, m);} s(key id, string m) {if (id == Owner) llOwnerSay(m); else llInstantMessage(id, m);} +S(string m) {llInstantMessage(Owner, llGetScriptName() + ": " + m);} sendScript(integer cmd, list args) {sendScript(LibraryKey, cmd, ScriptName, args);} sendScript(key them, integer cmd, list args) {sendScript(them, cmd, inKey2Name(them), args);} sendScript(integer cmd, string name, list args) {sendScript(LibraryKey, cmd, name, args);} @@ -59,7 +62,12 @@ sendScript(key them, integer cmd, string name, list args) { llMessageLinked(LINK_SET, cmd, llDumpList2String([ScriptKey, name] + args, lSEP), them); } -sendPrim(key them, string cmd, list args) {osMessageObject(them, llDumpList2String([ScriptName] + args, lSEP));} +integer pingPrim(key k) +{ + if (NULL_KEY != k) return (0 != llGetListLength(llGetObjectDetails(k, [OBJECT_DESC]))); + return FALSE; +} +sendPrim(key them, string cmd, list args) {if (pingPrim(them)) osMessageObject(them, llDumpList2String([ScriptName] + args, lSEP));} string inKey2Name(key k) { @@ -596,16 +604,47 @@ addMenuItem(string fr, string menu, string cmd, list args) e += getToggle(fr, llList2String(args, 0)); else e += llList2String(args, 0); - if ("TOMENU" == cmd) e += "…"; + if ("TOMENU" == cmd) + e += "…"; + else if ("TOGGLE" == cmd) + { + string cm = llList2String(args, 0); + if (-1 == listFindString(Settings, fr + llToUpper(cm), sSTRIDE)) + d("ERROR! Not found setting " + fr + cm + "!"); + } + else if ("BUTTON" == cmd) + { + string cm = llList2String(args, 1); + + if (-1 == listFindString(Commands, fr + llToUpper(cm), cSTRIDE)) + d("ERROR! Not found command " + fr + " " + cm + "!"); + else + { + sendScript(getSetting(fr + "SCRIPTKEY"), lCHECK, fr, + [fCARD, LibraryKey, menu, cm, + llDumpList2String(llListReplaceList(args, [], 0, 1), "|")]); + } + } + else + { + if (-1 == listFindString(Commands, fr + llToUpper(cmd), cSTRIDE)) + d("ERROR! Not found command " + fr + cmd + "!"); + else + { + sendScript(getSetting(fr + "SCRIPTKEY"), lCHECK, fr, + [fCARD, LibraryKey, menu, cmd, + llDumpList2String(llListReplaceList(args, [], 0, 0), "|")]); + } + } c += llDumpList2String(llListReplaceList(args, [], 0, 0), " "); saveMenu(menu, llList2String(Menus, f + mTITLE), llList2Integer(Menus, f + mAUTH), e, c, llList2Integer(Menus, f + mDYN)); } } -dynamicMenu(key id, string menu, string name, string title, string entries, string command) +dynamicMenu(key id, string menu, string name, string title, string entries, string command, integer ret) { //d("dynamicMenu " + menu + " -> " + name + "\n" + id + "@" + name); - saveMenu(id + "@" + name, title, aALL, entries, command, TRUE); + saveMenu(id + "@" + name, title, aALL, entries, command, ret); saveMuser(id, id + "@" + name, entries, -1, menu); showMenu(id); } @@ -785,7 +824,7 @@ showMenu(key id) integer l = llGetListLength(entries); integer n; - if (llList2Integer(Menus, m + mDYN)) + if (dM) { for (; n < l; ++n) { @@ -912,10 +951,11 @@ integer handleMenu(integer f, key id, string button) list lst; integer page = llList2Integer(Musers, f + uPAGE); integer m = findMenu(menu); // This was already checked before it was stuffed into Musers. + integer dm = llList2Integer(Menus, m + mDYN); integer e = 0; //d("handleMenu(" + llKey2Name(id) + "," + button + ") " + menu + " -> " + cmd); - if (llList2Integer(Menus, m + mDYN)) + if (dm) dM = menu; // Find the corresponding command for this button. lst = llParseStringKeepNulls(llList2String(Menus, m + mCMDS), ["|"], []); @@ -1023,7 +1063,7 @@ d("handleMenu(" + llKey2Name(id) + "," + button + ") " + menu + " -> " + fr + cm f = listFindString(Commands, fr + cmd, cSTRIDE); if (-1 != f) i = doThing(id, menu + "->" + button, fr, cmd, data, fMENU); - if ("" != dM) + if ((dm != 2) && ("" != dM)) lastMenu(id, dM); return i; } @@ -1031,6 +1071,12 @@ d("handleMenu(" + llKey2Name(id) + "," + button + ") " + menu + " -> " + fr + cm return TRUE; } +integer checkThing(key id, string button, string fr, string cmd, string data, integer source) +{ + if ((fr != (ScriptName + ".") && ("*." != fr))) return FALSE; + return TRUE; +} + integer doThing(key id, string command, string fr, string cmd, string data, integer source) { if ("*.." == fr) return TRUE; @@ -1386,6 +1432,12 @@ fr="1AOor2"; } } } + else if (lCHECK_DONE == num) + { +//d("lCHECK_DONE " + llKey2Name(llList2Key(input, 3)) + " -> " + llList2String(input, 2) + "| returned " + llList2String(input, 4)); + if (!llList2Integer(input, 4)) + S("ERROR - Invalid command for " + llList2String(input, 2)); + } else if (lCMD == num) { doThing(llList2Key(input, 3), llList2String(input, 4), fr + ".", @@ -1400,10 +1452,11 @@ fr="1AOor2"; else if (lDYNAMIC == num) { string menu = llList2String(input, 3); - if ("" != menu) + integer f = llSubStringIndex(menu, "."); + if (("" != menu) && (-1 == f)) menu = fr + "." + menu; dynamicMenu(llList2Key(input, 2), menu, fr + "." + llList2String(input, 4), - llList2String(input, 5), llList2String(input, 6), llList2String(input, 7)); + llList2String(input, 5), llList2String(input, 6), llList2String(input, 7), llList2Integer(input, 8)); } else if (lMENU == num) { @@ -1527,7 +1580,7 @@ d("listen 1ring.CHANNEL " + message + " -> " + button + " " + cmd + " " + data); llSensor("", NULL_KEY, llList2Integer(Scanners, nTYPE), 100.0, PI); dynamicMenu(id, menu, menu, llList2String(Scanners, nTITLE), - llDumpList2String(items, "|"), llDumpList2String(keys, "|")); + llDumpList2String(items, "|"), llDumpList2String(keys, "|"), 2); } } diff --git a/1ring.lsl b/1ring.lsl index 59db460..f8bacdf 100644 --- a/1ring.lsl +++ b/1ring.lsl @@ -45,6 +45,8 @@ integer lSUBSTITUTE = -7; integer lSUBSTITUTE_DONE = -8; integer lNEXT_WORD = -9; integer lNEXT_WORD_DONE = -10; +integer lCHECK = -11; +integer lCHECK_DONE = -12; integer lCONTROL = -13; integer lCONTROL_DONE = -14; integer lCMD = -15; @@ -62,6 +64,7 @@ d(string m) {if (DEBUG) llInstantMessage(Owner, llGetScriptName() + ": " + m);} D(string m) {llRegionSay(DEBUG_CHANNEL, llGetScriptName() + ": " + m);} s(string m) {s(Owner, m);} s(key id, string m) {if (id == Owner) llOwnerSay(m); else llInstantMessage(id, m);} +S(string m) {llInstantMessage(Owner, llGetScriptName() + ": " + m);} sendScript(integer cmd, list args) {sendScript(LibraryKey, cmd, ScriptName, args);} sendScript(key them, integer cmd, list args) {sendScript(them, cmd, inKey2Name(them), args);} sendScript(integer cmd, string name, list args) {sendScript(LibraryKey, cmd, name, args);} @@ -69,9 +72,16 @@ sendScript(key them, integer cmd, string name, list args) { llMessageLinked(LINK_SET, cmd, llDumpList2String([ScriptKey, name] + args, lSEP), them); } +integer pingPrim(key k) +{ + if (NULL_KEY != k) + return (0 != llGetListLength(llGetObjectDetails(k, [OBJECT_DESC]))); + return FALSE; +} sendPrim(key them, string cmd, list args) { - osMessageObject(them, llDumpList2String([ScriptName, cmd] + args, lSEP)); + if (pingPrim(them)) + osMessageObject(them, llDumpList2String([ScriptName, cmd] + args, lSEP)); } addEvent(float delay, string cmds) { @@ -199,7 +209,11 @@ doSettings(key id, list settings) dynamicMenu(key id, string menu, string name, string title, string entries, string command) { - sendScript(lDYNAMIC, [id, menu, name, title, entries, command]); + dynamicMenu(id, menu, name, title, entries, command, 1); +} +dynamicMenu(key id, string menu, string name, string title, string entries, string command, integer ret) +{ + sendScript(lDYNAMIC, [id, menu, name, title, entries, command, ret]); } linky(integer num, string message, key id) @@ -213,16 +227,26 @@ linky(integer num, string message, key id) key them = llList2Key(input, 0); string fr = llList2Key(input, 1); //d("linky " + num + " " + message); - if (lCMD == num) + if ((lCHECK == num) || (lCMD == num)) { -//d("linky lCMD " + llDumpList2String(input, " ~ ")); if ((fr == (ScriptName + ".")) || (fr == "*.")) { key a = llList2Key(input, 3); string button = llList2String(input, 4); - integer r = doThing(a, button, fr, + integer r; + if (lCHECK == num) + { +//d("link CHECK " + llDumpList2String(input, " ~ ")); + r = checkThing(a, button, fr, + llList2String(input, 5), llList2String(input, 6), llList2Integer(input, 2)); + } + else + { +//d("link CHAT " + llDumpList2String(input, " ~ ")); + r = doThing(a, button, fr, llList2String(input, 5), llList2String(input, 6), llList2Integer(input, 2)); - sendScript(lCMD_DONE, [button, a, r]); + } + sendScript(num - 1, [button, a, r]); } } else if (lRESET_DONE == num) @@ -404,6 +428,12 @@ integer changeAccess(key id, string cmd, key person, integer source) return FALSE; } +integer checkThing(key id, string button, string fr, string cmd, string data, integer source) +{ + if ((fr != (ScriptName + ".") && ("*." != fr))) return FALSE; + return TRUE; +} + integer doThing(key id, string button, string fr, string cmd, string data, integer source) { integer set = -1; @@ -1405,7 +1435,7 @@ d("HEY leashy! " + URL); } while(++channel < 42); dynamicMenu(someBoss, "clothes", "DETACH", "Please select the attachment to detach", - llDumpList2String(items, "|"), "DETACH"); + llDumpList2String(items, "|"), "DETACH", 2); } else if ("getoutfit" == rlv) { @@ -1416,7 +1446,7 @@ d("HEY leashy! " + URL); } while(++channel < 20); dynamicMenu(someBoss, "clothes", "TAKEOFF", "Please select the clothes to take off", - llDumpList2String(items, "|"), "TAKEOFF"); + llDumpList2String(items, "|"), "TAKEOFF", 2); } else if ("getinv" == rlv) { @@ -1429,8 +1459,8 @@ d("HEY leashy! " + URL); string folder = llList2String(folders, i); items += [folder, "+ " + folder, "- " + folder]; } - dynamicMenu(someBoss, "clothes", "PUTON", "Please select the outfit to put on", - llDumpList2String(items, "|"), "PUTON"); + dynamicMenu(someBoss, "clothes", "PUTON", "Please select the outfit to put on", + llDumpList2String(items, "|"), "PUTON", 2); } } -- cgit v1.1