aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs6004
1 files changed, 3002 insertions, 3002 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index f4a1a00..f5354c5 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -1,3003 +1,3003 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28 28
29using System; 29using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Runtime.Remoting.Lifetime; 31using System.Runtime.Remoting.Lifetime;
32using System.Text; 32using System.Text;
33using System.Threading; 33using System.Threading;
34using Axiom.Math; 34using Axiom.Math;
35using libsecondlife; 35using libsecondlife;
36using OpenSim.Framework; 36using OpenSim.Framework;
37using OpenSim.Region.Environment.Interfaces; 37using OpenSim.Region.Environment.Interfaces;
38using OpenSim.Region.Environment.Scenes; 38using OpenSim.Region.Environment.Scenes;
39using OpenSim.Region.ScriptEngine.Common; 39using OpenSim.Region.ScriptEngine.Common;
40//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL; 40//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL;
41 41
42namespace OpenSim.Region.ScriptEngine.Common 42namespace OpenSim.Region.ScriptEngine.Common
43{ 43{
44 /// <summary> 44 /// <summary>
45 /// Contains all LSL ll-functions. This class will be in Default AppDomain. 45 /// Contains all LSL ll-functions. This class will be in Default AppDomain.
46 /// </summary> 46 /// </summary>
47 public class LSL_BuiltIn_Commands : MarshalByRefObject, LSL_BuiltIn_Commands_Interface 47 public class LSL_BuiltIn_Commands : MarshalByRefObject, LSL_BuiltIn_Commands_Interface
48 { 48 {
49 private ASCIIEncoding enc = new ASCIIEncoding(); 49 private ASCIIEncoding enc = new ASCIIEncoding();
50 private ScriptEngineBase.ScriptEngine m_ScriptEngine; 50 private ScriptEngineBase.ScriptEngine m_ScriptEngine;
51 private SceneObjectPart m_host; 51 private SceneObjectPart m_host;
52 private uint m_localID; 52 private uint m_localID;
53 private LLUUID m_itemID; 53 private LLUUID m_itemID;
54 private bool throwErrorOnNotImplemented = true; 54 private bool throwErrorOnNotImplemented = true;
55 55
56 public LSL_BuiltIn_Commands(ScriptEngineBase.ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID) 56 public LSL_BuiltIn_Commands(ScriptEngineBase.ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID)
57 { 57 {
58 m_ScriptEngine = ScriptEngine; 58 m_ScriptEngine = ScriptEngine;
59 m_host = host; 59 m_host = host;
60 m_localID = localID; 60 m_localID = localID;
61 m_itemID = itemID; 61 m_itemID = itemID;
62 62
63 //MainLog.Instance.Notice("ScriptEngine", "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]"); 63 //MainLog.Instance.Notice("ScriptEngine", "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]");
64 } 64 }
65 65
66 private DateTime m_timer = DateTime.Now; 66 private DateTime m_timer = DateTime.Now;
67 private string m_state = "default"; 67 private string m_state = "default";
68 68
69 public string State() 69 public string State()
70 { 70 {
71 return m_state; 71 return m_state;
72 } 72 }
73 73
74 // Object never expires 74 // Object never expires
75 public override Object InitializeLifetimeService() 75 public override Object InitializeLifetimeService()
76 { 76 {
77 //Console.WriteLine("LSL_BuiltIn_Commands: InitializeLifetimeService()"); 77 //Console.WriteLine("LSL_BuiltIn_Commands: InitializeLifetimeService()");
78 // return null; 78 // return null;
79 ILease lease = (ILease)base.InitializeLifetimeService(); 79 ILease lease = (ILease)base.InitializeLifetimeService();
80 80
81 if (lease.CurrentState == LeaseState.Initial) 81 if (lease.CurrentState == LeaseState.Initial)
82 { 82 {
83 lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1); 83 lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1);
84 // lease.SponsorshipTimeout = TimeSpan.FromMinutes(2); 84 // lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
85 // lease.RenewOnCallTime = TimeSpan.FromSeconds(2); 85 // lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
86 } 86 }
87 return lease; 87 return lease;
88 } 88 }
89 89
90 public Scene World 90 public Scene World
91 { 91 {
92 get { return m_ScriptEngine.World; } 92 get { return m_ScriptEngine.World; }
93 } 93 }
94 94
95 //These are the implementations of the various ll-functions used by the LSL scripts. 95 //These are the implementations of the various ll-functions used by the LSL scripts.
96 //starting out, we use the System.Math library for trig functions. - ckrinke 8-14-07 96 //starting out, we use the System.Math library for trig functions. - ckrinke 8-14-07
97 public double llSin(double f) 97 public double llSin(double f)
98 { 98 {
99 99
100 return (double)Math.Sin(f); 100 return (double)Math.Sin(f);
101 } 101 }
102 102
103 public double llCos(double f) 103 public double llCos(double f)
104 { 104 {
105 return (double)Math.Cos(f); 105 return (double)Math.Cos(f);
106 } 106 }
107 107
108 public double llTan(double f) 108 public double llTan(double f)
109 { 109 {
110 return (double)Math.Tan(f); 110 return (double)Math.Tan(f);
111 } 111 }
112 112
113 public double llAtan2(double x, double y) 113 public double llAtan2(double x, double y)
114 { 114 {
115 return (double)Math.Atan2(y, x); 115 return (double)Math.Atan2(y, x);
116 } 116 }
117 117
118 public double llSqrt(double f) 118 public double llSqrt(double f)
119 { 119 {
120 return (double)Math.Sqrt(f); 120 return (double)Math.Sqrt(f);
121 } 121 }
122 122
123 public double llPow(double fbase, double fexponent) 123 public double llPow(double fbase, double fexponent)
124 { 124 {
125 return (double)Math.Pow(fbase, fexponent); 125 return (double)Math.Pow(fbase, fexponent);
126 } 126 }
127 127
128 public int llAbs(int i) 128 public int llAbs(int i)
129 { 129 {
130 return (int)Math.Abs(i); 130 return (int)Math.Abs(i);
131 } 131 }
132 132
133 public double llFabs(double f) 133 public double llFabs(double f)
134 { 134 {
135 return (double)Math.Abs(f); 135 return (double)Math.Abs(f);
136 } 136 }
137 137
138 public double llFrand(double mag) 138 public double llFrand(double mag)
139 { 139 {
140 lock (Util.RandomClass) 140 lock (Util.RandomClass)
141 { 141 {
142 return Util.RandomClass.NextDouble() * mag; 142 return Util.RandomClass.NextDouble() * mag;
143 } 143 }
144 } 144 }
145 145
146 public int llFloor(double f) 146 public int llFloor(double f)
147 { 147 {
148 return (int)Math.Floor(f); 148 return (int)Math.Floor(f);
149 } 149 }
150 150
151 public int llCeil(double f) 151 public int llCeil(double f)
152 { 152 {
153 return (int)Math.Ceiling(f); 153 return (int)Math.Ceiling(f);
154 } 154 }
155 155
156 public int llRound(double f) 156 public int llRound(double f)
157 { 157 {
158 return (int)Math.Round(f, 0); 158 return (int)Math.Round(f, 0);
159 } 159 }
160 160
161 //This next group are vector operations involving squaring and square root. ckrinke 161 //This next group are vector operations involving squaring and square root. ckrinke
162 public double llVecMag(LSL_Types.Vector3 v) 162 public double llVecMag(LSL_Types.Vector3 v)
163 { 163 {
164 return (v.x * v.x + v.y * v.y + v.z * v.z); 164 return (v.x * v.x + v.y * v.y + v.z * v.z);
165 } 165 }
166 166
167 public LSL_Types.Vector3 llVecNorm(LSL_Types.Vector3 v) 167 public LSL_Types.Vector3 llVecNorm(LSL_Types.Vector3 v)
168 { 168 {
169 double mag = v.x * v.x + v.y * v.y + v.z * v.z; 169 double mag = v.x * v.x + v.y * v.y + v.z * v.z;
170 LSL_Types.Vector3 nor = new LSL_Types.Vector3(); 170 LSL_Types.Vector3 nor = new LSL_Types.Vector3();
171 nor.x = v.x / mag; 171 nor.x = v.x / mag;
172 nor.y = v.y / mag; 172 nor.y = v.y / mag;
173 nor.z = v.z / mag; 173 nor.z = v.z / mag;
174 return nor; 174 return nor;
175 } 175 }
176 176
177 public double llVecDist(LSL_Types.Vector3 a, LSL_Types.Vector3 b) 177 public double llVecDist(LSL_Types.Vector3 a, LSL_Types.Vector3 b)
178 { 178 {
179 double dx = a.x - b.x; 179 double dx = a.x - b.x;
180 double dy = a.y - b.y; 180 double dy = a.y - b.y;
181 double dz = a.z - b.z; 181 double dz = a.z - b.z;
182 return Math.Sqrt(dx * dx + dy * dy + dz * dz); 182 return Math.Sqrt(dx * dx + dy * dy + dz * dz);
183 } 183 }
184 184
185 //Now we start getting into quaternions which means sin/cos, matrices and vectors. ckrinke 185 //Now we start getting into quaternions which means sin/cos, matrices and vectors. ckrinke
186 public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r) 186 public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r)
187 { 187 {
188 //This implementation is from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryRotationFunctions. ckrinke 188 //This implementation is from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryRotationFunctions. ckrinke
189 LSL_Types.Quaternion t = new LSL_Types.Quaternion(r.x * r.x, r.y * r.y, r.z * r.z, r.s * r.s); 189 LSL_Types.Quaternion t = new LSL_Types.Quaternion(r.x * r.x, r.y * r.y, r.z * r.z, r.s * r.s);
190 double m = (t.x + t.y + t.z + t.s); 190 double m = (t.x + t.y + t.z + t.s);
191 if (m == 0) return new LSL_Types.Vector3(); 191 if (m == 0) return new LSL_Types.Vector3();
192 double n = 2 * (r.y * r.s + r.x * r.z); 192 double n = 2 * (r.y * r.s + r.x * r.z);
193 double p = m * m - n * n; 193 double p = m * m - n * n;
194 if (p > 0) 194 if (p > 0)
195 return new LSL_Types.Vector3(Math.Atan2(2.0 * (r.x * r.s - r.y * r.z), (-t.x - t.y + t.z + t.s)), 195 return new LSL_Types.Vector3(Math.Atan2(2.0 * (r.x * r.s - r.y * r.z), (-t.x - t.y + t.z + t.s)),
196 Math.Atan2(n, Math.Sqrt(p)), 196 Math.Atan2(n, Math.Sqrt(p)),
197 Math.Atan2(2.0 * (r.z * r.s - r.x * r.y), (t.x - t.y - t.z + t.s))); 197 Math.Atan2(2.0 * (r.z * r.s - r.x * r.y), (t.x - t.y - t.z + t.s)));
198 else if (n > 0) 198 else if (n > 0)
199 return new LSL_Types.Vector3(0.0, Math.PI / 2, Math.Atan2((r.z * r.s + r.x * r.y), 0.5 - t.x - t.z)); 199 return new LSL_Types.Vector3(0.0, Math.PI / 2, Math.Atan2((r.z * r.s + r.x * r.y), 0.5 - t.x - t.z));
200 else 200 else
201 return new LSL_Types.Vector3(0.0, -Math.PI / 2, Math.Atan2((r.z * r.s + r.x * r.y), 0.5 - t.x - t.z)); 201 return new LSL_Types.Vector3(0.0, -Math.PI / 2, Math.Atan2((r.z * r.s + r.x * r.y), 0.5 - t.x - t.z));
202 } 202 }
203 203
204 public LSL_Types.Quaternion llEuler2Rot(LSL_Types.Vector3 v) 204 public LSL_Types.Quaternion llEuler2Rot(LSL_Types.Vector3 v)
205 { 205 {
206 //this comes from from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryRotationFunctions but is incomplete as of 8/19/07 206 //this comes from from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryRotationFunctions but is incomplete as of 8/19/07
207 float err = 0.00001f; 207 float err = 0.00001f;
208 double ax = Math.Sin(v.x / 2); 208 double ax = Math.Sin(v.x / 2);
209 double aw = Math.Cos(v.x / 2); 209 double aw = Math.Cos(v.x / 2);
210 double by = Math.Sin(v.y / 2); 210 double by = Math.Sin(v.y / 2);
211 double bw = Math.Cos(v.y / 2); 211 double bw = Math.Cos(v.y / 2);
212 double cz = Math.Sin(v.z / 2); 212 double cz = Math.Sin(v.z / 2);
213 double cw = Math.Cos(v.z / 2); 213 double cw = Math.Cos(v.z / 2);
214 LSL_Types.Quaternion a1 = new LSL_Types.Quaternion(0.0, 0.0, cz, cw); 214 LSL_Types.Quaternion a1 = new LSL_Types.Quaternion(0.0, 0.0, cz, cw);
215 LSL_Types.Quaternion a2 = new LSL_Types.Quaternion(0.0, by, 0.0, bw); 215 LSL_Types.Quaternion a2 = new LSL_Types.Quaternion(0.0, by, 0.0, bw);
216 LSL_Types.Quaternion a3 = new LSL_Types.Quaternion(ax, 0.0, 0.0, aw); 216 LSL_Types.Quaternion a3 = new LSL_Types.Quaternion(ax, 0.0, 0.0, aw);
217 LSL_Types.Quaternion a = (a1 * a2) * a3; 217 LSL_Types.Quaternion a = (a1 * a2) * a3;
218 //This multiplication doesnt compile, yet. a = a1 * a2 * a3; 218 //This multiplication doesnt compile, yet. a = a1 * a2 * a3;
219 LSL_Types.Quaternion b = new LSL_Types.Quaternion(ax * bw * cw + aw * by * cz, 219 LSL_Types.Quaternion b = new LSL_Types.Quaternion(ax * bw * cw + aw * by * cz,
220 aw * by * cw - ax * bw * cz, aw * bw * cz + ax * by * cw, 220 aw * by * cw - ax * bw * cz, aw * bw * cz + ax * by * cw,
221 aw * bw * cw - ax * by * cz); 221 aw * bw * cw - ax * by * cz);
222 LSL_Types.Quaternion c = new LSL_Types.Quaternion(); 222 LSL_Types.Quaternion c = new LSL_Types.Quaternion();
223 //This addition doesnt compile yet c = a + b; 223 //This addition doesnt compile yet c = a + b;
224 LSL_Types.Quaternion d = new LSL_Types.Quaternion(); 224 LSL_Types.Quaternion d = new LSL_Types.Quaternion();
225 //This addition doesnt compile yet d = a - b; 225 //This addition doesnt compile yet d = a - b;
226 if ((Math.Abs(c.x) > err && Math.Abs(d.x) > err) || 226 if ((Math.Abs(c.x) > err && Math.Abs(d.x) > err) ||
227 (Math.Abs(c.y) > err && Math.Abs(d.y) > err) || 227 (Math.Abs(c.y) > err && Math.Abs(d.y) > err) ||
228 (Math.Abs(c.z) > err && Math.Abs(d.z) > err) || 228 (Math.Abs(c.z) > err && Math.Abs(d.z) > err) ||
229 (Math.Abs(c.s) > err && Math.Abs(d.s) > err)) 229 (Math.Abs(c.s) > err && Math.Abs(d.s) > err))
230 { 230 {
231 return b; 231 return b;
232 //return a new Quaternion that is null until I figure this out 232 //return a new Quaternion that is null until I figure this out
233 // return b; 233 // return b;
234 // return a; 234 // return a;
235 } 235 }
236 return a; 236 return a;
237 } 237 }
238 238
239 public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up) 239 public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up)
240 { 240 {
241 return new LSL_Types.Quaternion(); 241 return new LSL_Types.Quaternion();
242 } 242 }
243 243
244 public LSL_Types.Vector3 llRot2Fwd(LSL_Types.Quaternion r) 244 public LSL_Types.Vector3 llRot2Fwd(LSL_Types.Quaternion r)
245 { 245 {
246 return new LSL_Types.Vector3(); 246 return new LSL_Types.Vector3();
247 } 247 }
248 248
249 public LSL_Types.Vector3 llRot2Left(LSL_Types.Quaternion r) 249 public LSL_Types.Vector3 llRot2Left(LSL_Types.Quaternion r)
250 { 250 {
251 return new LSL_Types.Vector3(); 251 return new LSL_Types.Vector3();
252 } 252 }
253 253
254 public LSL_Types.Vector3 llRot2Up(LSL_Types.Quaternion r) 254 public LSL_Types.Vector3 llRot2Up(LSL_Types.Quaternion r)
255 { 255 {
256 return new LSL_Types.Vector3(); 256 return new LSL_Types.Vector3();
257 } 257 }
258 public LSL_Types.Quaternion llRotBetween(LSL_Types.Vector3 a, LSL_Types.Vector3 b) 258 public LSL_Types.Quaternion llRotBetween(LSL_Types.Vector3 a, LSL_Types.Vector3 b)
259 { 259 {
260 //A and B should both be normalized 260 //A and B should both be normalized
261 261
262 double dotProduct = LSL_Types.Vector3.Dot(a, b); 262 double dotProduct = LSL_Types.Vector3.Dot(a, b);
263 LSL_Types.Vector3 crossProduct = LSL_Types.Vector3.Cross(a, b); 263 LSL_Types.Vector3 crossProduct = LSL_Types.Vector3.Cross(a, b);
264 double magProduct = LSL_Types.Vector3.Mag(a) * LSL_Types.Vector3.Mag(b); 264 double magProduct = LSL_Types.Vector3.Mag(a) * LSL_Types.Vector3.Mag(b);
265 double angle = Math.Acos(dotProduct / magProduct); 265 double angle = Math.Acos(dotProduct / magProduct);
266 LSL_Types.Vector3 axis = LSL_Types.Vector3.Norm(crossProduct); 266 LSL_Types.Vector3 axis = LSL_Types.Vector3.Norm(crossProduct);
267 double s = Math.Sin(angle / 2); 267 double s = Math.Sin(angle / 2);
268 268
269 return new LSL_Types.Quaternion(axis.x * s, axis.y * s, axis.z * s, (float)Math.Cos(angle / 2)); 269 return new LSL_Types.Quaternion(axis.x * s, axis.y * s, axis.z * s, (float)Math.Cos(angle / 2));
270 } 270 }
271 public void llWhisper(int channelID, string text) 271 public void llWhisper(int channelID, string text)
272 { 272 {
273 World.SimChat(Helpers.StringToField(text), 273 World.SimChat(Helpers.StringToField(text),
274 ChatTypeEnum.Whisper, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID); 274 ChatTypeEnum.Whisper, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
275 275
276 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 276 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
277 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Whisper, channelID, m_host.Name, text); 277 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Whisper, channelID, m_host.Name, text);
278 } 278 }
279 279
280 public void llSay(int channelID, string text) 280 public void llSay(int channelID, string text)
281 { 281 {
282 World.SimChat(Helpers.StringToField(text), 282 World.SimChat(Helpers.StringToField(text),
283 ChatTypeEnum.Say, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID); 283 ChatTypeEnum.Say, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
284 284
285 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 285 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
286 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Say, channelID, m_host.Name, text); 286 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Say, channelID, m_host.Name, text);
287 } 287 }
288 288
289 public void llShout(int channelID, string text) 289 public void llShout(int channelID, string text)
290 { 290 {
291 World.SimChat(Helpers.StringToField(text), 291 World.SimChat(Helpers.StringToField(text),
292 ChatTypeEnum.Shout, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID); 292 ChatTypeEnum.Shout, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
293 293
294 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 294 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
295 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Shout, channelID, m_host.Name, text); 295 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Shout, channelID, m_host.Name, text);
296 } 296 }
297 297
298 public int llListen(int channelID, string name, string ID, string msg) 298 public int llListen(int channelID, string name, string ID, string msg)
299 { 299 {
300 if (ID == "") 300 if (ID == "")
301 { 301 {
302 ID = LLUUID.Zero.ToString(); 302 ID = LLUUID.Zero.ToString();
303 } 303 }
304 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 304 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
305 return wComm.Listen(m_localID, m_itemID, m_host.UUID, channelID, name, ID, msg); 305 return wComm.Listen(m_localID, m_itemID, m_host.UUID, channelID, name, ID, msg);
306 } 306 }
307 307
308 public void llListenControl(int number, int active) 308 public void llListenControl(int number, int active)
309 { 309 {
310 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 310 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
311 wComm.ListenControl(number, active); 311 wComm.ListenControl(number, active);
312 } 312 }
313 313
314 public void llListenRemove(int number) 314 public void llListenRemove(int number)
315 { 315 {
316 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 316 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
317 wComm.ListenRemove(number); 317 wComm.ListenRemove(number);
318 } 318 }
319 319
320 public void llSensor(string name, string id, int type, double range, double arc) 320 public void llSensor(string name, string id, int type, double range, double arc)
321 { 321 {
322 NotImplemented("llSensor"); 322 NotImplemented("llSensor");
323 return; 323 return;
324 } 324 }
325 325
326 public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) 326 public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate)
327 { 327 {
328 NotImplemented("llSensorRepeat"); 328 NotImplemented("llSensorRepeat");
329 return; 329 return;
330 } 330 }
331 331
332 public void llSensorRemove() 332 public void llSensorRemove()
333 { 333 {
334 NotImplemented("llSensorRemove"); 334 NotImplemented("llSensorRemove");
335 return; 335 return;
336 } 336 }
337 337
338 public string llDetectedName(int number) 338 public string llDetectedName(int number)
339 { 339 {
340 NotImplemented("llDetectedName"); 340 NotImplemented("llDetectedName");
341 return ""; 341 return "";
342 } 342 }
343 343
344 public string llDetectedKey(int number) 344 public string llDetectedKey(int number)
345 { 345 {
346 NotImplemented("llDetectedKey"); 346 NotImplemented("llDetectedKey");
347 return ""; 347 return "";
348 } 348 }
349 349
350 public string llDetectedOwner(int number) 350 public string llDetectedOwner(int number)
351 { 351 {
352 NotImplemented("llDetectedOwner"); 352 NotImplemented("llDetectedOwner");
353 return ""; 353 return "";
354 } 354 }
355 355
356 public int llDetectedType(int number) 356 public int llDetectedType(int number)
357 { 357 {
358 NotImplemented("llDetectedType"); 358 NotImplemented("llDetectedType");
359 return 0; 359 return 0;
360 } 360 }
361 361
362 public LSL_Types.Vector3 llDetectedPos(int number) 362 public LSL_Types.Vector3 llDetectedPos(int number)
363 { 363 {
364 NotImplemented("llDetectedPos"); 364 NotImplemented("llDetectedPos");
365 return new LSL_Types.Vector3(); 365 return new LSL_Types.Vector3();
366 } 366 }
367 367
368 public LSL_Types.Vector3 llDetectedVel(int number) 368 public LSL_Types.Vector3 llDetectedVel(int number)
369 { 369 {
370 NotImplemented("llDetectedVel"); 370 NotImplemented("llDetectedVel");
371 return new LSL_Types.Vector3(); 371 return new LSL_Types.Vector3();
372 } 372 }
373 373
374 public LSL_Types.Vector3 llDetectedGrab(int number) 374 public LSL_Types.Vector3 llDetectedGrab(int number)
375 { 375 {
376 NotImplemented("llDetectedGrab"); 376 NotImplemented("llDetectedGrab");
377 return new LSL_Types.Vector3(); 377 return new LSL_Types.Vector3();
378 } 378 }
379 379
380 public LSL_Types.Quaternion llDetectedRot(int number) 380 public LSL_Types.Quaternion llDetectedRot(int number)
381 { 381 {
382 NotImplemented("llDetectedRot"); 382 NotImplemented("llDetectedRot");
383 return new LSL_Types.Quaternion(); 383 return new LSL_Types.Quaternion();
384 } 384 }
385 385
386 public int llDetectedGroup(int number) 386 public int llDetectedGroup(int number)
387 { 387 {
388 NotImplemented("llDetectedGroup"); 388 NotImplemented("llDetectedGroup");
389 return 0; 389 return 0;
390 } 390 }
391 391
392 public int llDetectedLinkNumber(int number) 392 public int llDetectedLinkNumber(int number)
393 { 393 {
394 NotImplemented("llDetectedLinkNumber"); 394 NotImplemented("llDetectedLinkNumber");
395 return 0; 395 return 0;
396 } 396 }
397 397
398 public void llDie() 398 public void llDie()
399 { 399 {
400 World.DeleteSceneObjectGroup(m_host.ParentGroup); 400 World.DeleteSceneObjectGroup(m_host.ParentGroup);
401 return; 401 return;
402 } 402 }
403 403
404 public double llGround(LSL_Types.Vector3 offset) 404 public double llGround(LSL_Types.Vector3 offset)
405 { 405 {
406 int x = (int)(m_host.AbsolutePosition.X + offset.x); 406 int x = (int)(m_host.AbsolutePosition.X + offset.x);
407 int y = (int)(m_host.AbsolutePosition.Y + offset.y); 407 int y = (int)(m_host.AbsolutePosition.Y + offset.y);
408 return World.GetLandHeight(x, y); 408 return World.GetLandHeight(x, y);
409 } 409 }
410 410
411 public double llCloud(LSL_Types.Vector3 offset) 411 public double llCloud(LSL_Types.Vector3 offset)
412 { 412 {
413 NotImplemented("llCloud"); 413 NotImplemented("llCloud");
414 return 0; 414 return 0;
415 } 415 }
416 416
417 public LSL_Types.Vector3 llWind(LSL_Types.Vector3 offset) 417 public LSL_Types.Vector3 llWind(LSL_Types.Vector3 offset)
418 { 418 {
419 NotImplemented("llWind"); 419 NotImplemented("llWind");
420 return new LSL_Types.Vector3(); 420 return new LSL_Types.Vector3();
421 } 421 }
422 422
423 public void llSetStatus(int status, int value) 423 public void llSetStatus(int status, int value)
424 { 424 {
425 NotImplemented("llSetStatus"); 425 NotImplemented("llSetStatus");
426 return; 426 return;
427 } 427 }
428 428
429 public int llGetStatus(int status) 429 public int llGetStatus(int status)
430 { 430 {
431 NotImplemented("llGetStatus"); 431 NotImplemented("llGetStatus");
432 return 0; 432 return 0;
433 } 433 }
434 434
435 public void llSetScale(LSL_Types.Vector3 scale) 435 public void llSetScale(LSL_Types.Vector3 scale)
436 { 436 {
437 // TODO: this needs to trigger a persistance save as well 437 // TODO: this needs to trigger a persistance save as well
438 LLVector3 tmp = m_host.Scale; 438 LLVector3 tmp = m_host.Scale;
439 tmp.X = (float)scale.x; 439 tmp.X = (float)scale.x;
440 tmp.Y = (float)scale.y; 440 tmp.Y = (float)scale.y;
441 tmp.Z = (float)scale.z; 441 tmp.Z = (float)scale.z;
442 m_host.Scale = tmp; 442 m_host.Scale = tmp;
443 m_host.SendFullUpdateToAllClients(); 443 m_host.SendFullUpdateToAllClients();
444 return; 444 return;
445 } 445 }
446 446
447 public LSL_Types.Vector3 llGetScale() 447 public LSL_Types.Vector3 llGetScale()
448 { 448 {
449 return new LSL_Types.Vector3(m_host.Scale.X, m_host.Scale.Y, m_host.Scale.Z); 449 return new LSL_Types.Vector3(m_host.Scale.X, m_host.Scale.Y, m_host.Scale.Z);
450 } 450 }
451 451
452 public void llSetColor(LSL_Types.Vector3 color, int face) 452 public void llSetColor(LSL_Types.Vector3 color, int face)
453 { 453 {
454 LLObject.TextureEntry tex = m_host.Shape.Textures; 454 LLObject.TextureEntry tex = m_host.Shape.Textures;
455 LLColor texcolor; 455 LLColor texcolor;
456 if (face > -1) 456 if (face > -1)
457 { 457 {
458 texcolor = tex.CreateFace((uint)face).RGBA; 458 texcolor = tex.CreateFace((uint)face).RGBA;
459 texcolor.R = (float)Math.Abs(color.x - 1); 459 texcolor.R = (float)Math.Abs(color.x - 1);
460 texcolor.G = (float)Math.Abs(color.y - 1); 460 texcolor.G = (float)Math.Abs(color.y - 1);
461 texcolor.B = (float)Math.Abs(color.z - 1); 461 texcolor.B = (float)Math.Abs(color.z - 1);
462 tex.FaceTextures[face].RGBA = texcolor; 462 tex.FaceTextures[face].RGBA = texcolor;
463 m_host.UpdateTexture(tex); 463 m_host.UpdateTexture(tex);
464 return; 464 return;
465 } 465 }
466 else if (face == -1) 466 else if (face == -1)
467 { 467 {
468 for (uint i = 0; i < 32; i++) 468 for (uint i = 0; i < 32; i++)
469 { 469 {
470 if (tex.FaceTextures[i] != null) 470 if (tex.FaceTextures[i] != null)
471 { 471 {
472 texcolor = tex.FaceTextures[i].RGBA; 472 texcolor = tex.FaceTextures[i].RGBA;
473 texcolor.R = (float)Math.Abs(color.x - 1); 473 texcolor.R = (float)Math.Abs(color.x - 1);
474 texcolor.G = (float)Math.Abs(color.y - 1); 474 texcolor.G = (float)Math.Abs(color.y - 1);
475 texcolor.B = (float)Math.Abs(color.z - 1); 475 texcolor.B = (float)Math.Abs(color.z - 1);
476 tex.FaceTextures[i].RGBA = texcolor; 476 tex.FaceTextures[i].RGBA = texcolor;
477 } 477 }
478 texcolor = tex.DefaultTexture.RGBA; 478 texcolor = tex.DefaultTexture.RGBA;
479 texcolor.R = (float)Math.Abs(color.x - 1); 479 texcolor.R = (float)Math.Abs(color.x - 1);
480 texcolor.G = (float)Math.Abs(color.y - 1); 480 texcolor.G = (float)Math.Abs(color.y - 1);
481 texcolor.B = (float)Math.Abs(color.z - 1); 481 texcolor.B = (float)Math.Abs(color.z - 1);
482 tex.DefaultTexture.RGBA = texcolor; 482 tex.DefaultTexture.RGBA = texcolor;
483 } 483 }
484 m_host.UpdateTexture(tex); 484 m_host.UpdateTexture(tex);
485 return; 485 return;
486 } 486 }
487 NotImplemented("llSetColor"); 487 NotImplemented("llSetColor");
488 return; 488 return;
489 } 489 }
490 490
491 public double llGetAlpha(int face) 491 public double llGetAlpha(int face)
492 { 492 {
493 LLObject.TextureEntry tex = m_host.Shape.Textures; 493 LLObject.TextureEntry tex = m_host.Shape.Textures;
494 if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color 494 if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color
495 { 495 {
496 return (double)((tex.DefaultTexture.RGBA.A * 255) / 255); 496 return (double)((tex.DefaultTexture.RGBA.A * 255) / 255);
497 } 497 }
498 if (face > -1) 498 if (face > -1)
499 { 499 {
500 return (double)((tex.GetFace((uint)face).RGBA.A * 255) / 255); 500 return (double)((tex.GetFace((uint)face).RGBA.A * 255) / 255);
501 } 501 }
502 return 0; 502 return 0;
503 } 503 }
504 504
505 public void llSetAlpha(double alpha, int face) 505 public void llSetAlpha(double alpha, int face)
506 { 506 {
507 LLObject.TextureEntry tex = m_host.Shape.Textures; 507 LLObject.TextureEntry tex = m_host.Shape.Textures;
508 LLColor texcolor; 508 LLColor texcolor;
509 if (face > -1) 509 if (face > -1)
510 { 510 {
511 texcolor = tex.CreateFace((uint)face).RGBA; 511 texcolor = tex.CreateFace((uint)face).RGBA;
512 texcolor.A = (float)Math.Abs(alpha - 1); 512 texcolor.A = (float)Math.Abs(alpha - 1);
513 tex.FaceTextures[face].RGBA = texcolor; 513 tex.FaceTextures[face].RGBA = texcolor;
514 m_host.UpdateTexture(tex); 514 m_host.UpdateTexture(tex);
515 return; 515 return;
516 } 516 }
517 else if (face == -1) 517 else if (face == -1)
518 { 518 {
519 for (int i = 0; i < 32; i++) 519 for (int i = 0; i < 32; i++)
520 { 520 {
521 if (tex.FaceTextures[i] != null) 521 if (tex.FaceTextures[i] != null)
522 { 522 {
523 texcolor = tex.FaceTextures[i].RGBA; 523 texcolor = tex.FaceTextures[i].RGBA;
524 texcolor.A = (float)Math.Abs(alpha - 1); 524 texcolor.A = (float)Math.Abs(alpha - 1);
525 tex.FaceTextures[i].RGBA = texcolor; 525 tex.FaceTextures[i].RGBA = texcolor;
526 } 526 }
527 } 527 }
528 texcolor = tex.DefaultTexture.RGBA; 528 texcolor = tex.DefaultTexture.RGBA;
529 texcolor.A = (float)Math.Abs(alpha - 1); 529 texcolor.A = (float)Math.Abs(alpha - 1);
530 tex.DefaultTexture.RGBA = texcolor; 530 tex.DefaultTexture.RGBA = texcolor;
531 m_host.UpdateTexture(tex); 531 m_host.UpdateTexture(tex);
532 return; 532 return;
533 } 533 }
534 NotImplemented("llSetAlpha"); 534 NotImplemented("llSetAlpha");
535 return; 535 return;
536 } 536 }
537 537
538 public LSL_Types.Vector3 llGetColor(int face) 538 public LSL_Types.Vector3 llGetColor(int face)
539 { 539 {
540 LLObject.TextureEntry tex = m_host.Shape.Textures; 540 LLObject.TextureEntry tex = m_host.Shape.Textures;
541 LLColor texcolor; 541 LLColor texcolor;
542 LSL_Types.Vector3 rgb; 542 LSL_Types.Vector3 rgb;
543 if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color 543 if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color
544 { 544 {
545 texcolor = tex.DefaultTexture.RGBA; 545 texcolor = tex.DefaultTexture.RGBA;
546 rgb.x = (255 - (texcolor.R * 255)) / 255; 546 rgb.x = (255 - (texcolor.R * 255)) / 255;
547 rgb.y = (255 - (texcolor.G * 255)) / 255; 547 rgb.y = (255 - (texcolor.G * 255)) / 255;
548 rgb.z = (255 - (texcolor.B * 255)) / 255; 548 rgb.z = (255 - (texcolor.B * 255)) / 255;
549 return rgb; 549 return rgb;
550 } 550 }
551 if (face > -1) 551 if (face > -1)
552 { 552 {
553 texcolor = tex.GetFace((uint)face).RGBA; 553 texcolor = tex.GetFace((uint)face).RGBA;
554 rgb.x = (255 - (texcolor.R * 255)) / 255; 554 rgb.x = (255 - (texcolor.R * 255)) / 255;
555 rgb.y = (255 - (texcolor.G * 255)) / 255; 555 rgb.y = (255 - (texcolor.G * 255)) / 255;
556 rgb.z = (255 - (texcolor.B * 255)) / 255; 556 rgb.z = (255 - (texcolor.B * 255)) / 255;
557 return rgb; 557 return rgb;
558 } 558 }
559 NotImplemented("llGetColor"); 559 NotImplemented("llGetColor");
560 return new LSL_Types.Vector3(); 560 return new LSL_Types.Vector3();
561 } 561 }
562 562
563 public void llSetTexture(string texture, int face) 563 public void llSetTexture(string texture, int face)
564 { 564 {
565 LLObject.TextureEntry tex = m_host.Shape.Textures; 565 LLObject.TextureEntry tex = m_host.Shape.Textures;
566 566
567 if (face > -1) 567 if (face > -1)
568 { 568 {
569 LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); 569 LLObject.TextureEntryFace texface = tex.CreateFace((uint)face);
570 texface.TextureID = new LLUUID(texture); 570 texface.TextureID = new LLUUID(texture);
571 tex.FaceTextures[face] = texface; 571 tex.FaceTextures[face] = texface;
572 m_host.UpdateTexture(tex); 572 m_host.UpdateTexture(tex);
573 return; 573 return;
574 } 574 }
575 else if (face == -1) 575 else if (face == -1)
576 { 576 {
577 for (uint i = 0; i < 32; i++) 577 for (uint i = 0; i < 32; i++)
578 { 578 {
579 if (tex.FaceTextures[i] != null) 579 if (tex.FaceTextures[i] != null)
580 { 580 {
581 tex.FaceTextures[i].TextureID = new LLUUID(texture); 581 tex.FaceTextures[i].TextureID = new LLUUID(texture);
582 } 582 }
583 } 583 }
584 tex.DefaultTexture.TextureID = new LLUUID(texture); 584 tex.DefaultTexture.TextureID = new LLUUID(texture);
585 m_host.UpdateTexture(tex); 585 m_host.UpdateTexture(tex);
586 return; 586 return;
587 } 587 }
588 NotImplemented("llSetTexture"); 588 NotImplemented("llSetTexture");
589 return; 589 return;
590 } 590 }
591 591
592 public void llScaleTexture(double u, double v, int face) 592 public void llScaleTexture(double u, double v, int face)
593 { 593 {
594 LLObject.TextureEntry tex = m_host.Shape.Textures; 594 LLObject.TextureEntry tex = m_host.Shape.Textures;
595 if (face > -1) 595 if (face > -1)
596 { 596 {
597 LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); 597 LLObject.TextureEntryFace texface = tex.CreateFace((uint)face);
598 texface.RepeatU = (float)u; 598 texface.RepeatU = (float)u;
599 texface.RepeatV = (float)v; 599 texface.RepeatV = (float)v;
600 tex.FaceTextures[face] = texface; 600 tex.FaceTextures[face] = texface;
601 m_host.UpdateTexture(tex); 601 m_host.UpdateTexture(tex);
602 return; 602 return;
603 } 603 }
604 if (face == -1) 604 if (face == -1)
605 { 605 {
606 for (int i = 0; i < 32; i++) 606 for (int i = 0; i < 32; i++)
607 { 607 {
608 if (tex.FaceTextures[i] != null) 608 if (tex.FaceTextures[i] != null)
609 { 609 {
610 tex.FaceTextures[i].RepeatU = (float)u; 610 tex.FaceTextures[i].RepeatU = (float)u;
611 tex.FaceTextures[i].RepeatV = (float)v; 611 tex.FaceTextures[i].RepeatV = (float)v;
612 } 612 }
613 } 613 }
614 tex.DefaultTexture.RepeatU = (float)u; 614 tex.DefaultTexture.RepeatU = (float)u;
615 tex.DefaultTexture.RepeatV = (float)v; 615 tex.DefaultTexture.RepeatV = (float)v;
616 m_host.UpdateTexture(tex); 616 m_host.UpdateTexture(tex);
617 return; 617 return;
618 } 618 }
619 NotImplemented("llScaleTexture"); 619 NotImplemented("llScaleTexture");
620 return; 620 return;
621 } 621 }
622 622
623 public void llOffsetTexture(double u, double v, int face) 623 public void llOffsetTexture(double u, double v, int face)
624 { 624 {
625 LLObject.TextureEntry tex = m_host.Shape.Textures; 625 LLObject.TextureEntry tex = m_host.Shape.Textures;
626 if (face > -1) 626 if (face > -1)
627 { 627 {
628 LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); 628 LLObject.TextureEntryFace texface = tex.CreateFace((uint)face);
629 texface.OffsetU = (float)u; 629 texface.OffsetU = (float)u;
630 texface.OffsetV = (float)v; 630 texface.OffsetV = (float)v;
631 tex.FaceTextures[face] = texface; 631 tex.FaceTextures[face] = texface;
632 m_host.UpdateTexture(tex); 632 m_host.UpdateTexture(tex);
633 return; 633 return;
634 } 634 }
635 if (face == -1) 635 if (face == -1)
636 { 636 {
637 for (int i = 0; i < 32; i++) 637 for (int i = 0; i < 32; i++)
638 { 638 {
639 if (tex.FaceTextures[i] != null) 639 if (tex.FaceTextures[i] != null)
640 { 640 {
641 tex.FaceTextures[i].OffsetU = (float)u; 641 tex.FaceTextures[i].OffsetU = (float)u;
642 tex.FaceTextures[i].OffsetV = (float)v; 642 tex.FaceTextures[i].OffsetV = (float)v;
643 } 643 }
644 } 644 }
645 tex.DefaultTexture.OffsetU = (float)u; 645 tex.DefaultTexture.OffsetU = (float)u;
646 tex.DefaultTexture.OffsetV = (float)v; 646 tex.DefaultTexture.OffsetV = (float)v;
647 m_host.UpdateTexture(tex); 647 m_host.UpdateTexture(tex);
648 return; 648 return;
649 } 649 }
650 NotImplemented("llOffsetTexture"); 650 NotImplemented("llOffsetTexture");
651 return; 651 return;
652 } 652 }
653 653
654 public void llRotateTexture(double rotation, int face) 654 public void llRotateTexture(double rotation, int face)
655 { 655 {
656 LLObject.TextureEntry tex = m_host.Shape.Textures; 656 LLObject.TextureEntry tex = m_host.Shape.Textures;
657 if (face > -1) 657 if (face > -1)
658 { 658 {
659 LLObject.TextureEntryFace texface = tex.CreateFace((uint)face); 659 LLObject.TextureEntryFace texface = tex.CreateFace((uint)face);
660 texface.Rotation = (float)rotation; 660 texface.Rotation = (float)rotation;
661 tex.FaceTextures[face] = texface; 661 tex.FaceTextures[face] = texface;
662 m_host.UpdateTexture(tex); 662 m_host.UpdateTexture(tex);
663 return; 663 return;
664 } 664 }
665 if (face == -1) 665 if (face == -1)
666 { 666 {
667 for (int i = 0; i < 32; i++) 667 for (int i = 0; i < 32; i++)
668 { 668 {
669 if (tex.FaceTextures[i] != null) 669 if (tex.FaceTextures[i] != null)
670 { 670 {
671 tex.FaceTextures[i].Rotation = (float)rotation; 671 tex.FaceTextures[i].Rotation = (float)rotation;
672 } 672 }
673 } 673 }
674 tex.DefaultTexture.Rotation = (float)rotation; 674 tex.DefaultTexture.Rotation = (float)rotation;
675 m_host.UpdateTexture(tex); 675 m_host.UpdateTexture(tex);
676 return; 676 return;
677 } 677 }
678 NotImplemented("llRotateTexture"); 678 NotImplemented("llRotateTexture");
679 return; 679 return;
680 } 680 }
681 681
682 public string llGetTexture(int face) 682 public string llGetTexture(int face)
683 { 683 {
684 LLObject.TextureEntry tex = m_host.Shape.Textures; 684 LLObject.TextureEntry tex = m_host.Shape.Textures;
685 if (face == -1) 685 if (face == -1)
686 { 686 {
687 face = 0; 687 face = 0;
688 } 688 }
689 if (face > -1) 689 if (face > -1)
690 { 690 {
691 LLObject.TextureEntryFace texface; 691 LLObject.TextureEntryFace texface;
692 texface = tex.GetFace((uint)face); 692 texface = tex.GetFace((uint)face);
693 return texface.TextureID.ToString(); 693 return texface.TextureID.ToString();
694 } 694 }
695 NotImplemented("llGetTexture"); 695 NotImplemented("llGetTexture");
696 return ""; 696 return "";
697 } 697 }
698 698
699 public void llSetPos(LSL_Types.Vector3 pos) 699 public void llSetPos(LSL_Types.Vector3 pos)
700 { 700 {
701 if (m_host.ParentID != 0) 701 if (m_host.ParentID != 0)
702 { 702 {
703 m_host.UpdateOffSet(new LLVector3((float)pos.x, (float)pos.y, (float)pos.z)); 703 m_host.UpdateOffSet(new LLVector3((float)pos.x, (float)pos.y, (float)pos.z));
704 } 704 }
705 else 705 else
706 { 706 {
707 m_host.UpdateGroupPosition(new LLVector3((float)pos.x, (float)pos.y, (float)pos.z)); 707 m_host.UpdateGroupPosition(new LLVector3((float)pos.x, (float)pos.y, (float)pos.z));
708 } 708 }
709 } 709 }
710 710
711 public LSL_Types.Vector3 llGetPos() 711 public LSL_Types.Vector3 llGetPos()
712 { 712 {
713 return new LSL_Types.Vector3(m_host.AbsolutePosition.X, 713 return new LSL_Types.Vector3(m_host.AbsolutePosition.X,
714 m_host.AbsolutePosition.Y, 714 m_host.AbsolutePosition.Y,
715 m_host.AbsolutePosition.Z); 715 m_host.AbsolutePosition.Z);
716 } 716 }
717 717
718 public LSL_Types.Vector3 llGetLocalPos() 718 public LSL_Types.Vector3 llGetLocalPos()
719 { 719 {
720 if (m_host.ParentID != 0) 720 if (m_host.ParentID != 0)
721 { 721 {
722 return new LSL_Types.Vector3(m_host.OffsetPosition.X, 722 return new LSL_Types.Vector3(m_host.OffsetPosition.X,
723 m_host.OffsetPosition.Y, 723 m_host.OffsetPosition.Y,
724 m_host.OffsetPosition.Z); 724 m_host.OffsetPosition.Z);
725 } 725 }
726 else 726 else
727 { 727 {
728 return new LSL_Types.Vector3(m_host.AbsolutePosition.X, 728 return new LSL_Types.Vector3(m_host.AbsolutePosition.X,
729 m_host.AbsolutePosition.Y, 729 m_host.AbsolutePosition.Y,
730 m_host.AbsolutePosition.Z); 730 m_host.AbsolutePosition.Z);
731 } 731 }
732 } 732 }
733 733
734 public void llSetRot(LSL_Types.Quaternion rot) 734 public void llSetRot(LSL_Types.Quaternion rot)
735 { 735 {
736 m_host.UpdateRotation(new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s)); 736 m_host.UpdateRotation(new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s));
737 } 737 }
738 738
739 public LSL_Types.Quaternion llGetRot() 739 public LSL_Types.Quaternion llGetRot()
740 { 740 {
741 LLQuaternion q = m_host.RotationOffset; 741 LLQuaternion q = m_host.RotationOffset;
742 return new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); 742 return new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
743 } 743 }
744 744
745 public LSL_Types.Quaternion llGetLocalRot() 745 public LSL_Types.Quaternion llGetLocalRot()
746 { 746 {
747 return new LSL_Types.Quaternion(m_host.RotationOffset.X, m_host.RotationOffset.Y, m_host.RotationOffset.Z, m_host.RotationOffset.W); 747 return new LSL_Types.Quaternion(m_host.RotationOffset.X, m_host.RotationOffset.Y, m_host.RotationOffset.Z, m_host.RotationOffset.W);
748 } 748 }
749 749
750 public void llSetForce(LSL_Types.Vector3 force, int local) 750 public void llSetForce(LSL_Types.Vector3 force, int local)
751 { 751 {
752 NotImplemented("llSetForce"); 752 NotImplemented("llSetForce");
753 } 753 }
754 754
755 public LSL_Types.Vector3 llGetForce() 755 public LSL_Types.Vector3 llGetForce()
756 { 756 {
757 NotImplemented("llGetForce"); 757 NotImplemented("llGetForce");
758 return new LSL_Types.Vector3(); 758 return new LSL_Types.Vector3();
759 } 759 }
760 760
761 public int llTarget(LSL_Types.Vector3 position, double range) 761 public int llTarget(LSL_Types.Vector3 position, double range)
762 { 762 {
763 NotImplemented("llTarget"); 763 NotImplemented("llTarget");
764 return 0; 764 return 0;
765 } 765 }
766 766
767 public void llTargetRemove(int number) 767 public void llTargetRemove(int number)
768 { 768 {
769 NotImplemented("llTargetRemove"); 769 NotImplemented("llTargetRemove");
770 } 770 }
771 771
772 public int llRotTarget(LSL_Types.Quaternion rot, double error) 772 public int llRotTarget(LSL_Types.Quaternion rot, double error)
773 { 773 {
774 NotImplemented("llRotTarget"); 774 NotImplemented("llRotTarget");
775 return 0; 775 return 0;
776 } 776 }
777 777
778 public void llRotTargetRemove(int number) 778 public void llRotTargetRemove(int number)
779 { 779 {
780 NotImplemented("llRotTargetRemove"); 780 NotImplemented("llRotTargetRemove");
781 } 781 }
782 782
783 public void llMoveToTarget(LSL_Types.Vector3 target, double tau) 783 public void llMoveToTarget(LSL_Types.Vector3 target, double tau)
784 { 784 {
785 NotImplemented("llMoveToTarget"); 785 NotImplemented("llMoveToTarget");
786 } 786 }
787 787
788 public void llStopMoveToTarget() 788 public void llStopMoveToTarget()
789 { 789 {
790 NotImplemented("llStopMoveToTarget"); 790 NotImplemented("llStopMoveToTarget");
791 } 791 }
792 792
793 public void llApplyImpulse(LSL_Types.Vector3 force, int local) 793 public void llApplyImpulse(LSL_Types.Vector3 force, int local)
794 { 794 {
795 NotImplemented("llApplyImpulse"); 795 NotImplemented("llApplyImpulse");
796 } 796 }
797 797
798 public void llApplyRotationalImpulse(LSL_Types.Vector3 force, int local) 798 public void llApplyRotationalImpulse(LSL_Types.Vector3 force, int local)
799 { 799 {
800 NotImplemented("llApplyRotationalImpulse"); 800 NotImplemented("llApplyRotationalImpulse");
801 } 801 }
802 802
803 public void llSetTorque(LSL_Types.Vector3 torque, int local) 803 public void llSetTorque(LSL_Types.Vector3 torque, int local)
804 { 804 {
805 NotImplemented("llSetTorque"); 805 NotImplemented("llSetTorque");
806 } 806 }
807 807
808 public LSL_Types.Vector3 llGetTorque() 808 public LSL_Types.Vector3 llGetTorque()
809 { 809 {
810 NotImplemented("llGetTorque"); 810 NotImplemented("llGetTorque");
811 return new LSL_Types.Vector3(); 811 return new LSL_Types.Vector3();
812 } 812 }
813 813
814 public void llSetForceAndTorque(LSL_Types.Vector3 force, LSL_Types.Vector3 torque, int local) 814 public void llSetForceAndTorque(LSL_Types.Vector3 force, LSL_Types.Vector3 torque, int local)
815 { 815 {
816 NotImplemented("llSetForceAndTorque"); 816 NotImplemented("llSetForceAndTorque");
817 } 817 }
818 818
819 public LSL_Types.Vector3 llGetVel() 819 public LSL_Types.Vector3 llGetVel()
820 { 820 {
821 return new LSL_Types.Vector3(m_host.Velocity.X, m_host.Velocity.Y, m_host.Velocity.Z); 821 return new LSL_Types.Vector3(m_host.Velocity.X, m_host.Velocity.Y, m_host.Velocity.Z);
822 } 822 }
823 823
824 public LSL_Types.Vector3 llGetAccel() 824 public LSL_Types.Vector3 llGetAccel()
825 { 825 {
826 return new LSL_Types.Vector3(m_host.Acceleration.X, m_host.Acceleration.Y, m_host.Acceleration.Z); 826 return new LSL_Types.Vector3(m_host.Acceleration.X, m_host.Acceleration.Y, m_host.Acceleration.Z);
827 } 827 }
828 828
829 public LSL_Types.Vector3 llGetOmega() 829 public LSL_Types.Vector3 llGetOmega()
830 { 830 {
831 NotImplemented("llGetOmega"); 831 NotImplemented("llGetOmega");
832 return new LSL_Types.Vector3(); 832 return new LSL_Types.Vector3();
833 } 833 }
834 834
835 public double llGetTimeOfDay() 835 public double llGetTimeOfDay()
836 { 836 {
837 NotImplemented("llGetTimeOfDay"); 837 NotImplemented("llGetTimeOfDay");
838 return 0; 838 return 0;
839 } 839 }
840 840
841 public double llGetWallclock() 841 public double llGetWallclock()
842 { 842 {
843 return DateTime.Now.TimeOfDay.TotalSeconds; 843 return DateTime.Now.TimeOfDay.TotalSeconds;
844 } 844 }
845 845
846 public double llGetTime() 846 public double llGetTime()
847 { 847 {
848 TimeSpan ScriptTime = DateTime.Now - m_timer; 848 TimeSpan ScriptTime = DateTime.Now - m_timer;
849 return (double)(ScriptTime.TotalMilliseconds / 1000); 849 return (double)(ScriptTime.TotalMilliseconds / 1000);
850 } 850 }
851 851
852 public void llResetTime() 852 public void llResetTime()
853 { 853 {
854 m_timer = DateTime.Now; 854 m_timer = DateTime.Now;
855 } 855 }
856 856
857 public double llGetAndResetTime() 857 public double llGetAndResetTime()
858 { 858 {
859 TimeSpan ScriptTime = DateTime.Now - m_timer; 859 TimeSpan ScriptTime = DateTime.Now - m_timer;
860 m_timer = DateTime.Now; 860 m_timer = DateTime.Now;
861 return (double)(ScriptTime.TotalMilliseconds / 1000); 861 return (double)(ScriptTime.TotalMilliseconds / 1000);
862 } 862 }
863 863
864 public void llSound() 864 public void llSound()
865 { 865 {
866 NotImplemented("llSound"); 866 NotImplemented("llSound");
867 } 867 }
868 868
869 public void llPlaySound(string sound, double volume) 869 public void llPlaySound(string sound, double volume)
870 { 870 {
871 NotImplemented("llPlaySound"); 871 NotImplemented("llPlaySound");
872 } 872 }
873 873
874 public void llLoopSound(string sound, double volume) 874 public void llLoopSound(string sound, double volume)
875 { 875 {
876 NotImplemented("llLoopSound"); 876 NotImplemented("llLoopSound");
877 } 877 }
878 878
879 public void llLoopSoundMaster(string sound, double volume) 879 public void llLoopSoundMaster(string sound, double volume)
880 { 880 {
881 NotImplemented("llLoopSoundMaster"); 881 NotImplemented("llLoopSoundMaster");
882 } 882 }
883 883
884 public void llLoopSoundSlave(string sound, double volume) 884 public void llLoopSoundSlave(string sound, double volume)
885 { 885 {
886 NotImplemented("llLoopSoundSlave"); 886 NotImplemented("llLoopSoundSlave");
887 } 887 }
888 888
889 public void llPlaySoundSlave(string sound, double volume) 889 public void llPlaySoundSlave(string sound, double volume)
890 { 890 {
891 NotImplemented("llPlaySoundSlave"); 891 NotImplemented("llPlaySoundSlave");
892 } 892 }
893 893
894 public void llTriggerSound(string sound, double volume) 894 public void llTriggerSound(string sound, double volume)
895 { 895 {
896 NotImplemented("llTriggerSound"); 896 NotImplemented("llTriggerSound");
897 } 897 }
898 898
899 public void llStopSound() 899 public void llStopSound()
900 { 900 {
901 NotImplemented("llStopSound"); 901 NotImplemented("llStopSound");
902 } 902 }
903 903
904 public void llPreloadSound(string sound) 904 public void llPreloadSound(string sound)
905 { 905 {
906 NotImplemented("llPreloadSound"); 906 NotImplemented("llPreloadSound");
907 } 907 }
908 908
909 public string llGetSubString(string src, int start, int end) 909 public string llGetSubString(string src, int start, int end)
910 { 910 {
911 return src.Substring(start, end); 911 return src.Substring(start, end);
912 } 912 }
913 913
914 public string llDeleteSubString(string src, int start, int end) 914 public string llDeleteSubString(string src, int start, int end)
915 { 915 {
916 return src.Remove(start, end - start); 916 return src.Remove(start, end - start);
917 } 917 }
918 918
919 public string llInsertString(string dst, int position, string src) 919 public string llInsertString(string dst, int position, string src)
920 { 920 {
921 return dst.Insert(position, src); 921 return dst.Insert(position, src);
922 } 922 }
923 923
924 public string llToUpper(string src) 924 public string llToUpper(string src)
925 { 925 {
926 return src.ToUpper(); 926 return src.ToUpper();
927 } 927 }
928 928
929 public string llToLower(string src) 929 public string llToLower(string src)
930 { 930 {
931 return src.ToLower(); 931 return src.ToLower();
932 } 932 }
933 933
934 public int llGiveMoney(string destination, int amount) 934 public int llGiveMoney(string destination, int amount)
935 { 935 {
936 NotImplemented("llGiveMoney"); 936 NotImplemented("llGiveMoney");
937 return 0; 937 return 0;
938 } 938 }
939 939
940 public void llMakeExplosion() 940 public void llMakeExplosion()
941 { 941 {
942 NotImplemented("llMakeExplosion"); 942 NotImplemented("llMakeExplosion");
943 } 943 }
944 944
945 public void llMakeFountain() 945 public void llMakeFountain()
946 { 946 {
947 NotImplemented("llMakeFountain"); 947 NotImplemented("llMakeFountain");
948 } 948 }
949 949
950 public void llMakeSmoke() 950 public void llMakeSmoke()
951 { 951 {
952 NotImplemented("llMakeSmoke"); 952 NotImplemented("llMakeSmoke");
953 } 953 }
954 954
955 public void llMakeFire() 955 public void llMakeFire()
956 { 956 {
957 NotImplemented("llMakeFire"); 957 NotImplemented("llMakeFire");
958 } 958 }
959 959
960 public void llRezObject(string inventory, LSL_Types.Vector3 pos, LSL_Types.Quaternion rot, int param) 960 public void llRezObject(string inventory, LSL_Types.Vector3 pos, LSL_Types.Quaternion rot, int param)
961 { 961 {
962 NotImplemented("llRezObject"); 962 NotImplemented("llRezObject");
963 } 963 }
964 964
965 public void llLookAt(LSL_Types.Vector3 target, double strength, double damping) 965 public void llLookAt(LSL_Types.Vector3 target, double strength, double damping)
966 { 966 {
967 NotImplemented("llLookAt"); 967 NotImplemented("llLookAt");
968 } 968 }
969 969
970 public void llStopLookAt() 970 public void llStopLookAt()
971 { 971 {
972 NotImplemented("llStopLookAt"); 972 NotImplemented("llStopLookAt");
973 } 973 }
974 974
975 public void llSetTimerEvent(double sec) 975 public void llSetTimerEvent(double sec)
976 { 976 {
977 // Setting timer repeat 977 // Setting timer repeat
978 m_ScriptEngine.m_LSLLongCmdHandler.SetTimerEvent(m_localID, m_itemID, sec); 978 m_ScriptEngine.m_LSLLongCmdHandler.SetTimerEvent(m_localID, m_itemID, sec);
979 } 979 }
980 980
981 public void llSleep(double sec) 981 public void llSleep(double sec)
982 { 982 {
983 Thread.Sleep((int)(sec * 1000)); 983 Thread.Sleep((int)(sec * 1000));
984 } 984 }
985 985
986 public double llGetMass() 986 public double llGetMass()
987 { 987 {
988 return m_host.GetMass(); 988 return m_host.GetMass();
989 } 989 }
990 990
991 public void llCollisionFilter(string name, string id, int accept) 991 public void llCollisionFilter(string name, string id, int accept)
992 { 992 {
993 NotImplemented("llCollisionFilter"); 993 NotImplemented("llCollisionFilter");
994 } 994 }
995 995
996 public void llTakeControls(int controls, int accept, int pass_on) 996 public void llTakeControls(int controls, int accept, int pass_on)
997 { 997 {
998 NotImplemented("llTakeControls"); 998 NotImplemented("llTakeControls");
999 } 999 }
1000 1000
1001 public void llReleaseControls() 1001 public void llReleaseControls()
1002 { 1002 {
1003 NotImplemented("llReleaseControls"); 1003 NotImplemented("llReleaseControls");
1004 } 1004 }
1005 1005
1006 public void llAttachToAvatar(int attachment) 1006 public void llAttachToAvatar(int attachment)
1007 { 1007 {
1008 NotImplemented("llAttachToAvatar"); 1008 NotImplemented("llAttachToAvatar");
1009 } 1009 }
1010 1010
1011 public void llDetachFromAvatar() 1011 public void llDetachFromAvatar()
1012 { 1012 {
1013 NotImplemented("llDetachFromAvatar"); 1013 NotImplemented("llDetachFromAvatar");
1014 } 1014 }
1015 1015
1016 public void llTakeCamera() 1016 public void llTakeCamera()
1017 { 1017 {
1018 NotImplemented("llTakeCamera"); 1018 NotImplemented("llTakeCamera");
1019 } 1019 }
1020 1020
1021 public void llReleaseCamera() 1021 public void llReleaseCamera()
1022 { 1022 {
1023 NotImplemented("llReleaseCamera"); 1023 NotImplemented("llReleaseCamera");
1024 } 1024 }
1025 1025
1026 public string llGetOwner() 1026 public string llGetOwner()
1027 { 1027 {
1028 return m_host.ObjectOwner.ToString(); 1028 return m_host.ObjectOwner.ToString();
1029 } 1029 }
1030 1030
1031 public void llInstantMessage(string user, string message) 1031 public void llInstantMessage(string user, string message)
1032 { 1032 {
1033 NotImplemented("llInstantMessage"); 1033 NotImplemented("llInstantMessage");
1034 1034
1035 // We may be able to use ClientView.SendInstantMessage here, but we need a client instance. 1035 // We may be able to use ClientView.SendInstantMessage here, but we need a client instance.
1036 // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent, 1036 // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent,
1037 // but I don't think we have a list of scenes available from here. 1037 // but I don't think we have a list of scenes available from here.
1038 // (We also don't want to duplicate the code in OnInstantMessage if we can avoid it.) 1038 // (We also don't want to duplicate the code in OnInstantMessage if we can avoid it.)
1039 1039
1040 // TODO: figure out values for client, fromSession, and imSessionID 1040 // TODO: figure out values for client, fromSession, and imSessionID
1041 // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); 1041 // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch());
1042 } 1042 }
1043 1043
1044 public void llEmail(string address, string subject, string message) 1044 public void llEmail(string address, string subject, string message)
1045 { 1045 {
1046 NotImplemented("llEmail"); 1046 NotImplemented("llEmail");
1047 } 1047 }
1048 1048
1049 public void llGetNextEmail(string address, string subject) 1049 public void llGetNextEmail(string address, string subject)
1050 { 1050 {
1051 NotImplemented("llGetNextEmail"); 1051 NotImplemented("llGetNextEmail");
1052 } 1052 }
1053 1053
1054 public string llGetKey() 1054 public string llGetKey()
1055 { 1055 {
1056 return m_host.UUID.ToString(); 1056 return m_host.UUID.ToString();
1057 } 1057 }
1058 1058
1059 public void llSetBuoyancy(double buoyancy) 1059 public void llSetBuoyancy(double buoyancy)
1060 { 1060 {
1061 NotImplemented("llSetBuoyancy"); 1061 NotImplemented("llSetBuoyancy");
1062 } 1062 }
1063 1063
1064 public void llSetHoverHeight(double height, int water, double tau) 1064 public void llSetHoverHeight(double height, int water, double tau)
1065 { 1065 {
1066 NotImplemented("llSetHoverHeight"); 1066 NotImplemented("llSetHoverHeight");
1067 } 1067 }
1068 1068
1069 public void llStopHover() 1069 public void llStopHover()
1070 { 1070 {
1071 NotImplemented("llStopHover"); 1071 NotImplemented("llStopHover");
1072 } 1072 }
1073 1073
1074 public void llMinEventDelay(double delay) 1074 public void llMinEventDelay(double delay)
1075 { 1075 {
1076 NotImplemented("llMinEventDelay"); 1076 NotImplemented("llMinEventDelay");
1077 } 1077 }
1078 1078
1079 public void llSoundPreload() 1079 public void llSoundPreload()
1080 { 1080 {
1081 NotImplemented("llSoundPreload"); 1081 NotImplemented("llSoundPreload");
1082 } 1082 }
1083 1083
1084 public void llRotLookAt(LSL_Types.Quaternion target, double strength, double damping) 1084 public void llRotLookAt(LSL_Types.Quaternion target, double strength, double damping)
1085 { 1085 {
1086 NotImplemented("llRotLookAt"); 1086 NotImplemented("llRotLookAt");
1087 } 1087 }
1088 1088
1089 public int llStringLength(string str) 1089 public int llStringLength(string str)
1090 { 1090 {
1091 if (str.Length > 0) 1091 if (str.Length > 0)
1092 { 1092 {
1093 return str.Length; 1093 return str.Length;
1094 } 1094 }
1095 else 1095 else
1096 { 1096 {
1097 return 0; 1097 return 0;
1098 } 1098 }
1099 } 1099 }
1100 1100
1101 public void llStartAnimation(string anim) 1101 public void llStartAnimation(string anim)
1102 { 1102 {
1103 NotImplemented("llStartAnimation"); 1103 NotImplemented("llStartAnimation");
1104 } 1104 }
1105 1105
1106 public void llStopAnimation(string anim) 1106 public void llStopAnimation(string anim)
1107 { 1107 {
1108 NotImplemented("llStopAnimation"); 1108 NotImplemented("llStopAnimation");
1109 } 1109 }
1110 1110
1111 public void llPointAt() 1111 public void llPointAt()
1112 { 1112 {
1113 NotImplemented("llPointAt"); 1113 NotImplemented("llPointAt");
1114 } 1114 }
1115 1115
1116 public void llStopPointAt() 1116 public void llStopPointAt()
1117 { 1117 {
1118 NotImplemented("llStopPointAt"); 1118 NotImplemented("llStopPointAt");
1119 } 1119 }
1120 1120
1121 public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain) 1121 public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain)
1122 { 1122 {
1123 m_host.RotationalVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); 1123 m_host.RotationalVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
1124 m_host.AngularVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)); 1124 m_host.AngularVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
1125 m_host.ScheduleTerseUpdate(); 1125 m_host.ScheduleTerseUpdate();
1126 m_host.SendTerseUpdateToAllClients(); 1126 m_host.SendTerseUpdateToAllClients();
1127 //NotImplemented("llTargetOmega"); 1127 //NotImplemented("llTargetOmega");
1128 } 1128 }
1129 1129
1130 public int llGetStartParameter() 1130 public int llGetStartParameter()
1131 { 1131 {
1132 NotImplemented("llGetStartParameter"); 1132 NotImplemented("llGetStartParameter");
1133 return 0; 1133 return 0;
1134 } 1134 }
1135 1135
1136 public void llGodLikeRezObject(string inventory, LSL_Types.Vector3 pos) 1136 public void llGodLikeRezObject(string inventory, LSL_Types.Vector3 pos)
1137 { 1137 {
1138 NotImplemented("llGodLikeRezObject"); 1138 NotImplemented("llGodLikeRezObject");
1139 } 1139 }
1140 1140
1141 public void llRequestPermissions(string agent, int perm) 1141 public void llRequestPermissions(string agent, int perm)
1142 { 1142 {
1143 NotImplemented("llRequestPermissions"); 1143 NotImplemented("llRequestPermissions");
1144 } 1144 }
1145 1145
1146 public string llGetPermissionsKey() 1146 public string llGetPermissionsKey()
1147 { 1147 {
1148 NotImplemented("llGetPermissionsKey"); 1148 NotImplemented("llGetPermissionsKey");
1149 return ""; 1149 return "";
1150 } 1150 }
1151 1151
1152 public int llGetPermissions() 1152 public int llGetPermissions()
1153 { 1153 {
1154 NotImplemented("llGetPermissions"); 1154 NotImplemented("llGetPermissions");
1155 return 0; 1155 return 0;
1156 } 1156 }
1157 1157
1158 public int llGetLinkNumber() 1158 public int llGetLinkNumber()
1159 { 1159 {
1160 return m_host.LinkNum; 1160 return m_host.LinkNum;
1161 } 1161 }
1162 1162
1163 public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face) 1163 public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face)
1164 { 1164 {
1165 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber); 1165 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber);
1166 if (linknumber > -1) 1166 if (linknumber > -1)
1167 { 1167 {
1168 LLObject.TextureEntry tex = part.Shape.Textures; 1168 LLObject.TextureEntry tex = part.Shape.Textures;
1169 LLColor texcolor; 1169 LLColor texcolor;
1170 if (face > -1) 1170 if (face > -1)
1171 { 1171 {
1172 texcolor = tex.CreateFace((uint)face).RGBA; 1172 texcolor = tex.CreateFace((uint)face).RGBA;
1173 texcolor.R = (float)Math.Abs(color.x - 1); 1173 texcolor.R = (float)Math.Abs(color.x - 1);
1174 texcolor.G = (float)Math.Abs(color.y - 1); 1174 texcolor.G = (float)Math.Abs(color.y - 1);
1175 texcolor.B = (float)Math.Abs(color.z - 1); 1175 texcolor.B = (float)Math.Abs(color.z - 1);
1176 tex.FaceTextures[face].RGBA = texcolor; 1176 tex.FaceTextures[face].RGBA = texcolor;
1177 part.UpdateTexture(tex); 1177 part.UpdateTexture(tex);
1178 return; 1178 return;
1179 } 1179 }
1180 else if (face == -1) 1180 else if (face == -1)
1181 { 1181 {
1182 texcolor = tex.DefaultTexture.RGBA; 1182 texcolor = tex.DefaultTexture.RGBA;
1183 texcolor.R = (float)Math.Abs(color.x - 1); 1183 texcolor.R = (float)Math.Abs(color.x - 1);
1184 texcolor.G = (float)Math.Abs(color.y - 1); 1184 texcolor.G = (float)Math.Abs(color.y - 1);
1185 texcolor.B = (float)Math.Abs(color.z - 1); 1185 texcolor.B = (float)Math.Abs(color.z - 1);
1186 tex.DefaultTexture.RGBA = texcolor; 1186 tex.DefaultTexture.RGBA = texcolor;
1187 for (uint i = 0; i < 32; i++) 1187 for (uint i = 0; i < 32; i++)
1188 { 1188 {
1189 if (tex.FaceTextures[i] != null) 1189 if (tex.FaceTextures[i] != null)
1190 { 1190 {
1191 texcolor = tex.FaceTextures[i].RGBA; 1191 texcolor = tex.FaceTextures[i].RGBA;
1192 texcolor.R = (float)Math.Abs(color.x - 1); 1192 texcolor.R = (float)Math.Abs(color.x - 1);
1193 texcolor.G = (float)Math.Abs(color.y - 1); 1193 texcolor.G = (float)Math.Abs(color.y - 1);
1194 texcolor.B = (float)Math.Abs(color.z - 1); 1194 texcolor.B = (float)Math.Abs(color.z - 1);
1195 tex.FaceTextures[i].RGBA = texcolor; 1195 tex.FaceTextures[i].RGBA = texcolor;
1196 } 1196 }
1197 } 1197 }
1198 texcolor = tex.DefaultTexture.RGBA; 1198 texcolor = tex.DefaultTexture.RGBA;
1199 texcolor.R = (float)Math.Abs(color.x - 1); 1199 texcolor.R = (float)Math.Abs(color.x - 1);
1200 texcolor.G = (float)Math.Abs(color.y - 1); 1200 texcolor.G = (float)Math.Abs(color.y - 1);
1201 texcolor.B = (float)Math.Abs(color.z - 1); 1201 texcolor.B = (float)Math.Abs(color.z - 1);
1202 tex.DefaultTexture.RGBA = texcolor; 1202 tex.DefaultTexture.RGBA = texcolor;
1203 part.UpdateTexture(tex); 1203 part.UpdateTexture(tex);
1204 return; 1204 return;
1205 } 1205 }
1206 return; 1206 return;
1207 } 1207 }
1208 else if (linknumber == -1) 1208 else if (linknumber == -1)
1209 { 1209 {
1210 int num = m_host.ParentGroup.PrimCount; 1210 int num = m_host.ParentGroup.PrimCount;
1211 for (int w = 0; w < num; w++) 1211 for (int w = 0; w < num; w++)
1212 { 1212 {
1213 linknumber = w; 1213 linknumber = w;
1214 part = m_host.ParentGroup.GetLinkNumPart(linknumber); 1214 part = m_host.ParentGroup.GetLinkNumPart(linknumber);
1215 LLObject.TextureEntry tex = part.Shape.Textures; 1215 LLObject.TextureEntry tex = part.Shape.Textures;
1216 LLColor texcolor; 1216 LLColor texcolor;
1217 if (face > -1) 1217 if (face > -1)
1218 { 1218 {
1219 texcolor = tex.CreateFace((uint)face).RGBA; 1219 texcolor = tex.CreateFace((uint)face).RGBA;
1220 texcolor.R = (float)Math.Abs(color.x - 1); 1220 texcolor.R = (float)Math.Abs(color.x - 1);
1221 texcolor.G = (float)Math.Abs(color.y - 1); 1221 texcolor.G = (float)Math.Abs(color.y - 1);
1222 texcolor.B = (float)Math.Abs(color.z - 1); 1222 texcolor.B = (float)Math.Abs(color.z - 1);
1223 tex.FaceTextures[face].RGBA = texcolor; 1223 tex.FaceTextures[face].RGBA = texcolor;
1224 part.UpdateTexture(tex); 1224 part.UpdateTexture(tex);
1225 } 1225 }
1226 else if (face == -1) 1226 else if (face == -1)
1227 { 1227 {
1228 texcolor = tex.DefaultTexture.RGBA; 1228 texcolor = tex.DefaultTexture.RGBA;
1229 texcolor.R = (float)Math.Abs(color.x - 1); 1229 texcolor.R = (float)Math.Abs(color.x - 1);
1230 texcolor.G = (float)Math.Abs(color.y - 1); 1230 texcolor.G = (float)Math.Abs(color.y - 1);
1231 texcolor.B = (float)Math.Abs(color.z - 1); 1231 texcolor.B = (float)Math.Abs(color.z - 1);
1232 tex.DefaultTexture.RGBA = texcolor; 1232 tex.DefaultTexture.RGBA = texcolor;
1233 for (uint i = 0; i < 32; i++) 1233 for (uint i = 0; i < 32; i++)
1234 { 1234 {
1235 if (tex.FaceTextures[i] != null) 1235 if (tex.FaceTextures[i] != null)
1236 { 1236 {
1237 texcolor = tex.FaceTextures[i].RGBA; 1237 texcolor = tex.FaceTextures[i].RGBA;
1238 texcolor.R = (float)Math.Abs(color.x - 1); 1238 texcolor.R = (float)Math.Abs(color.x - 1);
1239 texcolor.G = (float)Math.Abs(color.y - 1); 1239 texcolor.G = (float)Math.Abs(color.y - 1);
1240 texcolor.B = (float)Math.Abs(color.z - 1); 1240 texcolor.B = (float)Math.Abs(color.z - 1);
1241 tex.FaceTextures[i].RGBA = texcolor; 1241 tex.FaceTextures[i].RGBA = texcolor;
1242 } 1242 }
1243 } 1243 }
1244 texcolor = tex.DefaultTexture.RGBA; 1244 texcolor = tex.DefaultTexture.RGBA;
1245 texcolor.R = (float)Math.Abs(color.x - 1); 1245 texcolor.R = (float)Math.Abs(color.x - 1);
1246 texcolor.G = (float)Math.Abs(color.y - 1); 1246 texcolor.G = (float)Math.Abs(color.y - 1);
1247 texcolor.B = (float)Math.Abs(color.z - 1); 1247 texcolor.B = (float)Math.Abs(color.z - 1);
1248 tex.DefaultTexture.RGBA = texcolor; 1248 tex.DefaultTexture.RGBA = texcolor;
1249 part.UpdateTexture(tex); 1249 part.UpdateTexture(tex);
1250 } 1250 }
1251 } 1251 }
1252 return; 1252 return;
1253 } 1253 }
1254 else 1254 else
1255 { 1255 {
1256 NotImplemented("llSetLinkColor"); 1256 NotImplemented("llSetLinkColor");
1257 } 1257 }
1258 } 1258 }
1259 1259
1260 public void llCreateLink(string target, int parent) 1260 public void llCreateLink(string target, int parent)
1261 { 1261 {
1262 NotImplemented("llCreateLink"); 1262 NotImplemented("llCreateLink");
1263 } 1263 }
1264 1264
1265 public void llBreakLink(int linknum) 1265 public void llBreakLink(int linknum)
1266 { 1266 {
1267 NotImplemented("llBreakLink"); 1267 NotImplemented("llBreakLink");
1268 } 1268 }
1269 1269
1270 public void llBreakAllLinks() 1270 public void llBreakAllLinks()
1271 { 1271 {
1272 NotImplemented("llBreakAllLinks"); 1272 NotImplemented("llBreakAllLinks");
1273 } 1273 }
1274 1274
1275 public string llGetLinkKey(int linknum) 1275 public string llGetLinkKey(int linknum)
1276 { 1276 {
1277 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum); 1277 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum);
1278 if (part != null) 1278 if (part != null)
1279 { 1279 {
1280 return part.UUID.ToString(); 1280 return part.UUID.ToString();
1281 } 1281 }
1282 else 1282 else
1283 { 1283 {
1284 return "00000000-0000-0000-0000-000000000000"; 1284 return "00000000-0000-0000-0000-000000000000";
1285 } 1285 }
1286 } 1286 }
1287 1287
1288 public string llGetLinkName(int linknum) 1288 public string llGetLinkName(int linknum)
1289 { 1289 {
1290 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum); 1290 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum);
1291 if (part != null) 1291 if (part != null)
1292 { 1292 {
1293 return part.Name; 1293 return part.Name;
1294 } 1294 }
1295 else 1295 else
1296 { 1296 {
1297 return "00000000-0000-0000-0000-000000000000"; 1297 return "00000000-0000-0000-0000-000000000000";
1298 } 1298 }
1299 } 1299 }
1300 1300
1301 public int llGetInventoryNumber(int type) 1301 public int llGetInventoryNumber(int type)
1302 { 1302 {
1303 NotImplemented("llGetInventoryNumber"); 1303 NotImplemented("llGetInventoryNumber");
1304 return 0; 1304 return 0;
1305 } 1305 }
1306 1306
1307 public string llGetInventoryName(int type, int number) 1307 public string llGetInventoryName(int type, int number)
1308 { 1308 {
1309 NotImplemented("llGetInventoryName"); 1309 NotImplemented("llGetInventoryName");
1310 return ""; 1310 return "";
1311 } 1311 }
1312 1312
1313 public void llSetScriptState(string name, int run) 1313 public void llSetScriptState(string name, int run)
1314 { 1314 {
1315 NotImplemented("llSetScriptState"); 1315 NotImplemented("llSetScriptState");
1316 } 1316 }
1317 1317
1318 public double llGetEnergy() 1318 public double llGetEnergy()
1319 { 1319 {
1320 return 1.0f; 1320 return 1.0f;
1321 } 1321 }
1322 1322
1323 public void llGiveInventory(string destination, string inventory) 1323 public void llGiveInventory(string destination, string inventory)
1324 { 1324 {
1325 NotImplemented("llGiveInventory"); 1325 NotImplemented("llGiveInventory");
1326 } 1326 }
1327 1327
1328 public void llRemoveInventory(string item) 1328 public void llRemoveInventory(string item)
1329 { 1329 {
1330 NotImplemented("llRemoveInventory"); 1330 NotImplemented("llRemoveInventory");
1331 } 1331 }
1332 1332
1333 public void llSetText(string text, LSL_Types.Vector3 color, double alpha) 1333 public void llSetText(string text, LSL_Types.Vector3 color, double alpha)
1334 { 1334 {
1335 Vector3 av3 = new Vector3((float)color.x, (float)color.y, (float)color.z); 1335 Vector3 av3 = new Vector3((float)color.x, (float)color.y, (float)color.z);
1336 m_host.SetText(text, av3, alpha); 1336 m_host.SetText(text, av3, alpha);
1337 } 1337 }
1338 1338
1339 public double llWater(LSL_Types.Vector3 offset) 1339 public double llWater(LSL_Types.Vector3 offset)
1340 { 1340 {
1341 return World.RegionInfo.EstateSettings.waterHeight; 1341 return World.RegionInfo.EstateSettings.waterHeight;
1342 } 1342 }
1343 1343
1344 public void llPassTouches(int pass) 1344 public void llPassTouches(int pass)
1345 { 1345 {
1346 NotImplemented("llPassTouches"); 1346 NotImplemented("llPassTouches");
1347 } 1347 }
1348 1348
1349 public string llRequestAgentData(string id, int data) 1349 public string llRequestAgentData(string id, int data)
1350 { 1350 {
1351 NotImplemented("llRequestAgentData"); 1351 NotImplemented("llRequestAgentData");
1352 return ""; 1352 return "";
1353 } 1353 }
1354 1354
1355 public string llRequestInventoryData(string name) 1355 public string llRequestInventoryData(string name)
1356 { 1356 {
1357 NotImplemented("llRequestInventoryData"); 1357 NotImplemented("llRequestInventoryData");
1358 return ""; 1358 return "";
1359 } 1359 }
1360 1360
1361 public void llSetDamage(double damage) 1361 public void llSetDamage(double damage)
1362 { 1362 {
1363 NotImplemented("llSetDamage"); 1363 NotImplemented("llSetDamage");
1364 } 1364 }
1365 1365
1366 public void llTeleportAgentHome(string agent) 1366 public void llTeleportAgentHome(string agent)
1367 { 1367 {
1368 NotImplemented("llTeleportAgentHome"); 1368 NotImplemented("llTeleportAgentHome");
1369 } 1369 }
1370 1370
1371 public void llModifyLand(int action, int brush) 1371 public void llModifyLand(int action, int brush)
1372 { 1372 {
1373 double dsize; 1373 double dsize;
1374 if (World.PermissionsMngr.CanTerraform(m_host.OwnerID, new LLVector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0))) 1374 if (World.PermissionsMngr.CanTerraform(m_host.OwnerID, new LLVector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0)))
1375 { 1375 {
1376 switch (brush) 1376 switch (brush)
1377 { 1377 {
1378 case 1: 1378 case 1:
1379 dsize = 2; 1379 dsize = 2;
1380 break; 1380 break;
1381 case 2: 1381 case 2:
1382 dsize = 4; 1382 dsize = 4;
1383 break; 1383 break;
1384 case 3: 1384 case 3:
1385 dsize = 8; 1385 dsize = 8;
1386 break; 1386 break;
1387 default: 1387 default:
1388 if (brush < 0) 1388 if (brush < 0)
1389 { 1389 {
1390 dsize = (double)(-1 * brush); 1390 dsize = (double)(-1 * brush);
1391 } 1391 }
1392 else 1392 else
1393 { 1393 {
1394 LSLError("Invalid brush size"); 1394 LSLError("Invalid brush size");
1395 dsize = 0; // Should cease execution, but get unassigned local variable dsize on compile. 1395 dsize = 0; // Should cease execution, but get unassigned local variable dsize on compile.
1396 } 1396 }
1397 break; 1397 break;
1398 } 1398 }
1399 switch (action) 1399 switch (action)
1400 { 1400 {
1401 case 0: 1401 case 0:
1402 if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) < m_host.AbsolutePosition.Z) 1402 if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) < m_host.AbsolutePosition.Z)
1403 { 1403 {
1404 World.Terrain.FlattenTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); 1404 World.Terrain.FlattenTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1);
1405 } 1405 }
1406 break; 1406 break;
1407 case 1: 1407 case 1:
1408 if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) < (double)m_host.AbsolutePosition.Z) 1408 if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) < (double)m_host.AbsolutePosition.Z)
1409 { 1409 {
1410 World.Terrain.RaiseTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 0.1); 1410 World.Terrain.RaiseTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 0.1);
1411 } 1411 }
1412 break; 1412 break;
1413 case 2: 1413 case 2:
1414 if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) > 0) 1414 if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) > 0)
1415 { 1415 {
1416 World.Terrain.LowerTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); 1416 World.Terrain.LowerTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1);
1417 } 1417 }
1418 break; 1418 break;
1419 case 3: 1419 case 3:
1420 World.Terrain.SmoothTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); 1420 World.Terrain.SmoothTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1);
1421 break; 1421 break;
1422 case 4: 1422 case 4:
1423 World.Terrain.NoiseTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); 1423 World.Terrain.NoiseTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1);
1424 break; 1424 break;
1425 case 5: 1425 case 5:
1426 World.Terrain.RevertTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); 1426 World.Terrain.RevertTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1);
1427 break; 1427 break;
1428 default: 1428 default:
1429 break; 1429 break;
1430 } 1430 }
1431 } 1431 }
1432 } 1432 }
1433 1433
1434 public void llCollisionSound(string impact_sound, double impact_volume) 1434 public void llCollisionSound(string impact_sound, double impact_volume)
1435 { 1435 {
1436 NotImplemented("llCollisionSound"); 1436 NotImplemented("llCollisionSound");
1437 } 1437 }
1438 1438
1439 public void llCollisionSprite(string impact_sprite) 1439 public void llCollisionSprite(string impact_sprite)
1440 { 1440 {
1441 NotImplemented("llCollisionSprite"); 1441 NotImplemented("llCollisionSprite");
1442 } 1442 }
1443 1443
1444 public string llGetAnimation(string id) 1444 public string llGetAnimation(string id)
1445 { 1445 {
1446 NotImplemented("llGetAnimation"); 1446 NotImplemented("llGetAnimation");
1447 return ""; 1447 return "";
1448 } 1448 }
1449 1449
1450 public void llResetScript() 1450 public void llResetScript()
1451 { 1451 {
1452 m_ScriptEngine.m_ScriptManager.ResetScript(m_localID, m_itemID); 1452 m_ScriptEngine.m_ScriptManager.ResetScript(m_localID, m_itemID);
1453 } 1453 }
1454 1454
1455 public void llMessageLinked(int linknum, int num, string str, string id) 1455 public void llMessageLinked(int linknum, int num, string str, string id)
1456 { 1456 {
1457 } 1457 }
1458 1458
1459 public void llPushObject(string target, LSL_Types.Vector3 impulse, LSL_Types.Vector3 ang_impulse, int local) 1459 public void llPushObject(string target, LSL_Types.Vector3 impulse, LSL_Types.Vector3 ang_impulse, int local)
1460 { 1460 {
1461 } 1461 }
1462 1462
1463 public void llPassCollisions(int pass) 1463 public void llPassCollisions(int pass)
1464 { 1464 {
1465 } 1465 }
1466 1466
1467 public string llGetScriptName() 1467 public string llGetScriptName()
1468 { 1468 {
1469 return ""; 1469 return "";
1470 } 1470 }
1471 1471
1472 public int llGetNumberOfSides() 1472 public int llGetNumberOfSides()
1473 { 1473 {
1474 return 0; 1474 return 0;
1475 } 1475 }
1476 1476
1477 public LSL_Types.Quaternion llAxisAngle2Rot(LSL_Types.Vector3 axis, double angle) 1477 public LSL_Types.Quaternion llAxisAngle2Rot(LSL_Types.Vector3 axis, double angle)
1478 { 1478 {
1479 return new LSL_Types.Quaternion(); 1479 return new LSL_Types.Quaternion();
1480 } 1480 }
1481 1481
1482 public LSL_Types.Vector3 llRot2Axis(LSL_Types.Quaternion rot) 1482 public LSL_Types.Vector3 llRot2Axis(LSL_Types.Quaternion rot)
1483 { 1483 {
1484 return new LSL_Types.Vector3(); 1484 return new LSL_Types.Vector3();
1485 } 1485 }
1486 1486
1487 public void llRot2Angle() 1487 public void llRot2Angle()
1488 { 1488 {
1489 } 1489 }
1490 1490
1491 public double llAcos(double val) 1491 public double llAcos(double val)
1492 { 1492 {
1493 return (double)Math.Acos(val); 1493 return (double)Math.Acos(val);
1494 } 1494 }
1495 1495
1496 public double llAsin(double val) 1496 public double llAsin(double val)
1497 { 1497 {
1498 return (double)Math.Asin(val); 1498 return (double)Math.Asin(val);
1499 } 1499 }
1500 1500
1501 public double llAngleBetween(LSL_Types.Quaternion a, LSL_Types.Quaternion b) 1501 public double llAngleBetween(LSL_Types.Quaternion a, LSL_Types.Quaternion b)
1502 { 1502 {
1503 return 0; 1503 return 0;
1504 } 1504 }
1505 1505
1506 public string llGetInventoryKey(string name) 1506 public string llGetInventoryKey(string name)
1507 { 1507 {
1508 return ""; 1508 return "";
1509 } 1509 }
1510 1510
1511 public void llAllowInventoryDrop(int add) 1511 public void llAllowInventoryDrop(int add)
1512 { 1512 {
1513 } 1513 }
1514 1514
1515 public LSL_Types.Vector3 llGetSunDirection() 1515 public LSL_Types.Vector3 llGetSunDirection()
1516 { 1516 {
1517 return new LSL_Types.Vector3(); 1517 return new LSL_Types.Vector3();
1518 } 1518 }
1519 1519
1520 public LSL_Types.Vector3 llGetTextureOffset(int face) 1520 public LSL_Types.Vector3 llGetTextureOffset(int face)
1521 { 1521 {
1522 LLObject.TextureEntry tex = m_host.Shape.Textures; 1522 LLObject.TextureEntry tex = m_host.Shape.Textures;
1523 LSL_Types.Vector3 offset; 1523 LSL_Types.Vector3 offset;
1524 if (face == -1) 1524 if (face == -1)
1525 { 1525 {
1526 face = 0; 1526 face = 0;
1527 } 1527 }
1528 offset.x = tex.GetFace((uint)face).OffsetU; 1528 offset.x = tex.GetFace((uint)face).OffsetU;
1529 offset.y = tex.GetFace((uint)face).OffsetV; 1529 offset.y = tex.GetFace((uint)face).OffsetV;
1530 offset.z = 0.0; 1530 offset.z = 0.0;
1531 return offset; 1531 return offset;
1532 } 1532 }
1533 1533
1534 public LSL_Types.Vector3 llGetTextureScale(int side) 1534 public LSL_Types.Vector3 llGetTextureScale(int side)
1535 { 1535 {
1536 LLObject.TextureEntry tex = m_host.Shape.Textures; 1536 LLObject.TextureEntry tex = m_host.Shape.Textures;
1537 LSL_Types.Vector3 scale; 1537 LSL_Types.Vector3 scale;
1538 if (side == -1) 1538 if (side == -1)
1539 { 1539 {
1540 side = 0; 1540 side = 0;
1541 } 1541 }
1542 scale.x = tex.GetFace((uint)side).RepeatU; 1542 scale.x = tex.GetFace((uint)side).RepeatU;
1543 scale.y = tex.GetFace((uint)side).RepeatV; 1543 scale.y = tex.GetFace((uint)side).RepeatV;
1544 scale.z = 0.0; 1544 scale.z = 0.0;
1545 return scale; 1545 return scale;
1546 } 1546 }
1547 1547
1548 public double llGetTextureRot(int face) 1548 public double llGetTextureRot(int face)
1549 { 1549 {
1550 LLObject.TextureEntry tex = m_host.Shape.Textures; 1550 LLObject.TextureEntry tex = m_host.Shape.Textures;
1551 if (face == -1) 1551 if (face == -1)
1552 { 1552 {
1553 face = 0; 1553 face = 0;
1554 } 1554 }
1555 return tex.GetFace((uint)face).Rotation; 1555 return tex.GetFace((uint)face).Rotation;
1556 } 1556 }
1557 1557
1558 public int llSubStringIndex(string source, string pattern) 1558 public int llSubStringIndex(string source, string pattern)
1559 { 1559 {
1560 return source.IndexOf(pattern); 1560 return source.IndexOf(pattern);
1561 } 1561 }
1562 1562
1563 public string llGetOwnerKey(string id) 1563 public string llGetOwnerKey(string id)
1564 { 1564 {
1565 NotImplemented("llGetOwnerKey"); 1565 NotImplemented("llGetOwnerKey");
1566 return ""; 1566 return "";
1567 } 1567 }
1568 1568
1569 public LSL_Types.Vector3 llGetCenterOfMass() 1569 public LSL_Types.Vector3 llGetCenterOfMass()
1570 { 1570 {
1571 NotImplemented("llGetCenterOfMass"); 1571 NotImplemented("llGetCenterOfMass");
1572 return new LSL_Types.Vector3(); 1572 return new LSL_Types.Vector3();
1573 } 1573 }
1574 1574
1575 public LSL_Types.list llListSort(LSL_Types.list src, int stride, int ascending) 1575 public LSL_Types.list llListSort(LSL_Types.list src, int stride, int ascending)
1576 { 1576 {
1577 // SortedList<string, LSL_Types.list> sorted = new SortedList<string, LSL_Types.list>(); 1577 // SortedList<string, LSL_Types.list> sorted = new SortedList<string, LSL_Types.list>();
1578 // Add chunks to an array 1578 // Add chunks to an array
1579 //int s = stride; 1579 //int s = stride;
1580 //if (s < 1) 1580 //if (s < 1)
1581 // s = 1; 1581 // s = 1;
1582 //int c = 0; 1582 //int c = 0;
1583 //LSL_Types.list chunk = new LSL_Types.list(); 1583 //LSL_Types.list chunk = new LSL_Types.list();
1584 //string chunkString = ""; 1584 //string chunkString = "";
1585 //foreach (string element in src) 1585 //foreach (string element in src)
1586 //{ 1586 //{
1587 // c++; 1587 // c++;
1588 // if (c > s) 1588 // if (c > s)
1589 // { 1589 // {
1590 // sorted.Add(chunkString, chunk); 1590 // sorted.Add(chunkString, chunk);
1591 // chunkString = ""; 1591 // chunkString = "";
1592 // chunk = new LSL_Types.list(); 1592 // chunk = new LSL_Types.list();
1593 // c = 0; 1593 // c = 0;
1594 // } 1594 // }
1595 // chunk.Add(element); 1595 // chunk.Add(element);
1596 // chunkString += element.ToString(); 1596 // chunkString += element.ToString();
1597 //} 1597 //}
1598 //if (chunk.Count > 0) 1598 //if (chunk.Count > 0)
1599 // sorted.Add(chunkString, chunk); 1599 // sorted.Add(chunkString, chunk);
1600 1600
1601 //LSL_Types.list ret = new LSL_Types.list(); 1601 //LSL_Types.list ret = new LSL_Types.list();
1602 //foreach (LSL_Types.list ls in sorted.Values) 1602 //foreach (LSL_Types.list ls in sorted.Values)
1603 //{ 1603 //{
1604 // ret.AddRange(ls); 1604 // ret.AddRange(ls);
1605 //} 1605 //}
1606 1606
1607 //if (ascending == LSL_BaseClass.TRUE) 1607 //if (ascending == LSL_BaseClass.TRUE)
1608 // return ret; 1608 // return ret;
1609 //ret.Reverse(); 1609 //ret.Reverse();
1610 //return ret; 1610 //return ret;
1611 NotImplemented("llListSort"); 1611 NotImplemented("llListSort");
1612 return new LSL_Types.list(); 1612 return new LSL_Types.list();
1613 } 1613 }
1614 1614
1615 public int llGetListLength(LSL_Types.list src) 1615 public int llGetListLength(LSL_Types.list src)
1616 { 1616 {
1617 return src.Length; 1617 return src.Length;
1618 } 1618 }
1619 1619
1620 public int llList2Integer(LSL_Types.list src, int index) 1620 public int llList2Integer(LSL_Types.list src, int index)
1621 { 1621 {
1622 if (index < 0) 1622 if (index < 0)
1623 { 1623 {
1624 index = src.Length + index; 1624 index = src.Length + index;
1625 } 1625 }
1626 if (index >= src.Length) 1626 if (index >= src.Length)
1627 { 1627 {
1628 return 0; 1628 return 0;
1629 } 1629 }
1630 return Convert.ToInt32(src.Data[index]); 1630 return Convert.ToInt32(src.Data[index]);
1631 } 1631 }
1632 1632
1633 public double osList2Double(LSL_Types.list src, int index) 1633 public double osList2Double(LSL_Types.list src, int index)
1634 { 1634 {
1635 if (index < 0) 1635 if (index < 0)
1636 { 1636 {
1637 index = src.Length + index; 1637 index = src.Length + index;
1638 } 1638 }
1639 if (index >= src.Length) 1639 if (index >= src.Length)
1640 { 1640 {
1641 return 0.0; 1641 return 0.0;
1642 } 1642 }
1643 return Convert.ToDouble(src.Data[index]); 1643 return Convert.ToDouble(src.Data[index]);
1644 } 1644 }
1645 1645
1646 public double llList2Float(LSL_Types.list src, int index) 1646 public double llList2Float(LSL_Types.list src, int index)
1647 { 1647 {
1648 if (index < 0) 1648 if (index < 0)
1649 { 1649 {
1650 index = src.Length + index; 1650 index = src.Length + index;
1651 } 1651 }
1652 if (index >= src.Length) 1652 if (index >= src.Length)
1653 { 1653 {
1654 return 0.0; 1654 return 0.0;
1655 } 1655 }
1656 return Convert.ToSingle(src.Data[index]); 1656 return Convert.ToSingle(src.Data[index]);
1657 } 1657 }
1658 1658
1659 public string llList2String(LSL_Types.list src, int index) 1659 public string llList2String(LSL_Types.list src, int index)
1660 { 1660 {
1661 if (index < 0) 1661 if (index < 0)
1662 { 1662 {
1663 index = src.Length + index; 1663 index = src.Length + index;
1664 } 1664 }
1665 if (index >= src.Length) 1665 if (index >= src.Length)
1666 { 1666 {
1667 return ""; 1667 return "";
1668 } 1668 }
1669 return src.Data[index].ToString(); 1669 return src.Data[index].ToString();
1670 } 1670 }
1671 1671
1672 public string llList2Key(LSL_Types.list src, int index) 1672 public string llList2Key(LSL_Types.list src, int index)
1673 { 1673 {
1674 if (index < 0) 1674 if (index < 0)
1675 { 1675 {
1676 index = src.Length + index; 1676 index = src.Length + index;
1677 } 1677 }
1678 if (index >= src.Length) 1678 if (index >= src.Length)
1679 { 1679 {
1680 return "00000000-0000-0000-0000-000000000000"; 1680 return "00000000-0000-0000-0000-000000000000";
1681 } 1681 }
1682 //return OpenSim.Framework.ToString(src[index]); 1682 //return OpenSim.Framework.ToString(src[index]);
1683 LLUUID tmpkey; 1683 LLUUID tmpkey;
1684 if (LLUUID.TryParse(src.Data[index].ToString(), out tmpkey)) 1684 if (LLUUID.TryParse(src.Data[index].ToString(), out tmpkey))
1685 { 1685 {
1686 return tmpkey.ToString(); 1686 return tmpkey.ToString();
1687 } 1687 }
1688 else 1688 else
1689 { 1689 {
1690 return "00000000-0000-0000-0000-000000000000"; 1690 return "00000000-0000-0000-0000-000000000000";
1691 } 1691 }
1692 } 1692 }
1693 1693
1694 public LSL_Types.Vector3 llList2Vector(LSL_Types.list src, int index) 1694 public LSL_Types.Vector3 llList2Vector(LSL_Types.list src, int index)
1695 { 1695 {
1696 if (index < 0) 1696 if (index < 0)
1697 { 1697 {
1698 index = src.Length + index; 1698 index = src.Length + index;
1699 } 1699 }
1700 if (index >= src.Length) 1700 if (index >= src.Length)
1701 { 1701 {
1702 return new LSL_Types.Vector3(0, 0, 0); 1702 return new LSL_Types.Vector3(0, 0, 0);
1703 } 1703 }
1704 if (src.Data[index].GetType() == typeof(OpenSim.Region.ScriptEngine.Common.LSL_Types.Vector3)) 1704 if (src.Data[index].GetType() == typeof(OpenSim.Region.ScriptEngine.Common.LSL_Types.Vector3))
1705 { 1705 {
1706 return (LSL_Types.Vector3)src.Data[index]; 1706 return (LSL_Types.Vector3)src.Data[index];
1707 } 1707 }
1708 else 1708 else
1709 { 1709 {
1710 return new LSL_Types.Vector3(0, 0, 0); 1710 return new LSL_Types.Vector3(0, 0, 0);
1711 } 1711 }
1712 } 1712 }
1713 1713
1714 public LSL_Types.Quaternion llList2Rot(LSL_Types.list src, int index) 1714 public LSL_Types.Quaternion llList2Rot(LSL_Types.list src, int index)
1715 { 1715 {
1716 if (index < 0) 1716 if (index < 0)
1717 { 1717 {
1718 index = src.Length + index; 1718 index = src.Length + index;
1719 } 1719 }
1720 if (index >= src.Length) 1720 if (index >= src.Length)
1721 { 1721 {
1722 return new LSL_Types.Quaternion(0, 0, 0, 1); 1722 return new LSL_Types.Quaternion(0, 0, 0, 1);
1723 } 1723 }
1724 if (src.Data[index].GetType() == typeof(OpenSim.Region.ScriptEngine.Common.LSL_Types.Quaternion)) 1724 if (src.Data[index].GetType() == typeof(OpenSim.Region.ScriptEngine.Common.LSL_Types.Quaternion))
1725 { 1725 {
1726 return (LSL_Types.Quaternion)src.Data[index]; 1726 return (LSL_Types.Quaternion)src.Data[index];
1727 } 1727 }
1728 else 1728 else
1729 { 1729 {
1730 return new LSL_Types.Quaternion(0, 0, 0, 1); 1730 return new LSL_Types.Quaternion(0, 0, 0, 1);
1731 } 1731 }
1732 } 1732 }
1733 1733
1734 public LSL_Types.list llList2List(LSL_Types.list src, int start, int end) 1734 public LSL_Types.list llList2List(LSL_Types.list src, int start, int end)
1735 { 1735 {
1736 return src.GetSublist(start, end); 1736 return src.GetSublist(start, end);
1737 } 1737 }
1738 1738
1739 public LSL_Types.list llDeleteSubList(LSL_Types.list src, int start, int end) 1739 public LSL_Types.list llDeleteSubList(LSL_Types.list src, int start, int end)
1740 { 1740 {
1741 //LSL_Types.list ret = new LSL_Types.list(src); 1741 //LSL_Types.list ret = new LSL_Types.list(src);
1742 //ret.RemoveRange(start, end - start); 1742 //ret.RemoveRange(start, end - start);
1743 //return ret; 1743 //return ret;
1744 1744
1745 // Just a hunch - needs testing 1745 // Just a hunch - needs testing
1746 return src.GetSublist(end, start); 1746 return src.GetSublist(end, start);
1747 } 1747 }
1748 1748
1749 public int llGetListEntryType(LSL_Types.list src, int index) 1749 public int llGetListEntryType(LSL_Types.list src, int index)
1750 { 1750 {
1751 if (index < 0) 1751 if (index < 0)
1752 { 1752 {
1753 index = src.Length + index; 1753 index = src.Length + index;
1754 } 1754 }
1755 if (index >= src.Length) 1755 if (index >= src.Length)
1756 { 1756 {
1757 return 0; 1757 return 0;
1758 } 1758 }
1759 1759
1760 if (src.Data[index] is System.Int32) 1760 if (src.Data[index] is System.Int32)
1761 return 1; 1761 return 1;
1762 if (src.Data[index] is System.Double) 1762 if (src.Data[index] is System.Double)
1763 return 2; 1763 return 2;
1764 if (src.Data[index] is System.String) 1764 if (src.Data[index] is System.String)
1765 { 1765 {
1766 LLUUID tuuid; 1766 LLUUID tuuid;
1767 if (LLUUID.TryParse(src.Data[index].ToString(), out tuuid)) 1767 if (LLUUID.TryParse(src.Data[index].ToString(), out tuuid))
1768 { 1768 {
1769 return 3; 1769 return 3;
1770 } 1770 }
1771 else 1771 else
1772 { 1772 {
1773 return 4; 1773 return 4;
1774 } 1774 }
1775 } 1775 }
1776 if (src.Data[index] is OpenSim.Region.ScriptEngine.Common.LSL_Types.Vector3) 1776 if (src.Data[index] is OpenSim.Region.ScriptEngine.Common.LSL_Types.Vector3)
1777 return 5; 1777 return 5;
1778 if (src.Data[index] is OpenSim.Region.ScriptEngine.Common.LSL_Types.Quaternion) 1778 if (src.Data[index] is OpenSim.Region.ScriptEngine.Common.LSL_Types.Quaternion)
1779 return 6; 1779 return 6;
1780 if (src.Data[index] is OpenSim.Region.ScriptEngine.Common.LSL_Types.list) 1780 if (src.Data[index] is OpenSim.Region.ScriptEngine.Common.LSL_Types.list)
1781 return 7; 1781 return 7;
1782 return 0; 1782 return 0;
1783 1783
1784 } 1784 }
1785 1785
1786 public string llList2CSV(LSL_Types.list src) 1786 public string llList2CSV(LSL_Types.list src)
1787 { 1787 {
1788 string ret = ""; 1788 string ret = "";
1789 foreach (object o in src.Data) 1789 foreach (object o in src.Data)
1790 { 1790 {
1791 ret = ret + o.ToString() + ","; 1791 ret = ret + o.ToString() + ",";
1792 } 1792 }
1793 ret = ret.Substring(0, ret.Length - 2); 1793 ret = ret.Substring(0, ret.Length - 2);
1794 return ret; 1794 return ret;
1795 } 1795 }
1796 1796
1797 public LSL_Types.list llCSV2List(string src) 1797 public LSL_Types.list llCSV2List(string src)
1798 { 1798 {
1799 return new LSL_Types.list(src.Split(",".ToCharArray())); 1799 return new LSL_Types.list(src.Split(",".ToCharArray()));
1800 } 1800 }
1801 1801
1802 public LSL_Types.list llListRandomize(LSL_Types.list src, int stride) 1802 public LSL_Types.list llListRandomize(LSL_Types.list src, int stride)
1803 { 1803 {
1804 //int s = stride; 1804 //int s = stride;
1805 //if (s < 1) 1805 //if (s < 1)
1806 // s = 1; 1806 // s = 1;
1807 1807
1808 // This is a cowardly way of doing it ;) 1808 // This is a cowardly way of doing it ;)
1809 // TODO: Instead, randomize and check if random is mod stride or if it can not be, then array.removerange 1809 // TODO: Instead, randomize and check if random is mod stride or if it can not be, then array.removerange
1810 //List<LSL_Types.list> tmp = new List<LSL_Types.list>(); 1810 //List<LSL_Types.list> tmp = new List<LSL_Types.list>();
1811 1811
1812 // Add chunks to an array 1812 // Add chunks to an array
1813 //int c = 0; 1813 //int c = 0;
1814 //LSL_Types.list chunk = new LSL_Types.list(); 1814 //LSL_Types.list chunk = new LSL_Types.list();
1815 //foreach (string element in src) 1815 //foreach (string element in src)
1816 //{ 1816 //{
1817 // c++; 1817 // c++;
1818 // if (c > s) 1818 // if (c > s)
1819 // { 1819 // {
1820 // tmp.Add(chunk); 1820 // tmp.Add(chunk);
1821 // chunk = new LSL_Types.list(); 1821 // chunk = new LSL_Types.list();
1822 // c = 0; 1822 // c = 0;
1823 // } 1823 // }
1824 // chunk.Add(element); 1824 // chunk.Add(element);
1825 //} 1825 //}
1826 //if (chunk.Count > 0) 1826 //if (chunk.Count > 0)
1827 // tmp.Add(chunk); 1827 // tmp.Add(chunk);
1828 1828
1829 // Decreate (<- what kind of word is that? :D ) array back into a list 1829 // Decreate (<- what kind of word is that? :D ) array back into a list
1830 //int rnd; 1830 //int rnd;
1831 //LSL_Types.list ret = new LSL_Types.list(); 1831 //LSL_Types.list ret = new LSL_Types.list();
1832 //while (tmp.Count > 0) 1832 //while (tmp.Count > 0)
1833 //{ 1833 //{
1834 // rnd = Util.RandomClass.Next(tmp.Count); 1834 // rnd = Util.RandomClass.Next(tmp.Count);
1835 // foreach (string str in tmp[rnd]) 1835 // foreach (string str in tmp[rnd])
1836 // { 1836 // {
1837 // ret.Add(str); 1837 // ret.Add(str);
1838 // } 1838 // }
1839 // tmp.RemoveAt(rnd); 1839 // tmp.RemoveAt(rnd);
1840 //} 1840 //}
1841 1841
1842 //return ret; 1842 //return ret;
1843 NotImplemented("llListRandomize"); 1843 NotImplemented("llListRandomize");
1844 return new LSL_Types.list(); 1844 return new LSL_Types.list();
1845 } 1845 }
1846 1846
1847 public LSL_Types.list llList2ListStrided(LSL_Types.list src, int start, int end, int stride) 1847 public LSL_Types.list llList2ListStrided(LSL_Types.list src, int start, int end, int stride)
1848 { 1848 {
1849 LSL_Types.list ret = new LSL_Types.list(); 1849 LSL_Types.list ret = new LSL_Types.list();
1850 //int s = stride; 1850 //int s = stride;
1851 //if (s < 1) 1851 //if (s < 1)
1852 // s = 1; 1852 // s = 1;
1853 1853
1854 //int sc = s; 1854 //int sc = s;
1855 //for (int i = start; i < src.Count; i++) 1855 //for (int i = start; i < src.Count; i++)
1856 //{ 1856 //{
1857 // sc--; 1857 // sc--;
1858 // if (sc == 0) 1858 // if (sc == 0)
1859 // { 1859 // {
1860 // sc = s; 1860 // sc = s;
1861 // // Addthis 1861 // // Addthis
1862 // ret.Add(src[i]); 1862 // ret.Add(src[i]);
1863 // } 1863 // }
1864 // if (i == end) 1864 // if (i == end)
1865 // break; 1865 // break;
1866 //} 1866 //}
1867 NotImplemented("llList2ListStrided"); 1867 NotImplemented("llList2ListStrided");
1868 return ret; 1868 return ret;
1869 } 1869 }
1870 1870
1871 public LSL_Types.Vector3 llGetRegionCorner() 1871 public LSL_Types.Vector3 llGetRegionCorner()
1872 { 1872 {
1873 return new LSL_Types.Vector3(World.RegionInfo.RegionLocX * 256, World.RegionInfo.RegionLocY * 256, 0); 1873 return new LSL_Types.Vector3(World.RegionInfo.RegionLocX * 256, World.RegionInfo.RegionLocY * 256, 0);
1874 } 1874 }
1875 1875
1876 public LSL_Types.list llListInsertList(LSL_Types.list dest, LSL_Types.list src, int start) 1876 public LSL_Types.list llListInsertList(LSL_Types.list dest, LSL_Types.list src, int start)
1877 { 1877 {
1878 return dest.GetSublist(0, start - 1) + src + dest.GetSublist(start, -1); 1878 return dest.GetSublist(0, start - 1) + src + dest.GetSublist(start, -1);
1879 } 1879 }
1880 1880
1881 public int llListFindList(LSL_Types.list src, LSL_Types.list test) 1881 public int llListFindList(LSL_Types.list src, LSL_Types.list test)
1882 { 1882 {
1883 //foreach (string s in test) 1883 //foreach (string s in test)
1884 //{ 1884 //{
1885 // for (int ci = 0; ci < src.Count; ci++) 1885 // for (int ci = 0; ci < src.Count; ci++)
1886 // { 1886 // {
1887 // if (s == src[ci]) 1887 // if (s == src[ci])
1888 // return ci; 1888 // return ci;
1889 // } 1889 // }
1890 //} 1890 //}
1891 NotImplemented("llListFindList"); 1891 NotImplemented("llListFindList");
1892 return -1; 1892 return -1;
1893 } 1893 }
1894 1894
1895 public string llGetObjectName() 1895 public string llGetObjectName()
1896 { 1896 {
1897 return m_host.Name; 1897 return m_host.Name;
1898 } 1898 }
1899 1899
1900 public void llSetObjectName(string name) 1900 public void llSetObjectName(string name)
1901 { 1901 {
1902 m_host.Name = name; 1902 m_host.Name = name;
1903 } 1903 }
1904 1904
1905 public string llGetDate() 1905 public string llGetDate()
1906 { 1906 {
1907 DateTime date = DateTime.Now.ToUniversalTime(); 1907 DateTime date = DateTime.Now.ToUniversalTime();
1908 string result = date.ToString("yyyy-MM-dd"); 1908 string result = date.ToString("yyyy-MM-dd");
1909 return result; 1909 return result;
1910 } 1910 }
1911 1911
1912 public int llEdgeOfWorld(LSL_Types.Vector3 pos, LSL_Types.Vector3 dir) 1912 public int llEdgeOfWorld(LSL_Types.Vector3 pos, LSL_Types.Vector3 dir)
1913 { 1913 {
1914 NotImplemented("llEdgeOfWorld"); 1914 NotImplemented("llEdgeOfWorld");
1915 return 0; 1915 return 0;
1916 } 1916 }
1917 1917
1918 public int llGetAgentInfo(string id) 1918 public int llGetAgentInfo(string id)
1919 { 1919 {
1920 NotImplemented("llGetAgentInfo"); 1920 NotImplemented("llGetAgentInfo");
1921 return 0; 1921 return 0;
1922 } 1922 }
1923 1923
1924 public void llAdjustSoundVolume(double volume) 1924 public void llAdjustSoundVolume(double volume)
1925 { 1925 {
1926 NotImplemented("llAdjustSoundVolume"); 1926 NotImplemented("llAdjustSoundVolume");
1927 } 1927 }
1928 1928
1929 public void llSetSoundQueueing(int queue) 1929 public void llSetSoundQueueing(int queue)
1930 { 1930 {
1931 NotImplemented("llSetSoundQueueing"); 1931 NotImplemented("llSetSoundQueueing");
1932 } 1932 }
1933 1933
1934 public void llSetSoundRadius(double radius) 1934 public void llSetSoundRadius(double radius)
1935 { 1935 {
1936 NotImplemented("llSetSoundRadius"); 1936 NotImplemented("llSetSoundRadius");
1937 } 1937 }
1938 1938
1939 public string llKey2Name(string id) 1939 public string llKey2Name(string id)
1940 { 1940 {
1941 NotImplemented("llKey2Name"); 1941 NotImplemented("llKey2Name");
1942 return ""; 1942 return "";
1943 } 1943 }
1944 1944
1945 public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate) 1945 public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate)
1946 { 1946 {
1947 NotImplemented("llSetTextureAnim"); 1947 NotImplemented("llSetTextureAnim");
1948 } 1948 }
1949 1949
1950 public void llTriggerSoundLimited(string sound, double volume, LSL_Types.Vector3 top_north_east, 1950 public void llTriggerSoundLimited(string sound, double volume, LSL_Types.Vector3 top_north_east,
1951 LSL_Types.Vector3 bottom_south_west) 1951 LSL_Types.Vector3 bottom_south_west)
1952 { 1952 {
1953 NotImplemented("llTriggerSoundLimited"); 1953 NotImplemented("llTriggerSoundLimited");
1954 } 1954 }
1955 1955
1956 public void llEjectFromLand(string pest) 1956 public void llEjectFromLand(string pest)
1957 { 1957 {
1958 NotImplemented("llEjectFromLand"); 1958 NotImplemented("llEjectFromLand");
1959 } 1959 }
1960 1960
1961 public void llParseString2List() 1961 public void llParseString2List()
1962 { 1962 {
1963 NotImplemented("llParseString2List"); 1963 NotImplemented("llParseString2List");
1964 } 1964 }
1965 1965
1966 public int llOverMyLand(string id) 1966 public int llOverMyLand(string id)
1967 { 1967 {
1968 NotImplemented("llOverMyLand"); 1968 NotImplemented("llOverMyLand");
1969 return 0; 1969 return 0;
1970 } 1970 }
1971 1971
1972 public string llGetLandOwnerAt(LSL_Types.Vector3 pos) 1972 public string llGetLandOwnerAt(LSL_Types.Vector3 pos)
1973 { 1973 {
1974 return World.GetLandOwner((float)pos.x, (float)pos.y).ToString(); 1974 return World.GetLandOwner((float)pos.x, (float)pos.y).ToString();
1975 } 1975 }
1976 1976
1977 public string llGetNotecardLine(string name, int line) 1977 public string llGetNotecardLine(string name, int line)
1978 { 1978 {
1979 NotImplemented("llGetNotecardLine"); 1979 NotImplemented("llGetNotecardLine");
1980 return ""; 1980 return "";
1981 } 1981 }
1982 1982
1983 public LSL_Types.Vector3 llGetAgentSize(string id) 1983 public LSL_Types.Vector3 llGetAgentSize(string id)
1984 { 1984 {
1985 NotImplemented("llGetAgentSize"); 1985 NotImplemented("llGetAgentSize");
1986 return new LSL_Types.Vector3(); 1986 return new LSL_Types.Vector3();
1987 } 1987 }
1988 1988
1989 public int llSameGroup(string agent) 1989 public int llSameGroup(string agent)
1990 { 1990 {
1991 NotImplemented("llSameGroup"); 1991 NotImplemented("llSameGroup");
1992 return 0; 1992 return 0;
1993 } 1993 }
1994 1994
1995 public void llUnSit(string id) 1995 public void llUnSit(string id)
1996 { 1996 {
1997 NotImplemented("llUnSit"); 1997 NotImplemented("llUnSit");
1998 } 1998 }
1999 1999
2000 public LSL_Types.Vector3 llGroundSlope(LSL_Types.Vector3 offset) 2000 public LSL_Types.Vector3 llGroundSlope(LSL_Types.Vector3 offset)
2001 { 2001 {
2002 NotImplemented("llGroundSlope"); 2002 NotImplemented("llGroundSlope");
2003 return new LSL_Types.Vector3(); 2003 return new LSL_Types.Vector3();
2004 } 2004 }
2005 2005
2006 public LSL_Types.Vector3 llGroundNormal(LSL_Types.Vector3 offset) 2006 public LSL_Types.Vector3 llGroundNormal(LSL_Types.Vector3 offset)
2007 { 2007 {
2008 NotImplemented("llGroundNormal"); 2008 NotImplemented("llGroundNormal");
2009 return new LSL_Types.Vector3(); 2009 return new LSL_Types.Vector3();
2010 } 2010 }
2011 2011
2012 public LSL_Types.Vector3 llGroundContour(LSL_Types.Vector3 offset) 2012 public LSL_Types.Vector3 llGroundContour(LSL_Types.Vector3 offset)
2013 { 2013 {
2014 NotImplemented("llGroundContour"); 2014 NotImplemented("llGroundContour");
2015 return new LSL_Types.Vector3(); 2015 return new LSL_Types.Vector3();
2016 } 2016 }
2017 2017
2018 public int llGetAttached() 2018 public int llGetAttached()
2019 { 2019 {
2020 NotImplemented("llGetAttached"); 2020 NotImplemented("llGetAttached");
2021 return 0; 2021 return 0;
2022 } 2022 }
2023 2023
2024 public int llGetFreeMemory() 2024 public int llGetFreeMemory()
2025 { 2025 {
2026 NotImplemented("llGetFreeMemory"); 2026 NotImplemented("llGetFreeMemory");
2027 return 0; 2027 return 0;
2028 } 2028 }
2029 2029
2030 public string llGetRegionName() 2030 public string llGetRegionName()
2031 { 2031 {
2032 return World.RegionInfo.RegionName; 2032 return World.RegionInfo.RegionName;
2033 } 2033 }
2034 2034
2035 public double llGetRegionTimeDilation() 2035 public double llGetRegionTimeDilation()
2036 { 2036 {
2037 return (double)World.TimeDilation; 2037 return (double)World.TimeDilation;
2038 } 2038 }
2039 2039
2040 public double llGetRegionFPS() 2040 public double llGetRegionFPS()
2041 { 2041 {
2042 return 10.0f; 2042 return 10.0f;
2043 } 2043 }
2044 2044
2045 /* particle system rules should be coming into this routine as doubles, that is 2045 /* particle system rules should be coming into this routine as doubles, that is
2046 rule[0] should be an integer from this list and rule[1] should be the arg 2046 rule[0] should be an integer from this list and rule[1] should be the arg
2047 for the same integer. wiki.secondlife.com has most of this mapping, but some 2047 for the same integer. wiki.secondlife.com has most of this mapping, but some
2048 came from http://www.caligari-designs.com/p4u2 2048 came from http://www.caligari-designs.com/p4u2
2049 2049
2050 We iterate through the list for 'Count' elements, incrementing by two for each 2050 We iterate through the list for 'Count' elements, incrementing by two for each
2051 iteration and set the members of Primitive.ParticleSystem, one at a time. 2051 iteration and set the members of Primitive.ParticleSystem, one at a time.
2052 */ 2052 */
2053 2053
2054 public enum PrimitiveRule : int 2054 public enum PrimitiveRule : int
2055 { 2055 {
2056 PSYS_PART_FLAGS = 0, 2056 PSYS_PART_FLAGS = 0,
2057 PSYS_PART_START_COLOR = 1, 2057 PSYS_PART_START_COLOR = 1,
2058 PSYS_PART_START_ALPHA = 2, 2058 PSYS_PART_START_ALPHA = 2,
2059 PSYS_PART_END_COLOR = 3, 2059 PSYS_PART_END_COLOR = 3,
2060 PSYS_PART_END_ALPHA = 4, 2060 PSYS_PART_END_ALPHA = 4,
2061 PSYS_PART_START_SCALE = 5, 2061 PSYS_PART_START_SCALE = 5,
2062 PSYS_PART_END_SCALE = 6, 2062 PSYS_PART_END_SCALE = 6,
2063 PSYS_PART_MAX_AGE = 7, 2063 PSYS_PART_MAX_AGE = 7,
2064 PSYS_SRC_ACCEL = 8, 2064 PSYS_SRC_ACCEL = 8,
2065 PSYS_SRC_PATTERN = 9, 2065 PSYS_SRC_PATTERN = 9,
2066 PSYS_SRC_TEXTURE = 12, 2066 PSYS_SRC_TEXTURE = 12,
2067 PSYS_SRC_BURST_RATE = 13, 2067 PSYS_SRC_BURST_RATE = 13,
2068 PSYS_SRC_BURST_PART_COUNT = 15, 2068 PSYS_SRC_BURST_PART_COUNT = 15,
2069 PSYS_SRC_BURST_RADIUS = 16, 2069 PSYS_SRC_BURST_RADIUS = 16,
2070 PSYS_SRC_BURST_SPEED_MIN = 17, 2070 PSYS_SRC_BURST_SPEED_MIN = 17,
2071 PSYS_SRC_BURST_SPEED_MAX = 18, 2071 PSYS_SRC_BURST_SPEED_MAX = 18,
2072 PSYS_SRC_MAX_AGE = 19, 2072 PSYS_SRC_MAX_AGE = 19,
2073 PSYS_SRC_TARGET_KEY = 20, 2073 PSYS_SRC_TARGET_KEY = 20,
2074 PSYS_SRC_OMEGA = 21, 2074 PSYS_SRC_OMEGA = 21,
2075 PSYS_SRC_ANGLE_BEGIN = 22, 2075 PSYS_SRC_ANGLE_BEGIN = 22,
2076 PSYS_SRC_ANGLE_END = 23 2076 PSYS_SRC_ANGLE_END = 23
2077 } 2077 }
2078 2078
2079 public void llParticleSystem(List<Object> rules) 2079 public void llParticleSystem(List<Object> rules)
2080 { 2080 {
2081 Primitive.ParticleSystem prules = new Primitive.ParticleSystem(); 2081 Primitive.ParticleSystem prules = new Primitive.ParticleSystem();
2082 for (int i = 0; i < rules.Count; i += 2) 2082 for (int i = 0; i < rules.Count; i += 2)
2083 { 2083 {
2084 switch ((int)rules[i]) 2084 switch ((int)rules[i])
2085 { 2085 {
2086 case (int)LSL_BaseClass.PSYS_PART_FLAGS: 2086 case (int)LSL_BaseClass.PSYS_PART_FLAGS:
2087 prules.PartFlags = (uint)rules[i + 1]; 2087 prules.PartFlags = (uint)rules[i + 1];
2088 break; 2088 break;
2089 2089
2090 case (int)LSL_BaseClass.PSYS_PART_START_COLOR: 2090 case (int)LSL_BaseClass.PSYS_PART_START_COLOR:
2091 prules.PartStartColor = (LLColor)rules[i + 1]; 2091 prules.PartStartColor = (LLColor)rules[i + 1];
2092 break; 2092 break;
2093 2093
2094 case (int)LSL_BaseClass.PSYS_PART_START_ALPHA: 2094 case (int)LSL_BaseClass.PSYS_PART_START_ALPHA:
2095 //what is the cast? prules.PartStartColor = (LSL_Types.Vec)rules[i + 1]; 2095 //what is the cast? prules.PartStartColor = (LSL_Types.Vec)rules[i + 1];
2096 break; 2096 break;
2097 2097
2098 case (int)LSL_BaseClass.PSYS_PART_END_COLOR: 2098 case (int)LSL_BaseClass.PSYS_PART_END_COLOR:
2099 prules.PartEndColor = (LLColor)rules[i + 1]; 2099 prules.PartEndColor = (LLColor)rules[i + 1];
2100 break; 2100 break;
2101 2101
2102 case (int)LSL_BaseClass.PSYS_PART_END_ALPHA: 2102 case (int)LSL_BaseClass.PSYS_PART_END_ALPHA:
2103 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1]; 2103 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
2104 break; 2104 break;
2105 2105
2106 case (int)LSL_BaseClass.PSYS_PART_START_SCALE: 2106 case (int)LSL_BaseClass.PSYS_PART_START_SCALE:
2107 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1]; 2107 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
2108 break; 2108 break;
2109 2109
2110 case (int)LSL_BaseClass.PSYS_PART_END_SCALE: 2110 case (int)LSL_BaseClass.PSYS_PART_END_SCALE:
2111 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1]; 2111 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
2112 break; 2112 break;
2113 2113
2114 case (int)LSL_BaseClass.PSYS_PART_MAX_AGE: 2114 case (int)LSL_BaseClass.PSYS_PART_MAX_AGE:
2115 prules.MaxAge = (float)rules[i + 1]; 2115 prules.MaxAge = (float)rules[i + 1];
2116 break; 2116 break;
2117 2117
2118 case (int)LSL_BaseClass.PSYS_SRC_ACCEL: 2118 case (int)LSL_BaseClass.PSYS_SRC_ACCEL:
2119 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1]; 2119 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
2120 break; 2120 break;
2121 2121
2122 case (int)LSL_BaseClass.PSYS_SRC_PATTERN: 2122 case (int)LSL_BaseClass.PSYS_SRC_PATTERN:
2123 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1]; 2123 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
2124 break; 2124 break;
2125 2125
2126 case (int)LSL_BaseClass.PSYS_SRC_TEXTURE: 2126 case (int)LSL_BaseClass.PSYS_SRC_TEXTURE:
2127 prules.Texture = (LLUUID)rules[i + 1]; 2127 prules.Texture = (LLUUID)rules[i + 1];
2128 break; 2128 break;
2129 2129
2130 case (int)LSL_BaseClass.PSYS_SRC_BURST_RATE: 2130 case (int)LSL_BaseClass.PSYS_SRC_BURST_RATE:
2131 prules.BurstRate = (float)rules[i + 1]; 2131 prules.BurstRate = (float)rules[i + 1];
2132 break; 2132 break;
2133 2133
2134 case (int)LSL_BaseClass.PSYS_SRC_BURST_PART_COUNT: 2134 case (int)LSL_BaseClass.PSYS_SRC_BURST_PART_COUNT:
2135 prules.BurstPartCount = (byte)rules[i + 1]; 2135 prules.BurstPartCount = (byte)rules[i + 1];
2136 break; 2136 break;
2137 2137
2138 case (int)LSL_BaseClass.PSYS_SRC_BURST_RADIUS: 2138 case (int)LSL_BaseClass.PSYS_SRC_BURST_RADIUS:
2139 prules.BurstRadius = (float)rules[i + 1]; 2139 prules.BurstRadius = (float)rules[i + 1];
2140 break; 2140 break;
2141 2141
2142 case (int)LSL_BaseClass.PSYS_SRC_BURST_SPEED_MIN: 2142 case (int)LSL_BaseClass.PSYS_SRC_BURST_SPEED_MIN:
2143 prules.BurstSpeedMin = (float)rules[i + 1]; 2143 prules.BurstSpeedMin = (float)rules[i + 1];
2144 break; 2144 break;
2145 2145
2146 case (int)LSL_BaseClass.PSYS_SRC_BURST_SPEED_MAX: 2146 case (int)LSL_BaseClass.PSYS_SRC_BURST_SPEED_MAX:
2147 prules.BurstSpeedMax = (float)rules[i + 1]; 2147 prules.BurstSpeedMax = (float)rules[i + 1];
2148 break; 2148 break;
2149 2149
2150 case (int)LSL_BaseClass.PSYS_SRC_MAX_AGE: 2150 case (int)LSL_BaseClass.PSYS_SRC_MAX_AGE:
2151 prules.MaxAge = (float)rules[i + 1]; 2151 prules.MaxAge = (float)rules[i + 1];
2152 break; 2152 break;
2153 2153
2154 case (int)LSL_BaseClass.PSYS_SRC_TARGET_KEY: 2154 case (int)LSL_BaseClass.PSYS_SRC_TARGET_KEY:
2155 prules.Target = (LLUUID)rules[i + 1]; 2155 prules.Target = (LLUUID)rules[i + 1];
2156 break; 2156 break;
2157 2157
2158 case (int)LSL_BaseClass.PSYS_SRC_OMEGA: 2158 case (int)LSL_BaseClass.PSYS_SRC_OMEGA:
2159 //cast?? prules.MaxAge = (float)rules[i + 1]; 2159 //cast?? prules.MaxAge = (float)rules[i + 1];
2160 break; 2160 break;
2161 2161
2162 case (int)LSL_BaseClass.PSYS_SRC_ANGLE_BEGIN: 2162 case (int)LSL_BaseClass.PSYS_SRC_ANGLE_BEGIN:
2163 prules.InnerAngle = (float)rules[i + 1]; 2163 prules.InnerAngle = (float)rules[i + 1];
2164 break; 2164 break;
2165 2165
2166 case (int)LSL_BaseClass.PSYS_SRC_ANGLE_END: 2166 case (int)LSL_BaseClass.PSYS_SRC_ANGLE_END:
2167 prules.OuterAngle = (float)rules[i + 1]; 2167 prules.OuterAngle = (float)rules[i + 1];
2168 break; 2168 break;
2169 } 2169 }
2170 } 2170 }
2171 2171
2172 m_host.AddNewParticleSystem(prules); 2172 m_host.AddNewParticleSystem(prules);
2173 } 2173 }
2174 2174
2175 public void llGroundRepel(double height, int water, double tau) 2175 public void llGroundRepel(double height, int water, double tau)
2176 { 2176 {
2177 NotImplemented("llGroundRepel"); 2177 NotImplemented("llGroundRepel");
2178 } 2178 }
2179 2179
2180 public void llGiveInventoryList() 2180 public void llGiveInventoryList()
2181 { 2181 {
2182 NotImplemented("llGiveInventoryList"); 2182 NotImplemented("llGiveInventoryList");
2183 } 2183 }
2184 2184
2185 public void llSetVehicleType(int type) 2185 public void llSetVehicleType(int type)
2186 { 2186 {
2187 NotImplemented("llSetVehicleType"); 2187 NotImplemented("llSetVehicleType");
2188 } 2188 }
2189 2189
2190 public void llSetVehicledoubleParam(int param, double value) 2190 public void llSetVehicledoubleParam(int param, double value)
2191 { 2191 {
2192 NotImplemented("llSetVehicledoubleParam"); 2192 NotImplemented("llSetVehicledoubleParam");
2193 } 2193 }
2194 2194
2195 public void llSetVehicleVectorParam(int param, LSL_Types.Vector3 vec) 2195 public void llSetVehicleVectorParam(int param, LSL_Types.Vector3 vec)
2196 { 2196 {
2197 NotImplemented("llSetVehicleVectorParam"); 2197 NotImplemented("llSetVehicleVectorParam");
2198 } 2198 }
2199 2199
2200 public void llSetVehicleRotationParam(int param, LSL_Types.Quaternion rot) 2200 public void llSetVehicleRotationParam(int param, LSL_Types.Quaternion rot)
2201 { 2201 {
2202 NotImplemented("llSetVehicleRotationParam"); 2202 NotImplemented("llSetVehicleRotationParam");
2203 } 2203 }
2204 2204
2205 public void llSetVehicleFlags(int flags) 2205 public void llSetVehicleFlags(int flags)
2206 { 2206 {
2207 NotImplemented("llSetVehicleFlags"); 2207 NotImplemented("llSetVehicleFlags");
2208 } 2208 }
2209 2209
2210 public void llRemoveVehicleFlags(int flags) 2210 public void llRemoveVehicleFlags(int flags)
2211 { 2211 {
2212 NotImplemented("llRemoveVehicleFlags"); 2212 NotImplemented("llRemoveVehicleFlags");
2213 } 2213 }
2214 2214
2215 public void llSitTarget(LSL_Types.Vector3 offset, LSL_Types.Quaternion rot) 2215 public void llSitTarget(LSL_Types.Vector3 offset, LSL_Types.Quaternion rot)
2216 { 2216 {
2217 // LSL quaternions can normalize to 0, normal Quaternions can't. 2217 // LSL quaternions can normalize to 0, normal Quaternions can't.
2218 if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0) 2218 if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0)
2219 rot.z = 1; // ZERO_ROTATION = 0,0,0,1 2219 rot.z = 1; // ZERO_ROTATION = 0,0,0,1
2220 2220
2221 m_host.SetSitTarget(new Vector3((float)offset.x, (float)offset.y, (float)offset.z), new Quaternion((float)rot.s, (float)rot.x, (float)rot.y, (float)rot.z)); 2221 m_host.SetSitTarget(new Vector3((float)offset.x, (float)offset.y, (float)offset.z), new Quaternion((float)rot.s, (float)rot.x, (float)rot.y, (float)rot.z));
2222 } 2222 }
2223 2223
2224 public string llAvatarOnSitTarget() 2224 public string llAvatarOnSitTarget()
2225 { 2225 {
2226 LLUUID AVID = m_host.GetAvatarOnSitTarget(); 2226 LLUUID AVID = m_host.GetAvatarOnSitTarget();
2227 2227
2228 if (AVID != LLUUID.Zero) 2228 if (AVID != LLUUID.Zero)
2229 return AVID.ToString(); 2229 return AVID.ToString();
2230 else 2230 else
2231 return ""; 2231 return "";
2232 } 2232 }
2233 2233
2234 public void llAddToLandPassList(string avatar, double hours) 2234 public void llAddToLandPassList(string avatar, double hours)
2235 { 2235 {
2236 NotImplemented("llAddToLandPassList"); 2236 NotImplemented("llAddToLandPassList");
2237 } 2237 }
2238 2238
2239 public void llSetTouchText(string text) 2239 public void llSetTouchText(string text)
2240 { 2240 {
2241 m_host.TouchName = text; 2241 m_host.TouchName = text;
2242 } 2242 }
2243 2243
2244 public void llSetSitText(string text) 2244 public void llSetSitText(string text)
2245 { 2245 {
2246 m_host.SitName = text; 2246 m_host.SitName = text;
2247 } 2247 }
2248 2248
2249 public void llSetCameraEyeOffset(LSL_Types.Vector3 offset) 2249 public void llSetCameraEyeOffset(LSL_Types.Vector3 offset)
2250 { 2250 {
2251 NotImplemented("llSetCameraEyeOffset"); 2251 NotImplemented("llSetCameraEyeOffset");
2252 } 2252 }
2253 2253
2254 public void llSetCameraAtOffset(LSL_Types.Vector3 offset) 2254 public void llSetCameraAtOffset(LSL_Types.Vector3 offset)
2255 { 2255 {
2256 NotImplemented("llSetCameraAtOffset"); 2256 NotImplemented("llSetCameraAtOffset");
2257 } 2257 }
2258 2258
2259 public string llDumpList2String(LSL_Types.list src, string seperator) 2259 public string llDumpList2String(LSL_Types.list src, string seperator)
2260 { 2260 {
2261 if (src.Length == 0) 2261 if (src.Length == 0)
2262 { 2262 {
2263 return ""; 2263 return "";
2264 } 2264 }
2265 string ret = ""; 2265 string ret = "";
2266 foreach (object o in src.Data) 2266 foreach (object o in src.Data)
2267 { 2267 {
2268 ret = ret + o.ToString() + seperator; 2268 ret = ret + o.ToString() + seperator;
2269 } 2269 }
2270 ret = ret.Substring(0, ret.Length - seperator.Length); 2270 ret = ret.Substring(0, ret.Length - seperator.Length);
2271 return ret; 2271 return ret;
2272 } 2272 }
2273 2273
2274 public void llScriptDanger(LSL_Types.Vector3 pos) 2274 public void llScriptDanger(LSL_Types.Vector3 pos)
2275 { 2275 {
2276 NotImplemented("llScriptDanger"); 2276 NotImplemented("llScriptDanger");
2277 } 2277 }
2278 2278
2279 public void llDialog(string avatar, string message, LSL_Types.list buttons, int chat_channel) 2279 public void llDialog(string avatar, string message, LSL_Types.list buttons, int chat_channel)
2280 { 2280 {
2281 NotImplemented("llDialog"); 2281 NotImplemented("llDialog");
2282 } 2282 }
2283 2283
2284 public void llVolumeDetect(int detect) 2284 public void llVolumeDetect(int detect)
2285 { 2285 {
2286 NotImplemented("llVolumeDetect"); 2286 NotImplemented("llVolumeDetect");
2287 } 2287 }
2288 2288
2289 public void llResetOtherScript(string name) 2289 public void llResetOtherScript(string name)
2290 { 2290 {
2291 NotImplemented("llResetOtherScript"); 2291 NotImplemented("llResetOtherScript");
2292 } 2292 }
2293 2293
2294 public int llGetScriptState(string name) 2294 public int llGetScriptState(string name)
2295 { 2295 {
2296 NotImplemented("llGetScriptState"); 2296 NotImplemented("llGetScriptState");
2297 return 0; 2297 return 0;
2298 } 2298 }
2299 2299
2300 public void llRemoteLoadScript() 2300 public void llRemoteLoadScript()
2301 { 2301 {
2302 NotImplemented("llRemoteLoadScript"); 2302 NotImplemented("llRemoteLoadScript");
2303 } 2303 }
2304 2304
2305 public void llSetRemoteScriptAccessPin(int pin) 2305 public void llSetRemoteScriptAccessPin(int pin)
2306 { 2306 {
2307 NotImplemented("llSetRemoteScriptAccessPin"); 2307 NotImplemented("llSetRemoteScriptAccessPin");
2308 } 2308 }
2309 2309
2310 public void llRemoteLoadScriptPin(string target, string name, int pin, int running, int start_param) 2310 public void llRemoteLoadScriptPin(string target, string name, int pin, int running, int start_param)
2311 { 2311 {
2312 NotImplemented("llRemoteLoadScriptPin"); 2312 NotImplemented("llRemoteLoadScriptPin");
2313 } 2313 }
2314 2314
2315 // remote_data(integer type, key channel, key message_id, string sender, integer ival, string sval) 2315 // remote_data(integer type, key channel, key message_id, string sender, integer ival, string sval)
2316 // Not sure where these constants should live: 2316 // Not sure where these constants should live:
2317 // REMOTE_DATA_CHANNEL = 1 2317 // REMOTE_DATA_CHANNEL = 1
2318 // REMOTE_DATA_REQUEST = 2 2318 // REMOTE_DATA_REQUEST = 2
2319 // REMOTE_DATA_REPLY = 3 2319 // REMOTE_DATA_REPLY = 3
2320 public void llOpenRemoteDataChannel() 2320 public void llOpenRemoteDataChannel()
2321 { 2321 {
2322 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 2322 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
2323 if (xmlrpcMod.IsEnabled()) 2323 if (xmlrpcMod.IsEnabled())
2324 { 2324 {
2325 LLUUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID); 2325 LLUUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID);
2326 object[] resobj = new object[] { 1, channelID.ToString(), LLUUID.Zero.ToString(), "", 0, "" }; 2326 object[] resobj = new object[] { 1, channelID.ToString(), LLUUID.Zero.ToString(), "", 0, "" };
2327 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "remote_data", resobj); 2327 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "remote_data", resobj);
2328 } 2328 }
2329 } 2329 }
2330 2330
2331 public string llSendRemoteData(string channel, string dest, int idata, string sdata) 2331 public string llSendRemoteData(string channel, string dest, int idata, string sdata)
2332 { 2332 {
2333 NotImplemented("llSendRemoteData"); 2333 NotImplemented("llSendRemoteData");
2334 return ""; 2334 return "";
2335 } 2335 }
2336 2336
2337 public void llRemoteDataReply(string channel, string message_id, string sdata, int idata) 2337 public void llRemoteDataReply(string channel, string message_id, string sdata, int idata)
2338 { 2338 {
2339 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 2339 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
2340 xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata); 2340 xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata);
2341 } 2341 }
2342 2342
2343 public void llCloseRemoteDataChannel(string channel) 2343 public void llCloseRemoteDataChannel(string channel)
2344 { 2344 {
2345 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 2345 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
2346 xmlrpcMod.CloseXMLRPCChannel(channel); 2346 xmlrpcMod.CloseXMLRPCChannel(channel);
2347 } 2347 }
2348 2348
2349 public string llMD5String(string src, int nonce) 2349 public string llMD5String(string src, int nonce)
2350 { 2350 {
2351 return Util.Md5Hash(src + ":" + nonce.ToString()); 2351 return Util.Md5Hash(src + ":" + nonce.ToString());
2352 } 2352 }
2353 2353
2354 public void llSetPrimitiveParams(LSL_Types.list rules) 2354 public void llSetPrimitiveParams(LSL_Types.list rules)
2355 { 2355 {
2356 NotImplemented("llSetPrimitiveParams"); 2356 NotImplemented("llSetPrimitiveParams");
2357 } 2357 }
2358 2358
2359 public string llStringToBase64(string str) 2359 public string llStringToBase64(string str)
2360 { 2360 {
2361 try 2361 try
2362 { 2362 {
2363 byte[] encData_byte = new byte[str.Length]; 2363 byte[] encData_byte = new byte[str.Length];
2364 encData_byte = Encoding.UTF8.GetBytes(str); 2364 encData_byte = Encoding.UTF8.GetBytes(str);
2365 string encodedData = Convert.ToBase64String(encData_byte); 2365 string encodedData = Convert.ToBase64String(encData_byte);
2366 return encodedData; 2366 return encodedData;
2367 } 2367 }
2368 catch (Exception e) 2368 catch (Exception e)
2369 { 2369 {
2370 throw new Exception("Error in base64Encode" + e.Message); 2370 throw new Exception("Error in base64Encode" + e.Message);
2371 } 2371 }
2372 } 2372 }
2373 2373
2374 public string llBase64ToString(string str) 2374 public string llBase64ToString(string str)
2375 { 2375 {
2376 UTF8Encoding encoder = new UTF8Encoding(); 2376 UTF8Encoding encoder = new UTF8Encoding();
2377 Decoder utf8Decode = encoder.GetDecoder(); 2377 Decoder utf8Decode = encoder.GetDecoder();
2378 try 2378 try
2379 { 2379 {
2380 byte[] todecode_byte = Convert.FromBase64String(str); 2380 byte[] todecode_byte = Convert.FromBase64String(str);
2381 int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length); 2381 int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
2382 char[] decoded_char = new char[charCount]; 2382 char[] decoded_char = new char[charCount];
2383 utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0); 2383 utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
2384 string result = new String(decoded_char); 2384 string result = new String(decoded_char);
2385 return result; 2385 return result;
2386 } 2386 }
2387 catch (Exception e) 2387 catch (Exception e)
2388 { 2388 {
2389 throw new Exception("Error in base64Decode" + e.Message); 2389 throw new Exception("Error in base64Decode" + e.Message);
2390 } 2390 }
2391 } 2391 }
2392 2392
2393 public void llXorBase64Strings() 2393 public void llXorBase64Strings()
2394 { 2394 {
2395 throw new Exception("Command deprecated! Use llXorBase64StringsCorrect instead."); 2395 throw new Exception("Command deprecated! Use llXorBase64StringsCorrect instead.");
2396 } 2396 }
2397 2397
2398 public void llRemoteDataSetRegion() 2398 public void llRemoteDataSetRegion()
2399 { 2399 {
2400 NotImplemented("llRemoteDataSetRegion"); 2400 NotImplemented("llRemoteDataSetRegion");
2401 } 2401 }
2402 2402
2403 public double llLog10(double val) 2403 public double llLog10(double val)
2404 { 2404 {
2405 return (double)Math.Log10(val); 2405 return (double)Math.Log10(val);
2406 } 2406 }
2407 2407
2408 public double llLog(double val) 2408 public double llLog(double val)
2409 { 2409 {
2410 return (double)Math.Log(val); 2410 return (double)Math.Log(val);
2411 } 2411 }
2412 2412
2413 public LSL_Types.list llGetAnimationList(string id) 2413 public LSL_Types.list llGetAnimationList(string id)
2414 { 2414 {
2415 NotImplemented("llGetAnimationList"); 2415 NotImplemented("llGetAnimationList");
2416 return new LSL_Types.list(); 2416 return new LSL_Types.list();
2417 } 2417 }
2418 2418
2419 public void llSetParcelMusicURL(string url) 2419 public void llSetParcelMusicURL(string url)
2420 { 2420 {
2421 LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); 2421 LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
2422 if (landowner.Equals(null)) 2422 if (landowner.Equals(null))
2423 { 2423 {
2424 return; 2424 return;
2425 } 2425 }
2426 if (landowner != m_host.ObjectOwner) 2426 if (landowner != m_host.ObjectOwner)
2427 { 2427 {
2428 return; 2428 return;
2429 } 2429 }
2430 World.SetLandMusicURL(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, url); 2430 World.SetLandMusicURL(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, url);
2431 } 2431 }
2432 2432
2433 public LSL_Types.Vector3 llGetRootPosition() 2433 public LSL_Types.Vector3 llGetRootPosition()
2434 { 2434 {
2435 return new LSL_Types.Vector3(m_host.ParentGroup.AbsolutePosition.X, m_host.ParentGroup.AbsolutePosition.Y, m_host.ParentGroup.AbsolutePosition.Z); 2435 return new LSL_Types.Vector3(m_host.ParentGroup.AbsolutePosition.X, m_host.ParentGroup.AbsolutePosition.Y, m_host.ParentGroup.AbsolutePosition.Z);
2436 } 2436 }
2437 2437
2438 public LSL_Types.Quaternion llGetRootRotation() 2438 public LSL_Types.Quaternion llGetRootRotation()
2439 { 2439 {
2440 return new LSL_Types.Quaternion(m_host.ParentGroup.GroupRotation.X, m_host.ParentGroup.GroupRotation.Y, m_host.ParentGroup.GroupRotation.Z, m_host.ParentGroup.GroupRotation.W); 2440 return new LSL_Types.Quaternion(m_host.ParentGroup.GroupRotation.X, m_host.ParentGroup.GroupRotation.Y, m_host.ParentGroup.GroupRotation.Z, m_host.ParentGroup.GroupRotation.W);
2441 } 2441 }
2442 2442
2443 public string llGetObjectDesc() 2443 public string llGetObjectDesc()
2444 { 2444 {
2445 return m_host.Description; 2445 return m_host.Description;
2446 } 2446 }
2447 2447
2448 public void llSetObjectDesc(string desc) 2448 public void llSetObjectDesc(string desc)
2449 { 2449 {
2450 m_host.Description = desc; 2450 m_host.Description = desc;
2451 } 2451 }
2452 2452
2453 public string llGetCreator() 2453 public string llGetCreator()
2454 { 2454 {
2455 return m_host.ObjectCreator.ToString(); 2455 return m_host.ObjectCreator.ToString();
2456 } 2456 }
2457 2457
2458 public string llGetTimestamp() 2458 public string llGetTimestamp()
2459 { 2459 {
2460 return DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); 2460 return DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");
2461 } 2461 }
2462 2462
2463 public void llSetLinkAlpha(int linknumber, double alpha, int face) 2463 public void llSetLinkAlpha(int linknumber, double alpha, int face)
2464 { 2464 {
2465 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber); 2465 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber);
2466 if (linknumber > -1) 2466 if (linknumber > -1)
2467 { 2467 {
2468 LLObject.TextureEntry tex = part.Shape.Textures; 2468 LLObject.TextureEntry tex = part.Shape.Textures;
2469 LLColor texcolor; 2469 LLColor texcolor;
2470 if (face > -1) 2470 if (face > -1)
2471 { 2471 {
2472 texcolor = tex.CreateFace((uint)face).RGBA; 2472 texcolor = tex.CreateFace((uint)face).RGBA;
2473 texcolor.A = (float)Math.Abs(alpha - 1); 2473 texcolor.A = (float)Math.Abs(alpha - 1);
2474 tex.FaceTextures[face].RGBA = texcolor; 2474 tex.FaceTextures[face].RGBA = texcolor;
2475 part.UpdateTexture(tex); 2475 part.UpdateTexture(tex);
2476 return; 2476 return;
2477 } 2477 }
2478 else if (face == -1) 2478 else if (face == -1)
2479 { 2479 {
2480 texcolor = tex.DefaultTexture.RGBA; 2480 texcolor = tex.DefaultTexture.RGBA;
2481 texcolor.A = (float)Math.Abs(alpha - 1); 2481 texcolor.A = (float)Math.Abs(alpha - 1);
2482 tex.DefaultTexture.RGBA = texcolor; 2482 tex.DefaultTexture.RGBA = texcolor;
2483 for (uint i = 0; i < 32; i++) 2483 for (uint i = 0; i < 32; i++)
2484 { 2484 {
2485 if (tex.FaceTextures[i] != null) 2485 if (tex.FaceTextures[i] != null)
2486 { 2486 {
2487 texcolor = tex.FaceTextures[i].RGBA; 2487 texcolor = tex.FaceTextures[i].RGBA;
2488 texcolor.A = (float)Math.Abs(alpha - 1); 2488 texcolor.A = (float)Math.Abs(alpha - 1);
2489 tex.FaceTextures[i].RGBA = texcolor; 2489 tex.FaceTextures[i].RGBA = texcolor;
2490 } 2490 }
2491 } 2491 }
2492 texcolor = tex.DefaultTexture.RGBA; 2492 texcolor = tex.DefaultTexture.RGBA;
2493 texcolor.A = (float)Math.Abs(alpha - 1); 2493 texcolor.A = (float)Math.Abs(alpha - 1);
2494 tex.DefaultTexture.RGBA = texcolor; 2494 tex.DefaultTexture.RGBA = texcolor;
2495 part.UpdateTexture(tex); 2495 part.UpdateTexture(tex);
2496 return; 2496 return;
2497 } 2497 }
2498 return; 2498 return;
2499 } 2499 }
2500 else if (linknumber == -1) 2500 else if (linknumber == -1)
2501 { 2501 {
2502 int num = m_host.ParentGroup.PrimCount; 2502 int num = m_host.ParentGroup.PrimCount;
2503 for (int w = 0; w < num; w++) 2503 for (int w = 0; w < num; w++)
2504 { 2504 {
2505 linknumber = w; 2505 linknumber = w;
2506 part = m_host.ParentGroup.GetLinkNumPart(linknumber); 2506 part = m_host.ParentGroup.GetLinkNumPart(linknumber);
2507 LLObject.TextureEntry tex = part.Shape.Textures; 2507 LLObject.TextureEntry tex = part.Shape.Textures;
2508 LLColor texcolor; 2508 LLColor texcolor;
2509 if (face > -1) 2509 if (face > -1)
2510 { 2510 {
2511 texcolor = tex.CreateFace((uint)face).RGBA; 2511 texcolor = tex.CreateFace((uint)face).RGBA;
2512 texcolor.A = (float)Math.Abs(alpha - 1); 2512 texcolor.A = (float)Math.Abs(alpha - 1);
2513 tex.FaceTextures[face].RGBA = texcolor; 2513 tex.FaceTextures[face].RGBA = texcolor;
2514 part.UpdateTexture(tex); 2514 part.UpdateTexture(tex);
2515 } 2515 }
2516 else if (face == -1) 2516 else if (face == -1)
2517 { 2517 {
2518 texcolor = tex.DefaultTexture.RGBA; 2518 texcolor = tex.DefaultTexture.RGBA;
2519 texcolor.A = (float)Math.Abs(alpha - 1); 2519 texcolor.A = (float)Math.Abs(alpha - 1);
2520 tex.DefaultTexture.RGBA = texcolor; 2520 tex.DefaultTexture.RGBA = texcolor;
2521 for (uint i = 0; i < 32; i++) 2521 for (uint i = 0; i < 32; i++)
2522 { 2522 {
2523 if (tex.FaceTextures[i] != null) 2523 if (tex.FaceTextures[i] != null)
2524 { 2524 {
2525 texcolor = tex.FaceTextures[i].RGBA; 2525 texcolor = tex.FaceTextures[i].RGBA;
2526 texcolor.A = (float)Math.Abs(alpha - 1); 2526 texcolor.A = (float)Math.Abs(alpha - 1);
2527 tex.FaceTextures[i].RGBA = texcolor; 2527 tex.FaceTextures[i].RGBA = texcolor;
2528 } 2528 }
2529 } 2529 }
2530 texcolor = tex.DefaultTexture.RGBA; 2530 texcolor = tex.DefaultTexture.RGBA;
2531 texcolor.A = (float)Math.Abs(alpha - 1); 2531 texcolor.A = (float)Math.Abs(alpha - 1);
2532 tex.DefaultTexture.RGBA = texcolor; 2532 tex.DefaultTexture.RGBA = texcolor;
2533 part.UpdateTexture(tex); 2533 part.UpdateTexture(tex);
2534 } 2534 }
2535 } 2535 }
2536 return; 2536 return;
2537 } 2537 }
2538 else 2538 else
2539 { 2539 {
2540 NotImplemented("llSetLinkAlpha"); 2540 NotImplemented("llSetLinkAlpha");
2541 } 2541 }
2542 } 2542 }
2543 2543
2544 public int llGetNumberOfPrims() 2544 public int llGetNumberOfPrims()
2545 { 2545 {
2546 return m_host.ParentGroup.PrimCount; 2546 return m_host.ParentGroup.PrimCount;
2547 } 2547 }
2548 2548
2549 public string llGetNumberOfNotecardLines(string name) 2549 public string llGetNumberOfNotecardLines(string name)
2550 { 2550 {
2551 NotImplemented("llGetNumberOfNotecardLines"); 2551 NotImplemented("llGetNumberOfNotecardLines");
2552 return ""; 2552 return "";
2553 } 2553 }
2554 2554
2555 public LSL_Types.list llGetBoundingBox(string obj) 2555 public LSL_Types.list llGetBoundingBox(string obj)
2556 { 2556 {
2557 NotImplemented("llGetBoundingBox"); 2557 NotImplemented("llGetBoundingBox");
2558 return new LSL_Types.list(); 2558 return new LSL_Types.list();
2559 } 2559 }
2560 2560
2561 public LSL_Types.Vector3 llGetGeometricCenter() 2561 public LSL_Types.Vector3 llGetGeometricCenter()
2562 { 2562 {
2563 return new LSL_Types.Vector3(m_host.GetGeometricCenter().X, m_host.GetGeometricCenter().Y, m_host.GetGeometricCenter().Z); 2563 return new LSL_Types.Vector3(m_host.GetGeometricCenter().X, m_host.GetGeometricCenter().Y, m_host.GetGeometricCenter().Z);
2564 } 2564 }
2565 2565
2566 public void llGetPrimitiveParams() 2566 public void llGetPrimitiveParams()
2567 { 2567 {
2568 NotImplemented("llGetPrimitiveParams"); 2568 NotImplemented("llGetPrimitiveParams");
2569 } 2569 }
2570 2570
2571 public string llIntegerToBase64(int number) 2571 public string llIntegerToBase64(int number)
2572 { 2572 {
2573 NotImplemented("llIntegerToBase64"); 2573 NotImplemented("llIntegerToBase64");
2574 return ""; 2574 return "";
2575 } 2575 }
2576 2576
2577 public int llBase64ToInteger(string str) 2577 public int llBase64ToInteger(string str)
2578 { 2578 {
2579 NotImplemented("llBase64ToInteger"); 2579 NotImplemented("llBase64ToInteger");
2580 return 0; 2580 return 0;
2581 } 2581 }
2582 2582
2583 public double llGetGMTclock() 2583 public double llGetGMTclock()
2584 { 2584 {
2585 return DateTime.UtcNow.TimeOfDay.TotalSeconds; 2585 return DateTime.UtcNow.TimeOfDay.TotalSeconds;
2586 } 2586 }
2587 2587
2588 public string llGetSimulatorHostname() 2588 public string llGetSimulatorHostname()
2589 { 2589 {
2590 return System.Environment.MachineName; 2590 return System.Environment.MachineName;
2591 } 2591 }
2592 2592
2593 public void llSetLocalRot(LSL_Types.Quaternion rot) 2593 public void llSetLocalRot(LSL_Types.Quaternion rot)
2594 { 2594 {
2595 m_host.RotationOffset = new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); 2595 m_host.RotationOffset = new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s);
2596 } 2596 }
2597 2597
2598 public LSL_Types.list llParseStringKeepNulls(string src, LSL_Types.list seperators, LSL_Types.list spacers) 2598 public LSL_Types.list llParseStringKeepNulls(string src, LSL_Types.list seperators, LSL_Types.list spacers)
2599 { 2599 {
2600 NotImplemented("llParseStringKeepNulls"); 2600 NotImplemented("llParseStringKeepNulls");
2601 return new LSL_Types.list(); 2601 return new LSL_Types.list();
2602 } 2602 }
2603 2603
2604 public void llRezAtRoot(string inventory, LSL_Types.Vector3 position, LSL_Types.Vector3 velocity, 2604 public void llRezAtRoot(string inventory, LSL_Types.Vector3 position, LSL_Types.Vector3 velocity,
2605 LSL_Types.Quaternion rot, int param) 2605 LSL_Types.Quaternion rot, int param)
2606 { 2606 {
2607 NotImplemented("llRezAtRoot"); 2607 NotImplemented("llRezAtRoot");
2608 } 2608 }
2609 2609
2610 public int llGetObjectPermMask(int mask) 2610 public int llGetObjectPermMask(int mask)
2611 { 2611 {
2612 NotImplemented("llGetObjectPermMask"); 2612 NotImplemented("llGetObjectPermMask");
2613 return 0; 2613 return 0;
2614 } 2614 }
2615 2615
2616 public void llSetObjectPermMask(int mask, int value) 2616 public void llSetObjectPermMask(int mask, int value)
2617 { 2617 {
2618 NotImplemented("llSetObjectPermMask"); 2618 NotImplemented("llSetObjectPermMask");
2619 } 2619 }
2620 2620
2621 public void llGetInventoryPermMask(string item, int mask) 2621 public void llGetInventoryPermMask(string item, int mask)
2622 { 2622 {
2623 NotImplemented("llGetInventoryPermMask"); 2623 NotImplemented("llGetInventoryPermMask");
2624 } 2624 }
2625 2625
2626 public void llSetInventoryPermMask(string item, int mask, int value) 2626 public void llSetInventoryPermMask(string item, int mask, int value)
2627 { 2627 {
2628 NotImplemented("llSetInventoryPermMask"); 2628 NotImplemented("llSetInventoryPermMask");
2629 } 2629 }
2630 2630
2631 public string llGetInventoryCreator(string item) 2631 public string llGetInventoryCreator(string item)
2632 { 2632 {
2633 NotImplemented("llGetInventoryCreator"); 2633 NotImplemented("llGetInventoryCreator");
2634 return ""; 2634 return "";
2635 } 2635 }
2636 2636
2637 public void llOwnerSay(string msg) 2637 public void llOwnerSay(string msg)
2638 { 2638 {
2639 //temp fix so that lsl wiki examples aren't annoying to use to test other functions 2639 //temp fix so that lsl wiki examples aren't annoying to use to test other functions
2640 World.SimChat(Helpers.StringToField(msg), ChatTypeEnum.Say, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID); 2640 World.SimChat(Helpers.StringToField(msg), ChatTypeEnum.Say, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
2641 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 2641 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
2642 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Say, 0, m_host.Name, msg); 2642 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Say, 0, m_host.Name, msg);
2643 } 2643 }
2644 2644
2645 public void llRequestSimulatorData(string simulator, int data) 2645 public void llRequestSimulatorData(string simulator, int data)
2646 { 2646 {
2647 NotImplemented("llRequestSimulatorData"); 2647 NotImplemented("llRequestSimulatorData");
2648 } 2648 }
2649 2649
2650 public void llForceMouselook(int mouselook) 2650 public void llForceMouselook(int mouselook)
2651 { 2651 {
2652 NotImplemented("llForceMouselook"); 2652 NotImplemented("llForceMouselook");
2653 } 2653 }
2654 2654
2655 public double llGetObjectMass(string id) 2655 public double llGetObjectMass(string id)
2656 { 2656 {
2657 NotImplemented("llGetObjectMass"); 2657 NotImplemented("llGetObjectMass");
2658 return 0; 2658 return 0;
2659 } 2659 }
2660 2660
2661 public LSL_Types.list llListReplaceList(LSL_Types.list dest, LSL_Types.list src, int start, int end) 2661 public LSL_Types.list llListReplaceList(LSL_Types.list dest, LSL_Types.list src, int start, int end)
2662 { 2662 {
2663 return dest.GetSublist(0, start - 1) + src + dest.GetSublist(end + 1, -1); 2663 return dest.GetSublist(0, start - 1) + src + dest.GetSublist(end + 1, -1);
2664 } 2664 }
2665 2665
2666 public void llLoadURL(string avatar_id, string message, string url) 2666 public void llLoadURL(string avatar_id, string message, string url)
2667 { 2667 {
2668 LLUUID avatarId = new LLUUID(avatar_id); 2668 LLUUID avatarId = new LLUUID(avatar_id);
2669 m_ScriptEngine.World.SendUrlToUser(avatarId, m_host.Name, m_host.UUID, m_host.ObjectOwner, false, message, 2669 m_ScriptEngine.World.SendUrlToUser(avatarId, m_host.Name, m_host.UUID, m_host.ObjectOwner, false, message,
2670 url); 2670 url);
2671 } 2671 }
2672 2672
2673 public void llParcelMediaCommandList(LSL_Types.list commandList) 2673 public void llParcelMediaCommandList(LSL_Types.list commandList)
2674 { 2674 {
2675 NotImplemented("llParcelMediaCommandList"); 2675 NotImplemented("llParcelMediaCommandList");
2676 } 2676 }
2677 2677
2678 public void llParcelMediaQuery() 2678 public void llParcelMediaQuery()
2679 { 2679 {
2680 NotImplemented("llParcelMediaQuery"); 2680 NotImplemented("llParcelMediaQuery");
2681 } 2681 }
2682 2682
2683 public int llModPow(int a, int b, int c) 2683 public int llModPow(int a, int b, int c)
2684 { 2684 {
2685 Int64 tmp = 0; 2685 Int64 tmp = 0;
2686 Int64 val = Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp); 2686 Int64 val = Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp);
2687 return Convert.ToInt32(tmp); 2687 return Convert.ToInt32(tmp);
2688 } 2688 }
2689 2689
2690 public int llGetInventoryType(string name) 2690 public int llGetInventoryType(string name)
2691 { 2691 {
2692 NotImplemented("llGetInventoryType"); 2692 NotImplemented("llGetInventoryType");
2693 return 0; 2693 return 0;
2694 } 2694 }
2695 2695
2696 public void llSetPayPrice(int price, LSL_Types.list quick_pay_buttons) 2696 public void llSetPayPrice(int price, LSL_Types.list quick_pay_buttons)
2697 { 2697 {
2698 NotImplemented("llSetPayPrice"); 2698 NotImplemented("llSetPayPrice");
2699 } 2699 }
2700 2700
2701 public LSL_Types.Vector3 llGetCameraPos() 2701 public LSL_Types.Vector3 llGetCameraPos()
2702 { 2702 {
2703 NotImplemented("llGetCameraPos"); 2703 NotImplemented("llGetCameraPos");
2704 return new LSL_Types.Vector3(); 2704 return new LSL_Types.Vector3();
2705 } 2705 }
2706 2706
2707 public LSL_Types.Quaternion llGetCameraRot() 2707 public LSL_Types.Quaternion llGetCameraRot()
2708 { 2708 {
2709 NotImplemented("llGetCameraRot"); 2709 NotImplemented("llGetCameraRot");
2710 return new LSL_Types.Quaternion(); 2710 return new LSL_Types.Quaternion();
2711 } 2711 }
2712 2712
2713 public void llSetPrimURL() 2713 public void llSetPrimURL()
2714 { 2714 {
2715 NotImplemented("llSetPrimURL"); 2715 NotImplemented("llSetPrimURL");
2716 } 2716 }
2717 2717
2718 public void llRefreshPrimURL() 2718 public void llRefreshPrimURL()
2719 { 2719 {
2720 NotImplemented("llRefreshPrimURL"); 2720 NotImplemented("llRefreshPrimURL");
2721 } 2721 }
2722 2722
2723 public string llEscapeURL(string url) 2723 public string llEscapeURL(string url)
2724 { 2724 {
2725 try 2725 try
2726 { 2726 {
2727 return Uri.EscapeUriString(url); 2727 return Uri.EscapeUriString(url);
2728 } 2728 }
2729 catch (Exception ex) 2729 catch (Exception ex)
2730 { 2730 {
2731 return "llEscapeURL: " + ex.ToString(); 2731 return "llEscapeURL: " + ex.ToString();
2732 } 2732 }
2733 } 2733 }
2734 2734
2735 public string llUnescapeURL(string url) 2735 public string llUnescapeURL(string url)
2736 { 2736 {
2737 try 2737 try
2738 { 2738 {
2739 return Uri.UnescapeDataString(url); 2739 return Uri.UnescapeDataString(url);
2740 } 2740 }
2741 catch (Exception ex) 2741 catch (Exception ex)
2742 { 2742 {
2743 return "llUnescapeURL: " + ex.ToString(); 2743 return "llUnescapeURL: " + ex.ToString();
2744 } 2744 }
2745 } 2745 }
2746 2746
2747 public void llMapDestination(string simname, LSL_Types.Vector3 pos, LSL_Types.Vector3 look_at) 2747 public void llMapDestination(string simname, LSL_Types.Vector3 pos, LSL_Types.Vector3 look_at)
2748 { 2748 {
2749 NotImplemented("llMapDestination"); 2749 NotImplemented("llMapDestination");
2750 } 2750 }
2751 2751
2752 public void llAddToLandBanList(string avatar, double hours) 2752 public void llAddToLandBanList(string avatar, double hours)
2753 { 2753 {
2754 NotImplemented("llAddToLandBanList"); 2754 NotImplemented("llAddToLandBanList");
2755 } 2755 }
2756 2756
2757 public void llRemoveFromLandPassList(string avatar) 2757 public void llRemoveFromLandPassList(string avatar)
2758 { 2758 {
2759 NotImplemented("llRemoveFromLandPassList"); 2759 NotImplemented("llRemoveFromLandPassList");
2760 } 2760 }
2761 2761
2762 public void llRemoveFromLandBanList(string avatar) 2762 public void llRemoveFromLandBanList(string avatar)
2763 { 2763 {
2764 NotImplemented("llRemoveFromLandBanList"); 2764 NotImplemented("llRemoveFromLandBanList");
2765 } 2765 }
2766 2766
2767 public void llSetCameraParams(LSL_Types.list rules) 2767 public void llSetCameraParams(LSL_Types.list rules)
2768 { 2768 {
2769 NotImplemented("llSetCameraParams"); 2769 NotImplemented("llSetCameraParams");
2770 } 2770 }
2771 2771
2772 public void llClearCameraParams() 2772 public void llClearCameraParams()
2773 { 2773 {
2774 NotImplemented("llClearCameraParams"); 2774 NotImplemented("llClearCameraParams");
2775 } 2775 }
2776 2776
2777 public double llListStatistics(int operation, LSL_Types.list src) 2777 public double llListStatistics(int operation, LSL_Types.list src)
2778 { 2778 {
2779 NotImplemented("llListStatistics"); 2779 NotImplemented("llListStatistics");
2780 return 0; 2780 return 0;
2781 } 2781 }
2782 2782
2783 public int llGetUnixTime() 2783 public int llGetUnixTime()
2784 { 2784 {
2785 return Util.UnixTimeSinceEpoch(); 2785 return Util.UnixTimeSinceEpoch();
2786 } 2786 }
2787 2787
2788 public int llGetParcelFlags(LSL_Types.Vector3 pos) 2788 public int llGetParcelFlags(LSL_Types.Vector3 pos)
2789 { 2789 {
2790 NotImplemented("llGetParcelFlags"); 2790 NotImplemented("llGetParcelFlags");
2791 return 0; 2791 return 0;
2792 } 2792 }
2793 2793
2794 public int llGetRegionFlags() 2794 public int llGetRegionFlags()
2795 { 2795 {
2796 NotImplemented("llGetRegionFlags"); 2796 NotImplemented("llGetRegionFlags");
2797 return 0; 2797 return 0;
2798 } 2798 }
2799 2799
2800 public string llXorBase64StringsCorrect(string str1, string str2) 2800 public string llXorBase64StringsCorrect(string str1, string str2)
2801 { 2801 {
2802 string ret = ""; 2802 string ret = "";
2803 string src1 = llBase64ToString(str1); 2803 string src1 = llBase64ToString(str1);
2804 string src2 = llBase64ToString(str2); 2804 string src2 = llBase64ToString(str2);
2805 int c = 0; 2805 int c = 0;
2806 for (int i = 0; i < src1.Length; i++) 2806 for (int i = 0; i < src1.Length; i++)
2807 { 2807 {
2808 ret += src1[i] ^ src2[c]; 2808 ret += src1[i] ^ src2[c];
2809 2809
2810 c++; 2810 c++;
2811 if (c > src2.Length) 2811 if (c > src2.Length)
2812 c = 0; 2812 c = 0;
2813 } 2813 }
2814 return llStringToBase64(ret); 2814 return llStringToBase64(ret);
2815 } 2815 }
2816 2816
2817 public string llHTTPRequest(string url, LSL_Types.list parameters, string body) 2817 public string llHTTPRequest(string url, LSL_Types.list parameters, string body)
2818 { 2818 {
2819 IHttpRequests httpScriptMod = 2819 IHttpRequests httpScriptMod =
2820 m_ScriptEngine.World.RequestModuleInterface<IHttpRequests>(); 2820 m_ScriptEngine.World.RequestModuleInterface<IHttpRequests>();
2821 List<string> param = new List<string>(); 2821 List<string> param = new List<string>();
2822 foreach (object o in parameters.Data) 2822 foreach (object o in parameters.Data)
2823 { 2823 {
2824 param.Add(o.ToString()); 2824 param.Add(o.ToString());
2825 } 2825 }
2826 LLUUID reqID = httpScriptMod. 2826 LLUUID reqID = httpScriptMod.
2827 StartHttpRequest(m_localID, m_itemID, url, param, body); 2827 StartHttpRequest(m_localID, m_itemID, url, param, body);
2828 2828
2829 if (!reqID.Equals(null)) 2829 if (!reqID.Equals(null))
2830 return reqID.ToString(); 2830 return reqID.ToString();
2831 else 2831 else
2832 return null; 2832 return null;
2833 } 2833 }
2834 2834
2835 public void llResetLandBanList() 2835 public void llResetLandBanList()
2836 { 2836 {
2837 NotImplemented("llResetLandBanList"); 2837 NotImplemented("llResetLandBanList");
2838 } 2838 }
2839 2839
2840 public void llResetLandPassList() 2840 public void llResetLandPassList()
2841 { 2841 {
2842 NotImplemented("llResetLandPassList"); 2842 NotImplemented("llResetLandPassList");
2843 } 2843 }
2844 2844
2845 public int llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide) 2845 public int llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide)
2846 { 2846 {
2847 NotImplemented("llGetParcelPrimCount"); 2847 NotImplemented("llGetParcelPrimCount");
2848 return 0; 2848 return 0;
2849 } 2849 }
2850 2850
2851 public LSL_Types.list llGetParcelPrimOwners(LSL_Types.Vector3 pos) 2851 public LSL_Types.list llGetParcelPrimOwners(LSL_Types.Vector3 pos)
2852 { 2852 {
2853 NotImplemented("llGetParcelPrimOwners"); 2853 NotImplemented("llGetParcelPrimOwners");
2854 return new LSL_Types.list(); 2854 return new LSL_Types.list();
2855 } 2855 }
2856 2856
2857 public int llGetObjectPrimCount(string object_id) 2857 public int llGetObjectPrimCount(string object_id)
2858 { 2858 {
2859 SceneObjectPart part = World.GetSceneObjectPart(new LLUUID(object_id)); 2859 SceneObjectPart part = World.GetSceneObjectPart(new LLUUID(object_id));
2860 if (part == null) 2860 if (part == null)
2861 { 2861 {
2862 return 0; 2862 return 0;
2863 } 2863 }
2864 else 2864 else
2865 { 2865 {
2866 return part.ParentGroup.Children.Count; 2866 return part.ParentGroup.Children.Count;
2867 } 2867 }
2868 } 2868 }
2869 2869
2870 public int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide) 2870 public int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide)
2871 { 2871 {
2872 // Alondria: This currently just is utilizing the normal grid's 0.22 prims/m2 calculation 2872 // Alondria: This currently just is utilizing the normal grid's 0.22 prims/m2 calculation
2873 // Which probably will be irrelevent in OpenSim.... 2873 // Which probably will be irrelevent in OpenSim....
2874 LandData land = World.GetLandData((float)pos.x, (float)pos.y); 2874 LandData land = World.GetLandData((float)pos.x, (float)pos.y);
2875 float bonusfactor = World.RegionInfo.EstateSettings.objectBonusFactor; 2875 float bonusfactor = World.RegionInfo.EstateSettings.objectBonusFactor;
2876 if (land == null) 2876 if (land == null)
2877 { 2877 {
2878 return 0; 2878 return 0;
2879 } 2879 }
2880 if (sim_wide == 1) 2880 if (sim_wide == 1)
2881 { 2881 {
2882 decimal v = land.simwideArea * (decimal)(0.22) * (decimal)bonusfactor; 2882 decimal v = land.simwideArea * (decimal)(0.22) * (decimal)bonusfactor;
2883 return (int)v; 2883 return (int)v;
2884 } 2884 }
2885 else 2885 else
2886 { 2886 {
2887 decimal v = land.area * (decimal)(0.22) * (decimal)bonusfactor; 2887 decimal v = land.area * (decimal)(0.22) * (decimal)bonusfactor;
2888 return (int)v; 2888 return (int)v;
2889 } 2889 }
2890 2890
2891 } 2891 }
2892 2892
2893 public LSL_Types.list llGetParcelDetails(LSL_Types.Vector3 pos, LSL_Types.list param) 2893 public LSL_Types.list llGetParcelDetails(LSL_Types.Vector3 pos, LSL_Types.list param)
2894 { 2894 {
2895 LandData land = World.GetLandData((float)pos.x, (float)pos.y); 2895 LandData land = World.GetLandData((float)pos.x, (float)pos.y);
2896 if (land == null) 2896 if (land == null)
2897 { 2897 {
2898 return new LSL_Types.list(0); 2898 return new LSL_Types.list(0);
2899 } 2899 }
2900 LSL_Types.list ret = new LSL_Types.list(); 2900 LSL_Types.list ret = new LSL_Types.list();
2901 foreach (object o in param.Data) 2901 foreach (object o in param.Data)
2902 { 2902 {
2903 switch (o.ToString()) 2903 switch (o.ToString())
2904 { 2904 {
2905 case "0": 2905 case "0":
2906 ret = ret + new LSL_Types.list(land.landName); 2906 ret = ret + new LSL_Types.list(land.landName);
2907 break; 2907 break;
2908 case "1": 2908 case "1":
2909 ret = ret + new LSL_Types.list(land.landDesc); 2909 ret = ret + new LSL_Types.list(land.landDesc);
2910 break; 2910 break;
2911 case "2": 2911 case "2":
2912 ret = ret + new LSL_Types.list(land.ownerID.ToString()); 2912 ret = ret + new LSL_Types.list(land.ownerID.ToString());
2913 break; 2913 break;
2914 case "3": 2914 case "3":
2915 ret = ret + new LSL_Types.list(land.groupID.ToString()); 2915 ret = ret + new LSL_Types.list(land.groupID.ToString());
2916 break; 2916 break;
2917 case "4": 2917 case "4":
2918 ret = ret + new LSL_Types.list(land.area); 2918 ret = ret + new LSL_Types.list(land.area);
2919 break; 2919 break;
2920 default: 2920 default:
2921 ret = ret + new LSL_Types.list(0); 2921 ret = ret + new LSL_Types.list(0);
2922 break; 2922 break;
2923 } 2923 }
2924 } 2924 }
2925 return ret; 2925 return ret;
2926 } 2926 }
2927 2927
2928 // 2928 //
2929 // OpenSim functions 2929 // OpenSim functions
2930 // 2930 //
2931 public int osTerrainSetHeight(int x, int y, double val) 2931 public int osTerrainSetHeight(int x, int y, double val)
2932 { 2932 {
2933 if (x > 255 || x < 0 || y > 255 || y < 0) 2933 if (x > 255 || x < 0 || y > 255 || y < 0)
2934 LSLError("osTerrainSetHeight: Coordinate out of bounds"); 2934 LSLError("osTerrainSetHeight: Coordinate out of bounds");
2935 2935
2936 if (World.PermissionsMngr.CanTerraform(m_host.OwnerID, new LLVector3(x, y, 0))) 2936 if (World.PermissionsMngr.CanTerraform(m_host.OwnerID, new LLVector3(x, y, 0)))
2937 { 2937 {
2938 World.Terrain.Set(x, y, val); 2938 World.Terrain.Set(x, y, val);
2939 return 1; 2939 return 1;
2940 } 2940 }
2941 else 2941 else
2942 { 2942 {
2943 return 0; 2943 return 0;
2944 } 2944 }
2945 } 2945 }
2946 2946
2947 public double osTerrainGetHeight(int x, int y) 2947 public double osTerrainGetHeight(int x, int y)
2948 { 2948 {
2949 if (x > 255 || x < 0 || y > 255 || y < 0) 2949 if (x > 255 || x < 0 || y > 255 || y < 0)
2950 LSLError("osTerrainGetHeight: Coordinate out of bounds"); 2950 LSLError("osTerrainGetHeight: Coordinate out of bounds");
2951 2951
2952 return World.Terrain.GetHeight(x, y); 2952 return World.Terrain.GetHeight(x, y);
2953 } 2953 }
2954 2954
2955 public int osRegionRestart(double seconds) 2955 public int osRegionRestart(double seconds)
2956 { 2956 {
2957 if (World.PermissionsMngr.CanRestartSim(m_host.OwnerID)) 2957 if (World.PermissionsMngr.CanRestartSim(m_host.OwnerID))
2958 { 2958 {
2959 World.Restart((float)seconds); 2959 World.Restart((float)seconds);
2960 return 1; 2960 return 1;
2961 } 2961 }
2962 else 2962 else
2963 { 2963 {
2964 return 0; 2964 return 0;
2965 } 2965 }
2966 } 2966 }
2967 2967
2968 public void osRegionNotice(string msg) 2968 public void osRegionNotice(string msg)
2969 { 2969 {
2970 World.SendGeneralAlert(msg); 2970 World.SendGeneralAlert(msg);
2971 } 2971 }
2972 2972
2973 public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, 2973 public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams,
2974 int timer) 2974 int timer)
2975 { 2975 {
2976 if (dynamicID == "") 2976 if (dynamicID == "")
2977 { 2977 {
2978 IDynamicTextureManager textureManager = World.RequestModuleInterface<IDynamicTextureManager>(); 2978 IDynamicTextureManager textureManager = World.RequestModuleInterface<IDynamicTextureManager>();
2979 LLUUID createdTexture = 2979 LLUUID createdTexture =
2980 textureManager.AddDynamicTextureURL(World.RegionInfo.RegionID, m_host.UUID, contentType, url, 2980 textureManager.AddDynamicTextureURL(World.RegionInfo.RegionID, m_host.UUID, contentType, url,
2981 extraParams, timer); 2981 extraParams, timer);
2982 return createdTexture.ToString(); 2982 return createdTexture.ToString();
2983 } 2983 }
2984 else 2984 else
2985 { 2985 {
2986 //TODO update existing dynamic textures 2986 //TODO update existing dynamic textures
2987 } 2987 }
2988 2988
2989 return LLUUID.Zero.ToString(); 2989 return LLUUID.Zero.ToString();
2990 } 2990 }
2991 2991
2992 private void NotImplemented(string Command) 2992 private void NotImplemented(string Command)
2993 { 2993 {
2994 if (throwErrorOnNotImplemented) 2994 if (throwErrorOnNotImplemented)
2995 throw new NotImplementedException("Command not implemented: " + Command); 2995 throw new NotImplementedException("Command not implemented: " + Command);
2996 } 2996 }
2997 2997
2998 private void LSLError(string msg) 2998 private void LSLError(string msg)
2999 { 2999 {
3000 throw new Exception("LSL Runtime Error: " + msg); 3000 throw new Exception("LSL Runtime Error: " + msg);
3001 } 3001 }
3002 } 3002 }
3003} \ No newline at end of file 3003} \ No newline at end of file