aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs')
-rw-r--r--OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs1161
1 files changed, 1161 insertions, 0 deletions
diff --git a/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs b/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
new file mode 100644
index 0000000..a1f6c73
--- /dev/null
+++ b/OpenSim/Grid/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
@@ -0,0 +1,1161 @@
1using Axiom.Math;
2using System;
3using System.Collections.Generic;
4using System.Text;
5using libsecondlife;
6using OpenSim.Region.Environment.Scenes;
7using OpenSim.Region.Environment.Scenes.Scripting;
8using OpenSim.Region.Environment.Interfaces;
9using OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler;
10using OpenSim.Region.ScriptEngine.Common;
11using OpenSim.Framework.Console;
12using OpenSim.Framework.Utilities;
13using System.Runtime.Remoting.Lifetime;
14
15namespace OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler
16{
17 //
18 // !!!IMPORTANT!!!
19 //
20 // REMEMBER TO UPDATE http://opensimulator.org/wiki/LlFunction_implementation_status
21 //
22
23 /// <summary>
24 /// Contains all LSL ll-functions. This class will be in Default AppDomain.
25 /// </summary>
26 public class LSL_BuiltIn_Commands : MarshalByRefObject, LSL_BuiltIn_Commands_Interface
27 {
28
29 private System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
30 private ScriptEngine m_ScriptEngine;
31 private SceneObjectPart m_host;
32 private uint m_localID;
33 private LLUUID m_itemID;
34 private bool throwErrorOnNotImplemented = true;
35
36
37 public LSL_BuiltIn_Commands(ScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID)
38 {
39 m_ScriptEngine = ScriptEngine;
40 m_host = host;
41 m_localID = localID;
42 m_itemID = itemID;
43
44
45 //MainLog.Instance.Notice("ScriptEngine", "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]");
46 }
47
48
49 private string m_state = "default";
50
51 public string State()
52 {
53 return m_state;
54 }
55
56 // Object never expires
57 public override Object InitializeLifetimeService()
58 {
59 //Console.WriteLine("LSL_BuiltIn_Commands: InitializeLifetimeService()");
60 // return null;
61 ILease lease = (ILease)base.InitializeLifetimeService();
62
63 if (lease.CurrentState == LeaseState.Initial)
64 {
65 lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1);
66 // lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
67 // lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
68 }
69 return lease;
70 }
71
72
73 public Scene World
74 {
75 get { return m_ScriptEngine.World; }
76 }
77
78 //These are the implementations of the various ll-functions used by the LSL scripts.
79 //starting out, we use the System.Math library for trig functions. - ckrinke 8-14-07
80 public double llSin(double f) { return (double)Math.Sin(f); }
81 public double llCos(double f) { return (double)Math.Cos(f); }
82 public double llTan(double f) { return (double)Math.Tan(f); }
83 public double llAtan2(double x, double y) { return (double)Math.Atan2(y, x); }
84 public double llSqrt(double f) { return (double)Math.Sqrt(f); }
85 public double llPow(double fbase, double fexponent) { return (double)Math.Pow(fbase, fexponent); }
86 public int llAbs(int i) { return (int)Math.Abs(i); }
87 public double llFabs(double f) { return (double)Math.Abs(f); }
88
89 public double llFrand(double mag)
90 {
91 lock (Util.RandomClass)
92 {
93 return Util.RandomClass.Next((int)mag);
94 }
95 }
96
97 public int llFloor(double f) { return (int)Math.Floor(f); }
98 public int llCeil(double f) { return (int)Math.Ceiling(f); }
99 public int llRound(double f) { return (int)Math.Round(f, 3); }
100
101 //This next group are vector operations involving squaring and square root. ckrinke
102 public double llVecMag(LSL_Types.Vector3 v)
103 {
104 return (v.X * v.X + v.Y * v.Y + v.Z * v.Z);
105 }
106
107 public LSL_Types.Vector3 llVecNorm(LSL_Types.Vector3 v)
108 {
109 double mag = v.X * v.X + v.Y * v.Y + v.Z * v.Z;
110 LSL_Types.Vector3 nor = new LSL_Types.Vector3();
111 nor.X = v.X / mag; nor.Y = v.Y / mag; nor.Z = v.Z / mag;
112 return nor;
113 }
114
115 public double llVecDist(LSL_Types.Vector3 a, LSL_Types.Vector3 b)
116 {
117 double dx = a.X - b.X; double dy = a.Y - b.Y; double dz = a.Z - b.Z;
118 return Math.Sqrt(dx * dx + dy * dy + dz * dz);
119 }
120
121 //Now we start getting into quaternions which means sin/cos, matrices and vectors. ckrinke
122 public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r)
123 {
124 //This implementation is from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryRotationFunctions. ckrinke
125 LSL_Types.Quaternion t = new LSL_Types.Quaternion(r.X * r.X, r.Y * r.Y, r.Z * r.Z, r.R * r.R);
126 double m = (t.X + t.Y + t.Z + t.R);
127 if (m == 0) return new LSL_Types.Vector3();
128 double n = 2 * (r.Y * r.R + r.X * r.Z);
129 double p = m * m - n * n;
130 if (p > 0)
131 return new LSL_Types.Vector3(Math.Atan2(2.0 * (r.X * r.R - r.Y * r.Z), (-t.X - t.Y + t.Z + t.R)),
132 Math.Atan2(n, Math.Sqrt(p)), Math.Atan2(2.0 * (r.Z * r.R - r.X * r.Y), (t.X - t.Y - t.Z + t.R)));
133 else if (n > 0)
134 return new LSL_Types.Vector3(0.0, Math.PI / 2, Math.Atan2((r.Z * r.R + r.X * r.Y), 0.5 - t.X - t.Z));
135 else
136 return new LSL_Types.Vector3(0.0, -Math.PI / 2, Math.Atan2((r.Z * r.R + r.X * r.Y), 0.5 - t.X - t.Z));
137 }
138
139 public LSL_Types.Quaternion llEuler2Rot(LSL_Types.Vector3 v)
140 {
141 //this comes from from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryRotationFunctions but is incomplete as of 8/19/07
142 float err = 0.00001f;
143 double ax = Math.Sin(v.X / 2); double aw = Math.Cos(v.X / 2);
144 double by = Math.Sin(v.Y / 2); double bw = Math.Cos(v.Y / 2);
145 double cz = Math.Sin(v.Z / 2); double cw = Math.Cos(v.Z / 2);
146 LSL_Types.Quaternion a1 = new LSL_Types.Quaternion(0.0, 0.0, cz, cw);
147 LSL_Types.Quaternion a2 = new LSL_Types.Quaternion(0.0, by, 0.0, bw);
148 LSL_Types.Quaternion a3 = new LSL_Types.Quaternion(ax, 0.0, 0.0, aw);
149 LSL_Types.Quaternion a = new LSL_Types.Quaternion();
150 //This multiplication doesnt compile, yet. a = a1 * a2 * a3;
151 LSL_Types.Quaternion b = new LSL_Types.Quaternion(ax * bw * cw + aw * by * cz,
152 aw * by * cw - ax * bw * cz, aw * bw * cz + ax * by * cw, aw * bw * cw - ax * by * cz);
153 LSL_Types.Quaternion c = new LSL_Types.Quaternion();
154 //This addition doesnt compile yet c = a + b;
155 LSL_Types.Quaternion d = new LSL_Types.Quaternion();
156 //This addition doesnt compile yet d = a - b;
157 if ((Math.Abs(c.X) > err && Math.Abs(d.X) > err) ||
158 (Math.Abs(c.Y) > err && Math.Abs(d.Y) > err) ||
159 (Math.Abs(c.Z) > err && Math.Abs(d.Z) > err) ||
160 (Math.Abs(c.R) > err && Math.Abs(d.R) > err))
161 {
162 //return a new Quaternion that is null until I figure this out
163 // return b;
164 // return a;
165 }
166 return new LSL_Types.Quaternion();
167 }
168
169 public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up) { return new LSL_Types.Quaternion(); }
170 public LSL_Types.Vector3 llRot2Fwd(LSL_Types.Quaternion r) { return new LSL_Types.Vector3(); }
171 public LSL_Types.Vector3 llRot2Left(LSL_Types.Quaternion r) { return new LSL_Types.Vector3(); }
172 public LSL_Types.Vector3 llRot2Up(LSL_Types.Quaternion r) { return new LSL_Types.Vector3(); }
173 public LSL_Types.Quaternion llRotBetween(LSL_Types.Vector3 start, LSL_Types.Vector3 end) { return new LSL_Types.Quaternion(); }
174
175 public void llWhisper(int channelID, string text)
176 {
177 //type for whisper is 0
178 World.SimChat(Helpers.StringToField(text),
179 0, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
180 }
181
182 public void llSay(int channelID, string text)
183 {
184 //type for say is 1
185
186 World.SimChat(Helpers.StringToField(text),
187 1, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
188 }
189
190 public void llShout(int channelID, string text)
191 {
192 //type for shout is 2
193 World.SimChat(Helpers.StringToField(text),
194 2, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
195 }
196
197 public int llListen(int channelID, string name, string ID, string msg) { NotImplemented("llListen"); return 0; }
198 public void llListenControl(int number, int active) { NotImplemented("llListenControl"); return; }
199 public void llListenRemove(int number) { NotImplemented("llListenRemove"); return; }
200 public void llSensor(string name, string id, int type, double range, double arc) { NotImplemented("llSensor"); return; }
201 public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) { NotImplemented("llSensorRepeat"); return; }
202 public void llSensorRemove() { NotImplemented("llSensorRemove"); return; }
203 public string llDetectedName(int number) { NotImplemented("llDetectedName"); return ""; }
204 public string llDetectedKey(int number) { NotImplemented("llDetectedKey"); return ""; }
205 public string llDetectedOwner(int number) { NotImplemented("llDetectedOwner"); return ""; }
206 public int llDetectedType(int number) { NotImplemented("llDetectedType"); return 0; }
207 public LSL_Types.Vector3 llDetectedPos(int number) { NotImplemented("llDetectedPos"); return new LSL_Types.Vector3(); }
208 public LSL_Types.Vector3 llDetectedVel(int number) { NotImplemented("llDetectedVel"); return new LSL_Types.Vector3(); }
209 public LSL_Types.Vector3 llDetectedGrab(int number) { NotImplemented("llDetectedGrab"); return new LSL_Types.Vector3(); }
210 public LSL_Types.Quaternion llDetectedRot(int number) { NotImplemented("llDetectedRot"); return new LSL_Types.Quaternion(); }
211 public int llDetectedGroup(int number) { NotImplemented("llDetectedGroup"); return 0; }
212 public int llDetectedLinkNumber(int number) { NotImplemented("llDetectedLinkNumber"); return 0; }
213 public void llDie() { NotImplemented("llDie"); return; }
214 public double llGround(LSL_Types.Vector3 offset) { NotImplemented("llGround"); return 0; }
215 public double llCloud(LSL_Types.Vector3 offset) { NotImplemented("llCloud"); return 0; }
216 public LSL_Types.Vector3 llWind(LSL_Types.Vector3 offset) { NotImplemented("llWind"); return new LSL_Types.Vector3(); }
217 public void llSetStatus(int status, int value) { NotImplemented("llSetStatus"); return; }
218 public int llGetStatus(int status) { NotImplemented("llGetStatus"); return 0; }
219
220 public void llSetScale(LSL_Types.Vector3 scale)
221 {
222 // TODO: this needs to trigger a persistance save as well
223 LLVector3 tmp = m_host.Scale;
224 tmp.X = (float)scale.X;
225 tmp.Y = (float)scale.Y;
226 tmp.Z = (float)scale.Z;
227 m_host.Scale = tmp;
228 return;
229 }
230 public LSL_Types.Vector3 llGetScale()
231 {
232 return new LSL_Types.Vector3(m_host.Scale.X, m_host.Scale.Y, m_host.Scale.Z);
233 }
234
235 public void llSetColor(LSL_Types.Vector3 color, int face) { NotImplemented("llSetColor"); return; }
236 public double llGetAlpha(int face) { NotImplemented("llGetAlpha"); return 0; }
237 public void llSetAlpha(double alpha, int face) { NotImplemented("llSetAlpha"); return; }
238 public LSL_Types.Vector3 llGetColor(int face) { NotImplemented("llGetColor"); return new LSL_Types.Vector3(); }
239 public void llSetTexture(string texture, int face) { NotImplemented("llSetTexture"); return; }
240 public void llScaleTexture(double u, double v, int face) { NotImplemented("llScaleTexture"); return; }
241 public void llOffsetTexture(double u, double v, int face) { NotImplemented("llOffsetTexture"); return; }
242 public void llRotateTexture(double rotation, int face) { NotImplemented("llRotateTexture"); return; }
243
244 public string llGetTexture(int face) { NotImplemented("llGetTexture"); return ""; }
245
246 public void llSetPos(LSL_Types.Vector3 pos)
247 {
248 if (m_host.ParentID != 0)
249 {
250 m_host.UpdateOffSet(new LLVector3((float)pos.X, (float)pos.Y, (float)pos.Z));
251 }
252 else
253 {
254 m_host.UpdateGroupPosition(new LLVector3((float)pos.X, (float)pos.Y, (float)pos.Z));
255 }
256 }
257
258 public LSL_Types.Vector3 llGetPos()
259 {
260 return new LSL_Types.Vector3(m_host.AbsolutePosition.X,
261 m_host.AbsolutePosition.Y,
262 m_host.AbsolutePosition.Z);
263 }
264
265 public LSL_Types.Vector3 llGetLocalPos()
266 {
267 if (m_host.ParentID != 0)
268 {
269 return new LSL_Types.Vector3(m_host.OffsetPosition.X,
270 m_host.OffsetPosition.Y,
271 m_host.OffsetPosition.Z);
272 }
273 else
274 {
275 return new LSL_Types.Vector3(m_host.AbsolutePosition.X,
276 m_host.AbsolutePosition.Y,
277 m_host.AbsolutePosition.Z);
278 }
279 }
280 public void llSetRot(LSL_Types.Quaternion rot)
281 {
282 m_host.UpdateRotation(new LLQuaternion((float)rot.X, (float)rot.Y, (float)rot.Z, (float)rot.R));
283 }
284 public LSL_Types.Quaternion llGetRot()
285 {
286 LLQuaternion q = m_host.RotationOffset;
287 return new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
288 }
289 public LSL_Types.Quaternion llGetLocalRot() { NotImplemented("llGetLocalRot"); return new LSL_Types.Quaternion(); }
290 public void llSetForce(LSL_Types.Vector3 force, int local) { NotImplemented("llSetForce"); }
291 public LSL_Types.Vector3 llGetForce() { NotImplemented("llGetForce"); return new LSL_Types.Vector3(); }
292 public int llTarget(LSL_Types.Vector3 position, double range) { NotImplemented("llTarget"); return 0; }
293 public void llTargetRemove(int number) { NotImplemented("llTargetRemove"); }
294 public int llRotTarget(LSL_Types.Quaternion rot, double error) { NotImplemented("llRotTarget"); return 0; }
295 public void llRotTargetRemove(int number) { NotImplemented("llRotTargetRemove"); }
296 public void llMoveToTarget(LSL_Types.Vector3 target, double tau) { NotImplemented("llMoveToTarget"); }
297 public void llStopMoveToTarget() { NotImplemented("llStopMoveToTarget"); }
298 public void llApplyImpulse(LSL_Types.Vector3 force, int local) { NotImplemented("llApplyImpulse"); }
299 public void llApplyRotationalImpulse(LSL_Types.Vector3 force, int local) { NotImplemented("llApplyRotationalImpulse"); }
300 public void llSetTorque(LSL_Types.Vector3 torque, int local) { NotImplemented("llSetTorque"); }
301 public LSL_Types.Vector3 llGetTorque() { NotImplemented("llGetTorque"); return new LSL_Types.Vector3(); }
302 public void llSetForceAndTorque(LSL_Types.Vector3 force, LSL_Types.Vector3 torque, int local) { NotImplemented("llSetForceAndTorque"); }
303 public LSL_Types.Vector3 llGetVel() { NotImplemented("llGetVel"); return new LSL_Types.Vector3(); }
304 public LSL_Types.Vector3 llGetAccel() { NotImplemented("llGetAccel"); return new LSL_Types.Vector3(); }
305 public LSL_Types.Vector3 llGetOmega() { NotImplemented("llGetOmega"); return new LSL_Types.Vector3(); }
306 public double llGetTimeOfDay() { NotImplemented("llGetTimeOfDay"); return 0; }
307
308 public double llGetWallclock()
309 {
310 return DateTime.Now.TimeOfDay.TotalSeconds;
311 }
312
313 public double llGetTime() { NotImplemented("llGetTime"); return 0; }
314 public void llResetTime() { NotImplemented("llResetTime"); }
315 public double llGetAndResetTime() { NotImplemented("llGetAndResetTime"); return 0; }
316 public void llSound() { NotImplemented("llSound"); }
317 public void llPlaySound(string sound, double volume) { NotImplemented("llPlaySound"); }
318 public void llLoopSound(string sound, double volume) { NotImplemented("llLoopSound"); }
319 public void llLoopSoundMaster(string sound, double volume) { NotImplemented("llLoopSoundMaster"); }
320 public void llLoopSoundSlave(string sound, double volume) { NotImplemented("llLoopSoundSlave"); }
321 public void llPlaySoundSlave(string sound, double volume) { NotImplemented("llPlaySoundSlave"); }
322 public void llTriggerSound(string sound, double volume) { NotImplemented("llTriggerSound"); }
323 public void llStopSound() { NotImplemented("llStopSound"); }
324 public void llPreloadSound(string sound) { NotImplemented("llPreloadSound"); }
325
326 public string llGetSubString(string src, int start, int end)
327 {
328 return src.Substring(start, end);
329 }
330
331 public string llDeleteSubString(string src, int start, int end)
332 {
333 return src.Remove(start, end - start);
334 }
335 public string llInsertString(string dst, int position, string src)
336 {
337 return dst.Insert(position, src);
338 }
339 public string llToUpper(string src)
340 {
341 return src.ToUpper();
342 }
343
344 public string llToLower(string src)
345 {
346 return src.ToLower();
347 }
348
349 public int llGiveMoney(string destination, int amount) { NotImplemented("llGiveMoney"); return 0; }
350 public void llMakeExplosion() { NotImplemented("llMakeExplosion"); }
351 public void llMakeFountain() { NotImplemented("llMakeFountain"); }
352 public void llMakeSmoke() { NotImplemented("llMakeSmoke"); }
353 public void llMakeFire() { NotImplemented("llMakeFire"); }
354 public void llRezObject(string inventory, LSL_Types.Vector3 pos, LSL_Types.Quaternion rot, int param) { NotImplemented("llRezObject"); }
355 public void llLookAt(LSL_Types.Vector3 target, double strength, double damping) { NotImplemented("llLookAt"); }
356 public void llStopLookAt() { NotImplemented("llStopLookAt"); }
357
358 public void llSetTimerEvent(double sec)
359 {
360 // Setting timer repeat
361 m_ScriptEngine.m_LSLLongCmdHandler.SetTimerEvent(m_localID, m_itemID, sec);
362 }
363
364 public void llSleep(double sec)
365 {
366 System.Threading.Thread.Sleep((int)(sec * 1000));
367 }
368
369 public double llGetMass() { NotImplemented("llGetMass"); return 0; }
370 public void llCollisionFilter(string name, string id, int accept) { NotImplemented("llCollisionFilter"); }
371 public void llTakeControls(int controls, int accept, int pass_on) { NotImplemented("llTakeControls"); }
372 public void llReleaseControls() { NotImplemented("llReleaseControls"); }
373 public void llAttachToAvatar(int attachment) { NotImplemented("llAttachToAvatar"); }
374 public void llDetachFromAvatar() { NotImplemented("llDetachFromAvatar"); }
375 public void llTakeCamera() { NotImplemented("llTakeCamera"); }
376 public void llReleaseCamera() { NotImplemented("llReleaseCamera"); }
377
378 public string llGetOwner()
379 {
380 return m_host.ObjectOwner.ToStringHyphenated();
381 }
382
383 public void llInstantMessage(string user, string message) { NotImplemented("llInstantMessage"); }
384 public void llEmail(string address, string subject, string message) { NotImplemented("llEmail"); }
385 public void llGetNextEmail(string address, string subject) { NotImplemented("llGetNextEmail"); }
386
387 public string llGetKey()
388 {
389 return m_host.UUID.ToStringHyphenated();
390 }
391
392 public void llSetBuoyancy(double buoyancy) { NotImplemented("llSetBuoyancy"); }
393 public void llSetHoverHeight(double height, int water, double tau) { NotImplemented("llSetHoverHeight"); }
394 public void llStopHover() { NotImplemented("llStopHover"); }
395 public void llMinEventDelay(double delay) { NotImplemented("llMinEventDelay"); }
396 public void llSoundPreload() { NotImplemented("llSoundPreload"); }
397 public void llRotLookAt(LSL_Types.Quaternion target, double strength, double damping) { NotImplemented("llRotLookAt"); }
398
399 public int llStringLength(string str)
400 {
401 if (str.Length > 0)
402 {
403 return str.Length;
404 }
405 else
406 {
407 return 0;
408 }
409 }
410
411 public void llStartAnimation(string anim) { NotImplemented("llStartAnimation"); }
412 public void llStopAnimation(string anim) { NotImplemented("llStopAnimation"); }
413 public void llPointAt() { NotImplemented("llPointAt"); }
414 public void llStopPointAt() { NotImplemented("llStopPointAt"); }
415 public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain) { NotImplemented("llTargetOmega"); }
416 public int llGetStartParameter() { NotImplemented("llGetStartParameter"); return 0; }
417 public void llGodLikeRezObject(string inventory, LSL_Types.Vector3 pos) { NotImplemented("llGodLikeRezObject"); }
418 public void llRequestPermissions(string agent, int perm) { NotImplemented("llRequestPermissions"); }
419 public string llGetPermissionsKey() { NotImplemented("llGetPermissionsKey"); return ""; }
420 public int llGetPermissions() { NotImplemented("llGetPermissions"); return 0; }
421 public int llGetLinkNumber() { NotImplemented("llGetLinkNumber"); return 0; }
422 public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face) { NotImplemented("llSetLinkColor"); }
423 public void llCreateLink(string target, int parent) { NotImplemented("llCreateLink"); }
424 public void llBreakLink(int linknum) { NotImplemented("llBreakLink"); }
425 public void llBreakAllLinks() { NotImplemented("llBreakAllLinks"); }
426 public string llGetLinkKey(int linknum) { NotImplemented("llGetLinkKey"); return ""; }
427 public void llGetLinkName(int linknum) { NotImplemented("llGetLinkName"); }
428 public int llGetInventoryNumber(int type) { NotImplemented("llGetInventoryNumber"); return 0; }
429 public string llGetInventoryName(int type, int number) { NotImplemented("llGetInventoryName"); return ""; }
430 public void llSetScriptState(string name, int run) { NotImplemented("llSetScriptState"); }
431 public double llGetEnergy() { return 1.0f; }
432 public void llGiveInventory(string destination, string inventory) { NotImplemented("llGiveInventory"); }
433 public void llRemoveInventory(string item) { NotImplemented("llRemoveInventory"); }
434
435 public void llSetText(string text, LSL_Types.Vector3 color, double alpha)
436 {
437 Axiom.Math.Vector3 av3 = new Axiom.Math.Vector3((float)color.X, (float)color.Y, (float)color.Z);
438 m_host.SetText(text, av3, alpha);
439 }
440
441
442 public double llWater(LSL_Types.Vector3 offset) { NotImplemented("llWater"); return 0; }
443 public void llPassTouches(int pass) { NotImplemented("llPassTouches"); }
444 public string llRequestAgentData(string id, int data) { NotImplemented("llRequestAgentData"); return ""; }
445 public string llRequestInventoryData(string name) { NotImplemented("llRequestInventoryData"); return ""; }
446 public void llSetDamage(double damage) { NotImplemented("llSetDamage"); }
447 public void llTeleportAgentHome(string agent) { NotImplemented("llTeleportAgentHome"); }
448 public void llModifyLand(int action, int brush) { }
449 public void llCollisionSound(string impact_sound, double impact_volume) { NotImplemented("llCollisionSound"); }
450 public void llCollisionSprite(string impact_sprite) { NotImplemented("llCollisionSprite"); }
451 public string llGetAnimation(string id) { NotImplemented("llGetAnimation"); return ""; }
452 public void llResetScript()
453 {
454 m_ScriptEngine.m_ScriptManager.ResetScript(m_localID, m_itemID);
455 }
456 public void llMessageLinked(int linknum, int num, string str, string id) { }
457 public void llPushObject(string target, LSL_Types.Vector3 impulse, LSL_Types.Vector3 ang_impulse, int local) { }
458 public void llPassCollisions(int pass) { }
459 public string llGetScriptName() { return ""; }
460
461 public int llGetNumberOfSides() { return 0; }
462
463 public LSL_Types.Quaternion llAxisAngle2Rot(LSL_Types.Vector3 axis, double angle) { return new LSL_Types.Quaternion(); }
464 public LSL_Types.Vector3 llRot2Axis(LSL_Types.Quaternion rot) { return new LSL_Types.Vector3(); }
465 public void llRot2Angle() { }
466
467 public double llAcos(double val)
468 {
469 return (double)Math.Acos(val);
470 }
471
472 public double llAsin(double val)
473 {
474 return (double)Math.Asin(val);
475 }
476
477 public double llAngleBetween(LSL_Types.Quaternion a, LSL_Types.Quaternion b) { return 0; }
478 public string llGetInventoryKey(string name) { return ""; }
479 public void llAllowInventoryDrop(int add) { }
480 public LSL_Types.Vector3 llGetSunDirection() { return new LSL_Types.Vector3(); }
481 public LSL_Types.Vector3 llGetTextureOffset(int face) { return new LSL_Types.Vector3(); }
482 public LSL_Types.Vector3 llGetTextureScale(int side) { return new LSL_Types.Vector3(); }
483 public double llGetTextureRot(int side) { return 0; }
484
485 public int llSubStringIndex(string source, string pattern)
486 {
487 return source.IndexOf(pattern);
488 }
489
490 public string llGetOwnerKey(string id) { NotImplemented("llGetOwnerKey"); return ""; }
491
492 public LSL_Types.Vector3 llGetCenterOfMass() { NotImplemented("llGetCenterOfMass"); return new LSL_Types.Vector3(); }
493
494 public List<string> llListSort(List<string> src, int stride, int ascending)
495 {
496 SortedList<string, List<string>> sorted = new SortedList<string, List<string>>();
497 // Add chunks to an array
498 int s = stride;
499 if (s < 1)
500 s = 1;
501 int c = 0;
502 List<string> chunk = new List<string>();
503 string chunkString = "";
504 foreach (string element in src)
505 {
506 c++;
507 if (c > s)
508 {
509 sorted.Add(chunkString, chunk);
510 chunkString = "";
511 chunk = new List<string>();
512 c = 0;
513 }
514 chunk.Add(element);
515 chunkString += element.ToString();
516 }
517 if (chunk.Count > 0)
518 sorted.Add(chunkString, chunk);
519
520 List<string> ret = new List<string>();
521 foreach (List<string> ls in sorted.Values)
522 {
523 ret.AddRange(ls);
524 }
525
526 if (ascending == LSL.LSL_BaseClass.TRUE)
527 return ret;
528 ret.Reverse();
529 return ret;
530 }
531
532 public int llGetListLength(List<string> src)
533 {
534 return src.Count;
535 }
536
537 public int llList2Integer(List<string> src, int index)
538 {
539 return Convert.ToInt32(src[index]);
540 }
541
542 public double llList2double(List<string> src, int index)
543 {
544 return Convert.ToDouble(src[index]);
545 }
546
547 public float llList2Float(List<string> src, int index)
548 {
549 return Convert.ToSingle(src[index]);
550 }
551
552 public string llList2String(List<string> src, int index)
553 {
554 return src[index];
555 }
556
557 public string llList2Key(List<string> src, int index)
558 {
559 //return OpenSim.Framework.Types.ToStringHyphenated(src[index]);
560 return src[index].ToString();
561 }
562
563 public LSL_Types.Vector3 llList2Vector(List<string> src, int index)
564 {
565 return new LSL_Types.Vector3(double.Parse(src[index]), double.Parse(src[index + 1]), double.Parse(src[index + 2]));
566 }
567 public LSL_Types.Quaternion llList2Rot(List<string> src, int index)
568 {
569 return new LSL_Types.Quaternion(double.Parse(src[index]), double.Parse(src[index + 1]), double.Parse(src[index + 2]), double.Parse(src[index + 3]));
570 }
571 public List<string> llList2List(List<string> src, int start, int end)
572 {
573 if (end > start)
574 {
575 // Simple straight forward chunk
576 return src.GetRange(start, end - start);
577 }
578 else
579 {
580 // Some of the end + some of the beginning
581 // First chunk
582 List<string> ret = new List<string>();
583 ret.AddRange(src.GetRange(start, src.Count - start));
584 ret.AddRange(src.GetRange(0, end));
585 return ret;
586 }
587
588
589
590
591 }
592 public List<string> llDeleteSubList(List<string> src, int start, int end)
593 {
594 List<string> ret = new List<string>(src);
595 ret.RemoveRange(start, end - start);
596 return ret;
597 }
598 public int llGetListEntryType(List<string> src, int index) { NotImplemented("llGetListEntryType"); return 0; }
599 public string llList2CSV(List<string> src)
600 {
601 string ret = "";
602 foreach (string s in src)
603 {
604 if (s.Length > 0)
605 ret += ",";
606 ret += s;
607 }
608 return ret;
609 }
610 public List<string> llCSV2List(string src)
611 {
612 List<string> ret = new List<string>();
613 foreach (string s in src.Split(",".ToCharArray()))
614 {
615 ret.Add(s);
616 }
617 return ret;
618 }
619 public List<string> llListRandomize(List<string> src, int stride)
620 {
621 int s = stride;
622 if (s < 1)
623 s = 1;
624
625 // This is a cowardly way of doing it ;)
626 // TODO: Instead, randomize and check if random is mod stride or if it can not be, then array.removerange
627 List<List<string>> tmp = new List<List<string>>();
628
629 // Add chunks to an array
630 int c = 0;
631 List<string> chunk = new List<string>();
632 foreach (string element in src)
633 {
634 c++;
635 if (c > s)
636 {
637 tmp.Add(chunk);
638 chunk = new List<string>();
639 c = 0;
640 }
641 chunk.Add(element);
642 }
643 if (chunk.Count > 0)
644 tmp.Add(chunk);
645
646 // Decreate (<- what kind of word is that? :D ) array back into a list
647 int rnd;
648 List<string> ret = new List<string>();
649 while (tmp.Count > 0)
650 {
651 rnd = Util.RandomClass.Next(tmp.Count);
652 foreach (string str in tmp[rnd])
653 {
654 ret.Add(str);
655 }
656 tmp.RemoveAt(rnd);
657 }
658
659 return ret;
660
661
662 }
663 public List<string> llList2ListStrided(List<string> src, int start, int end, int stride)
664 {
665 List<string> ret = new List<string>();
666 int s = stride;
667 if (s < 1)
668 s = 1;
669
670 int sc = s;
671 for (int i = start; i < src.Count; i++)
672 {
673 sc--;
674 if (sc == 0)
675 {
676 sc = s;
677 // Addthis
678 ret.Add(src[i]);
679 }
680 if (i == end)
681 break;
682 }
683 return ret;
684 }
685
686 public LSL_Types.Vector3 llGetRegionCorner()
687 {
688 return new LSL_Types.Vector3(World.RegionInfo.RegionLocX * 256, World.RegionInfo.RegionLocY * 256, 0);
689 }
690
691 public List<string> llListInsertList(List<string> dest, List<string> src, int start)
692 {
693
694 List<string> ret = new List<string>(dest);
695 //foreach (string s in src.Reverse())
696 for (int ci = src.Count - 1; ci > -1; ci--)
697 {
698 ret.Insert(start, src[ci]);
699 }
700 return ret;
701 }
702 public int llListFindList(List<string> src, List<string> test)
703 {
704 foreach (string s in test)
705 {
706 for (int ci = 0; ci < src.Count; ci++)
707 {
708
709 if (s == src[ci])
710 return ci;
711 }
712 }
713 return -1;
714 }
715
716 public string llGetObjectName()
717 {
718 return m_host.Name;
719 }
720
721 public void llSetObjectName(string name)
722 {
723 m_host.Name = name;
724 }
725
726 public string llGetDate()
727 {
728 DateTime date = DateTime.Now.ToUniversalTime();
729 string result = date.ToString("yyyy-MM-dd");
730 return result;
731 }
732
733 public int llEdgeOfWorld(LSL_Types.Vector3 pos, LSL_Types.Vector3 dir) { NotImplemented("llEdgeOfWorld"); return 0; }
734 public int llGetAgentInfo(string id) { NotImplemented("llGetAgentInfo"); return 0; }
735 public void llAdjustSoundVolume(double volume) { NotImplemented("llAdjustSoundVolume"); }
736 public void llSetSoundQueueing(int queue) { NotImplemented("llSetSoundQueueing"); }
737 public void llSetSoundRadius(double radius) { NotImplemented("llSetSoundRadius"); }
738 public string llKey2Name(string id) { NotImplemented("llKey2Name"); return ""; }
739 public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate) { NotImplemented("llSetTextureAnim"); }
740 public void llTriggerSoundLimited(string sound, double volume, LSL_Types.Vector3 top_north_east, LSL_Types.Vector3 bottom_south_west) { NotImplemented("llTriggerSoundLimited"); }
741 public void llEjectFromLand(string pest) { NotImplemented("llEjectFromLand"); }
742
743 public void llParseString2List() { NotImplemented("llParseString2List"); }
744
745 public int llOverMyLand(string id) { NotImplemented("llOverMyLand"); return 0; }
746 public string llGetLandOwnerAt(LSL_Types.Vector3 pos) { NotImplemented("llGetLandOwnerAt"); return ""; }
747 public string llGetNotecardLine(string name, int line) { NotImplemented("llGetNotecardLine"); return ""; }
748 public LSL_Types.Vector3 llGetAgentSize(string id) { NotImplemented("llGetAgentSize"); return new LSL_Types.Vector3(); }
749 public int llSameGroup(string agent) { NotImplemented("llSameGroup"); return 0; }
750 public void llUnSit(string id) { NotImplemented("llUnSit"); }
751 public LSL_Types.Vector3 llGroundSlope(LSL_Types.Vector3 offset) { NotImplemented("llGroundSlope"); return new LSL_Types.Vector3(); }
752 public LSL_Types.Vector3 llGroundNormal(LSL_Types.Vector3 offset) { NotImplemented("llGroundNormal"); return new LSL_Types.Vector3(); }
753 public LSL_Types.Vector3 llGroundContour(LSL_Types.Vector3 offset) { NotImplemented("llGroundContour"); return new LSL_Types.Vector3(); }
754 public int llGetAttached() { NotImplemented("llGetAttached"); return 0; }
755 public int llGetFreeMemory() { NotImplemented("llGetFreeMemory"); return 0; }
756
757 public string llGetRegionName()
758 {
759 return World.RegionInfo.RegionName;
760 }
761
762 public double llGetRegionTimeDilation() { return 1.0f; }
763 public double llGetRegionFPS() { return 10.0f; }
764
765 /* particle system rules should be coming into this routine as doubles, that is
766 rule[0] should be an integer from this list and rule[1] should be the arg
767 for the same integer. wiki.secondlife.com has most of this mapping, but some
768 came from http://www.caligari-designs.com/p4u2
769
770 We iterate through the list for 'Count' elements, incrementing by two for each
771 iteration and set the members of Primitive.ParticleSystem, one at a time.
772 */
773 public enum PrimitiveRule : int
774 {
775 PSYS_PART_FLAGS = 0,
776 PSYS_PART_START_COLOR = 1,
777 PSYS_PART_START_ALPHA = 2,
778 PSYS_PART_END_COLOR = 3,
779 PSYS_PART_END_ALPHA = 4,
780 PSYS_PART_START_SCALE = 5,
781 PSYS_PART_END_SCALE = 6,
782 PSYS_PART_MAX_AGE = 7,
783 PSYS_SRC_ACCEL = 8,
784 PSYS_SRC_PATTERN = 9,
785 PSYS_SRC_TEXTURE = 12,
786 PSYS_SRC_BURST_RATE = 13,
787 PSYS_SRC_BURST_PART_COUNT = 15,
788 PSYS_SRC_BURST_RADIUS = 16,
789 PSYS_SRC_BURST_SPEED_MIN = 17,
790 PSYS_SRC_BURST_SPEED_MAX = 18,
791 PSYS_SRC_MAX_AGE = 19,
792 PSYS_SRC_TARGET_KEY = 20,
793 PSYS_SRC_OMEGA = 21,
794 PSYS_SRC_ANGLE_BEGIN = 22,
795 PSYS_SRC_ANGLE_END = 23
796 }
797
798 public void llParticleSystem(List<Object> rules)
799 {
800 Primitive.ParticleSystem prules = new Primitive.ParticleSystem();
801 for (int i = 0; i < rules.Count; i += 2)
802 {
803 switch ((int)rules[i])
804 {
805 case (int)PrimitiveRule.PSYS_PART_FLAGS:
806 prules.PartFlags = (uint)rules[i + 1];
807 break;
808
809 case (int)PrimitiveRule.PSYS_PART_START_COLOR:
810 prules.PartStartColor = (LLColor)rules[i + 1];
811 break;
812
813 case (int)PrimitiveRule.PSYS_PART_START_ALPHA:
814 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
815 break;
816
817 case (int)PrimitiveRule.PSYS_PART_END_COLOR:
818 prules.PartEndColor = (LLColor)rules[i + 1];
819 break;
820
821 case (int)PrimitiveRule.PSYS_PART_END_ALPHA:
822 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
823 break;
824
825 case (int)PrimitiveRule.PSYS_PART_START_SCALE:
826 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
827 break;
828
829 case (int)PrimitiveRule.PSYS_PART_END_SCALE:
830 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
831 break;
832
833 case (int)PrimitiveRule.PSYS_PART_MAX_AGE:
834 prules.MaxAge = (float)rules[i + 1];
835 break;
836
837 case (int)PrimitiveRule.PSYS_SRC_ACCEL:
838 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
839 break;
840
841 case (int)PrimitiveRule.PSYS_SRC_PATTERN:
842 //what is the cast? prules.PartStartColor = (LLColor)rules[i + 1];
843 break;
844
845 case (int)PrimitiveRule.PSYS_SRC_TEXTURE:
846 prules.Texture = (LLUUID)rules[i + 1];
847 break;
848
849 case (int)PrimitiveRule.PSYS_SRC_BURST_RATE:
850 prules.BurstRate = (float)rules[i + 1];
851 break;
852
853 case (int)PrimitiveRule.PSYS_SRC_BURST_PART_COUNT:
854 prules.BurstPartCount = (byte)rules[i + 1];
855 break;
856
857 case (int)PrimitiveRule.PSYS_SRC_BURST_RADIUS:
858 prules.BurstRadius = (float)rules[i + 1];
859 break;
860
861 case (int)PrimitiveRule.PSYS_SRC_BURST_SPEED_MIN:
862 prules.BurstSpeedMin = (float)rules[i + 1];
863 break;
864
865 case (int)PrimitiveRule.PSYS_SRC_BURST_SPEED_MAX:
866 prules.BurstSpeedMax = (float)rules[i + 1];
867 break;
868
869 case (int)PrimitiveRule.PSYS_SRC_MAX_AGE:
870 prules.MaxAge = (float)rules[i + 1];
871 break;
872
873 case (int)PrimitiveRule.PSYS_SRC_TARGET_KEY:
874 prules.Target = (LLUUID)rules[i + 1];
875 break;
876
877 case (int)PrimitiveRule.PSYS_SRC_OMEGA:
878 //cast?? prules.MaxAge = (float)rules[i + 1];
879 break;
880
881 case (int)PrimitiveRule.PSYS_SRC_ANGLE_BEGIN:
882 prules.InnerAngle = (float)rules[i + 1];
883 break;
884
885 case (int)PrimitiveRule.PSYS_SRC_ANGLE_END:
886 prules.OuterAngle = (float)rules[i + 1];
887 break;
888
889 }
890 }
891
892 m_host.AddNewParticleSystem(prules);
893 }
894
895 public void llGroundRepel(double height, int water, double tau) { NotImplemented("llGroundRepel"); }
896 public void llGiveInventoryList() { NotImplemented("llGiveInventoryList"); }
897 public void llSetVehicleType(int type) { NotImplemented("llSetVehicleType"); }
898 public void llSetVehicledoubleParam(int param, double value) { NotImplemented("llSetVehicledoubleParam"); }
899 public void llSetVehicleVectorParam(int param, LSL_Types.Vector3 vec) { NotImplemented("llSetVehicleVectorParam"); }
900 public void llSetVehicleRotationParam(int param, LSL_Types.Quaternion rot) { NotImplemented("llSetVehicleRotationParam"); }
901 public void llSetVehicleFlags(int flags) { NotImplemented("llSetVehicleFlags"); }
902 public void llRemoveVehicleFlags(int flags) { NotImplemented("llRemoveVehicleFlags"); }
903 public void llSitTarget(LSL_Types.Vector3 offset, LSL_Types.Quaternion rot) { NotImplemented("llSitTarget"); }
904 public string llAvatarOnSitTarget() { NotImplemented("llAvatarOnSitTarget"); return ""; }
905 public void llAddToLandPassList(string avatar, double hours) { NotImplemented("llAddToLandPassList"); }
906
907 public void llSetTouchText(string text)
908 {
909 m_host.TouchName = text;
910 }
911
912 public void llSetSitText(string text)
913 {
914 m_host.SitName = text;
915 }
916
917 public void llSetCameraEyeOffset(LSL_Types.Vector3 offset) { NotImplemented("llSetCameraEyeOffset"); }
918 public void llSetCameraAtOffset(LSL_Types.Vector3 offset) { NotImplemented("llSetCameraAtOffset"); }
919 public void llDumpList2String() { NotImplemented("llDumpList2String"); }
920 public void llScriptDanger(LSL_Types.Vector3 pos) { NotImplemented("llScriptDanger"); }
921 public void llDialog(string avatar, string message, List<string> buttons, int chat_channel) { NotImplemented("llDialog"); }
922 public void llVolumeDetect(int detect) { NotImplemented("llVolumeDetect"); }
923 public void llResetOtherScript(string name) { NotImplemented("llResetOtherScript"); }
924
925 public int llGetScriptState(string name) { NotImplemented("llGetScriptState"); return 0; }
926
927 public void llRemoteLoadScript() { NotImplemented("llRemoteLoadScript"); }
928 public void llSetRemoteScriptAccessPin(int pin) { NotImplemented("llSetRemoteScriptAccessPin"); }
929 public void llRemoteLoadScriptPin(string target, string name, int pin, int running, int start_param) { NotImplemented("llRemoteLoadScriptPin"); }
930 public void llOpenRemoteDataChannel() { NotImplemented("llOpenRemoteDataChannel"); }
931 public string llSendRemoteData(string channel, string dest, int idata, string sdata) { NotImplemented("llSendRemoteData"); return ""; }
932 public void llRemoteDataReply(string channel, string message_id, string sdata, int idata) { NotImplemented("llRemoteDataReply"); }
933 public void llCloseRemoteDataChannel(string channel) { NotImplemented("llCloseRemoteDataChannel"); }
934
935 public string llMD5String(string src, int nonce)
936 {
937 return Util.Md5Hash(src + ":" + nonce.ToString());
938 }
939
940 public void llSetPrimitiveParams(List<string> rules) { NotImplemented("llSetPrimitiveParams"); }
941 public string llStringToBase64(string str)
942 {
943
944 try
945 {
946 byte[] encData_byte = new byte[str.Length];
947 encData_byte = System.Text.Encoding.UTF8.GetBytes(str);
948 string encodedData = Convert.ToBase64String(encData_byte);
949 return encodedData;
950 }
951 catch (Exception e)
952 {
953 throw new Exception("Error in base64Encode" + e.Message);
954 }
955 }
956
957 public string llBase64ToString(string str)
958 {
959 System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
960 System.Text.Decoder utf8Decode = encoder.GetDecoder();
961 try
962 {
963
964 byte[] todecode_byte = Convert.FromBase64String(str);
965 int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
966 char[] decoded_char = new char[charCount];
967 utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
968 string result = new String(decoded_char);
969 return result;
970 }
971 catch (Exception e)
972 {
973 throw new Exception("Error in base64Decode" + e.Message);
974 }
975 }
976 public void llXorBase64Strings() { throw new Exception("Command deprecated! Use llXorBase64StringsCorrect instead."); }
977 public void llRemoteDataSetRegion() { NotImplemented("llRemoteDataSetRegion"); }
978 public double llLog10(double val) { return (double)Math.Log10(val); }
979 public double llLog(double val) { return (double)Math.Log(val); }
980 public List<string> llGetAnimationList(string id) { NotImplemented("llGetAnimationList"); return new List<string>(); }
981 public void llSetParcelMusicURL(string url) { NotImplemented("llSetParcelMusicURL"); }
982
983 public LSL_Types.Vector3 llGetRootPosition() { NotImplemented("llGetRootPosition"); return new LSL_Types.Vector3(); }
984
985 public LSL_Types.Quaternion llGetRootRotation() { NotImplemented("llGetRootRotation"); return new LSL_Types.Quaternion(); }
986
987 public string llGetObjectDesc()
988 {
989 return m_host.Description;
990 }
991
992 public void llSetObjectDesc(string desc)
993 {
994 m_host.Description = desc;
995 }
996
997 public string llGetCreator()
998 {
999 return m_host.ObjectCreator.ToStringHyphenated();
1000 }
1001
1002 public string llGetTimestamp() { return DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); }
1003 public void llSetLinkAlpha(int linknumber, double alpha, int face) { NotImplemented("llSetLinkAlpha"); }
1004 public int llGetNumberOfPrims() { NotImplemented("llGetNumberOfPrims"); return 0; }
1005 public string llGetNumberOfNotecardLines(string name) { NotImplemented("llGetNumberOfNotecardLines"); return ""; }
1006 public List<string> llGetBoundingBox(string obj) { NotImplemented("llGetBoundingBox"); return new List<string>(); }
1007 public LSL_Types.Vector3 llGetGeometricCenter() { NotImplemented("llGetGeometricCenter"); return new LSL_Types.Vector3(); }
1008 public void llGetPrimitiveParams() { NotImplemented("llGetPrimitiveParams"); }
1009 public string llIntegerToBase64(int number)
1010 {
1011 NotImplemented("llIntegerToBase64"); return "";
1012 }
1013 public int llBase64ToInteger(string str)
1014 {
1015 NotImplemented("llBase64ToInteger"); return 0;
1016 }
1017
1018 public double llGetGMTclock()
1019 {
1020 return DateTime.UtcNow.TimeOfDay.TotalSeconds;
1021 }
1022
1023 public string llGetSimulatorHostname()
1024 {
1025 return System.Environment.MachineName;
1026 }
1027
1028 public void llSetLocalRot(LSL_Types.Quaternion rot) { NotImplemented("llSetLocalRot"); }
1029 public List<string> llParseStringKeepNulls(string src, List<string> seperators, List<string> spacers) { NotImplemented("llParseStringKeepNulls"); return new List<string>(); }
1030 public void llRezAtRoot(string inventory, LSL_Types.Vector3 position, LSL_Types.Vector3 velocity, LSL_Types.Quaternion rot, int param) { NotImplemented("llRezAtRoot"); }
1031
1032 public int llGetObjectPermMask(int mask) { NotImplemented("llGetObjectPermMask"); return 0; }
1033
1034 public void llSetObjectPermMask(int mask, int value) { NotImplemented("llSetObjectPermMask"); }
1035
1036 public void llGetInventoryPermMask(string item, int mask) { NotImplemented("llGetInventoryPermMask"); }
1037 public void llSetInventoryPermMask(string item, int mask, int value) { NotImplemented("llSetInventoryPermMask"); }
1038 public string llGetInventoryCreator(string item) { NotImplemented("llGetInventoryCreator"); return ""; }
1039 public void llOwnerSay(string msg) { NotImplemented("llOwnerSay"); }
1040 public void llRequestSimulatorData(string simulator, int data) { NotImplemented("llRequestSimulatorData"); }
1041 public void llForceMouselook(int mouselook) { NotImplemented("llForceMouselook"); }
1042 public double llGetObjectMass(string id) { NotImplemented("llGetObjectMass"); return 0; }
1043 public void llListReplaceList() { NotImplemented("llListReplaceList"); }
1044
1045 public void llLoadURL(string avatar_id, string message, string url)
1046 {
1047 LLUUID avatarId = new LLUUID(avatar_id);
1048 m_ScriptEngine.World.SendUrlToUser(avatarId, m_host.Name, m_host.UUID, m_host.ObjectOwner, false, message, url);
1049 }
1050
1051 public void llParcelMediaCommandList(List<string> commandList) { NotImplemented("llParcelMediaCommandList"); }
1052 public void llParcelMediaQuery() { NotImplemented("llParcelMediaQuery"); }
1053
1054 public int llModPow(int a, int b, int c)
1055 {
1056 Int64 tmp = 0;
1057 Int64 val = Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp);
1058 return Convert.ToInt32(tmp);
1059 }
1060
1061 public int llGetInventoryType(string name) { NotImplemented("llGetInventoryType"); return 0; }
1062
1063 public void llSetPayPrice(int price, List<string> quick_pay_buttons) { NotImplemented("llSetPayPrice"); }
1064 public LSL_Types.Vector3 llGetCameraPos() { NotImplemented("llGetCameraPos"); return new LSL_Types.Vector3(); }
1065 public LSL_Types.Quaternion llGetCameraRot() { NotImplemented("llGetCameraRot"); return new LSL_Types.Quaternion(); }
1066 public void llSetPrimURL() { NotImplemented("llSetPrimURL"); }
1067 public void llRefreshPrimURL() { NotImplemented("llRefreshPrimURL"); }
1068
1069 public string llEscapeURL(string url)
1070 {
1071 try
1072 {
1073 return Uri.EscapeUriString(url);
1074 }
1075 catch (Exception ex)
1076 {
1077 return "llEscapeURL: " + ex.ToString();
1078 }
1079 }
1080
1081 public string llUnescapeURL(string url)
1082 {
1083 try
1084 {
1085 return Uri.UnescapeDataString(url);
1086 }
1087 catch (Exception ex)
1088 {
1089 return "llUnescapeURL: " + ex.ToString();
1090 }
1091 }
1092 public void llMapDestination(string simname, LSL_Types.Vector3 pos, LSL_Types.Vector3 look_at) { NotImplemented("llMapDestination"); }
1093 public void llAddToLandBanList(string avatar, double hours) { NotImplemented("llAddToLandBanList"); }
1094 public void llRemoveFromLandPassList(string avatar) { NotImplemented("llRemoveFromLandPassList"); }
1095 public void llRemoveFromLandBanList(string avatar) { NotImplemented("llRemoveFromLandBanList"); }
1096 public void llSetCameraParams(List<string> rules) { NotImplemented("llSetCameraParams"); }
1097 public void llClearCameraParams() { NotImplemented("llClearCameraParams"); }
1098 public double llListStatistics(int operation, List<string> src) { NotImplemented("llListStatistics"); return 0; }
1099
1100 public int llGetUnixTime()
1101 {
1102 return Util.UnixTimeSinceEpoch();
1103 }
1104
1105 public int llGetParcelFlags(LSL_Types.Vector3 pos) { NotImplemented("llGetParcelFlags"); return 0; }
1106 public int llGetRegionFlags() { NotImplemented("llGetRegionFlags"); return 0; }
1107 public string llXorBase64StringsCorrect(string str1, string str2)
1108 {
1109 string ret = "";
1110 string src1 = llBase64ToString(str1);
1111 string src2 = llBase64ToString(str2);
1112 int c = 0;
1113 for (int i = 0; i < src1.Length; i++)
1114 {
1115 ret += src1[i] ^ src2[c];
1116
1117 c++;
1118 if (c > src2.Length)
1119 c = 0;
1120 }
1121 return llStringToBase64(ret);
1122 }
1123 public void llHTTPRequest(string url, List<string> parameters, string body)
1124 {
1125 m_ScriptEngine.m_LSLLongCmdHandler.StartHttpRequest(m_localID, m_itemID, url, parameters, body);
1126 }
1127 public void llResetLandBanList() { NotImplemented("llResetLandBanList"); }
1128 public void llResetLandPassList() { NotImplemented("llResetLandPassList"); }
1129 public int llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide) { NotImplemented("llGetParcelPrimCount"); return 0; }
1130 public List<string> llGetParcelPrimOwners(LSL_Types.Vector3 pos) { NotImplemented("llGetParcelPrimOwners"); return new List<string>(); }
1131 public int llGetObjectPrimCount(string object_id) { NotImplemented("llGetObjectPrimCount"); return 0; }
1132 public int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide) { NotImplemented("llGetParcelMaxPrims"); return 0; }
1133 public List<string> llGetParcelDetails(LSL_Types.Vector3 pos, List<string> param) { NotImplemented("llGetParcelDetails"); return new List<string>(); }
1134
1135 //
1136 // OpenSim functions
1137 //
1138 public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer)
1139 {
1140 if (dynamicID == "")
1141 {
1142 IDynamicTextureManager textureManager = this.World.RequestModuleInterface<IDynamicTextureManager>();
1143 LLUUID createdTexture = textureManager.AddDynamicTextureURL(World.RegionInfo.SimUUID, this.m_host.UUID, contentType, url, extraParams, timer);
1144 return createdTexture.ToStringHyphenated();
1145 }
1146 else
1147 {
1148 //TODO update existing dynamic textures
1149 }
1150
1151 return LLUUID.Zero.ToStringHyphenated();
1152 }
1153
1154 private void NotImplemented(string Command)
1155 {
1156 if (throwErrorOnNotImplemented)
1157 throw new NotImplementedException("Command not implemented: " + Command);
1158 }
1159
1160 }
1161}