Hand optimizations to some scripts.

Gains in bytes:

- [AV]sitA: 3584
- [AV]sitB: 2048
- [AV]adjuster: 1024
- [AV]faces: 1024
- [AV]Xcite!: 0
- [AV]root-security: 0
This commit is contained in:
Sei Lisa 2017-09-15 17:44:27 +02:00 committed by Sei-Lisa
parent d36b812760
commit f599fb8f85
6 changed files with 353 additions and 222 deletions

View file

@ -178,17 +178,17 @@ default
list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []);
if (command == "TIMER") if (command == "TIMER")
{ {
TIMER_DEFAULT = (integer)llList2String(parts, 0); TIMER_DEFAULT = llList2Integer(parts, 0);
} }
else if (command == "DEBUG") if (command == "DEBUG")
{ {
DEBUG = (integer)llList2String(parts, 0); DEBUG = llList2Integer(parts, 0);
} }
else if (command == "XCITE") if (command == "XCITE")
{ {
POSE_AND_SITTER += [llStringTrim(llList2String(parts, 0), STRING_TRIM) + "|" + llList2String(parts, 1)]; POSE_AND_SITTER += [llStringTrim(llList2String(parts, 0), STRING_TRIM) + "|" + llList2String(parts, 1)];
XCITE_COMMANDS += [llList2String(parts, 2) + "|" + llList2String(parts, 3) + "|" + llList2String(parts, 4) + "|" + llList2String(parts, 5)]; XCITE_COMMANDS += [llList2String(parts, 2) + "|" + llList2String(parts, 3) + "|" + llList2String(parts, 4) + "|" + llList2String(parts, 5)];
XCITE_TILT += (integer)llList2String(parts, 6); XCITE_TILT += llList2Integer(parts, 6);
} }
notecard_query = llGetNotecardLine(notecard_name, ++notecard_line); notecard_query = llGetNotecardLine(notecard_name, ++notecard_line);
} }

View file

@ -227,7 +227,8 @@ default
notecard_key = llGetInventoryKey(notecard_name); notecard_key = llGetInventoryKey(notecard_name);
if (llGetInventoryType(notecard_name) == INVENTORY_NOTECARD) if (llGetInventoryType(notecard_name) == INVENTORY_NOTECARD)
{ {
Out(0, "Loading..."); // Out() inlined here:
llOwnerSay(llGetScriptName() + "[" + version + "] " + "Loading...");
notecard_query = llGetNotecardLine(notecard_name, 0); notecard_query = llGetNotecardLine(notecard_name, 0);
} }
} }
@ -248,9 +249,13 @@ default
link_message(integer sender, integer num, string msg, key id) link_message(integer sender, integer num, string msg, key id)
{ {
list data;
integer i;
integer sitter;
integer x;
if (num == 90100) if (num == 90100)
{ {
list data = llParseString2List(msg, ["|"], []); data = llParseString2List(msg, ["|"], []);
if (llList2String(data, 1) == "[FACES]") if (llList2String(data, 1) == "[FACES]")
{ {
llMessageLinked(sender, 90101, llDumpList2String([llList2String(data, 0), "[ADJUST]", id], "|"), llList2String(data, 2)); llMessageLinked(sender, 90101, llDumpList2String([llList2String(data, 0), "[ADJUST]", id], "|"), llList2String(data, 2));
@ -267,59 +272,63 @@ default
llRegionSayTo(id, 0, "Sorry, only the owner can change this."); llRegionSayTo(id, 0, "Sorry, only the owner can change this.");
} }
} }
return;
} }
else if (sender == llGetLinkNumber()) if (sender == llGetLinkNumber())
{ {
if (num == 90045) if (num == 90045)
{ {
list data = llParseStringKeepNulls(msg, ["|"], []); data = llParseStringKeepNulls(msg, ["|"], []);
integer sitter = (integer)llList2String(data, 0); sitter = (integer)llList2String(data, 0);
if (id == llList2Key(SITTERS, sitter)) if (id == llList2Key(SITTERS, sitter))
{ {
string given_posename = llList2String(data, 1); string given_posename = llList2String(data, 1);
SITTER_POSES = llListReplaceList(SITTER_POSES, [given_posename], sitter, sitter); SITTER_POSES = llListReplaceList(SITTER_POSES, [given_posename], sitter, sitter);
given_posename = (string)sitter + "|" + given_posename; given_posename = (string)sitter + "|" + given_posename;
remove_sequences(id); remove_sequences(id);
integer i;
while (i < llGetListLength(anim_triggers)) while (i < llGetListLength(anim_triggers))
{ {
if (llList2String(anim_triggers, i) == given_posename) if (llList2String(anim_triggers, i) == given_posename)
{ {
integer reference = llListFindList(anim_triggers, [(string)sitter + "|" + llList2String(anim_animsequences, i)]); x = llListFindList(anim_triggers, [(string)sitter + "|" + llList2String(anim_animsequences, i)]);
if (reference == -1) if (x == -1)
{ {
reference = i; x = i;
} }
start_sequence(reference, id); start_sequence(x, id);
} }
i++; i++;
} }
} }
return;
} }
else if (num == 90065) if (num == 90065)
{ {
remove_sequences(id); remove_sequences(id);
integer index = llListFindList(SITTERS, [id]); i = llListFindList(SITTERS, [id]);
if (index != -1) if (i != -1)
{ {
SITTERS = llListReplaceList(SITTERS, [NULL_KEY], index, index); SITTERS = llListReplaceList(SITTERS, [NULL_KEY], i, i);
} }
return;
} }
else if (num == 90030) if (num == 90030)
{ {
SITTERS = llListReplaceList(SITTERS, [NULL_KEY], (integer)msg, (integer)msg); SITTERS = llListReplaceList(SITTERS, [NULL_KEY], (integer)msg, (integer)msg);
SITTERS = llListReplaceList(SITTERS, [NULL_KEY], (integer)((string)id), (integer)((string)id)); SITTERS = llListReplaceList(SITTERS, [NULL_KEY], (integer)((string)id), (integer)((string)id));
return;
} }
else if (num == 90070) if (num == 90070)
{ {
SITTERS = llListReplaceList(SITTERS, [id], (integer)msg, (integer)msg); SITTERS = llListReplaceList(SITTERS, [id], (integer)msg, (integer)msg);
return;
} }
else if (num == 90172) if (num == 90172)
{ {
is_running = TRUE; is_running = TRUE;
integer sitter = (integer)msg; sitter = (integer)msg;
remove_sequences(llList2Key(SITTERS, sitter)); remove_sequences(llList2Key(SITTERS, sitter));
integer i = llGetListLength(anim_triggers); i = llGetListLength(anim_triggers);
while (i > 0) while (i > 0)
{ {
i--; i--;
@ -332,32 +341,39 @@ default
if (id != "none") if (id != "none")
{ {
anim_triggers += [msg + "|" + llList2String(SITTER_POSES, sitter)]; anim_triggers += [msg + "|" + llList2String(SITTER_POSES, sitter)];
anim_animsequences += (string)id + "|1";
msg = (string)id + "|1";
// Reuse existing entries to save data memory when possible
i = llListFindList(anim_animsequences, [msg]);
if (~i)
msg = llList2String(anim_animsequences, i);
anim_animsequences += msg;
start_sequence(llGetListLength(anim_animsequences) - 1, llList2Key(SITTERS, sitter)); start_sequence(llGetListLength(anim_animsequences) - 1, llList2Key(SITTERS, sitter));
llSay(0, "FACE added: '" + (string)id + "' to '" + llList2String(SITTER_POSES, sitter) + "' for SITTER " + (string)sitter + "."); llSay(0, "FACE added: '" + (string)id + "' to '" + llList2String(SITTER_POSES, sitter) + "' for SITTER " + (string)sitter + ".");
} }
return;
} }
else if (num == 90020 && (string)id == llGetScriptName()) if (num == 90020 && (string)id == llGetScriptName())
{ {
integer i;
for (i = 0; i < llGetListLength(anim_triggers); i++) for (i = 0; i < llGetListLength(anim_triggers); i++)
{ {
if (llSubStringIndex(llList2String(anim_triggers, i), msg + "|") == 0) if (llSubStringIndex(llList2String(anim_triggers, i), msg + "|") == 0)
{ {
list trigger = llParseString2List(llList2String(anim_triggers, i), ["|"], []); data = llParseString2List(llList2String(anim_triggers, i), ["|"], []);
list sequence = llParseString2List(llList2String(anim_animsequences, i), ["|"], []); list sequence = llParseString2List(llList2String(anim_animsequences, i), ["|"], []);
integer x;
for (x = 0; x < llGetListLength(sequence); x += 2) for (x = 0; x < llGetListLength(sequence); x += 2)
{ {
if (IsInteger(llList2String(sequence, x))) if (IsInteger(llList2String(sequence, x)))
{ {
sequence = llListReplaceList(sequence, [llList2String(facial_anim_list, (integer)llList2String(sequence, x))], x, x); sequence = llListReplaceList(sequence, [llList2String(facial_anim_list, llList2Integer(sequence, x))], x, x);
} }
} }
Readout_Say("ANIM " + llList2String(trigger, 1) + "|" + llDumpList2String(sequence, "|"), msg); Readout_Say("ANIM " + llList2String(data, 1) + "|" + llDumpList2String(sequence, "|"), msg);
} }
} }
llMessageLinked(LINK_THIS, 90021, msg, llGetScriptName()); llMessageLinked(LINK_THIS, 90021, msg, llGetScriptName());
return;
} }
} }
} }
@ -393,7 +409,8 @@ default
{ {
if (data == EOF) if (data == EOF)
{ {
Out(0, (string)llGetListLength(anim_triggers) + " Expressions Ready, Mem=" + (string)llGetFreeMemory()); // Out() inlined here:
llOwnerSay(llGetScriptName() + "[" + version + "] " + (string)llGetListLength(anim_triggers) + " Expressions Ready, Mem=" + (string)llGetFreeMemory());
} }
else else
{ {
@ -401,17 +418,16 @@ default
data = llStringTrim(data, STRING_TRIM); data = llStringTrim(data, STRING_TRIM);
string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1); string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1);
list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []); list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []);
string part0 = llStringTrim(llList2String(parts, 0), STRING_TRIM);
if (command == "SITTER") if (command == "SITTER")
{ {
notecard_section = (integer)part0; notecard_section = llList2Integer(parts, 0);
} }
else if (command == "ANIM") if (command == "ANIM")
{ {
string part1 = llStringTrim(llDumpList2String(llList2List(parts, 1, -1), "|"), STRING_TRIM); string part1 = llStringTrim(llDumpList2String(llDeleteSubList(parts, 0, 0), "|"), STRING_TRIM);
list sequence = llParseString2List(part1, ["|"], []); list sequence = llParseString2List(part1, ["|"], []);
integer x; integer x;
for (x = 0; x < llGetListLength(sequence); x += 2) for (; x < llGetListLength(sequence); x += 2)
{ {
integer index = llListFindList(facial_anim_list, [llList2String(sequence, x)]); integer index = llListFindList(facial_anim_list, [llList2String(sequence, x)]);
if (~index) if (~index)
@ -422,8 +438,13 @@ default
x, x); x, x);
} }
} }
anim_triggers += [(string)notecard_section + "|" + part0]; anim_triggers += [(string)notecard_section + "|" + llStringTrim(llList2String(parts, 0), STRING_TRIM)];
anim_animsequences += llDumpList2String(sequence, "|"); part1 = llDumpList2String(sequence, "|");
// Reuse existing entries to save data memory when possible
x = llListFindList(anim_animsequences, [part1]);
if (~x)
part1 = llList2String(anim_animsequences, x);
anim_animsequences += part1;
} }
notecard_query = llGetNotecardLine(notecard_name, notecard_line += 1); notecard_query = llGetNotecardLine(notecard_name, notecard_line += 1);
} }

