corrade-lsl-templates – Blame information for rev 34

Subversion Repositories:
Rev:
Rev Author Line No. Line
34 office 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 //
3 ///////////////////////////////////////////////////////////////////////////
4 string wasListToCSV(list l) {
5 list v = [];
6 do {
7 string a = llDumpList2String(
8 llParseStringKeepNulls(
9 llList2String(
10 l,
11  
12 ),
13 ["\""],
14 []
15 ),
16 "\"\""
17 );
18 if(llParseStringKeepNulls(
19 a,
20 [" ", ",", "\n", "\""], []
21 ) !=
22 (list) a
23 ) a = "\"" + a + "\"";
24 v += a;
25 l = llDeleteSubList(l, 0, 0);
26 } while(l != []);
27 return llDumpList2String(v, ",");
28 }
29  
30 ///////////////////////////////////////////////////////////////////////////
31 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 //
32 ///////////////////////////////////////////////////////////////////////////
33 list wasCSVToList(string csv) {
34 list l = [];
35 list s = [];
36 string m = "";
37 do {
38 string a = llGetSubString(csv, 0, 0);
39 csv = llDeleteSubString(csv, 0, 0);
40 if(a == ",") {
41 if(llList2String(s, -1) != "\"") {
42 l += m;
43 m = "";
44 jump continue;
45 }
46 m += a;
47 jump continue;
48 }
49 if(a == "\"" && llGetSubString(csv, 0, 0) == a) {
50 m += a;
51 csv = llDeleteSubString(csv, 0, 0);
52 jump continue;
53 }
54 if(a == "\"") {
55 if(llList2String(s, -1) != a) {
56 s += a;
57 jump continue;
58 }
59 s = llDeleteSubList(s, -1, -1);
60 jump continue;
61 }
62 m += a;
63 @continue;
64 } while(csv != "");
65 // postcondition: length(s) = 0
66 return l + m;
67 }
68  
69 ///////////////////////////////////////////////////////////////////////////
70 // Copyright (C) 2019 Wizardry and Steamworks - License: GNU GPLv3 //
71 ///////////////////////////////////////////////////////////////////////////
72 float wasMapValueToRange(float value, float xMin, float xMax, float yMin, float yMax) {
73 return yMin + (
74 (
75 yMax - yMin
76 )
77 *
78 (
79 value - xMin
80 )
81 /
82 (
83 xMax - xMin
84 )
85 );
86 }
87  
88 vector position = ZERO_VECTOR;
89 string region = "";
90 string avatar = "";
91  
92 default
93 {
94 touch_start(integer num) {
95 // Do not send the SLURL if no avatar has been reported.
96 if(position == ZERO_VECTOR ||
97 region == "" ||
98 avatar == "")
99 return;
100  
101 llInstantMessage(
102 llDetectedKey(0),
103 "Avatar: " +
104 avatar +
105 " is currently at: " +
106 "http://maps.secondlife.com/secondlife/" +
107 llEscapeURL(region )+
108 "/" +
109 (string)llFloor(position.x) +
110 "/" +
111 (string)llFloor(position.y) +
112 "/0"
113 );
114 }
115 link_message(integer link, integer value, string message, key id) {
116 // DEBUG
117 //llOwnerSay("Data received: " + message);
118  
119 list data = wasCSVToList(message);
120  
121 avatar = llList2String(
122 data,
123 llListFindList(
124 data,
125 [
126 "avatar"
127 ]
128 ) + 1
129 );
130  
131 region = llList2String(
132 data,
133 llListFindList(
134 data,
135 [
136 "region"
137 ]
138 ) + 1
139 );
140  
141 position = (vector)llList2String(
142 data,
143 llListFindList(
144 data,
145 [
146 "position"
147 ]
148 ) + 1
149 );
150  
151 vector scale = (vector)llList2String(
152 data,
153 llListFindList(
154 data,
155 [
156 "scale"
157 ]
158 ) + 1
159 );
160  
161 float x = wasMapValueToRange(position.x, 0, 256, 0, scale.x) - scale.x / 2;
162 float y = wasMapValueToRange(position.y, 0, 256, 0, scale.y) - scale.y / 2;
163  
164 // Set the dot position.
165 llSetPos(<x, y, 0>);
166 }
167 on_rez(integer num) {
168 llResetScript();
169 }
170 changed(integer change) {
171 if((change & CHANGED_INVENTORY) ||
172 (change & CHANGED_REGION_START) ||
173 (change & CHANGED_OWNER)) {
174 llResetScript();
175 }
176 }
177 state_exit() {
178 llSetTimerEvent(0);
179 }
180 }