corrade-lsl-templates – Diff between revs 29 and 32

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 29 Rev 32
1 /////////////////////////////////////////////////////////////////////////// 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2016 - License: CC BY 2.0 // 2 // Copyright (C) Wizardry and Steamworks 2016 - License: CC BY 2.0 //
3 /////////////////////////////////////////////////////////////////////////// 3 ///////////////////////////////////////////////////////////////////////////
4 // 4 //
5 // This script can be used to control Corrade's movement manually using the 5 // This script can be used to control Corrade's movement manually using the
6 // WSAD and arrow keys on the keyboard. 6 // WSAD and arrow keys on the keyboard.
7 // 7 //
8 // For more information on Corrade, please see: 8 // For more information on Corrade, please see:
9 // http://grimore.org/secondlife/scripted_agents/corrade 9 // http://grimore.org/secondlife/scripted_agents/corrade
10 // 10 //
11 /////////////////////////////////////////////////////////////////////////// 11 ///////////////////////////////////////////////////////////////////////////
12   12  
13 /////////////////////////////////////////////////////////////////////////// 13 ///////////////////////////////////////////////////////////////////////////
14 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 // 14 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 //
15 /////////////////////////////////////////////////////////////////////////// 15 ///////////////////////////////////////////////////////////////////////////
16 string wasKeyValueGet(string k, string data) { 16 string wasKeyValueGet(string k, string data) {
17 if(llStringLength(data) == 0) return ""; 17 if(llStringLength(data) == 0) return "";
18 if(llStringLength(k) == 0) return ""; 18 if(llStringLength(k) == 0) return "";
19 list a = llParseString2List(data, ["&", "="], []); 19 list a = llParseString2List(data, ["&", "="], []);
20 integer i = llListFindList(llList2ListStrided(a, 0, -1, 2), [ k ]); 20 integer i = llListFindList(llList2ListStrided(a, 0, -1, 2), [ k ]);
21 if(i != -1) return llList2String(a, 2*i+1); 21 if(i != -1) return llList2String(a, 2*i+1);
22 return ""; 22 return "";
23 } 23 }
24 24
25 /////////////////////////////////////////////////////////////////////////// 25 ///////////////////////////////////////////////////////////////////////////
26 // Copyright (C) 2013 Wizardry and Steamworks - License: CC BY 2.0 // 26 // Copyright (C) 2013 Wizardry and Steamworks - License: CC BY 2.0 //
27 /////////////////////////////////////////////////////////////////////////// 27 ///////////////////////////////////////////////////////////////////////////
28 string wasKeyValueEncode(list data) { 28 string wasKeyValueEncode(list data) {
29 list k = llList2ListStrided(data, 0, -1, 2); 29 list k = llList2ListStrided(data, 0, -1, 2);
30 list v = llList2ListStrided(llDeleteSubList(data, 0, 0), 0, -1, 2); 30 list v = llList2ListStrided(llDeleteSubList(data, 0, 0), 0, -1, 2);
31 data = []; 31 data = [];
32 do { 32 do {
33 data += llList2String(k, 0) + "=" + llList2String(v, 0); 33 data += llList2String(k, 0) + "=" + llList2String(v, 0);
34 k = llDeleteSubList(k, 0, 0); 34 k = llDeleteSubList(k, 0, 0);
35 v = llDeleteSubList(v, 0, 0); 35 v = llDeleteSubList(v, 0, 0);
36 } while(llGetListLength(k) != 0); 36 } while(llGetListLength(k) != 0);
37 return llDumpList2String(data, "&"); 37 return llDumpList2String(data, "&");
38 } 38 }
39   39  
40 /////////////////////////////////////////////////////////////////////////// 40 ///////////////////////////////////////////////////////////////////////////
41 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 // 41 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 //
42 /////////////////////////////////////////////////////////////////////////// 42 ///////////////////////////////////////////////////////////////////////////
43 // escapes a string in conformance with RFC1738 43 // escapes a string in conformance with RFC1738
44 string wasURLEscape(string i) { 44 string wasURLEscape(string i) {
45 string o = ""; 45 string o = "";
46 do { 46 do {
47 string c = llGetSubString(i, 0, 0); 47 string c = llGetSubString(i, 0, 0);
48 i = llDeleteSubString(i, 0, 0); 48 i = llDeleteSubString(i, 0, 0);
49 if(c == "") jump continue; 49 if(c == "") jump continue;
50 if(c == " ") { 50 if(c == " ") {
51 o += "+"; 51 o += "+";
52 jump continue; 52 jump continue;
53 } 53 }
54 if(c == "\n") { 54 if(c == "\n") {
55 o += "%0D" + llEscapeURL(c); 55 o += "%0D" + llEscapeURL(c);
56 jump continue; 56 jump continue;
57 } 57 }
58 o += llEscapeURL(c); 58 o += llEscapeURL(c);
59 @continue; 59 @continue;
60 } while(i != ""); 60 } while(i != "");
61 return o; 61 return o;
62 } 62 }
63   63  
64 // configuration data 64 // configuration data
65 string configuration = ""; 65 string configuration = "";
66   66  
67 default { 67 default {
68 state_entry() { 68 state_entry() {
69 llSetTimerEvent(1); 69 llSetTimerEvent(1);
70 } 70 }
71 link_message(integer sender, integer num, string message, key id) { 71 link_message(integer sender, integer num, string message, key id) {
72 if(sender != 1 || id != "configuration") return; 72 if(sender != 1 || id != "configuration") return;
73 configuration = message; 73 configuration = message;
74 state off; 74 state off;
75 } 75 }
76 timer() { 76 timer() {
77 llMessageLinked(LINK_ROOT, 0, "configuration", NULL_KEY); 77 llMessageLinked(LINK_ROOT, 0, "configuration", NULL_KEY);
78 } 78 }
79 attach(key id) { 79 attach(key id) {
80 llResetScript(); 80 llResetScript();
81 } 81 }
82 on_rez(integer num) { 82 on_rez(integer num) {
83 llResetScript(); 83 llResetScript();
84 } 84 }
85 changed(integer change) { 85 changed(integer change) {
86 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) { 86 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) {
87 llResetScript(); 87 llResetScript();
88 } 88 }
89 } 89 }
90 state_exit() { 90 state_exit() {
91 llSetTimerEvent(0); 91 llSetTimerEvent(0);
92 } 92 }
93 } 93 }
94   94  
95 state off { 95 state off {
96 state_entry() { 96 state_entry() {
97 llReleaseControls(); 97 llReleaseControls();
98 llSetColor(<.5,0,0>, ALL_SIDES); 98 llSetColor(<.5,0,0>, ALL_SIDES);
99 } 99 }
100 touch_end(integer num) { 100 touch_end(integer num) {
101 state on; 101 state on;
102 } 102 }
103 attach(key id) { 103 attach(key id) {
104 llResetScript(); 104 llResetScript();
105 } 105 }
106 on_rez(integer num) { 106 on_rez(integer num) {
107 llResetScript(); 107 llResetScript();
108 } 108 }
109 changed(integer change) { 109 changed(integer change) {
110 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) { 110 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) {
111 llResetScript(); 111 llResetScript();
112 } 112 }
113 } 113 }
114 } 114 }
115   115  
116 state on { 116 state on {
117 state_entry() { 117 state_entry() {
118 llSetColor(<0,.5,0>, ALL_SIDES); 118 llSetColor(<0,.5,0>, ALL_SIDES);
119 state detect; 119 state detect;
120 } 120 }
121 attach(key id) { 121 attach(key id) {
122 llResetScript(); 122 llResetScript();
123 } 123 }
124 on_rez(integer num) { 124 on_rez(integer num) {
125 llResetScript(); 125 llResetScript();
126 } 126 }
127 changed(integer change) { 127 changed(integer change) {
128 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) { 128 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) {
129 llResetScript(); 129 llResetScript();
130 } 130 }
131 } 131 }
132 } 132 }
133 133
134 state detect { 134 state detect {
135 state_entry() { 135 state_entry() {
136 // DEBUG 136 // DEBUG
137 llOwnerSay("Detecting if Corrade is on the region..."); 137 llOwnerSay("Detecting if Corrade is on the region...");
138 if(llListFindList( 138 if(llListFindList(
139 llGetAgentList( 139 llGetAgentList(
140 AGENT_LIST_REGION, 140 AGENT_LIST_REGION,
141 [] 141 []
142 ), 142 ),
143 (list)( 143 (list)(
144 (key)wasKeyValueGet( 144 (key)wasKeyValueGet(
145 "corrade", 145 "corrade",
146 configuration 146 configuration
147 ) 147 )
148 ) 148 )
149 ) == -1) { 149 ) == -1) {
150 // DEBUG 150 // DEBUG
151 llOwnerSay("Corrade is not in the current region."); 151 llOwnerSay("Corrade is not in the current region.");
152 llResetScript(); 152 llResetScript();
153 } 153 }
154 state joy; 154 state joy;
155 } 155 }
156 touch_start(integer num) { 156 touch_start(integer num) {
157 llSetColor(<.5,0,0>, ALL_SIDES); 157 llSetColor(<.5,0,0>, ALL_SIDES);
158 llResetScript(); 158 llResetScript();
159 } 159 }
160 attach(key id) { 160 attach(key id) {
161 llResetScript(); 161 llResetScript();
162 } 162 }
163 on_rez(integer num) { 163 on_rez(integer num) {
164 llResetScript(); 164 llResetScript();
165 } 165 }
166 changed(integer change) { 166 changed(integer change) {
167 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) { 167 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) {
168 llResetScript(); 168 llResetScript();
169 } 169 }
170 } 170 }
171 } 171 }
172 172
173 state joy { 173 state joy {
174 state_entry() { 174 state_entry() {
175 llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS); 175 llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
176 llSetColor(<0,0.5,0>, ALL_SIDES); 176 llSetColor(<0,0.5,0>, ALL_SIDES);
177 // DEBUG 177 // DEBUG
178 llOwnerSay("Joystick on..."); 178 llOwnerSay("Joystick on...");
179 } 179 }
180 touch_start(integer num) { 180 touch_start(integer num) {
181 llSetColor(<.5,0,0>, ALL_SIDES); 181 llSetColor(<.5,0,0>, ALL_SIDES);
182 llResetScript(); 182 llResetScript();
183 } 183 }
184 control(key id, integer level, integer edge) { 184 control(key id, integer level, integer edge) {
185 if (level & CONTROL_UP) { 185 if (level & CONTROL_UP) {
186 llRegionSayTo( 186 llRegionSayTo(
187 wasKeyValueGet( 187 wasKeyValueGet(
188 "corrade", 188 "corrade",
189 configuration 189 configuration
190 ), 190 ),
191 0, 191 0,
192 wasKeyValueEncode( 192 wasKeyValueEncode(
193 [ 193 [
194 // nudges Corrade up 194 // nudges Corrade up
195 "command", "nudge", 195 "command", "nudge",
196 "group", wasURLEscape( 196 "group", wasURLEscape(
197 wasKeyValueGet( 197 wasKeyValueGet(
198 "group", 198 "group",
199 configuration 199 configuration
200 ) 200 )
201 ), 201 ),
202 "password", wasURLEscape( 202 "password", wasURLEscape(
203 wasKeyValueGet( 203 wasKeyValueGet(
204 "password", 204 "password",
205 configuration 205 configuration
206 ) 206 )
207 ), 207 ),
208 "direction", "up" 208 "direction", "up"
209 ] 209 ]
210 ) 210 )
211 ); 211 );
212 } 212 }
213 if (level & CONTROL_DOWN) { 213 if (level & CONTROL_DOWN) {
214 llRegionSayTo( 214 llRegionSayTo(
215 wasKeyValueGet( 215 wasKeyValueGet(
216 "corrade", 216 "corrade",
217 configuration 217 configuration
218 ), 218 ),
219 0, 219 0,
220 wasKeyValueEncode( 220 wasKeyValueEncode(
221 [ 221 [
222 // nudges Corrade down 222 // nudges Corrade down
223 "command", "nudge", 223 "command", "nudge",
224 "group", wasURLEscape( 224 "group", wasURLEscape(
225 wasKeyValueGet( 225 wasKeyValueGet(
226 "group", 226 "group",
227 configuration 227 configuration
228 ) 228 )
229 ), 229 ),
230 "password", wasURLEscape( 230 "password", wasURLEscape(
231 wasKeyValueGet( 231 wasKeyValueGet(
232 "password", 232 "password",
233 configuration 233 configuration
234 ) 234 )
235 ), 235 ),
236 "direction", "down" 236 "direction", "down"
237 ] 237 ]
238 ) 238 )
239 ); 239 );
240 } 240 }
241 if (level & CONTROL_FWD) { 241 if (level & CONTROL_FWD) {
242 llRegionSayTo( 242 llRegionSayTo(
243 wasKeyValueGet( 243 wasKeyValueGet(
244 "corrade", 244 "corrade",
245 configuration 245 configuration
246 ), 246 ),
247 0, 247 0,
248 wasKeyValueEncode( 248 wasKeyValueEncode(
249 [ 249 [
250 // nudges Corrade forward 250 // nudges Corrade forward
251 "command", "nudge", 251 "command", "nudge",
252 "group", wasURLEscape( 252 "group", wasURLEscape(
253 wasKeyValueGet( 253 wasKeyValueGet(
254 "group", 254 "group",
255 configuration 255 configuration
256 ) 256 )
257 ), 257 ),
258 "password", wasURLEscape( 258 "password", wasURLEscape(
259 wasKeyValueGet( 259 wasKeyValueGet(
260 "password", 260 "password",
261 configuration 261 configuration
262 ) 262 )
263 ), 263 ),
264 "direction", "forward" 264 "direction", "forward"
265 ] 265 ]
266 ) 266 )
267 ); 267 );
268 } 268 }
269 if (level & CONTROL_BACK) { 269 if (level & CONTROL_BACK) {
270 llRegionSayTo( 270 llRegionSayTo(
271 wasKeyValueGet( 271 wasKeyValueGet(
272 "corrade", 272 "corrade",
273 configuration 273 configuration
274 ), 274 ),
275 0, 275 0,
276 wasKeyValueEncode( 276 wasKeyValueEncode(
277 [ 277 [
278 // nudges Corrade back 278 // nudges Corrade back
279 "command", "nudge", 279 "command", "nudge",
280 "group", wasURLEscape( 280 "group", wasURLEscape(
281 wasKeyValueGet( 281 wasKeyValueGet(
282 "group", 282 "group",
283 configuration 283 configuration
284 ) 284 )
285 ), 285 ),
286 "password", wasURLEscape( 286 "password", wasURLEscape(
287 wasKeyValueGet( 287 wasKeyValueGet(
288 "password", 288 "password",
289 configuration 289 configuration
290 ) 290 )
291 ), 291 ),
292 "direction", "back" 292 "direction", "back"
293 ] 293 ]
294 ) 294 )
295 ); 295 );
296 } 296 }
297 if ((level & CONTROL_LEFT) || (level & CONTROL_ROT_LEFT)) { 297 if ((level & CONTROL_LEFT) || (level & CONTROL_ROT_LEFT)) {
298 llRegionSayTo( 298 llRegionSayTo(
299 wasKeyValueGet( 299 wasKeyValueGet(
300 "corrade", 300 "corrade",
301 configuration 301 configuration
302 ), 302 ),
303 0, 303 0,
304 wasKeyValueEncode( 304 wasKeyValueEncode(
305 [ 305 [
306 // rotates Corrade left 306 // rotates Corrade left
307 "command", "turn", 307 "command", "turn",
308 "group", wasURLEscape( 308 "group", wasURLEscape(
309 wasKeyValueGet( 309 wasKeyValueGet(
310 "group", 310 "group",
311 configuration 311 configuration
312 ) 312 )
313 ), 313 ),
314 "password", wasURLEscape( 314 "password", wasURLEscape(
315 wasKeyValueGet( 315 wasKeyValueGet(
316 "password", 316 "password",
317 configuration 317 configuration
318 ) 318 )
319 ), 319 ),
320 "direction", "left", 320 "direction", "left",
321 "degrees", 0.15 321 "radians", 10 * DEG_TO_RAD
322 ] 322 ]
323 ) 323 )
324 ); 324 );
325 } 325 }
326 if ((level & CONTROL_RIGHT) || (level & CONTROL_ROT_RIGHT)) { 326 if ((level & CONTROL_RIGHT) || (level & CONTROL_ROT_RIGHT)) {
327 llRegionSayTo( 327 llRegionSayTo(
328 wasKeyValueGet( 328 wasKeyValueGet(
329 "corrade", 329 "corrade",
330 configuration 330 configuration
331 ), 331 ),
332 0, 332 0,
333 wasKeyValueEncode( 333 wasKeyValueEncode(
334 [ 334 [
335 // rotates Corrade right 335 // rotates Corrade right
336 "command", "turn", 336 "command", "turn",
337 "group", wasURLEscape( 337 "group", wasURLEscape(
338 wasKeyValueGet( 338 wasKeyValueGet(
339 "group", 339 "group",
340 configuration 340 configuration
341 ) 341 )
342 ), 342 ),
343 "password", wasURLEscape( 343 "password", wasURLEscape(
344 wasKeyValueGet( 344 wasKeyValueGet(
345 "password", 345 "password",
346 configuration 346 configuration
347 ) 347 )
348 ), 348 ),
349 "direction", "right", 349 "direction", "right",
350 "degrees", 0.15 350 "radians", 10 * DEG_TO_RAD
351 ] 351 ]
352 ) 352 )
353 ); 353 );
354 } 354 }
355 } 355 }
356 run_time_permissions(integer permissions) { 356 run_time_permissions(integer permissions) {
357 if (permissions & PERMISSION_TAKE_CONTROLS) { 357 if (permissions & PERMISSION_TAKE_CONTROLS) {
358 llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_ROT_LEFT | CONTROL_RIGHT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE); 358 llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_ROT_LEFT | CONTROL_RIGHT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);
359 // DEBUG 359 // DEBUG
360 llOwnerSay("Controls seized..."); 360 llOwnerSay("Controls seized...");
361 } 361 }
362 } 362 }
363 attach(key id) { 363 attach(key id) {
364 llResetScript(); 364 llResetScript();
365 } 365 }
366 on_rez(integer num) { 366 on_rez(integer num) {
367 llResetScript(); 367 llResetScript();
368 } 368 }
369 changed(integer change) { 369 changed(integer change) {
370 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) { 370 if((change & CHANGED_INVENTORY) || (change & CHANGED_REGION_START) || (change & CHANGED_OWNER)) {
371 llResetScript(); 371 llResetScript();
372 } 372 }
373 } 373 }
374 } 374 }
375   375  
376
Generated by GNU Enscript 1.6.5.90.
376
Generated by GNU Enscript 1.6.5.90.
377   377  
378   378  
379   379