View file

@ -50,22 +50,21 @@ string SEP = "<22>"; // OSS::string SEP = "\u007F";
string FormatFloat(float f, integer num_decimals) string FormatFloat(float f, integer num_decimals)
{ {
float rounding = (float)(".5e-" + (string)num_decimals) - .5e-6; f += ((integer)(f > 0) - (integer)(f < 0)) * ((float)(".5e-" + (string)num_decimals) - .5e-6);
if (f < 0.)
f -= rounding;
else
f += rounding;
string ret = llGetSubString((string)f, 0, num_decimals - (!num_decimals) - 7); string ret = llGetSubString((string)f, 0, num_decimals - (!num_decimals) - 7);
if (llSubStringIndex(ret, ".") != -1) if (num_decimals)
{ {
while (llGetSubString(ret, -1, -1) == "0") num_decimals = -1;
while (llGetSubString(ret, num_decimals, num_decimals) == "0")
{ {
ret = llGetSubString(ret, 0, -2); --num_decimals;
} }
} if (llGetSubString(ret, num_decimals, num_decimals) == ".")
if (llGetSubString(ret, -1, -1) == ".") {
{ --num_decimals;
ret = llGetSubString(ret, 0, -2); }
return llGetSubString(ret, 0, num_decimals);
} }
return ret; return ret;
} }
@ -78,9 +77,8 @@ web(integer force)
{ {
cache += "\n\nend"; cache += "\n\nend";
} }
cache = llEscapeURL(cache);
webcount++; webcount++;
llHTTPRequest(url, [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/x-www-form-urlencoded", HTTP_VERIFY_CERT, FALSE], "w=" + webkey + "&c=" + (string)webcount + "&t=" + cache); llHTTPRequest(url, [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/x-www-form-urlencoded", HTTP_VERIFY_CERT, FALSE], "w=" + webkey + "&c=" + (string)webcount + "&t=" + llEscapeURL(cache));
cache = ""; cache = "";
} }
} }
@ -226,7 +224,14 @@ choice_menu(list options, string menu_text)
} }
menu_items += ["[BACK]", "[<<]", "[>>]"]; menu_items += ["[BACK]", "[<<]", "[>>]"];
} }
llDialog(controller, menu_text, order_buttons(menu_items), comm_channel); llDialog(controller
, menu_text
, llList2List(menu_items, -3, -1)
+ llList2List(menu_items, -6, -4)
+ llList2List(menu_items, -9, -7)
+ llList2List(menu_items, -12, -10)
, comm_channel
);
} }
new_menu() new_menu()
@ -239,7 +244,14 @@ new_menu()
} }
menu_items += "[CAMERA]"; menu_items += "[CAMERA]";
string menu_text = "\nWhat would you like to create?\n"; string menu_text = "\nWhat would you like to create?\n";
llDialog(controller, menu_text, order_buttons(menu_items), comm_channel); llDialog(controller
, menu_text
, llList2List(menu_items, -3, -1)
+ llList2List(menu_items, -6, -4)
+ llList2List(menu_items, -9, -7)
+ llList2List(menu_items, -12, -10)
, comm_channel
);
} }
end_helper_mode() end_helper_mode()
@ -380,49 +392,53 @@ default
{ {
integer one = (integer)msg; integer one = (integer)msg;
integer two = (integer)((string)id); integer two = (integer)((string)id);
integer i;
if (sender == llGetLinkNumber()) if (sender == llGetLinkNumber())
{ {
list data = llParseStringKeepNulls(msg, ["|"], []); list data = llParseStringKeepNulls(msg, ["|"], []);
if (num == 90065) if (num == 90065)
{ {
integer index = llListFindList(SITTERS, [id]); i = llListFindList(SITTERS, [id]);
if (index != -1) if (i != -1)
{ {
SITTERS = llListReplaceList(SITTERS, [NULL_KEY], index, index); SITTERS = llListReplaceList(SITTERS, [NULL_KEY], i, i);
} }
return;
} }
else if (num == 90030) if (num == 90030)
{ {
SITTERS = llListReplaceList(SITTERS, [NULL_KEY], (integer)msg, (integer)msg); SITTERS = llListReplaceList(SITTERS, [NULL_KEY], (integer)msg, (integer)msg);
SITTERS = llListReplaceList(SITTERS, [NULL_KEY], (integer)((string)id), (integer)((string)id)); SITTERS = llListReplaceList(SITTERS, [NULL_KEY], (integer)((string)id), (integer)((string)id));
if (OLD_HELPER_METHOD && helper_mode) if (OLD_HELPER_METHOD && helper_mode)
{ {
integer i = llList2Integer(HELPER_KEY_LIST, (integer)msg); i = llList2Integer(HELPER_KEY_LIST, (integer)msg);
HELPER_KEY_LIST = llListReplaceList(HELPER_KEY_LIST, [llList2Integer(HELPER_KEY_LIST, (integer)((string)id))], (integer)msg, (integer)msg); HELPER_KEY_LIST = llListReplaceList(HELPER_KEY_LIST, [llList2Integer(HELPER_KEY_LIST, (integer)((string)id))], (integer)msg, (integer)msg);
HELPER_KEY_LIST = llListReplaceList(HELPER_KEY_LIST, [i], (integer)((string)id), (integer)((string)id)); HELPER_KEY_LIST = llListReplaceList(HELPER_KEY_LIST, [i], (integer)((string)id), (integer)((string)id));
llRegionSay(comm_channel, "SWAP|" + (string)msg + "|" + (string)id); llRegionSay(comm_channel, "SWAP|" + (string)msg + "|" + (string)id);
} }
return;
} }
else if (num == 90070) if (num == 90070)
{ {
SITTERS = llListReplaceList(SITTERS, [id], (integer)msg, (integer)msg); SITTERS = llListReplaceList(SITTERS, [id], (integer)msg, (integer)msg);
return;
} }
else if (num == 90021) if (num == 90021)
{ {
integer script_channel = (integer)msg; integer script_channel = (integer)msg;
list scripts = [prop_script, expression_script, camera_script]; list scripts = [prop_script, expression_script, camera_script];
integer index = llListFindList(scripts, [(string)id]); i = llListFindList(scripts, [(string)id]);
while (index < llGetListLength(scripts)) while (i < llGetListLength(scripts))
{ {
index++; i++;
string lookfor = llList2String(scripts, index); string lookfor = llList2String(scripts, i);
if (lookfor == camera_script && script_channel > 0) if (lookfor == camera_script && script_channel > 0)
{ {
lookfor = lookfor + " " + (string)script_channel; lookfor = lookfor + " " + (string)script_channel;
} }
if (llGetInventoryType(lookfor) == INVENTORY_SCRIPT) if (llGetInventoryType(lookfor) == INVENTORY_SCRIPT)
{ {
llMessageLinked(LINK_THIS, 90020, (string)script_channel, llList2String(scripts, index)); llMessageLinked(LINK_THIS, 90020, (string)script_channel, llList2String(scripts, i));
return; return;
} }
} }
@ -438,8 +454,9 @@ default
web(TRUE); web(TRUE);
llRegionSayTo(llGetOwner(), 0, "Settings copy: " + url + "?q=" + webkey); llRegionSayTo(llGetOwner(), 0, "Settings copy: " + url + "?q=" + webkey);
} }
return;
} }
else if (num == 90022) if (num == 90022)
{ {
if (llGetSubString(msg, 0, 3) == "S:M:" || llGetSubString(msg, 0, 3) == "S:T:") if (llGetSubString(msg, 0, 3) == "S:M:" || llGetSubString(msg, 0, 3) == "S:T:")
{ {
@ -455,19 +472,19 @@ default
Readout_Say("--✄--COPY BELOW INTO \"AVpos\" NOTECARD--✄--"); Readout_Say("--✄--COPY BELOW INTO \"AVpos\" NOTECARD--✄--");
Readout_Say(""); Readout_Say("");
Readout_Say("\"" + llToUpper(llGetObjectName()) + "\" " + strReplace(llList2String(data, 0), "V:", "AVsitter ")); Readout_Say("\"" + llToUpper(llGetObjectName()) + "\" " + strReplace(llList2String(data, 0), "V:", "AVsitter "));
if ((integer)llList2String(data, 1)) if (llList2Integer(data, 1))
{ {
Readout_Say("MTYPE " + llList2String(data, 1)); Readout_Say("MTYPE " + llList2String(data, 1));
} }
if ((integer)llList2String(data, 2) != 1) if (llList2Integer(data, 2) != 1)
{ {
Readout_Say("ETYPE " + llList2String(data, 2)); Readout_Say("ETYPE " + llList2String(data, 2));
} }
if ((integer)llList2String(data, 3) > -1) if (llList2Integer(data, 3) > -1)
{ {
Readout_Say("SET " + llList2String(data, 3)); Readout_Say("SET " + llList2String(data, 3));
} }
if ((integer)llList2String(data, 4) != 2) if (llList2Integer(data, 4) != 2)
{ {
Readout_Say("SWAP " + llList2String(data, 4)); Readout_Say("SWAP " + llList2String(data, 4));
} }
@ -479,15 +496,15 @@ default
{ {
Readout_Say("ADJUST " + strReplace(llList2String(data, 7), SEP, "|")); Readout_Say("ADJUST " + strReplace(llList2String(data, 7), SEP, "|"));
} }
if ((integer)llList2String(data, 8)) if (llList2Integer(data, 8))
{ {
Readout_Say("SELECT " + llList2String(data, 8)); Readout_Say("SELECT " + llList2String(data, 8));
} }
if ((integer)llList2String(data, 9) != 2) if (llList2Integer(data, 9) != 2)
{ {
Readout_Say("AMENU " + llList2String(data, 9)); Readout_Say("AMENU " + llList2String(data, 9));
} }
if ((integer)llList2String(data, 10)) if (llList2Integer(data, 10))
{ {
Readout_Say("HELPER " + llList2String(data, 10)); Readout_Say("HELPER " + llList2String(data, 10));
} }
@ -509,10 +526,8 @@ default
{ {
msg = strReplace(msg, "{P:", "{"); msg = strReplace(msg, "{P:", "{");
list parts = llParseStringKeepNulls(llDumpList2String(llParseString2List(llGetSubString(msg, llSubStringIndex(msg, "}") + 1, -1), [" "], [""]), ""), ["<"], []); list parts = llParseStringKeepNulls(llDumpList2String(llParseString2List(llGetSubString(msg, llSubStringIndex(msg, "}") + 1, -1), [" "], [""]), ""), ["<"], []);
string pos = "<" + llList2String(parts, 1); vector pos2 = (vector)("<" + llList2String(parts, 1));
string rot = "<" + llList2String(parts, 2); vector rot2 = (vector)("<" + llList2String(parts, 2));
vector pos2 = (vector)pos;
vector rot2 = (vector)rot;
string result = "<" + FormatFloat(pos2.x, 3) + "," + FormatFloat(pos2.y, 3) + "," + FormatFloat(pos2.z, 3) + ">"; string result = "<" + FormatFloat(pos2.x, 3) + "," + FormatFloat(pos2.y, 3) + "," + FormatFloat(pos2.z, 3) + ">";
result += "<" + FormatFloat(rot2.x, 1) + "," + FormatFloat(rot2.y, 1) + "," + FormatFloat(rot2.z, 1) + ">"; result += "<" + FormatFloat(rot2.x, 1) + "," + FormatFloat(rot2.y, 1) + "," + FormatFloat(rot2.z, 1) + ">";
msg = llGetSubString(msg, 0, llSubStringIndex(msg, "}")) + result; msg = llGetSubString(msg, 0, llSubStringIndex(msg, "}")) + result;
@ -552,9 +567,9 @@ default
} }
Readout_Say(msg); Readout_Say(msg);
} }
else if (num == 90100 || num == 90101) if (num == 90100 || num == 90101)
{ {
if (llList2String(data, 1) == "[DUMP]") if ((msg = llList2String(data, 1)) == "[DUMP]")
{ {
if (id != llGetOwner()) if (id != llGetOwner())
{ {
@ -562,16 +577,15 @@ default
} }
llMessageLinked(LINK_THIS, 90020, "0", ""); llMessageLinked(LINK_THIS, 90020, "0", "");
} }
else if (llList2String(data, 1) == "[NEW]") if (msg == "[NEW]")
{ {
controller = (key)llList2String(data, 2); controller = llList2Key(data, 2);
active_sitter = (integer)llList2String(data, 0); active_sitter = llList2Integer(data, 0);
adding = ""; adding = "";
new_menu(); new_menu();
} }
else if (llList2String(data, 1) == "[SAVE]") if (msg == "[SAVE]")
{ {
integer i;
for (i = 0; i < llGetListLength(SITTERS); i++) for (i = 0; i < llGetListLength(SITTERS); i++)
{ {
if (llList2String(SITTER_POSES, i) != "") if (llList2String(SITTER_POSES, i) != "")
@ -591,18 +605,19 @@ default
} }
llMessageLinked(LINK_THIS, 90005, "", llDumpList2String([llList2String(data, 2), id], "|")); llMessageLinked(LINK_THIS, 90005, "", llDumpList2String([llList2String(data, 2), id], "|"));
} }
else if (llList2String(data, 1) == "[HELPER]") if (msg == "[HELPER]")
{ {
controller = id; controller = id;
OLD_HELPER_METHOD = (integer)llList2String(data, 3); OLD_HELPER_METHOD = (integer)llList2String(data, 3);
toggle_helper_mode(); toggle_helper_mode();
} }
else if (llList2String(data, 1) == "[ADJUST]") if (msg == "[ADJUST]")
{ {
end_helper_mode(); end_helper_mode();
} }
return;
} }
else if (num == 90055 || num == 90056) if (num == 90055 || num == 90056)
{ {
data = llParseStringKeepNulls(id, ["|"], []); data = llParseStringKeepNulls(id, ["|"], []);
SITTER_POSES = llListReplaceList(SITTER_POSES, [llList2String(data, 0)], one, one); SITTER_POSES = llListReplaceList(SITTER_POSES, [llList2String(data, 0)], one, one);

View file

@ -66,7 +66,7 @@ check_sitters()
back_to_adjust(integer SCRIPT_CHANNEL, key sitter) back_to_adjust(integer SCRIPT_CHANNEL, key sitter)
{ {
llMessageLinked(LINK_SET, 90101, (string)SCRIPT_CHANNEL + "|[ADJUST]", sitter); llMessageLinked(LINK_SET, 90101, (string)SCRIPT_CHANNEL + "|[ADJUST]|", sitter);
} }
list order_buttons(list menu_items) list order_buttons(list menu_items)
@ -162,14 +162,14 @@ default
if (id == llGetOwner()) if (id == llGetOwner())
{ {
active_prim = sender; active_prim = sender;
active_script_channel = (integer)llList2String(data, 0); active_script_channel = llList2Integer(data, 0);
active_sitter = (key)llList2String(data, 2); active_sitter = llList2Key(data, 2);
main_menu(); main_menu();
} }
else else
{ {
llRegionSayTo(id, 0, "Sorry, only the owner can change security settings."); llRegionSayTo(id, 0, "Sorry, only the owner can change security settings.");
llMessageLinked(sender, 90101, llDumpList2String([llList2String(data, 0), "[ADJUST]", id], "|"), llList2String(data, 2)); llMessageLinked(sender, 90101, llList2String(data, 0) + "|[ADJUST]|" + (string)id, llList2Key(data, 2));
} }
} }
} }
@ -197,7 +197,7 @@ default
{ {
if (msg == "[BACK]") if (msg == "[BACK]")
{ {
llMessageLinked(LINK_SET, 90101, llDumpList2String([active_script_channel, "[ADJUST]", id], "|"), active_sitter); llMessageLinked(LINK_SET, 90101, (string)active_script_channel + "|[ADJUST]|" + (string)id, active_sitter);
} }
else if (lastmenu == "Sit") else if (lastmenu == "Sit")
{ {

View file

@ -109,7 +109,13 @@ dialog(string text, list menu_items)
{ {
llListenRemove(menu_handle); llListenRemove(menu_handle);
menu_handle = llListen((menu_channel = ((integer)llFrand(0x7FFFFF80) + 1) * -1), "", CONTROLLER, ""); // 7FFFFF80 = max float < 2^31 menu_handle = llListen((menu_channel = ((integer)llFrand(0x7FFFFF80) + 1) * -1), "", CONTROLLER, ""); // 7FFFFF80 = max float < 2^31
llDialog(CONTROLLER, product + " " + version + "\n\n" + text, order_buttons(menu_items), menu_channel); llDialog(CONTROLLER
, product + " " + version + "\n\n" + text
, llList2List(menu_items, -3, -1)
+ llList2List(menu_items, -6, -4)
+ llList2List(menu_items, -9, -7)
+ llList2List(menu_items, -12, -10)
, menu_channel);
} }
options_menu() options_menu()
@ -160,14 +166,14 @@ adjust_pose_menu()
integer IsInteger(string data) integer IsInteger(string data)
{ {
// This should allow for leading zeros, thus the "1" // This should allow for leading zeros, hence the "1"
return data != "" && (string)((integer)("1" + data)) == "1" + data; return data != "" && (string)((integer)("1" + data)) == "1" + data;
} }
wipe_sit_targets() wipe_sit_targets()
{ {
integer i; integer i;
for (i = 0; i <= llGetNumberOfPrims(); i++) for (; i <= llGetNumberOfPrims(); i++)
{ {
if ((string)llGetLinkPrimitiveParams(i, [PRIM_DESC]) != "-1") if ((string)llGetLinkPrimitiveParams(i, [PRIM_DESC]) != "-1")
{ {
@ -189,7 +195,8 @@ sittargets()
{ {
if (!SCRIPT_CHANNEL) if (!SCRIPT_CHANNEL)
{ {
primcount_error(); // primcount_error() inlined here:
llDialog(llGetOwner(), "\nThere aren't enough prims for required SitTargets.\nYou must have one prim for each avatar to sit!", ["OK"], 23658);
} }
wrong_primcount = TRUE; wrong_primcount = TRUE;
} }
@ -239,7 +246,13 @@ sittargets()
} }
original_my_sittarget = my_sittarget; original_my_sittarget = my_sittarget;
ORIGINAL_SITTERS_SITTARGETS = SITTERS_SITTARGETS; ORIGINAL_SITTERS_SITTARGETS = SITTERS_SITTARGETS;
prep(); // inline prep() here
has_security = has_texture = FALSE;
if (!SCRIPT_CHANNEL)
{
llMessageLinked(LINK_SET, 90201, "", ""); // 90201=Ask for info about plugins
}
set_sittarget(); set_sittarget();
} }
@ -442,9 +455,14 @@ default
SCRIPT_CHANNEL = (integer)llGetSubString(llGetScriptName(), llSubStringIndex(llGetScriptName(), " "), -1); SCRIPT_CHANNEL = (integer)llGetSubString(llGetScriptName(), llSubStringIndex(llGetScriptName(), " "), -1);
while (llGetInventoryType(memoryscript) != INVENTORY_SCRIPT) while (llGetInventoryType(memoryscript) != INVENTORY_SCRIPT)
{ {
llSleep(0.1);
} }
integer i; integer i;
while (i++ < get_number_of_scripts()) // get_number_of_scripts() inlined here:
while (llGetInventoryType(main_script + " " + (string)(++i)) == INVENTORY_SCRIPT)
;
while (i--)
{ {
SITTERS += ""; SITTERS += "";
} }
@ -454,7 +472,14 @@ default
} }
else else
{ {
wipe_sit_targets(); // wipe_sit_targets() inlined here:
for (i = 0; i <= llGetNumberOfPrims(); i++)
{
if ((string)llGetLinkPrimitiveParams(i, [PRIM_DESC]) != "-1")
{
llLinkSitTarget(i, ZERO_VECTOR, ZERO_ROTATION);
}
}
reused_key = llGetNumberOfNotecardLines(notecard_name); reused_key = llGetNumberOfNotecardLines(notecard_name);
reading_notecard_section = TRUE; reading_notecard_section = TRUE;
} }
@ -464,7 +489,8 @@ default
{ {
if (!SCRIPT_CHANNEL) if (!SCRIPT_CHANNEL)
{ {
Out(0, "Loading " + notecard_name + "..."); // Out() inlined here:
llOwnerSay(llGetScriptName() + "[" + version + "] " + "Loading " + notecard_name + "...");
} }
notecard_query = llGetNotecardLine(notecard_name, reused_variable); notecard_query = llGetNotecardLine(notecard_name, reused_variable);
} }
@ -512,16 +538,16 @@ default
{ {
if (id != MY_SITTER) if (id != MY_SITTER)
{ {
id = llDumpList2String([id, MY_SITTER], "|"); id = (string)id + "|" + (string)MY_SITTER;
} }
llMessageLinked(LINK_SET, (integer)llList2String(ADJUST_MENU, index + 1), msg, id); llMessageLinked(LINK_SET, llList2Integer(ADJUST_MENU, index + 1), msg, id);
} }
else else
{ {
index = llListFindList(["Position", "Rotation", "X+", "Y+", "Z+", "X-", "Y-", "Z-", "0.05m", "0.25m", "0.01m", "5°", "25°", "1°"], [msg]); index = llListFindList(["Position", "Rotation", "X+", "Y+", "Z+", "X-", "Y-", "Z-", "0.05m", "0.25m", "0.01m", "5°", "25°", "1°"], [msg]);
if (msg == "[BACK]") if (msg == "[BACK]")
{ {
llMessageLinked(LINK_SET, 90005, "", llDumpList2String([CONTROLLER, MY_SITTER], "|")); // 90005=send menu to user llMessageLinked(LINK_SET, 90005, "", (string)CONTROLLER + "|" + (string)MY_SITTER); // 90005=send menu to user
} }
else if (msg == "[POSE]") else if (msg == "[POSE]")
{ {
@ -633,6 +659,8 @@ default
{ {
integer one = (integer)msg; integer one = (integer)msg;
integer two = (integer)((string)id); integer two = (integer)((string)id);
integer target;
list data;
if (num == 90075) // 90075=old-style helper ask to animate if (num == 90075) // 90075=old-style helper ask to animate
{ {
if (one == SCRIPT_CHANNEL) if (one == SCRIPT_CHANNEL)
@ -695,7 +723,7 @@ default
} }
if (num == 90298) // 90298=show SitTargets (/5 targets) if (num == 90298) // 90298=show SitTargets (/5 targets)
{ {
integer target = my_sittarget; target = my_sittarget;
if (llGetNumberOfPrims() == 1 && target == 1) if (llGetNumberOfPrims() == 1 && target == 1)
{ {
target = 0; target = 0;
@ -717,7 +745,7 @@ default
} }
if (id == MY_SITTER) if (id == MY_SITTER)
{ {
list data = llParseStringKeepNulls(msg, ["|"], []); data = llParseStringKeepNulls(msg, ["|"], data);
if (num == 90001) // 90001=start an overlay animation if (num == 90001) // 90001=start an overlay animation
{ {
llStartAnimation(msg); llStartAnimation(msg);
@ -730,39 +758,72 @@ default
} }
if (num == 90101) // 90101=menu option chosen if (num == 90101) // 90101=menu option chosen
{ {
CONTROLLER = (key)llList2String(data, 2); CONTROLLER = llList2Key(data, 2);
if (llList2String(data, 1) == "[ADJUST]") if ((msg = llList2String(data, 1)) == "[ADJUST]") // WARNING: reusing msg
{ {
options_menu(); // options_menu() inlined here:
data = [];
if (has_texture)
{
data += "[TEXTURE]";
}
if (llGetInventoryType(expression_script) == INVENTORY_SCRIPT)
{
data += "[FACES]";
}
if (has_security)
{
data += "[SECURITY]";
}
integer i;
while (i < llGetListLength(ADJUST_MENU))
{
data += llList2String(ADJUST_MENU, i);
i = i + 2;
}
if (llGetInventoryType(helper_object) == INVENTORY_OBJECT && llGetInventoryType(adjust_script) == INVENTORY_SCRIPT)
{
data += "[HELPER]";
}
if (!llGetListLength(data))
{
adjust_pose_menu();
return;
}
data += "[POSE]";
dialog("Adjust:", ["[BACK]"] + data);
return;
} }
else if (llList2String(data, 1) == "Harder >>" || llList2String(data, 1) == "<< Softer") if (msg == "Harder >>" || msg == "<< Softer")
{ {
llMessageLinked(LINK_SET, 90005, "", llDumpList2String([CONTROLLER, MY_SITTER], "|")); llMessageLinked(LINK_SET, 90005, "", llDumpList2String([CONTROLLER, MY_SITTER], "|"));
return;
} }
else if (llList2String(data, 1) == "[SWAP]") if (msg == "[SWAP]")
{ {
integer target_script = SCRIPT_CHANNEL + 1; // target here means target script
target = SCRIPT_CHANNEL + 1;
list X = SITTERS + SITTERS; list X = SITTERS + SITTERS;
if (llSubStringIndex(CURRENT_POSE_NAME, "P:")) if (llSubStringIndex(CURRENT_POSE_NAME, "P:"))
{ {
while (llList2Key(X, target_script) == "" && target_script + 1 < llGetListLength(X)) while (llList2Key(X, target) == "" && target + 1 < llGetListLength(X))
{ {
target_script++; target++;
} }
if (llList2Key(X, target_script) == MY_SITTER) if (llList2Key(X, target) == MY_SITTER)
{ {
target_script++; target++;
} }
} }
else else
{ {
while (llList2Key(X, target_script) != "" && target_script < llGetListLength(SITTERS) + SCRIPT_CHANNEL + 1) while (llList2String(X, target) != "" && target < llGetListLength(SITTERS) + SCRIPT_CHANNEL + 1)
{ {
target_script++; target++;
} }
} }
target_script = target_script % llGetListLength(SITTERS); target %= llGetListLength(SITTERS);
llMessageLinked(LINK_THIS, 90030, (string)SCRIPT_CHANNEL, (string)target_script); llMessageLinked(LINK_THIS, 90030, (string)SCRIPT_CHANNEL, (string)target);
} }
return; return;
} }
@ -771,7 +832,7 @@ default
{ {
if (num == 90055) // 90055=anim info from AVsitB if (num == 90055) // 90055=anim info from AVsitB
{ {
list data = llParseStringKeepNulls(id, ["|"], []); data = llParseStringKeepNulls(id, ["|"], data);
OLD_POSE_NAME = CURRENT_POSE_NAME; OLD_POSE_NAME = CURRENT_POSE_NAME;
CURRENT_POSE_NAME = llList2String(data, 0); CURRENT_POSE_NAME = llList2String(data, 0);
OLD_ANIMATION_FILENAME = CURRENT_ANIMATION_FILENAME; OLD_ANIMATION_FILENAME = CURRENT_ANIMATION_FILENAME;
@ -785,14 +846,14 @@ default
FIRST_ROTATION = DEFAULT_ROTATION; FIRST_ROTATION = DEFAULT_ROTATION;
FIRST_ANIMATION_SEQUENCE = CURRENT_ANIMATION_SEQUENCE; FIRST_ANIMATION_SEQUENCE = CURRENT_ANIMATION_SEQUENCE;
} }
speed_index = (integer)llList2String(data, 5); speed_index = llList2Integer(data, 5);
apply_current_anim((integer)llList2String(data, 4)); apply_current_anim(llList2Integer(data, 4));
set_sittarget(); set_sittarget();
return; return;
} }
if (num == 90057) // 90057=helper moved, update position if (num == 90057) // 90057=helper moved, update position
{ {
list data = llParseStringKeepNulls(id, ["|"], []); data = llParseStringKeepNulls(id, ["|"], data);
CURRENT_POSITION = (vector)llList2String(data, 0); CURRENT_POSITION = (vector)llList2String(data, 0);
CURRENT_ROTATION = (vector)llList2String(data, 1); CURRENT_ROTATION = (vector)llList2String(data, 1);
sit_using_prim_params(); sit_using_prim_params();
@ -803,10 +864,10 @@ default
changed(integer change) changed(integer change)
{ {
integer i;
if (change & CHANGED_LINK) if (change & CHANGED_LINK)
{ {
SWAPPED = FALSE; SWAPPED = FALSE;
integer i;
integer stood; integer stood;
if (SET == -1 && llGetListLength(SITTERS) > 1) if (SET == -1 && llGetListLength(SITTERS) > 1)
{ {
@ -878,7 +939,7 @@ default
} }
for (i = 0; i < llGetListLength(SITTERS); i++) for (i = 0; i < llGetListLength(SITTERS); i++)
{ {
if (llList2Key(SITTERS, i) != "" && llListFindList(AVPRIMS, [llList2Key(SITTERS, i)]) == -1) if (llList2String(SITTERS, i) != "" && llListFindList(AVPRIMS, [llList2Key(SITTERS, i)]) == -1)
{ {
llSetTimerEvent(0); llSetTimerEvent(0);
stood = TRUE; stood = TRUE;
@ -969,21 +1030,42 @@ default
SITTERS_SITTARGETS = ORIGINAL_SITTERS_SITTARGETS; SITTERS_SITTARGETS = ORIGINAL_SITTERS_SITTARGETS;
set_sittarget(); set_sittarget();
} }
prep(); // inline prep() here
has_security = has_texture = FALSE;
if (!SCRIPT_CHANNEL)
{
llMessageLinked(LINK_SET, 90201, "", ""); // 90201=Ask for info about plugins
}
} }
if (prims != llGetObjectPrimCount(llGetKey())) if (prims != llGetObjectPrimCount(llGetKey()))
{ {
if (!SCRIPT_CHANNEL) if (!SCRIPT_CHANNEL)
{ {
wipe_sit_targets(); // wipe_sit_targets() inlined here:
for (i = 0; i <= llGetNumberOfPrims(); i++)
{
if ((string)llGetLinkPrimitiveParams(i, [PRIM_DESC]) != "-1")
{
llLinkSitTarget(i, ZERO_VECTOR, ZERO_ROTATION);
}
}
llMessageLinked(LINK_SET, 90150, "", ""); // 90150=ask other AVsitA scripts to place their sittargets again llMessageLinked(LINK_SET, 90150, "", ""); // 90150=ask other AVsitA scripts to place their sittargets again
} }
prep(); // inline prep() here
has_security = has_texture = FALSE;
if (!SCRIPT_CHANNEL)
{
llMessageLinked(LINK_SET, 90201, "", ""); // 90201=Ask for info about plugins
}
} }
} }
if (change & CHANGED_INVENTORY) if (change & CHANGED_INVENTORY)
{ {
if (llGetInventoryKey(notecard_name) != notecard_key || get_number_of_scripts() != llGetListLength(SITTERS) || llGetInventoryType(memoryscript) != INVENTORY_SCRIPT) // get_number_of_scripts() inlined here:
while (llGetInventoryType(main_script + " " + (string)(++i)) == INVENTORY_SCRIPT)
;
if (llGetInventoryKey(notecard_name) != notecard_key || i != llGetListLength(SITTERS) || llGetInventoryType(memoryscript) != INVENTORY_SCRIPT)
{ {
end_sitter(); end_sitter();
llResetScript(); llResetScript();
@ -1027,7 +1109,8 @@ default
llMessageLinked(LINK_THIS, lnk, posename, channel_or_swap); llMessageLinked(LINK_THIS, lnk, posename, channel_or_swap);
if (wrong_primcount && WARN) if (wrong_primcount && WARN)
{ {
primcount_error(); // primcount_error() inlined here:
llDialog(llGetOwner(), "\nThere aren't enough prims for required SitTargets.\nYou must have one prim for each avatar to sit!", ["OK"], 23658);
} }
else if (!MTYPE) else if (!MTYPE)
{ {

View file

@ -63,18 +63,6 @@ send_anim_info(integer broadcast)
llMessageLinked(LINK_THIS, 90055, (string)SCRIPT_CHANNEL, llDumpList2String([llList2String(MENU_LIST, ANIM_INDEX), llList2String(DATA_LIST, ANIM_INDEX), llList2String(POS_ROT_LIST, ANIM_INDEX * 2), llList2String(POS_ROT_LIST, ANIM_INDEX * 2 + 1), broadcast, speed_index], "|")); llMessageLinked(LINK_THIS, 90055, (string)SCRIPT_CHANNEL, llDumpList2String([llList2String(MENU_LIST, ANIM_INDEX), llList2String(DATA_LIST, ANIM_INDEX), llList2String(POS_ROT_LIST, ANIM_INDEX * 2), llList2String(POS_ROT_LIST, ANIM_INDEX * 2 + 1), broadcast, speed_index], "|"));
} }
// LSL::
Readout_Say(string say)
{
llMessageLinked(LINK_THIS, 90022, say, (string)SCRIPT_CHANNEL);
}
// ::LSL
list order_buttons(list buttons)
{
return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4) + llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);
}
memory() memory()
{ {
llOwnerSay(llGetScriptName() + "[" + version + "] " + (string)llGetListLength(MENU_LIST) + " Items Ready, Mem=" + (string)(65536 - llGetUsedMemory())); llOwnerSay(llGetScriptName() + "[" + version + "] " + (string)llGetListLength(MENU_LIST) + " Items Ready, Mem=" + (string)(65536 - llGetUsedMemory()));
@ -102,24 +90,20 @@ integer animation_menu(integer animation_menu_function)
} }
if (SITTER_INFO != "") if (SITTER_INFO != "")
{ {
menu += "[" + llList2String(llParseStringKeepNulls(SITTER_INFO, [SEP], []), 0) + "]"; menu += "[" + llList2String(llParseStringKeepNulls(SITTER_INFO, [SEP], []), 0);
menu += "]";
} }
else if (number_of_sitters > 1) else if (number_of_sitters > 1)
{ {
menu += "[Sitter " + (string)SCRIPT_CHANNEL + "]"; menu += "[Sitter " + (string)SCRIPT_CHANNEL + "]";
} }
integer anim_has_speeds;
string animation_file = llList2String(llParseStringKeepNulls(llList2String(DATA_LIST, ANIM_INDEX), [SEP], []), 0); string animation_file = llList2String(llParseStringKeepNulls(llList2String(DATA_LIST, ANIM_INDEX), [SEP], []), 0);
if (llGetInventoryType(animation_file + "+") == INVENTORY_ANIMATION)
{
anim_has_speeds = TRUE;
}
string CURRENT_POSE_NAME; string CURRENT_POSE_NAME;
if (FIRST_INDEX != -1) if (FIRST_INDEX != -1)
{ {
CURRENT_POSE_NAME = llList2String(MENU_LIST, ANIM_INDEX); CURRENT_POSE_NAME = llList2String(MENU_LIST, ANIM_INDEX);
menu += " [" + llList2String(llParseString2List(CURRENT_POSE_NAME, ["P:"], []), 0); menu += " [" + llList2String(llParseString2List(CURRENT_POSE_NAME, ["P:"], []), 0);
if (anim_has_speeds) if (llGetInventoryType(animation_file + "+") == INVENTORY_ANIMATION)
{ {
if (speed_index < 0) if (speed_index < 0)
{ {
@ -134,9 +118,10 @@ integer animation_menu(integer animation_menu_function)
} }
integer total_items; integer total_items;
integer i = current_menu + 1; integer i = current_menu + 1;
while (i++ < llGetListLength(MENU_LIST) && llSubStringIndex(llList2String(MENU_LIST, i), "M:")) while (i < llGetListLength(MENU_LIST) && llSubStringIndex(llList2String(MENU_LIST, i), "M:"))
{ {
++total_items; ++total_items;
++i;
} }
list menu_items0; list menu_items0;
list menu_items2; list menu_items2;
@ -154,14 +139,12 @@ integer animation_menu(integer animation_menu_function)
menu_items2 += "[NEW]"; menu_items2 += "[NEW]";
if (CURRENT_POSE_NAME != "") if (CURRENT_POSE_NAME != "")
{ {
menu_items2 += "[DUMP]"; menu_items2 = menu_items2 + "[DUMP]" + "[SAVE]";
menu_items2 += "[SAVE]";
} }
} }
else if (llSubStringIndex(submenu_info, "V") != -1) else if (llSubStringIndex(submenu_info, "V") != -1)
{ {
menu_items0 += "<< Softer"; menu_items0 = menu_items0 + "<< Softer" + "Harder >>";
menu_items0 += "Harder >>";
} }
if (AMENU == 2 || (AMENU == 1 && current_menu == -1) || llSubStringIndex(submenu_info, "A") != -1) if (AMENU == 2 || (AMENU == 1 && current_menu == -1) || llSubStringIndex(submenu_info, "A") != -1)
{ {
@ -181,14 +164,14 @@ integer animation_menu(integer animation_menu_function)
menu_items2 += "[STOP]"; menu_items2 += "[STOP]";
if (!helper_mode) if (!helper_mode)
{ {
menu_items2 += ["Control..."]; menu_items2 += "Control...";
} }
} }
} }
integer items_per_page = 12 - llGetListLength(menu_items2) - llGetListLength(menu_items0); integer items_per_page = 12 - llGetListLength(menu_items2) - llGetListLength(menu_items0);
if (items_per_page < total_items) if (items_per_page < total_items)
{ {
menu_items2 += ["[<<]", "[>>]"]; menu_items2 = menu_items2 + "[<<]" + "[>>]";
items_per_page -= 2; items_per_page -= 2;
} }
list menu_items1; list menu_items1;
@ -216,12 +199,7 @@ integer animation_menu(integer animation_menu_function)
@end; @end;
if (animation_menu_function == 1) if (animation_menu_function == 1)
{ {
integer pages = total_items / (12 - llGetListLength(menu_items2) - llGetListLength(menu_items0)); return (total_items + items_per_page - 1) / items_per_page - 1;
if ((total_items % (12 - llGetListLength(menu_items2) - llGetListLength(menu_items0))) == 0)
{
pages--;
}
return pages;
} }
if (submenu_info == "V") if (submenu_info == "V")
{ {
@ -232,7 +210,12 @@ integer animation_menu(integer animation_menu_function)
} }
llListenRemove(menu_handle); llListenRemove(menu_handle);
menu_handle = llListen(menu_channel, "", CONTROLLER, ""); menu_handle = llListen(menu_channel, "", CONTROLLER, "");
llDialog(CONTROLLER, menu, order_buttons(menu_items0 + menu_items1 + menu_items2), menu_channel); menu_items0 = menu_items0 + menu_items1 + menu_items2;
menu_items1 = llList2List(menu_items0, -3, -1);
menu_items1 += llList2List(menu_items0, -6 ,-4);
menu_items1 += llList2List(menu_items0, -9 ,-7);
menu_items1 += llList2List(menu_items0, -12 ,-10);
llDialog(CONTROLLER, menu, menu_items1, menu_channel);
} }
return 0; return 0;
} }
@ -389,30 +372,25 @@ default
{ {
integer one = (integer)msg; integer one = (integer)msg;
integer two = (integer)((string)id); integer two = (integer)((string)id);
integer index;
list data;
if (num == 90000 || num == 90010 || num == 90003) if (num == 90000 || num == 90010 || num == 90003)
{ {
integer index = llListFindList(MENU_LIST, [msg]); index = llListFindList(MENU_LIST, [msg]);
if (index == -1) if (index == -1)
{ {
index = llListFindList(MENU_LIST, ["P:" + msg]); index = llListFindList(MENU_LIST, ["P:" + msg]);
} }
integer doit; if (id) // OSS::if (osIsUUID(id) && id != NULL_KEY)
if (id == "")
{ {
doit = TRUE; // do nothing
} }
else if (id) // OSS::else if (osIsUUID(id) && id != NULL_KEY) else if (id != "")
{ {
if (id == MY_SITTER) // assumed numeric - replace it with a "*" so we can test for it
{ id = "*";
doit = TRUE;
}
} }
else if (two == SCRIPT_CHANNEL) if ((id == "" || id == MY_SITTER || (id == "*" && two == SCRIPT_CHANNEL)) && (index != -1 || msg == ""))
{
doit = TRUE;
}
if (doit && (index != -1 || msg == ""))
{ {
ANIM_INDEX = index; ANIM_INDEX = index;
integer broadcast = TRUE; integer broadcast = TRUE;
@ -429,29 +407,31 @@ default
} }
} }
} }
return;
} }
else if (num == 90045 && sender == llGetLinkNumber() && (ETYPE == 1 || ETYPE == 2)) if (num == 90045 && sender == llGetLinkNumber() && (ETYPE == 1 || ETYPE == 2))
{ {
list data = llParseStringKeepNulls(msg, ["|"], []); string OLD_SYNC = llList2String(llParseStringKeepNulls(msg, ["|"], data), 5);
string OLD_SYNC = llList2String(data, 5);
if (OLD_SYNC != "" && llList2String(MENU_LIST, ANIM_INDEX) == OLD_SYNC) if (OLD_SYNC != "" && llList2String(MENU_LIST, ANIM_INDEX) == OLD_SYNC)
{ {
ANIM_INDEX = FIRST_INDEX; ANIM_INDEX = FIRST_INDEX;
send_anim_info(TRUE); send_anim_info(TRUE);
} }
return;
} }
else if (num == 90033) if (num == 90033)
{ {
llListenRemove(menu_handle); llListenRemove(menu_handle);
return;
} }
else if (num == 90004 || num == 90005) if (num == 90004 || num == 90005)
{ {
list data = llParseStringKeepNulls(id, ["|"], []); data = llParseStringKeepNulls(id, ["|"], data);
if ((key)llList2String(data, -1) == MY_SITTER) if (llList2Key(data, -1) == MY_SITTER)
{ {
key lastController = CONTROLLER; key lastController = CONTROLLER;
CONTROLLER = (key)llList2String(data, 0); CONTROLLER = llList2Key(data, 0);
integer index = llListFindList(MENU_LIST, ["M:" + msg + "*"]); index = llListFindList(MENU_LIST, ["M:" + msg + "*"]);
if (num == 90004) if (num == 90004)
{ {
current_menu = -1; current_menu = -1;
@ -465,55 +445,61 @@ default
} }
animation_menu((integer)msg); animation_menu((integer)msg);
} }
return;
} }
else if (num == 90030 && (one == SCRIPT_CHANNEL || two == SCRIPT_CHANNEL)) if (num == 90030 && (one == SCRIPT_CHANNEL || two == SCRIPT_CHANNEL))
{ {
CONTROLLER = MY_SITTER = ""; CONTROLLER = MY_SITTER = "";
return;
} }
else if (num == 90100 || num == 90101) if (num == 90100 || num == 90101)
{ {
list data = llParseStringKeepNulls(msg, ["|"], []); // reuse msg to save a local
if (llList2String(data, 1) == "[HELPER]") msg = llList2String((data = llParseStringKeepNulls(msg, ["|"], data)), 1);
if (msg == "[HELPER]")
{ {
menu_page = 0; menu_page = 0;
helper_mode = !helper_mode; helper_mode = !helper_mode;
if ((key)llList2String(data, 2) == MY_SITTER && !OLD_HELPER_METHOD) if (llList2Key(data, 2) == MY_SITTER && !OLD_HELPER_METHOD)
{ {
animation_menu(0); animation_menu(0);
} }
} }
else if (llList2String(data, 1) == "[ADJUST]") if (msg == "[ADJUST]")
{ {
helper_mode = FALSE; helper_mode = FALSE;
menu_page = 0; menu_page = 0;
} }
else if (llList2String(data, 1) == "Harder >>") if (msg == "Harder >>")
{ {
++speed_index; ++speed_index;
if (speed_index > 1) if (speed_index > 1)
speed_index = 1; speed_index = 1;
send_anim_info(FALSE); send_anim_info(FALSE);
} }
else if (llList2String(data, 1) == "<< Softer") if (msg == "<< Softer")
{ {
--speed_index; --speed_index;
if (speed_index < -1) if (speed_index < -1)
speed_index = -1; speed_index = -1;
send_anim_info(FALSE); send_anim_info(FALSE);
} }
return;
} }
else if (num == 90201) if (num == 90201)
{ {
has_RLV = FALSE; has_RLV = FALSE;
return;
} }
else if (num == 90202) if (num == 90202)
{ {
has_RLV = (integer)msg; has_RLV = (integer)msg;
return;
} }
else if (one == SCRIPT_CHANNEL) if (one == SCRIPT_CHANNEL)
{ {
list data = llParseStringKeepNulls(id, ["|"], []); data = llParseStringKeepNulls(id, ["|"], data);
integer index = llListFindList(MENU_LIST, [llList2String(data, 0)]); index = llListFindList(MENU_LIST, [llList2String(data, 0)]);
if (index == -1) if (index == -1)
{ {
index = llListFindList(MENU_LIST, ["P:" + llList2String(data, 0)]); index = llListFindList(MENU_LIST, ["P:" + llList2String(data, 0)]);
@ -521,21 +507,24 @@ default
if (num == 90299) if (num == 90299)
{ {
MENU_LIST = DATA_LIST = POS_ROT_LIST = []; MENU_LIST = DATA_LIST = POS_ROT_LIST = [];
return;
} }
else if (num == 90070) if (num == 90070)
{ {
CONTROLLER = MY_SITTER = id; CONTROLLER = MY_SITTER = id;
menu_page = 0; menu_page = 0;
current_menu = -1; current_menu = -1;
menu_channel = ((integer)llFrand(0x7FFFFF80) + 1) * -1; // 7FFFFF80 = max float < 2^31 menu_channel = ((integer)llFrand(0x7FFFFF80) + 1) * -1; // 7FFFFF80 = max float < 2^31
llListenRemove(menu_handle); llListenRemove(menu_handle);
return;
} }
else if (num == 90065 && sender == llGetLinkNumber()) if (num == 90065 && sender == llGetLinkNumber())
{ {
CONTROLLER = MY_SITTER = ""; CONTROLLER = MY_SITTER = "";
llListenRemove(menu_handle); llListenRemove(menu_handle);
return;
} }
else if (num == 90300) if (num == 90300)
{ {
integer place_to_add = llGetListLength(MENU_LIST); integer place_to_add = llGetListLength(MENU_LIST);
if (llGetListLength(data) > 2) if (llGetListLength(data) > 2)
@ -568,8 +557,9 @@ default
send_anim_info(TRUE); send_anim_info(TRUE);
memory(); memory();
} }
return;
} }
else if (num == 90301) if (num == 90301)
{ {
if (index != -1) if (index != -1)
{ {
@ -579,35 +569,47 @@ default
send_anim_info(FALSE); send_anim_info(FALSE);
} }
} }
return;
} }
else if (num == 90302) if (num == 90302)
{ {
number_of_sitters = (integer)llList2String(data, 0); number_of_sitters = llList2Integer(data, 0);
SITTER_INFO = llList2String(data, 1); SITTER_INFO = llList2String(data, 1);
SET = (integer)llList2String(data, 2); SET = llList2Integer(data, 2);
MTYPE = (integer)llList2String(data, 3); MTYPE = llList2Integer(data, 3);
ETYPE = (integer)llList2String(data, 4); ETYPE = llList2Integer(data, 4);
SWAP = (integer)llList2String(data, 5); SWAP = llList2Integer(data, 5);
FIRST_INDEX = ANIM_INDEX = llListFindList(MENU_LIST, [llList2String(data, 6)]); FIRST_INDEX = ANIM_INDEX = llListFindList(MENU_LIST, [llList2String(data, 6)]);
BRAND = llList2String(data, 7); BRAND = llList2String(data, 7);
CUSTOM_TEXT = llList2String(data, 8); CUSTOM_TEXT = llList2String(data, 8);
ADJUST_MENU = llList2String(data, 9); ADJUST_MENU = llList2String(data, 9);
SELECT = (integer)llList2String(data, 10); SELECT = llList2Integer(data, 10);
AMENU = (integer)llList2String(data, 11); AMENU = llList2Integer(data, 11);
OLD_HELPER_METHOD = (integer)llList2String(data, 12); OLD_HELPER_METHOD = llList2Integer(data, 12);
RLVDesignations = llList2String(data, 13); RLVDesignations = llList2String(data, 13);
onSit = llList2String(data, 14); onSit = llList2String(data, 14);
memory(); memory();
return;
} }
// LSL:: // LSL::
else if (num == 90020 && llList2String(data, 0) == "") if (num == 90020 && llList2String(data, 0) == "")
{ {
Readout_Say("V:" + llDumpList2String([version, MTYPE, ETYPE, SET, SWAP, SITTER_INFO, CUSTOM_TEXT, ADJUST_MENU, SELECT, AMENU, OLD_HELPER_METHOD], "|")); llMessageLinked(LINK_THIS, 90022
, "V:" + llDumpList2String(
[version, MTYPE, ETYPE, SET, SWAP, SITTER_INFO,
CUSTOM_TEXT, ADJUST_MENU, SELECT, AMENU,
OLD_HELPER_METHOD], "|")
, (string)SCRIPT_CHANNEL
);
integer i = -1; integer i = -1;
while (++i < llGetListLength(MENU_LIST)) while (++i < llGetListLength(MENU_LIST))
{ {
llSleep(0.5); llSleep(0.5);
Readout_Say("S:" + llList2String(MENU_LIST, i) + "|" + llList2String(DATA_LIST, i)); llMessageLinked(LINK_THIS, 90022
, "S:" + llList2String(MENU_LIST, i)
+ "|" + llList2String(DATA_LIST, i)
, (string)SCRIPT_CHANNEL
);
} }
i = -1; i = -1;
while (++i < llGetListLength(MENU_LIST)) while (++i < llGetListLength(MENU_LIST))
@ -615,19 +617,29 @@ default
if (llList2Vector(POS_ROT_LIST, i * 2) != ZERO_VECTOR) if (llList2Vector(POS_ROT_LIST, i * 2) != ZERO_VECTOR)
{ {
llSleep(0.2); llSleep(0.2);
Readout_Say("{" + llList2String(MENU_LIST, i) + "}" + llList2String(POS_ROT_LIST, i * 2) + llList2String(POS_ROT_LIST, i * 2 + 1)); llMessageLinked(LINK_THIS, 90022
, "{" + llList2String(MENU_LIST, i) + "}"
+ llList2String(POS_ROT_LIST, i * 2)
+ llList2String(POS_ROT_LIST, i * 2 + 1)
, (string)SCRIPT_CHANNEL
);
} }
} }
llMessageLinked(LINK_THIS, 90021, (string)SCRIPT_CHANNEL, ""); llMessageLinked(LINK_THIS, 90021, (string)SCRIPT_CHANNEL, "");
return;
} }
// ::LSL // ::LSL
/* OSS:: /* OSS::
else if (num == 90020 && llList2String(data, 0) == "") if (num == 90020)
{ {
llMessageLinked(LINK_THIS, 90022, "V:" + llDumpList2String([version, MTYPE, ETYPE, SET, SWAP, SITTER_INFO, CUSTOM_TEXT, ADJUST_MENU, SELECT, AMENU, OLD_HELPER_METHOD], "|"), (string)SCRIPT_CHANNEL); if (llList2String(data, 0) == "")
llMessageLinked(LINK_THIS, 90024, (string)SCRIPT_CHANNEL, "-1|D"); {
llMessageLinked(LINK_THIS, 90022, "V:" + llDumpList2String([version, MTYPE, ETYPE, SET, SWAP, SITTER_INFO, CUSTOM_TEXT, ADJUST_MENU, SELECT, AMENU, OLD_HELPER_METHOD], "|"), (string)SCRIPT_CHANNEL);
llMessageLinked(LINK_THIS, 90024, (string)SCRIPT_CHANNEL, "-1|D");
}
return;
} }
else if (num == 90024) // self-sent message to dump the next line if (num == 90024) // self-sent message to dump the next line
{ {
if (llList2String(data, 1) == "D") if (llList2String(data, 1) == "D")
{ {