diff options
Diffstat (limited to 'LuaSL/Test sim/objects/onefang's test bed/~run')
-rw-r--r-- | LuaSL/Test sim/objects/onefang's test bed/~run | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/LuaSL/Test sim/objects/onefang's test bed/~run b/LuaSL/Test sim/objects/onefang's test bed/~run new file mode 100644 index 0000000..c2c9943 --- /dev/null +++ b/LuaSL/Test sim/objects/onefang's test bed/~run | |||
@@ -0,0 +1,192 @@ | |||
1 | //MLPV2 Version 2.3 - Learjeff Innis, from | ||
2 | //MLP MULTI-LOVE-POSE V1.2 - Copyright (c) 2006, by Miffy Fluffy (BSD License) | ||
3 | //To donate, go to my profile (Search - People - Miffy Fluffy) and use the "Pay..." button, thanks! | ||
4 | //You can also find the link to the latest version here. | ||
5 | // OpenSim port by Jez Ember | ||
6 | // Meta 7 fixes by onefang Rejected | ||
7 | |||
8 | integer MAX_AVS = 6; | ||
9 | integer ResetOnOwnerChange = FALSE; | ||
10 | |||
11 | // DESCRIPTION OF THE SCRIPTS | ||
12 | // | ||
13 | // ~run: | ||
14 | // Default: sets other scripts to not running. | ||
15 | // When the object is touched it will start all scrips. | ||
16 | // | ||
17 | // ~memory: | ||
18 | // Here the positions are stored permanently. Information is still kept when the script is | ||
19 | // not running or when everything is placed in inventory. The information will be lost only | ||
20 | // when the ~memory script is reset. | ||
21 | // A backup can be made on the .POSITIONS notecard, when the memory is empty, it will start | ||
22 | // reading the .POSITIONS notecard automatically. | ||
23 | // | ||
24 | // ~menu: | ||
25 | // 1.loading: reads the .MENUITEMS notecard and builds the menu. | ||
26 | // When it reads a "POSE": - the animations are stored in ~pose | ||
27 | // - their matching positions are looked up in ~memory and stored | ||
28 | // in ~pos. | ||
29 | // 2.ready: | ||
30 | // When the object is touched: - shows the main menu | ||
31 | // - listens for menu selections. | ||
32 | // | ||
33 | // When a submenu is selected: - shows the submenu | ||
34 | // - when balls are defined for this submenu it will rez | ||
35 | // balls (if not already there) and set their colors. | ||
36 | // | ||
37 | // When a pose is selected: - ~pose will send the animations to ~pose1 and ~pose2, | ||
38 | // they will set the animations to the avatars | ||
39 | // - ~pos wil send the matching positions to each ball. | ||
40 | // | ||
41 | // When a position is saved: - ~pose will ask the balls for their position | ||
42 | // - the positions are saved in ~memory ("permanent") | ||
43 | // - the positions are updated in ~pos | ||
44 | // | ||
45 | // When "STOP" is selected: - will hide the balls | ||
46 | // - will stop the pose | ||
47 | // When "STOP" is selected again (or if no pose is started yet): | ||
48 | // - will remove the balls (derez/die) | ||
49 | // | ||
50 | // ~pos: | ||
51 | // - loads the positions from ~memory and stores them (until shutdown/restart) | ||
52 | // - sends positions for the selected pose to the balls | ||
53 | // | ||
54 | // ~pose: | ||
55 | // - loads the animations from the .MENUITEMS notecard and stores them (until shutdown/restart) | ||
56 | // - sends animations for the selected pose to ~pose1 and ~pose2 | ||
57 | // - when saving a position: will ask balls for their position and sends it to ~pos and ~memory | ||
58 | // (~pos would be a more logical place to handle this, but ~pose has more free memory). | ||
59 | // | ||
60 | // ~poser, ~poser 1, ~poser 2, ~poser 3 (one for each ball): | ||
61 | // - will ask permission to animate the avatar on ball | ||
62 | // - will set the animations to avatar | ||
63 | // | ||
64 | // ~ball | ||
65 | // - when balls are defined for a submenu (in .MENUITEMS), ~menu will rez copies of ~ball | ||
66 | // - each will receive a unique communication channel from ~menu | ||
67 | // - the color for each ball is set by ~menu | ||
68 | // - the position of each ball is set by ~pos | ||
69 | // - when an avatar selects to sit on a ball, the avatar info is sent to the appropriate; they | ||
70 | // will ask permission and set the animation directly to the avatar (not via the ball) | ||
71 | // - balls will commit suicide when they don't hear a "LIVE" message each minute (from ~menu). | ||
72 | // | ||
73 | // have fun! | ||
74 | |||
75 | //Note: if you make a revised version, please mention something like this: | ||
76 | //"MLP - alternative version by ... .... - Revision 1 (based on MLP V1.2 by Miffy Fluffy) | ||
77 | |||
78 | key Owner; | ||
79 | |||
80 | list Scripts = [ | ||
81 | "~menucfg" | ||
82 | , "~pos" | ||
83 | , "~pose" | ||
84 | , "~poser" | ||
85 | , "~poser 1" | ||
86 | , "~poser 2" | ||
87 | , "~poser 3" | ||
88 | , "~poser 4" | ||
89 | , "~poser 5" | ||
90 | ]; | ||
91 | |||
92 | list OptionalScripts = [ | ||
93 | "~props" | ||
94 | , "~sequencer" | ||
95 | ]; | ||
96 | |||
97 | setRunning(integer st) { | ||
98 | integer ix; | ||
99 | list scripts = Scripts; | ||
100 | string script; | ||
101 | |||
102 | for (ix = 0; ix < 100; ++ix) { | ||
103 | integer jx; | ||
104 | |||
105 | // try to stop any remaining scripts in the list | ||
106 | for (jx = llGetListLength(scripts) - 1; jx >= 0; --jx) { | ||
107 | script = llList2String(scripts, jx); | ||
108 | if (llGetInventoryType(script) == INVENTORY_SCRIPT) { | ||
109 | llSetScriptState(script, st); | ||
110 | scripts = llDeleteSubList(scripts, jx, jx); | ||
111 | --jx; | ||
112 | } | ||
113 | } | ||
114 | |||
115 | // got them all yet? | ||
116 | if (llGetListLength(scripts) == 0) { | ||
117 | // Yes -- handle key ones | ||
118 | llSetScriptState("~memory", st); | ||
119 | llSetScriptState("~menu", st); | ||
120 | if (st) { | ||
121 | llResetOtherScript("~memory"); | ||
122 | llResetOtherScript("~menu"); | ||
123 | } | ||
124 | |||
125 | // start/stop optional scripts if present | ||
126 | for (jx = llGetListLength(OptionalScripts) - 1; jx >= 0; --jx) { | ||
127 | script = llList2String(OptionalScripts, jx); | ||
128 | if (llGetInventoryType(script) == INVENTORY_SCRIPT) { | ||
129 | llSetScriptState(script, st); | ||
130 | } | ||
131 | } | ||
132 | return; | ||
133 | } | ||
134 | |||
135 | llSleep(0.1); | ||
136 | } | ||
137 | |||
138 | llOwnerSay("missing scripts: " + llList2CSV(scripts)); | ||
139 | } | ||
140 | |||
141 | setBalls(string cmd) { | ||
142 | integer ch = channel(); | ||
143 | integer ix; | ||
144 | |||
145 | for (ix = 0; ix < MAX_AVS; ++ix) { | ||
146 | llSay(ch + ix, cmd); //msg to balls | ||
147 | } | ||
148 | } | ||
149 | |||
150 | integer channel() { | ||
151 | return (integer)("0x"+llGetSubString((string)llGetKey(),-4,-1)); | ||
152 | } | ||
153 | |||
154 | default { | ||
155 | |||
156 | state_entry() { | ||
157 | setBalls("DIE"); | ||
158 | Owner = llGetOwner(); | ||
159 | setRunning(FALSE); | ||
160 | llOwnerSay("OFF (touch to switch on)"); | ||
161 | } | ||
162 | |||
163 | touch_start(integer i) { | ||
164 | if (llDetectedKey(0) == llGetOwner()) state run; | ||
165 | } | ||
166 | |||
167 | // Waits for another script to send a link message. | ||
168 | link_message(integer sender_num, integer num, string str, key id) { | ||
169 | if (str == "PRIMTOUCH" && id == llGetOwner()) { | ||
170 | state run; | ||
171 | } | ||
172 | } | ||
173 | |||
174 | changed(integer change) { | ||
175 | if (change & CHANGED_OWNER && Owner != llGetOwner()) { | ||
176 | llResetScript(); | ||
177 | } | ||
178 | } | ||
179 | } | ||
180 | |||
181 | state run { | ||
182 | state_entry() { | ||
183 | setRunning(TRUE); | ||
184 | } | ||
185 | changed(integer change) { | ||
186 | if (ResetOnOwnerChange | ||
187 | && (change & CHANGED_OWNER) | ||
188 | && Owner != llGetOwner()) { | ||
189 | llResetScript(); | ||
190 | } | ||
191 | } | ||
192 | } | ||