diff options
author | onefang | 2021-09-06 21:58:36 +1000 |
---|---|---|
committer | onefang | 2021-09-06 21:58:36 +1000 |
commit | c1163cb3ff907a91205b8de553430b0cdfabe375 (patch) | |
tree | 946214e8a07c498d30938674152da80a1ad05fc6 /1AOor2.lsl | |
parent | Move auto prefix generation until after the configured prefix might have been... (diff) | |
download | 1ring-c1163cb3ff907a91205b8de553430b0cdfabe375.zip 1ring-c1163cb3ff907a91205b8de553430b0cdfabe375.tar.gz 1ring-c1163cb3ff907a91205b8de553430b0cdfabe375.tar.bz2 1ring-c1163cb3ff907a91205b8de553430b0cdfabe375.tar.xz |
Rip it a new one. Er replace Sitters "structure" with Avs.
Diffstat (limited to '')
-rw-r--r-- | 1AOor2.lsl | 286 |
1 files changed, 149 insertions, 137 deletions
@@ -309,7 +309,7 @@ integer doThing(key id, string button, string fr, string cmd, string data, integ | |||
309 | if (-1 != set) setSetting(id, fr + cmd, data, fINT); else S("Unknown setting '" + cmd); | 309 | if (-1 != set) setSetting(id, fr + cmd, data, fINT); else S("Unknown setting '" + cmd); |
310 | } | 310 | } |
311 | if ((fr != (ScriptName + ".") && ("*." != fr))) return TRUE; | 311 | if ((fr != (ScriptName + ".") && ("*." != fr))) return TRUE; |
312 | integer st = findSitter(id); | 312 | integer av = findAvatar(id); |
313 | integer f; | 313 | integer f; |
314 | string menu; | 314 | string menu; |
315 | f = llSubStringIndex(button, "->"); | 315 | f = llSubStringIndex(button, "->"); |
@@ -355,37 +355,37 @@ integer doThing(key id, string button, string fr, string cmd, string data, integ | |||
355 | } | 355 | } |
356 | else if ("LESS_-" == cmd) | 356 | else if ("LESS_-" == cmd) |
357 | { | 357 | { |
358 | integer distance = llList2Integer(Sitters, st + pDIST); | 358 | integer distance = llList2Integer(Avs, av + aDIST); |
359 | --distance; | 359 | --distance; |
360 | if (0 > distance) distance = 0; | 360 | if (0 > distance) distance = 0; |
361 | Sitters = llListReplaceList(Sitters, [distance], st + pDIST, st + pDIST); | 361 | Avs = llListReplaceList(Avs, [distance], av + aDIST, av + aDIST); |
362 | showMenu(id); | 362 | showMenu(id); |
363 | return FALSE; | 363 | return FALSE; |
364 | } | 364 | } |
365 | else if ("MORE_+" == cmd) | 365 | else if ("MORE_+" == cmd) |
366 | { | 366 | { |
367 | integer distance = llList2Integer(Sitters, st + pDIST); | 367 | integer distance = llList2Integer(Avs, av + aDIST); |
368 | ++distance; | 368 | ++distance; |
369 | if (llGetListLength(Distances) <= distance) distance = llGetListLength(Distances) - 1; | 369 | if (llGetListLength(Distances) <= distance) distance = llGetListLength(Distances) - 1; |
370 | Sitters = llListReplaceList(Sitters, [distance], st + pDIST, st + pDIST); | 370 | Avs = llListReplaceList(Avs, [distance], av + aDIST, av + aDIST); |
371 | showMenu(id); | 371 | showMenu(id); |
372 | return FALSE; | 372 | return FALSE; |
373 | } | 373 | } |
374 | else if ("NEXT_AVATAR" == cmd) | 374 | else if ("NEXT_AVATAR" == cmd) |
375 | { | 375 | { |
376 | key them = llList2Key(Sitters, st + pADJ); | 376 | key them = llList2Key(Avs, av + aADJ); |
377 | integer t = findSitter(them); | 377 | integer t = findAvatar(them); |
378 | if (-1 != t) | 378 | if (-1 != t) |
379 | { | 379 | { |
380 | t += pSTRIDE; | 380 | t += aSTRIDE; |
381 | if (llGetListLength(Sitters) <= t) | 381 | if (llGetListLength(Avs) <= t) |
382 | t = -1; | 382 | t = -1; |
383 | } | 383 | } |
384 | else t = 0; | 384 | else t = 0; |
385 | if (-1 != t) | 385 | if (-1 != t) |
386 | Sitters = llListReplaceList(Sitters, [llList2Key(Sitters, t + pKEY)], st + pADJ, st + pADJ); | 386 | Avs = llListReplaceList(Avs, [llList2Key(Avs, t + aKEY)], av + aADJ, av + aADJ); |
387 | else | 387 | else |
388 | Sitters = llListReplaceList(Sitters, [ScriptKey], st + pADJ, st + pADJ); | 388 | Avs = llListReplaceList(Avs, [ScriptKey], av + aADJ, av + aADJ); |
389 | showMenu(id); | 389 | showMenu(id); |
390 | return FALSE; | 390 | return FALSE; |
391 | } | 391 | } |
@@ -395,27 +395,21 @@ integer doThing(key id, string button, string fr, string cmd, string data, integ | |||
395 | { | 395 | { |
396 | integer i = llSubStringIndex(cmd, "_"); | 396 | integer i = llSubStringIndex(cmd, "_"); |
397 | if (-1 != i) cmd = llGetSubString(cmd, 0, i - 1) + " " + llGetSubString(cmd, i + 1, -1); | 397 | if (-1 != i) cmd = llGetSubString(cmd, 0, i - 1) + " " + llGetSubString(cmd, i + 1, -1); |
398 | adjust(id, llList2Float(Distances, llList2Integer(Sitters, st + pDIST)), llToLower(cmd)); | 398 | adjust(id, llList2Float(Distances, llList2Integer(Avs, av + aDIST)), llToLower(cmd)); |
399 | } | 399 | } |
400 | else if ("AO" == cmd) | 400 | else if ("AO" == cmd) |
401 | { | 401 | { |
402 | if ("0" != data) | 402 | if ("0" != data) |
403 | { | 403 | { |
404 | integer l = llGetListLength(Sitters); | 404 | integer l = llGetListLength(Avs); |
405 | Pose = ""; | 405 | nextState = ""; |
406 | for (f = 0; f < l; f += pSTRIDE) | 406 | for (f = 0; f < l; f += aSTRIDE) |
407 | updateSitter(llList2Key(Sitters, f + pKEY)); | 407 | updateAvatar(llList2Key(Avs, f + aKEY)); |
408 | } | 408 | } |
409 | checkAO(); | 409 | checkAO(); |
410 | } | 410 | } |
411 | else if ("SYNC" == cmd) | 411 | else if ("SYNC" == cmd) |
412 | { | 412 | { |
413 | integer l = llGetListLength(Sitters); | ||
414 | for (f = 0; f < l; f += pSTRIDE) | ||
415 | { | ||
416 | if (("R" != data) || (0 == llGetListLength(isPoseAO(f)))) | ||
417 | Sitters = llListReplaceList(Sitters, [""], f + pSTATE, f + pSTATE); | ||
418 | } | ||
419 | if ("R" != data) | 413 | if ("R" != data) |
420 | vAnim = data; | 414 | vAnim = data; |
421 | checkAO(); | 415 | checkAO(); |
@@ -643,11 +637,11 @@ d("New URL " + URL); | |||
643 | Chosen = -1; | 637 | Chosen = -1; |
644 | else | 638 | else |
645 | { | 639 | { |
646 | if (-1 != st) | 640 | if (-1 != av) |
647 | { | 641 | { |
648 | if ("" != llList2Key(Sitters, st + pADJ)) | 642 | if ("" != llList2Key(Avs, av + aADJ)) |
649 | { | 643 | { |
650 | Sitters = llListReplaceList(Sitters, [""], st + pADJ, st + pADJ); | 644 | Avs = llListReplaceList(Avs, [""], av + aADJ, av + aADJ); |
651 | s(id, "Switched out of adjusting mode."); | 645 | s(id, "Switched out of adjusting mode."); |
652 | addEvent(Tick * Smooth, "Keys"); | 646 | addEvent(Tick * Smooth, "Keys"); |
653 | } | 647 | } |
@@ -689,17 +683,17 @@ string HoverText = "loveness"; | |||
689 | string Sit0Text = "carry them"; | 683 | string Sit0Text = "carry them"; |
690 | string Sit1Text = "be carried"; | 684 | string Sit1Text = "be carried"; |
691 | 685 | ||
692 | // DrivableBox | 686 | // DrivableBox and AO |
693 | list Sitters = []; | 687 | list Avs = []; |
694 | integer pKEY = 0; // Key of the sitter. | 688 | integer aKEY = 0; // Key of the avatar. |
695 | integer pLINK = 1; // The "prim" link the sitter is. | 689 | integer aNUM = 1; // Number of the sitter, index into Poses[].psANIM and Poses[].psPOSROT |
696 | integer pSTATE = 2; // The current AOstate for this person. | 690 | integer aLINK = 2; // The "prim" link the avatar is. |
697 | integer pNEW = 3; // New state for this person. | 691 | integer aSTATE = 3; // AO / Pose state for this person. |
698 | integer pANIMS = 4; // Current set of animations for this person. | 692 | integer aANIM = 4; // Current animation for this avatar. |
699 | integer pADJ = 5; // Key of who they are adjusting, "" means not adjusting, NULL_KEY will mean adjust all. | 693 | integer aADJ = 5; // Key of who they are adjusting, "" means not adjusting, NULL_KEY will mean adjust all. |
700 | integer pDIST = 6; // For the adjusting this person is doing, not for who they are adjusting. | 694 | integer aDIST = 6; // For the adjusting this avatar is doing, not for who they are adjusting. Index into Distances[]. |
701 | integer pKEYS = 7; // KeysLevel for this sitter. | 695 | integer aKEYS = 7; // KeysLevel for this avatar. Mostly needed for held down keys I think? |
702 | integer pSTRIDE = 8; | 696 | integer aSTRIDE = 8; |
703 | list Poses; // List of poses. | 697 | list Poses; // List of poses. |
704 | integer psNAME = 0; // Name of pose. | 698 | integer psNAME = 0; // Name of pose. |
705 | integer psANIM = 1; // | separated animations. | 699 | integer psANIM = 1; // | separated animations. |
@@ -763,7 +757,7 @@ integer checkAnim(string a) | |||
763 | newPose(key id, string p, list ps) | 757 | newPose(key id, string p, list ps) |
764 | { | 758 | { |
765 | integer f = findPose(p); | 759 | integer f = findPose(p); |
766 | integer l = llGetListLength(Sitters); | 760 | integer l = llGetListLength(Avs); |
767 | if (-1 != f) | 761 | if (-1 != f) |
768 | { | 762 | { |
769 | setSetting(id, "AO", "0", fINT); | 763 | setSetting(id, "AO", "0", fINT); |
@@ -775,7 +769,7 @@ newPose(key id, string p, list ps) | |||
775 | } | 769 | } |
776 | } | 770 | } |
777 | 771 | ||
778 | integer findSitter(key id) {return listFindString(Sitters, id, pSTRIDE);} | 772 | integer findAvatar(key id) {return listFindString(Avs, id, aSTRIDE);} |
779 | 773 | ||
780 | string prStr(string str) | 774 | string prStr(string str) |
781 | { | 775 | { |
@@ -957,7 +951,7 @@ doControl(key id, integer level, integer edge) | |||
957 | integer f = findSitter(id); | 951 | integer f = findSitter(id); |
958 | if (-1 != f) | 952 | if (-1 != f) |
959 | { | 953 | { |
960 | integer a = ("" != llList2Key(Sitters, f + pADJ)); | 954 | integer a = ("" != llList2Key(Avs, f + aADJ)); |
961 | if ((held == (CONTROL_BACK | CONTROL_FWD)) || | 955 | if ((held == (CONTROL_BACK | CONTROL_FWD)) || |
962 | (held == (CONTROL_DOWN | CONTROL_UP)) || | 956 | (held == (CONTROL_DOWN | CONTROL_UP)) || |
963 | (held == (CONTROL_LEFT | CONTROL_RIGHT)) || | 957 | (held == (CONTROL_LEFT | CONTROL_RIGHT)) || |
@@ -969,7 +963,7 @@ doControl(key id, integer level, integer edge) | |||
969 | { | 963 | { |
970 | if (a) | 964 | if (a) |
971 | { | 965 | { |
972 | Sitters = llListReplaceList(Sitters, [""], f + pADJ, f + pADJ); | 966 | Avs = llListReplaceList(Avs, [""], f + aADJ, f + aADJ); |
973 | s(id, "Switched out of adjusting mode."); | 967 | s(id, "Switched out of adjusting mode."); |
974 | addEvent(Tick * Smooth, "Keys"); | 968 | addEvent(Tick * Smooth, "Keys"); |
975 | } | 969 | } |
@@ -985,7 +979,7 @@ doControl(key id, integer level, integer edge) | |||
985 | HeldKeys = 0; | 979 | HeldKeys = 0; |
986 | level = 0; | 980 | level = 0; |
987 | } | 981 | } |
988 | Sitters = llListReplaceList(Sitters, [level], f + pKEYS, f + pKEYS); | 982 | Avs = llListReplaceList(Avs, [level], f + aKEYS, f + aKEYS); |
989 | if (0 != edge) ControlTime = llGetTimeOfDay(); | 983 | if (0 != edge) ControlTime = llGetTimeOfDay(); |
990 | if (level != LevelKeys) | 984 | if (level != LevelKeys) |
991 | updateControls(); | 985 | updateControls(); |
@@ -1001,13 +995,13 @@ updateControls() | |||
1001 | { | 995 | { |
1002 | if (Attached) return; | 996 | if (Attached) return; |
1003 | integer mode = vNONE; integer reverse = 1; float speed = 0.0; float rot = 0.0; | 997 | integer mode = vNONE; integer reverse = 1; float speed = 0.0; float rot = 0.0; |
1004 | integer l = llGetListLength(Sitters); integer i; | 998 | integer l = llGetListLength(Avs); integer i; |
1005 | integer keys; | 999 | integer keys; |
1006 | for (i = l - pSTRIDE; i >= 0; i -= pSTRIDE) | 1000 | for (i = l - aSTRIDE; i >= 0; i -= aSTRIDE) |
1007 | { | 1001 | { |
1008 | key k = llList2Key(Sitters, i + pKEY); | 1002 | key k = llList2Key(Avs, i + aKEY); |
1009 | keys = llList2Integer(Sitters, i + pKEYS); | 1003 | keys = llList2Integer(Avs, i + aKEYS); |
1010 | if ("" == llList2Key(Sitters, i + pADJ)) | 1004 | if ("" == llList2Key(Avs, i + aADJ)) |
1011 | { | 1005 | { |
1012 | if (keys & (CONTROL_DOWN |CONTROL_UP)) mode = vUP; | 1006 | if (keys & (CONTROL_DOWN |CONTROL_UP)) mode = vUP; |
1013 | if (keys & (CONTROL_BACK | CONTROL_FWD)) mode = vFWD; | 1007 | if (keys & (CONTROL_BACK | CONTROL_FWD)) mode = vFWD; |
@@ -1024,7 +1018,7 @@ updateControls() | |||
1024 | } | 1018 | } |
1025 | else | 1019 | else |
1026 | { | 1020 | { |
1027 | float d = llList2Float(Distances, llList2Integer(Sitters, i + pDIST)); | 1021 | float d = llList2Float(Distances, llList2Integer(Avs, i + aDIST)); |
1028 | if (keys & CONTROL_FWD) adjust(k, d, "forward"); | 1022 | if (keys & CONTROL_FWD) adjust(k, d, "forward"); |
1029 | if (keys & CONTROL_BACK) adjust(k, d, "backwards"); | 1023 | if (keys & CONTROL_BACK) adjust(k, d, "backwards"); |
1030 | if (keys & CONTROL_LEFT) adjust(k, d, "left"); | 1024 | if (keys & CONTROL_LEFT) adjust(k, d, "left"); |
@@ -1044,7 +1038,7 @@ updateControls() | |||
1044 | 1038 | ||
1045 | adjust(key id, float dist, string direction) | 1039 | adjust(key id, float dist, string direction) |
1046 | { | 1040 | { |
1047 | integer f = findSitter(id); | 1041 | integer f = findAvatar(id); |
1048 | integer i = -1; | 1042 | integer i = -1; |
1049 | list p; | 1043 | list p; |
1050 | i = findPose(Pose); | 1044 | i = findPose(Pose); |
@@ -1054,27 +1048,28 @@ adjust(key id, float dist, string direction) | |||
1054 | return; | 1048 | return; |
1055 | if (-1 != f) | 1049 | if (-1 != f) |
1056 | { | 1050 | { |
1057 | key them = llList2Key(Sitters, f + pADJ); | 1051 | key them = llList2Key(Avs, f + aADJ); |
1058 | integer l; integer t; | 1052 | integer l; integer t; |
1059 | if (ScriptKey == them) | 1053 | if (ScriptKey == them) |
1060 | { | 1054 | { |
1061 | t = 0; | 1055 | t = 0; |
1062 | l = llGetListLength(Sitters); | 1056 | l = llGetListLength(Avs); |
1063 | } | 1057 | } |
1064 | else | 1058 | else |
1065 | { | 1059 | { |
1066 | t = findSitter(them); | 1060 | t = findAvatar(them); |
1067 | l = t + pSTRIDE; | 1061 | l = t + aSTRIDE; |
1068 | } | 1062 | } |
1069 | if (-1 != t) | 1063 | if (-1 != t) |
1070 | { | 1064 | { |
1071 | if (("turn left" == direction) || ("turn right" == direction)) dist = dist * 90.0; | 1065 | if (("turn left" == direction) || ("turn right" == direction)) dist = dist * 90.0; |
1072 | for (; t < l; t += pSTRIDE) | 1066 | for (; t < l; t += aSTRIDE) |
1073 | { | 1067 | { |
1074 | them = llList2Key(Sitters, t + pKEY); | 1068 | them = llList2Key(Avs, t + aKEY); |
1075 | integer lnk = llList2Integer(Sitters, t + pLINK); | 1069 | integer num = llList2Integer(Avs, t + aNUM); |
1070 | integer lnk = llList2Integer(Avs, t + aLINK); | ||
1076 | if (-1 == lnk) return; | 1071 | if (-1 == lnk) return; |
1077 | string prn = llList2String(p, t / pSTRIDE); | 1072 | string prn = llList2String(p, num); |
1078 | integer ix = llSubStringIndex(prn, ">"); | 1073 | integer ix = llSubStringIndex(prn, ">"); |
1079 | vector pos = (vector) llGetSubString(prn, 0, ix); | 1074 | vector pos = (vector) llGetSubString(prn, 0, ix); |
1080 | vector rot = (vector) llGetSubString(prn, ix + 1, -1); | 1075 | vector rot = (vector) llGetSubString(prn, ix + 1, -1); |
@@ -1086,9 +1081,9 @@ adjust(key id, float dist, string direction) | |||
1086 | else if ("down" == direction) pos.z = pos.z - dist; | 1081 | else if ("down" == direction) pos.z = pos.z - dist; |
1087 | else if ("turn left" == direction) rot.z = rot.z + (dist); | 1082 | else if ("turn left" == direction) rot.z = rot.z + (dist); |
1088 | else if ("turn right" == direction) rot.z = rot.z - (dist); | 1083 | else if ("turn right" == direction) rot.z = rot.z - (dist); |
1089 | p = llListReplaceList(p, [vround(pos, rot)], t / pSTRIDE, t / pSTRIDE); | 1084 | p = llListReplaceList(p, [vround(pos, rot)], num, num); |
1090 | Poses = llListReplaceList(Poses, [llDumpList2String(p, "|")], i + psPOSROT, i + psPOSROT); | 1085 | Poses = llListReplaceList(Poses, [llDumpList2String(p, "|")], i + psPOSROT, i + psPOSROT); |
1091 | updateSitter(them); | 1086 | updateAvatar(them); |
1092 | s(id, llKey2Name(id) + " adjusts " + llKey2Name(them) + " by " + (string) dist + " " + direction); | 1087 | s(id, llKey2Name(id) + " adjusts " + llKey2Name(them) + " by " + (string) dist + " " + direction); |
1093 | if (id != them) | 1088 | if (id != them) |
1094 | s(them, llKey2Name(id) + " adjusts " + llKey2Name(them) + " by " + (string)dist + " " + direction); | 1089 | s(them, llKey2Name(id) + " adjusts " + llKey2Name(them) + " by " + (string)dist + " " + direction); |
@@ -1097,20 +1092,21 @@ adjust(key id, float dist, string direction) | |||
1097 | } | 1092 | } |
1098 | } | 1093 | } |
1099 | 1094 | ||
1100 | updateSitter(key id) | 1095 | updateAvatar(key id) |
1101 | { // Written by Strife Onizuka, size adjustment provided by Talarus Luan | 1096 | { // Written by Strife Onizuka, size adjustment provided by Talarus Luan |
1102 | // Using this while the object is moving may give unpredictable results. | 1097 | // Using this while the object is moving may give unpredictable results. |
1103 | integer f = findSitter(id); | 1098 | integer f = findAvatar(id); |
1104 | if (-1 != f) | 1099 | if (-1 != f) |
1105 | { | 1100 | { |
1106 | integer lnk = llList2Integer(Sitters, f + pLINK); | 1101 | integer lnk = llList2Integer(Avs, f + aLINK); |
1107 | if (-1 == lnk) return; | 1102 | if (-1 == lnk) return; |
1103 | integer num = llList2Integer(Avs, f + aNUM); | ||
1108 | vector pos = position; | 1104 | vector pos = position; |
1109 | rotation rot = llEuler2Rot(rotat * DEG_TO_RAD); | 1105 | rotation rot = llEuler2Rot(rotat * DEG_TO_RAD); |
1110 | integer i = findPose(Pose); | 1106 | integer i = findPose(Pose); |
1111 | if (-1 != i) | 1107 | if (-1 != i) |
1112 | { | 1108 | { |
1113 | string prn = llList2String(llParseStringKeepNulls(llList2String(Poses, i + psPOSROT), ["|"], []), f / pSTRIDE); | 1109 | string prn = llList2String(llParseStringKeepNulls(llList2String(Poses, i + psPOSROT), ["|"], []), num); |
1114 | integer ix = llSubStringIndex(prn, ">"); | 1110 | integer ix = llSubStringIndex(prn, ">"); |
1115 | // TODO - might be wrong, coz rotations are hard, m'kay. | 1111 | // TODO - might be wrong, coz rotations are hard, m'kay. |
1116 | pos = (vector) llGetSubString(prn, 0, ix); | 1112 | pos = (vector) llGetSubString(prn, 0, ix); |
@@ -1143,16 +1139,16 @@ updateSitter(key id) | |||
1143 | 1139 | ||
1144 | showMenu(key id) | 1140 | showMenu(key id) |
1145 | { | 1141 | { |
1146 | integer f = findSitter(id); | 1142 | integer f = findAvatar(id); |
1147 | if (-1 != f) | 1143 | if (-1 != f) |
1148 | { | 1144 | { |
1149 | key them = llList2Key(Sitters, f + pADJ); | 1145 | key them = llList2Key(Avs, f + aADJ); |
1150 | string name; | 1146 | string name; |
1151 | integer distance = llList2Integer(Sitters, f + pDIST); | 1147 | integer distance = llList2Integer(Avs, f + aDIST); |
1152 | if ("" == them) | 1148 | if ("" == them) |
1153 | { | 1149 | { |
1154 | them = id; | 1150 | them = id; |
1155 | Sitters = llListReplaceList(Sitters, [them], f + pADJ, f + pADJ); | 1151 | Avs = llListReplaceList(Avs, [them], f + aADJ, f + aADJ); |
1156 | s(id, "Switched to adjusting mode. Click 'â–² Exit' on the adjusting menu to switch back to moving."); | 1152 | s(id, "Switched to adjusting mode. Click 'â–² Exit' on the adjusting menu to switch back to moving."); |
1157 | } | 1153 | } |
1158 | if (ScriptKey == them) | 1154 | if (ScriptKey == them) |
@@ -1341,20 +1337,20 @@ updateVehicle(integer keys, integer mode, float move, float rotate) | |||
1341 | else if (0.0 > cr.y) {if (-0.3 > cr.y) cr.y = -1.0; else cr.y = 0.0;} | 1337 | else if (0.0 > cr.y) {if (-0.3 > cr.y) cr.y = -1.0; else cr.y = 0.0;} |
1342 | } | 1338 | } |
1343 | isEdge = llEdgeOfWorld(gp, cr); | 1339 | isEdge = llEdgeOfWorld(gp, cr); |
1344 | integer l = llGetListLength(Sitters); | 1340 | integer l = llGetListLength(Avs); |
1345 | integer i; | 1341 | integer i; |
1346 | for (i = 0; i < l; i += pSTRIDE) | 1342 | for (i = 0; i < l; i += aSTRIDE) |
1347 | { | 1343 | { |
1348 | key a = llList2Key(Sitters, i); | 1344 | key a = llList2Key(Avs, i + aKEY); |
1349 | key t = llList2Key(Sitters, i + pADJ); | 1345 | key t = llList2Key(Avs, i + aADJ); |
1350 | if (isEdge) | 1346 | if (isEdge) |
1351 | { | 1347 | { |
1352 | Sitters = llListReplaceList(Sitters, [a], i + pADJ, i + pADJ); | 1348 | Avs = llListReplaceList(Avs, [a], i + aADJ, i + aADJ); |
1353 | adjust(a, move, "forward"); | 1349 | adjust(a, move, "forward"); |
1354 | Sitters = llListReplaceList(Sitters, [t], i + pADJ, i + pADJ); | 1350 | Avs = llListReplaceList(Avs, [t], i + aADJ, i + aADJ); |
1355 | } | 1351 | } |
1356 | else | 1352 | else |
1357 | llSetLinkPrimitiveParamsFast(llList2Integer(Sitters, i + pLINK), | 1353 | llSetLinkPrimitiveParamsFast(llList2Integer(Avs, i + aLINK), |
1358 | [PRIM_POS_LOCAL, <-1.0, 0.0, -0.0001>]); | 1354 | [PRIM_POS_LOCAL, <-1.0, 0.0, -0.0001>]); |
1359 | } | 1355 | } |
1360 | } | 1356 | } |
@@ -1430,55 +1426,65 @@ checkSitters(integer del) | |||
1430 | integer lnk; | 1426 | integer lnk; |
1431 | for (lnk = llGetObjectPrimCount(llGetKey()) + 1; lnk <= l; ++lnk) | 1427 | for (lnk = llGetObjectPrimCount(llGetKey()) + 1; lnk <= l; ++lnk) |
1432 | new += [llGetLinkKey(lnk), lnk]; | 1428 | new += [llGetLinkKey(lnk), lnk]; |
1433 | l = llGetListLength(Sitters); | 1429 | l = llGetListLength(Avs); |
1434 | for (lnk = 0; lnk < l; lnk += pSTRIDE) | 1430 | if (0 != l) |
1435 | { | 1431 | { |
1436 | key t = llList2Key(Sitters, lnk + pKEY); | 1432 | for (lnk = 0; lnk < l; lnk += aSTRIDE) |
1437 | if (NULL_KEY != t) | ||
1438 | { | 1433 | { |
1439 | integer j = listFindString(new, t, 2); | 1434 | key t = llList2Key(Avs, lnk + aKEY); |
1440 | 1435 | if (NULL_KEY != t) | |
1441 | if (-1 == j) // old sitter that left | ||
1442 | { | 1436 | { |
1443 | d("unsit " + llKey2Name(t)); | 1437 | integer j = listFindString(new, t, 2); |
1444 | stopMe(t, lnk); | 1438 | |
1445 | oldController(t); | 1439 | if (-1 == j) // old sitter that left |
1446 | Sitters = llListReplaceList(Sitters, [NULL_KEY], lnk + pKEY, lnk + pKEY); | 1440 | { |
1441 | d("unsit " + llKey2Name(t)); | ||
1442 | stopAnims(t); | ||
1443 | oldController(t); | ||
1444 | Avs = llListReplaceList(Avs, [NULL_KEY, -1, -1], lnk + aKEY, lnk + aLINK); | ||
1445 | } | ||
1446 | else // old sitter that is still here | ||
1447 | { | ||
1448 | Avs = llListReplaceList(Avs, [llList2Integer(new, j + 1)], lnk + aLINK, lnk + aLINK); | ||
1449 | new = llListReplaceList(new, [], j, j + 1); | ||
1450 | } | ||
1447 | } | 1451 | } |
1448 | else // old sitter that is still here | ||
1449 | new = llListReplaceList(new, [], j, j + 1); | ||
1450 | } | 1452 | } |
1451 | } | 1453 | } |
1452 | l = llGetListLength(new) / 2; | 1454 | l = llGetListLength(new); |
1453 | for (lnk = 0; lnk < l; lnk +=2) | 1455 | for (lnk = 0; lnk < l; lnk +=2) |
1454 | { | 1456 | { |
1455 | key t = llList2Key(new, lnk); | 1457 | key t = llList2Key(new, lnk); |
1456 | list n = [t, llList2Integer(new, lnk + 1), "", "", "", "", llGetListLength(Distances) / 3, 0]; | 1458 | list n = [t, -1, llList2Integer(new, lnk + 1), "", "", "", llGetListLength(Distances) / 3, 0]; |
1457 | list gndr = llGetObjectDetails(t, [OBJECT_BODY_SHAPE_TYPE]); | 1459 | list gndr = llGetObjectDetails(t, [OBJECT_BODY_SHAPE_TYPE]); |
1458 | stopAnims(t); | 1460 | stopAnims(t); |
1459 | integer f = findSitter(NULL_KEY); | 1461 | integer f = findAvatar(NULL_KEY); |
1460 | if (-1 != f) // new sitter replaces old | 1462 | if (-1 != f) // new sitter replaces old |
1461 | Sitters = llListReplaceList(Sitters, n, f, f + pSTRIDE - 1); | 1463 | Avs = llListReplaceList(Avs, n, f, f + aSTRIDE - 1); |
1462 | else // new sitter added on end | 1464 | else // new sitter added on end |
1463 | Sitters += n; | 1465 | Avs += n; |
1464 | if (NULL_KEY != BossKey) sendPrim(BossKey, "SIT_DONE", [t]); | 1466 | if (NULL_KEY != BossKey) sendPrim(BossKey, "SIT_DONE", [t]); |
1465 | d("sat " + llKey2Name(t) + ", " + llList2String(gndr, 0) + " male @ " + (f / pSTRIDE)); | 1467 | d("sat " + llKey2Name(t) + ", " + llList2String(gndr, 0) + " male @ " + (f / aSTRIDE)); |
1466 | } | 1468 | } |
1467 | 1469 | ||
1468 | // Wearer is the default leader, unless anyone is taller. | 1470 | // Wearer is the default leader, unless anyone is taller. |
1469 | l = llGetListLength(Sitters); | 1471 | l = llGetListLength(Avs); |
1470 | integer m = l / pSTRIDE; | 1472 | integer m = l / aSTRIDE; |
1471 | integer ldr = findSitter(Owner); | 1473 | integer ldr = findAvatar(Owner); |
1472 | float max = 0.0; | 1474 | float max = 0.0; |
1473 | if (-1 != ldr) | 1475 | if (-1 != ldr) |
1474 | { | 1476 | { |
1475 | vector s = llGetAgentSize(Owner); | 1477 | vector s = llGetAgentSize(Owner); |
1476 | max = s.z; | 1478 | max = s.z; |
1477 | } | 1479 | } |
1478 | for (lnk = 0; lnk < l; lnk += pSTRIDE) | 1480 | Controller = NULL_KEY; |
1481 | for (lnk = 0; lnk < l; lnk += aSTRIDE) | ||
1479 | { | 1482 | { |
1480 | key t = llList2Key(Sitters, lnk + pKEY); | 1483 | key t = llList2Key(Avs, lnk + aKEY); |
1481 | vector s = llGetAgentSize(t); | 1484 | vector s = llGetAgentSize(t); |
1485 | Avs = llListReplaceList(Avs, [lnk / aSTRIDE], lnk + aNUM, lnk + aNUM); | ||
1486 | if ((NULL_KEY == Controller) && (Owner != t)) | ||
1487 | Controller = t; | ||
1482 | if (s.z > max) | 1488 | if (s.z > max) |
1483 | { | 1489 | { |
1484 | max = s.z; | 1490 | max = s.z; |
@@ -1486,29 +1492,19 @@ checkSitters(integer del) | |||
1486 | } | 1492 | } |
1487 | if (NULL_KEY == t) --m; | 1493 | if (NULL_KEY == t) --m; |
1488 | } | 1494 | } |
1489 | if ((0 != ldr) && (0 != llGetListLength(Sitters))) | ||
1490 | { | ||
1491 | list s = llList2List(Sitters, ldr, ldr + pSTRIDE - 1); | ||
1492 | Sitters = s + llListReplaceList(Sitters, [], ldr, ldr + pSTRIDE - 1); | ||
1493 | } | ||
1494 | newLeader(llList2Key(Sitters, pKEY)); | ||
1495 | llSitTarget(position, llEuler2Rot(rotat * DEG_TO_RAD)); | ||
1496 | Controller = NULL_KEY; | ||
1497 | for (lnk = 0; lnk < l; lnk += pSTRIDE) | ||
1498 | { | ||
1499 | updateSitter(llList2Key(Sitters, lnk + pKEY)); | ||
1500 | key t = llList2Key(Sitters, lnk + pKEY); | ||
1501 | if ((NULL_KEY == Controller) && (Owner != t)) | ||
1502 | Controller = t; | ||
1503 | } | ||
1504 | if (NULL_KEY != Controller) | 1495 | if (NULL_KEY != Controller) |
1505 | { | 1496 | { |
1506 | d("checkSitters() requesting camera and controls from " + llKey2Name(Controller)); | 1497 | d("checkSitters() requesting camera and controls from " + llKey2Name(Controller)); |
1507 | llRequestPermissions(Controller, PERMISSION_CONTROL_CAMERA | PERMISSION_TAKE_CONTROLS); | 1498 | llRequestPermissions(Controller, PERMISSION_CONTROL_CAMERA | PERMISSION_TAKE_CONTROLS); |
1508 | } | 1499 | } |
1509 | llSetSitText(Sit0Text); llSetTouchText("menu"); llSetClickAction(CLICK_ACTION_SIT); | 1500 | if (-1 != ldr) |
1510 | llSetText(HoverText, <1.0, 1.0, 1.0>, 1.0); | 1501 | newLeader(llList2Key(Avs, ldr + aKEY)); |
1511 | if (0 == m) | 1502 | else |
1503 | checkAO(); | ||
1504 | //for (lnk = 0; lnk < l; lnk += aSTRIDE) | ||
1505 | // S(llKey2Name(llList2Key(Avs, lnk + aKEY)) + " is number " + llList2String(Avs, lnk + aNUM)); | ||
1506 | for (lnk = 0; lnk < l; lnk += aSTRIDE) | ||
1507 | updateAvatar(llList2Key(Avs, lnk + aKEY)); | ||
1512 | { | 1508 | { |
1513 | if (del) | 1509 | if (del) |
1514 | { | 1510 | { |
@@ -1635,8 +1631,8 @@ list isPoseAO(integer f) | |||
1635 | checkAO() | 1631 | checkAO() |
1636 | { | 1632 | { |
1637 | string newAnim; | 1633 | string newAnim; |
1638 | integer l = llGetListLength(Sitters); | ||
1639 | integer fast; integer i; integer f; float dpth; | 1634 | integer fast; integer i; integer f; float dpth; |
1635 | integer l = llGetListLength(Avs); | ||
1640 | if (NULL_KEY != TheirKey) return; | 1636 | if (NULL_KEY != TheirKey) return; |
1641 | 1637 | ||
1642 | // doAnim = (integer) getSetting("osAnim"); | 1638 | // doAnim = (integer) getSetting("osAnim"); |
@@ -1731,16 +1727,26 @@ checkAO() | |||
1731 | else AOspeed = 1.0; | 1727 | else AOspeed = 1.0; |
1732 | for (f = 0; f < l; f += pSTRIDE) | 1728 | for (f = 0; f < l; f += pSTRIDE) |
1733 | { | 1729 | { |
1734 | string anim = llList2String(Sitters, f + pSTATE); | 1730 | string old = oldAnim; |
1735 | list anims = llCSV2List(llList2String(Sitters, f + pANIMS)); | 1731 | string new = newAnim; |
1736 | integer g; | 1732 | list anims = llParseString2List(llList2String(Poses, p + psANIM), ["|"], []); |
1737 | list states = States; | 1733 | key id = llList2Key(Avs, f + aKEY); |
1738 | key id = llList2Key(Sitters, f + pKEY); | 1734 | integer num = llList2Integer(Avs, f + aNUM); |
1739 | list ps = isPoseAO(f); | 1735 | //s("checkAO " + llKey2Name(id) + " " + old + " -> " + new + " @ " + nextPose + " \n" + |
1740 | if (0 != llGetListLength(ps)) | 1736 | //llDumpList2String(anims, "|")); |
1737 | |||
1738 | if ("" != nextPose) | ||
1741 | { | 1739 | { |
1742 | states = [Pose, llList2String(ps, f / pSTRIDE)]; | 1740 | if ("~" == llList2String(anims, num)) |
1743 | newAnim = Pose; | 1741 | { |
1742 | //s("POSE " + llKey2Name(id) + " nextState = " + nextState); | ||
1743 | integer q = findPose("AO_" + nextState); | ||
1744 | anims = llParseString2List(llList2String(Poses, q + psANIM), ["|"], []); | ||
1745 | old = llList2String(Avs, f + aSTATE); | ||
1746 | new = nextState; | ||
1747 | } | ||
1748 | else | ||
1749 | anims = [llList2String(anims, num)]; | ||
1744 | } | 1750 | } |
1745 | //d("checkAO " + llKey2Name(id) + " " + anim + " -> " + newAnim + " @ " + (string) AOspeed + " " + Pose); | 1751 | //d("checkAO " + llKey2Name(id) + " " + anim + " -> " + newAnim + " @ " + (string) AOspeed + " " + Pose); |
1746 | if (newAnim != anim) | 1752 | if (newAnim != anim) |
@@ -1769,21 +1775,27 @@ checkAO() | |||
1769 | } | 1775 | } |
1770 | } | 1776 | } |
1771 | } | 1777 | } |
1772 | anim = newAnim; | 1778 | Avs = llListReplaceList(Avs, [new], f + aSTATE, f + aSTATE); |
1773 | } | 1779 | } |
1774 | Sitters = llListReplaceList(Sitters, [anim, anim, llDumpList2String(anims, ",")], f + pSTATE, f + pANIMS); | ||
1775 | newAnim = oldAnim; | ||
1776 | } | 1780 | } |
1777 | if (("" == Pose) || ("Swimming Up" == vAnim)) addEvent(Tick * dpth, "checkAO"); | 1781 | if (("" == Pose) || ("Swimming Up" == vAnim)) addEvent(Tick * dpth, "checkAO"); |
1778 | } | 1782 | } |
1779 | 1783 | ||
1780 | stopMe(key id, integer f) | 1784 | stopAnims(key avatar) |
1781 | { | 1785 | { |
1782 | list anims = llCSV2List(llList2String(Sitters, f + pANIMS)); | 1786 | if (NULL_KEY != avatar) |
1783 | integer i; | 1787 | { |
1784 | //d("stopMe " + llKey2Name(id) + " " + llList2String(Sitters, f + pANIMS)); | 1788 | list anims = llGetAnimationList(avatar); |
1785 | for (i = llGetListLength(anims) - 1; i >= 0; --i) | 1789 | integer l = llGetListLength(anims); |
1786 | animEnd(id, llList2String(anims, i)); | 1790 | integer i; |
1791 | for (i = 0; i < l; i++) | ||
1792 | { | ||
1793 | string anim = llList2Key(anims, i); | ||
1794 | if (anim != "") | ||
1795 | animEnd(avatar, anim); | ||
1796 | } | ||
1797 | animSwitch(avatar, ""); | ||
1798 | } | ||
1787 | } | 1799 | } |
1788 | 1800 | ||
1789 | checkLag() | 1801 | checkLag() |
@@ -1856,10 +1868,10 @@ laterInit() | |||
1856 | 1868 | ||
1857 | die() | 1869 | die() |
1858 | { | 1870 | { |
1859 | integer l = llGetListLength(Sitters); | 1871 | integer l = llGetListLength(Avs); |
1860 | integer f; | 1872 | integer f; |
1861 | for (f = 0; f < l; f += pSTRIDE) | 1873 | for (f = 0; f < l; f += aSTRIDE) |
1862 | stopMe(llList2Key(Sitters, f + pKEY), f); | 1874 | stopAnims(llList2Key(Avs, f + aKEY)); |
1863 | d("Deleting myself."); | 1875 | d("Deleting myself."); |
1864 | sendPrim(BossKey, "DIE_DONE", []); | 1876 | sendPrim(BossKey, "DIE_DONE", []); |
1865 | if (PERM_COPY & llGetObjectPermMask(MASK_OWNER)) llDie(); | 1877 | if (PERM_COPY & llGetObjectPermMask(MASK_OWNER)) llDie(); |