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

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