aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
blob: 7c605c2dd11a93da05333a80536c77c05b861637 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
using System;
using System.Collections.Generic;
using System.Text;
using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler;
using libsecondlife;
using OpenSim.Region.Environment.Scenes;
using OpenSim.Region.Environment.Scenes.Scripting;
using OpenSim.Framework.Console;

namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
{
    public class LSL_BaseClass : LSL_BuiltIn_Commands_Interface
    {
        public string State = "default";
        private System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();

        protected ScriptManager m_manager;
        protected IScriptHost m_host;
        protected IScriptHost m_root;

        public LSL_BaseClass(ScriptManager manager, IScriptHost host, IScriptHost root)
        {
            m_manager = manager;
            m_host = host;
            m_root = root;
        }

        public Scene World
        {
            get { return m_manager.World; }
        }

        public void Start(string FullScriptID)
        {
            MainLog.Instance.Notice("ScriptEngine", "LSL_BaseClass.Start() called. FullScriptID: " + FullScriptID + ": Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]");

            return;
        }

        //These are the implementations of the various ll-functions used by the LSL scripts.
        //starting out, we use the System.Math library for trig functions. - CFK 8-14-07
        public double llSin(double f) { return (double)Math.Sin(f); }
        public double llCos(double f) { return (double)Math.Cos(f); }
        public double llTan(double f) { return (double)Math.Tan(f); }
        public double llAtan2(double x, double y) { return (double)Math.Atan2(y, x); }
        public double llSqrt(double f) { return (double)Math.Sqrt(f); }
        public double llPow(double fbase, double fexponent) { return (double)Math.Pow(fbase, fexponent); }
        public int llAbs(int i) { return (int)Math.Abs(i); }
        public double llFabs(double f) { return (double)Math.Abs(f); }
 
        public double llFrand(double mag) 
        {
            lock(OpenSim.Framework.Utilities.Util.RandomClass)
            {
                return OpenSim.Framework.Utilities.Util.RandomClass.Next((int)mag); 
            }
        }
        public int llFloor(double f) { return (int)Math.Floor(f); }
        public int llCeil(double f) { return (int)Math.Ceiling(f); }
        public int llRound(double f) { return (int)Math.Round(f, 1); }
        public double llVecMag(Axiom.Math.Vector3 v) { return 0; }
        public Axiom.Math.Vector3 llVecNorm(Axiom.Math.Vector3 v) { return new Axiom.Math.Vector3(); }
        public double llVecDist(Axiom.Math.Vector3 a, Axiom.Math.Vector3 b) { return 0; }
        public Axiom.Math.Vector3 llRot2Euler(Axiom.Math.Quaternion r) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Quaternion llEuler2Rot(Axiom.Math.Vector3 v) { return new Axiom.Math.Quaternion(); }
        public Axiom.Math.Quaternion llAxes2Rot(Axiom.Math.Vector3 fwd, Axiom.Math.Vector3 left, Axiom.Math.Vector3 up) { return new Axiom.Math.Quaternion(); }
        public Axiom.Math.Vector3 llRot2Fwd(Axiom.Math.Quaternion r) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llRot2Left(Axiom.Math.Quaternion r) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llRot2Up(Axiom.Math.Quaternion r) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Quaternion llRotBetween(Axiom.Math.Vector3 start, Axiom.Math.Vector3 end) { return new Axiom.Math.Quaternion(); }

        public void llWhisper(int channelID, string text)
        {
            //Common.SendToDebug("INTERNAL FUNCTION llWhisper(" + channelID + ", \"" + text + "\");");
            Console.WriteLine("llWhisper Channel " + channelID + ", Text: \"" + text + "\"");
            //type for whisper is 0
            World.SimChat(Helpers.StringToField(text),
                          0, m_host.AbsolutePosition, m_host.Name, m_host.UUID);


        }
        //public void llSay(int channelID, string text)
        public void llSay(int channelID, string text)
        {
            //TODO: DO SOMETHING USEFUL HERE
            //Common.SendToDebug("INTERNAL FUNCTION llSay(" + (int)channelID + ", \"" + (string)text + "\");");
            Console.WriteLine("llSay Channel " + channelID + ", Text: \"" + text + "\"");
            //type for say is 1

            World.SimChat(Helpers.StringToField(text),
                           1, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
        }

        public void llShout(int channelID, string text)
        {
            Console.WriteLine("llShout Channel " + channelID + ", Text: \"" + text + "\"");
            //type for shout is 2
            World.SimChat(Helpers.StringToField(text),
                          2, m_host.AbsolutePosition, m_host.Name, m_host.UUID);

        }

        public int llListen(int channelID, string name, string ID, string msg) { return 0; }
        public void llListenControl(int number, int active) { return; }
        public void llListenRemove(int number) { return; }
        public void llSensor(string name, string id, int type, double range, double arc) { return; }
        public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) { return; }
        public void llSensorRemove() { return; }
        public string llDetectedName(int number) { return ""; }
        public string llDetectedKey(int number) { return ""; }
        public string llDetectedOwner(int number) { return ""; }
        public int llDetectedType(int number) { return 0; }
        public Axiom.Math.Vector3 llDetectedPos(int number) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llDetectedVel(int number) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llDetectedGrab(int number) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Quaternion llDetectedRot(int number) { return new Axiom.Math.Quaternion(); }
        public int llDetectedGroup(int number) { return 0; }
        public int llDetectedLinkNumber(int number) { return 0; }
        public void llDie() { return; }
        public double llGround(Axiom.Math.Vector3 offset) { return 0; }
        public double llCloud(Axiom.Math.Vector3 offset) { return 0; }
        public Axiom.Math.Vector3 llWind(Axiom.Math.Vector3 offset) { return new Axiom.Math.Vector3(); }
        public void llSetStatus(int status, int value) { return; }
        public int llGetStatus(int status) { return 0; }
        public void llSetScale(Axiom.Math.Vector3 scale) { return; }
        public Axiom.Math.Vector3 llGetScale() { return new Axiom.Math.Vector3(); }
        public void llSetColor(Axiom.Math.Vector3 color, int face) { return; }
        public double llGetAlpha(int face) { return 0; }
        public void llSetAlpha(double alpha, int face) { return; }
        public Axiom.Math.Vector3 llGetColor(int face) { return new Axiom.Math.Vector3(); }
        public void llSetTexture(string texture, int face) { return; }
        public void llScaleTexture(double u, double v, int face) { return; }
        public void llOffsetTexture(double u, double v, int face) { return; }
        public void llRotateTexture(double rotation, int face) { return; }
        public string llGetTexture(int face) { return ""; }
        public void llSetPos(Axiom.Math.Vector3 pos) { return; }

        public Axiom.Math.Vector3 llGetPos()
        {
            throw new NotImplementedException("llGetPos");
             // return m_host.AbsolutePosition;
        }
        
        public Axiom.Math.Vector3 llGetLocalPos() { return new Axiom.Math.Vector3(); }
        public void llSetRot(Axiom.Math.Quaternion rot) { }
        public Axiom.Math.Quaternion llGetRot() { return new Axiom.Math.Quaternion(); }
        public Axiom.Math.Quaternion llGetLocalRot() { return new Axiom.Math.Quaternion(); }
        public void llSetForce(Axiom.Math.Vector3 force, int local) { }
        public Axiom.Math.Vector3 llGetForce() { return new Axiom.Math.Vector3(); }
        public int llTarget(Axiom.Math.Vector3 position, double range) { return 0; }
        public void llTargetRemove(int number) { }
        public int llRotTarget(Axiom.Math.Quaternion rot, double error) { return 0; }
        public void llRotTargetRemove(int number) { }
        public void llMoveToTarget(Axiom.Math.Vector3 target, double tau) { }
        public void llStopMoveToTarget() { }
        public void llApplyImpulse(Axiom.Math.Vector3 force, int local) { }
        public void llApplyRotationalImpulse(Axiom.Math.Vector3 force, int local) { }
        public void llSetTorque(Axiom.Math.Vector3 torque, int local) { }
        public Axiom.Math.Vector3 llGetTorque() { return new Axiom.Math.Vector3(); }
        public void llSetForceAndTorque(Axiom.Math.Vector3 force, Axiom.Math.Vector3 torque, int local) { }
        public Axiom.Math.Vector3 llGetVel() { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llGetAccel() { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llGetOmega() { return new Axiom.Math.Vector3(); }
        public double llGetTimeOfDay() { return 0; }
        public double llGetWallclock() { return 0; }
        public double llGetTime() { return 0; }
        public void llResetTime() { }
        public double llGetAndResetTime() { return 0; }
        public void llSound() { }
        public void llPlaySound(string sound, double volume) { }
        public void llLoopSound(string sound, double volume) { }
        public void llLoopSoundMaster(string sound, double volume) { }
        public void llLoopSoundSlave(string sound, double volume) { }
        public void llPlaySoundSlave(string sound, double volume) { }
        public void llTriggerSound(string sound, double volume) { }
        public void llStopSound() { }
        public void llPreloadSound(string sound) { }
        public string llGetSubString(string src, int start, int end) { return src.Substring(start, end); }
        public string llDeleteSubString(string src, int start, int end) { return ""; }
        public string llInsertString(string dst, int position, string src) { return ""; }
        public string llToUpper(string src) { return src.ToUpper(); }
        public string llToLower(string src) { return src.ToLower(); }
        public int llGiveMoney(string destination, int amount) { return 0; }
        public void llMakeExplosion() { }
        public void llMakeFountain() { }
        public void llMakeSmoke() { }
        public void llMakeFire() { }
        public void llRezObject(string inventory, Axiom.Math.Vector3 pos, Axiom.Math.Quaternion rot, int param) { }
        public void llLookAt(Axiom.Math.Vector3 target, double strength, double damping) { }
        public void llStopLookAt() { }
        public void llSetTimerEvent(double sec) { }
        public void llSleep(double sec) { System.Threading.Thread.Sleep((int)(sec * 1000)); }
        public double llGetMass() { return 0; }
        public void llCollisionFilter(string name, string id, int accept) { }
        public void llTakeControls(int controls, int accept, int pass_on) { }
        public void llReleaseControls() { }
        public void llAttachToAvatar(int attachment) { }
        public void llDetachFromAvatar() { }
        public void llTakeCamera() { }
        public void llReleaseCamera() { }
        public string llGetOwner() { return ""; }
        public void llInstantMessage(string user, string message) { }
        public void llEmail(string address, string subject, string message) { }
        public void llGetNextEmail(string address, string subject) { }
        public string llGetKey() { return ""; }
        public void llSetBuoyancy(double buoyancy) { }
        public void llSetHoverHeight(double height, int water, double tau) { }
        public void llStopHover() { }
        public void llMinEventDelay(double delay) { }
        public void llSoundPreload() { }
        public void llRotLookAt(Axiom.Math.Quaternion target, double strength, double damping) { }
        public int llStringLength(string str) { return 0; }
        public void llStartAnimation(string anim) { }
        public void llStopAnimation(string anim) { }
        public void llPointAt() { }
        public void llStopPointAt() { }
        public void llTargetOmega(Axiom.Math.Vector3 axis, double spinrate, double gain) { }
        public int llGetStartParameter() { return 0; }
        public void llGodLikeRezObject(string inventory, Axiom.Math.Vector3 pos) { }
        public void llRequestPermissions(string agent, int perm) { }
        public string llGetPermissionsKey() { return ""; }
        public int llGetPermissions() { return 0; }
        public int llGetLinkNumber() { return 0; }
        public void llSetLinkColor(int linknumber, Axiom.Math.Vector3 color, int face) { }
        public void llCreateLink(string target, int parent) { }
        public void llBreakLink(int linknum) { }
        public void llBreakAllLinks() { }
        public string llGetLinkKey(int linknum) { return ""; }
        public void llGetLinkName(int linknum) { }
        public int llGetInventoryNumber(int type) { return 0; }
        public string llGetInventoryName(int type, int number) { return ""; }
        public void llSetScriptState(string name, int run) { }
        public double llGetEnergy() { return 1.0f; }
        public void llGiveInventory(string destination, string inventory) { }
        public void llRemoveInventory(string item) { }
        
        public void llSetText(string text, Axiom.Math.Vector3 color, double alpha)
        {
            m_host.SetText(text, color, alpha );
        }
        
        public double llWater(Axiom.Math.Vector3 offset) { return 0; }
        public void llPassTouches(int pass) { }
        public string llRequestAgentData(string id, int data) { return ""; }
        public string llRequestInventoryData(string name) { return ""; }
        public void llSetDamage(double damage) { }
        public void llTeleportAgentHome(string agent) { }
        public void llModifyLand(int action, int brush) { }
        public void llCollisionSound(string impact_sound, double impact_volume) { }
        public void llCollisionSprite(string impact_sprite) { }
        public string llGetAnimation(string id) { return ""; }
        public void llResetScript() { }
        public void llMessageLinked(int linknum, int num, string str, string id) { }
        public void llPushObject(string target, Axiom.Math.Vector3 impulse, Axiom.Math.Vector3 ang_impulse, int local) { }
        public void llPassCollisions(int pass) { }
        public string llGetScriptName() { return ""; }
        public int llGetNumberOfSides() { return 0; }
        public Axiom.Math.Quaternion llAxisAngle2Rot(Axiom.Math.Vector3 axis, double angle) { return new Axiom.Math.Quaternion(); }
        public Axiom.Math.Vector3 llRot2Axis(Axiom.Math.Quaternion rot) { return new Axiom.Math.Vector3(); }
        public void llRot2Angle() { }
        public double llAcos(double val) { return (double)Math.Acos(val); }
        public double llAsin(double val) { return (double)Math.Asin(val); }
        public double llAngleBetween(Axiom.Math.Quaternion a, Axiom.Math.Quaternion b) { return 0; }
        public string llGetInventoryKey(string name) { return ""; }
        public void llAllowInventoryDrop(int add) { }
        public Axiom.Math.Vector3 llGetSunDirection() { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llGetTextureOffset(int face) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llGetTextureScale(int side) { return new Axiom.Math.Vector3(); }
        public double llGetTextureRot(int side) { return 0; }
        public int llSubStringIndex(string source, string pattern) { return 0; }
        public string llGetOwnerKey(string id) { return ""; }
        public Axiom.Math.Vector3 llGetCenterOfMass() { return new Axiom.Math.Vector3(); }
        public List<string> llListSort(List<string> src, int stride, int ascending)
        { return new List<string>(); }
        public int llGetListLength(List<string> src) { return 0; }
        public int llList2Integer(List<string> src, int index) { return 0; }
        public double llList2double(List<string> src, int index) { return 0; }
        public string llList2String(List<string> src, int index) { return ""; }
        public string llList2Key(List<string> src, int index) { return ""; }
        public Axiom.Math.Vector3 llList2Vector(List<string> src, int index)
        { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Quaternion llList2Rot(List<string> src, int index)
        { return new Axiom.Math.Quaternion(); }
        public List<string> llList2List(List<string> src, int start, int end)
        { return new List<string>(); }
        public List<string> llDeleteSubList(List<string> src, int start, int end)
        { return new List<string>(); }
        public int llGetListEntryType(List<string> src, int index) { return 0; }
        public string llList2CSV(List<string> src) { return ""; }
        public List<string> llCSV2List(string src)
        { return new List<string>(); }
        public List<string> llListRandomize(List<string> src, int stride)
        { return new List<string>(); }
        public List<string> llList2ListStrided(List<string> src, int start, int end, int stride)
        { return new List<string>(); }
        public Axiom.Math.Vector3 llGetRegionCorner()
        { return new Axiom.Math.Vector3(); }
        public List<string> llListInsertList(List<string> dest, List<string> src, int start)
        { return new List<string>(); }
        public int llListFindList(List<string> src, List<string> test) { return 0; }
        public string llGetObjectName() { return ""; }
        public void llSetObjectName(string name) { }
        public string llGetDate() { return ""; }
        public int llEdgeOfWorld(Axiom.Math.Vector3 pos, Axiom.Math.Vector3 dir) { return 0; }
        public int llGetAgentInfo(string id) { return 0; }
        public void llAdjustSoundVolume(double volume) { }
        public void llSetSoundQueueing(int queue) { }
        public void llSetSoundRadius(double radius) { }
        public string llKey2Name(string id) { return ""; }
        public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate) { }
        public void llTriggerSoundLimited(string sound, double volume, Axiom.Math.Vector3 top_north_east, Axiom.Math.Vector3 bottom_south_west) { }
        public void llEjectFromLand(string pest) { }
        public void llParseString2List() { }
        public int llOverMyLand(string id) { return 0; }
        public string llGetLandOwnerAt(Axiom.Math.Vector3 pos) { return ""; }
        public string llGetNotecardLine(string name, int line) { return ""; }
        public Axiom.Math.Vector3 llGetAgentSize(string id) { return new Axiom.Math.Vector3(); }
        public int llSameGroup(string agent) { return 0; }
        public void llUnSit(string id) { }
        public Axiom.Math.Vector3 llGroundSlope(Axiom.Math.Vector3 offset) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llGroundNormal(Axiom.Math.Vector3 offset) { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Vector3 llGroundContour(Axiom.Math.Vector3 offset) { return new Axiom.Math.Vector3(); }
        public int llGetAttached() { return 0; }
        public int llGetFreeMemory() { return 0; }
        public string llGetRegionName() { return m_manager.RegionName; }
        public double llGetRegionTimeDilation() { return 1.0f; }
        public double llGetRegionFPS() { return 10.0f; }
        public void llParticleSystem(List<Object> rules) { }
        public void llGroundRepel(double height, int water, double tau) { }
        public void llGiveInventoryList() { }
        public void llSetVehicleType(int type) { }
        public void llSetVehicledoubleParam(int param, double value) { }
        public void llSetVehicleVectorParam(int param, Axiom.Math.Vector3 vec) { }
        public void llSetVehicleRotationParam(int param, Axiom.Math.Quaternion rot) { }
        public void llSetVehicleFlags(int flags) { }
        public void llRemoveVehicleFlags(int flags) { }
        public void llSitTarget(Axiom.Math.Vector3 offset, Axiom.Math.Quaternion rot) { }
        public string llAvatarOnSitTarget() { return ""; }
        public void llAddToLandPassList(string avatar, double hours) { }
        public void llSetTouchText(string text)
        {
        }
        
        public void llSetSitText(string text)
        {
        }
        public void llSetCameraEyeOffset(Axiom.Math.Vector3 offset) { }
        public void llSetCameraAtOffset(Axiom.Math.Vector3 offset) { }
        public void llDumpList2String() { }
        public void llScriptDanger(Axiom.Math.Vector3 pos) { }
        public void llDialog(string avatar, string message, List<string> buttons, int chat_channel) { }
        public void llVolumeDetect(int detect) { }
        public void llResetOtherScript(string name) { }
        public int llGetScriptState(string name) { return 0; }
        public void llRemoteLoadScript() { }
        public void llSetRemoteScriptAccessPin(int pin) { }
        public void llRemoteLoadScriptPin(string target, string name, int pin, int running, int start_param) { }
        public void llOpenRemoteDataChannel() { }
        public string llSendRemoteData(string channel, string dest, int idata, string sdata) { return ""; }
        public void llRemoteDataReply(string channel, string message_id, string sdata, int idata) { }
        public void llCloseRemoteDataChannel(string channel) { }
        public string llMD5String(string src, int nonce)
        {
            return OpenSim.Framework.Utilities.Util.Md5Hash(src + ":" + nonce.ToString());
        }
        public void llSetPrimitiveParams(List<string> rules) { }
        public string llStringToBase64(string str) { return ""; }
        public string llBase64ToString(string str) { return ""; }
        public void llXorBase64Strings() { }
        public void llRemoteDataSetRegion() { }
        public double llLog10(double val) { return (double)Math.Log10(val); }
        public double llLog(double val) { return (double)Math.Log(val); }
        public List<string> llGetAnimationList(string id) { return new List<string>(); }
        public void llSetParcelMusicURL(string url) { }

        public Axiom.Math.Vector3 llGetRootPosition()
        {
            throw new NotImplementedException("llGetRootPosition");
            //return m_root.AbsolutePosition;
        }

        public Axiom.Math.Quaternion llGetRootRotation()
        {
            return new Axiom.Math.Quaternion();
        }

        public string llGetObjectDesc() { return ""; }
        public void llSetObjectDesc(string desc) { }
        public string llGetCreator() { return ""; }
        public string llGetTimestamp() { return ""; }
        public void llSetLinkAlpha(int linknumber, double alpha, int face) { }
        public int llGetNumberOfPrims() { return 0; }
        public string llGetNumberOfNotecardLines(string name) { return ""; }
        public List<string> llGetBoundingBox(string obj) { return new List<string>(); }
        public Axiom.Math.Vector3 llGetGeometricCenter() { return new Axiom.Math.Vector3(); }
        public void llGetPrimitiveParams() { }
        public string llIntegerToBase64(int number) { return ""; }
        public int llBase64ToInteger(string str) { return 0; }
        public double llGetGMTclock() { return 0; }
        public string llGetSimulatorHostname() { return ""; }
        public void llSetLocalRot(Axiom.Math.Quaternion rot) { }
        public List<string> llParseStringKeepNulls(string src, List<string> seperators, List<string> spacers)
        { return new List<string>(); }
        public void llRezAtRoot(string inventory, Axiom.Math.Vector3 position, Axiom.Math.Vector3 velocity, Axiom.Math.Quaternion rot, int param) { }
        public int llGetObjectPermMask(int mask) { return 0; }
        public void llSetObjectPermMask(int mask, int value) { }
        public void llGetInventoryPermMask(string item, int mask) { }
        public void llSetInventoryPermMask(string item, int mask, int value) { }
        public string llGetInventoryCreator(string item) { return ""; }
        public void llOwnerSay(string msg) { }
        public void llRequestSimulatorData(string simulator, int data) { }
        public void llForceMouselook(int mouselook) { }
        public double llGetObjectMass(string id) { return 0; }
        public void llListReplaceList() { }
        public void llLoadURL(string avatar_id, string message, string url) { }
        public void llParcelMediaCommandList(List<string> commandList) { }
        public void llParcelMediaQuery() { }

        public int llModPow(int a, int b, int c)
        {
            Int64 tmp = 0;
            Int64 val = Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp);

            return Convert.ToInt32(tmp);
        }

        public int llGetInventoryType(string name) { return 0; }
        public void llSetPayPrice(int price, List<string> quick_pay_buttons) { }
        public Axiom.Math.Vector3 llGetCameraPos() { return new Axiom.Math.Vector3(); }
        public Axiom.Math.Quaternion llGetCameraRot() { return new Axiom.Math.Quaternion(); }
        public void llSetPrimURL() { }
        public void llRefreshPrimURL() { }
        public string llEscapeURL(string url) { return ""; }
        public string llUnescapeURL(string url) { return ""; }
        public void llMapDestination(string simname, Axiom.Math.Vector3 pos, Axiom.Math.Vector3 look_at) { }
        public void llAddToLandBanList(string avatar, double hours) { }
        public void llRemoveFromLandPassList(string avatar) { }
        public void llRemoveFromLandBanList(string avatar) { }
        public void llSetCameraParams(List<string> rules) { }
        public void llClearCameraParams() { }
        public double llListStatistics(int operation, List<string> src) { return 0; }
        public int llGetUnixTime()
        {
            return OpenSim.Framework.Utilities.Util.UnixTimeSinceEpoch();
        }
        public int llGetParcelFlags(Axiom.Math.Vector3 pos) { return 0; }
        public int llGetRegionFlags() { return 0; }
        public string llXorBase64StringsCorrect(string str1, string str2) { return ""; }
        public void llHTTPRequest() { }
        public void llResetLandBanList() { }
        public void llResetLandPassList() { }
        public int llGetParcelPrimCount(Axiom.Math.Vector3 pos, int category, int sim_wide) { return 0; }
        public List<string> llGetParcelPrimOwners(Axiom.Math.Vector3 pos) { return new List<string>(); }
        public int llGetObjectPrimCount(string object_id) { return 0; }
        public int llGetParcelMaxPrims(Axiom.Math.Vector3 pos, int sim_wide) { return 0; }
        public List<string> llGetParcelDetails(Axiom.Math.Vector3 pos, List<string> param) { return new List<string>(); }




        // LSL CONSTANTS
        public const int TRUE = 1;
        public const int FALSE = 0;
        public const int STATUS_PHYSICS = 1;
        public const int STATUS_ROTATE_X = 2;
        public const int STATUS_ROTATE_Y = 4;
        public const int STATUS_ROTATE_Z = 8;
        public const int STATUS_PHANTOM = 16;
        public const int STATUS_SANDBOX = 32;
        public const int STATUS_BLOCK_GRAB = 64;
        public const int STATUS_DIE_AT_EDGE = 128;
        public const int STATUS_RETURN_AT_EDGE = 256;
        public const int AGENT = 1;
        public const int ACTIVE = 2;
        public const int PASSIVE = 4;
        public const int SCRIPTED = 8;
        public const int CONTROL_FWD = 1;
        public const int CONTROL_BACK = 2;
        public const int CONTROL_LEFT = 4;
        public const int CONTROL_RIGHT = 8;
        public const int CONTROL_UP = 16;
        public const int CONTROL_DOWN = 32;
        public const int CONTROL_ROT_LEFT = 256;
        public const int CONTROL_ROT_RIGHT = 512;
        public const int CONTROL_LBUTTON = 268435456;
        public const int CONTROL_ML_LBUTTON = 1073741824;
        public const int PERMISSION_DEBIT = 2;
        public const int PERMISSION_TAKE_CONTROLS = 4;
        public const int PERMISSION_REMAP_CONTROLS = 8;
        public const int PERMISSION_TRIGGER_ANIMATION = 16;
        public const int PERMISSION_ATTACH = 32;
        public const int PERMISSION_RELEASE_OWNERSHIP = 64;
        public const int PERMISSION_CHANGE_LINKS = 128;
        public const int PERMISSION_CHANGE_JOINTS = 256;
        public const int PERMISSION_CHANGE_PERMISSIONS = 512;
        public const int PERMISSION_TRACK_CAMERA = 1024;
        public const int AGENT_FLYING = 1;
        public const int AGENT_ATTACHMENTS = 2;
        public const int AGENT_SCRIPTED = 4;
        public const int AGENT_MOUSELOOK = 8;
        public const int AGENT_SITTING = 16;
        public const int AGENT_ON_OBJECT = 32;
        public const int AGENT_AWAY = 64;
        public const int AGENT_WALKING = 128;
        public const int AGENT_IN_AIR = 256;
        public const int AGENT_TYPING = 512;
        public const int AGENT_CROUCHING = 1024;
        public const int AGENT_BUSY = 2048;
        public const int AGENT_ALWAYS_RUN = 4096;
        public const int PSYS_PART_INTERP_COLOR_MASK = 1;
        public const int PSYS_PART_INTERP_SCALE_MASK = 2;
        public const int PSYS_PART_BOUNCE_MASK = 4;
        public const int PSYS_PART_WIND_MASK = 8;
        public const int PSYS_PART_FOLLOW_SRC_MASK = 16;
        public const int PSYS_PART_FOLLOW_VELOCITY_MASK = 32;
        public const int PSYS_PART_TARGET_POS_MASK = 64;
        public const int PSYS_PART_TARGET_LINEAR_MASK = 128;
        public const int PSYS_PART_EMISSIVE_MASK = 256;
        public const int PSYS_PART_FLAGS = 0;
        public const int PSYS_PART_START_COLOR = 1;
        public const int PSYS_PART_START_ALPHA = 2;
        public const int PSYS_PART_END_COLOR = 3;
        public const int PSYS_PART_END_ALPHA = 4;
        public const int PSYS_PART_START_SCALE = 5;
        public const int PSYS_PART_END_SCALE = 6;
        public const int PSYS_PART_MAX_AGE = 7;
        public const int PSYS_SRC_ACCEL = 8;
        public const int PSYS_SRC_PATTERN = 9;
        public const int PSYS_SRC_INNERANGLE = 10;
        public const int PSYS_SRC_OUTERANGLE = 11;
        public const int PSYS_SRC_TEXTURE = 12;
        public const int PSYS_SRC_BURST_RATE = 13;
        public const int PSYS_SRC_BURST_PART_COUNT = 15;
        public const int PSYS_SRC_BURST_RADIUS = 16;
        public const int PSYS_SRC_BURST_SPEED_MIN = 17;
        public const int PSYS_SRC_BURST_SPEED_MAX = 18;
        public const int PSYS_SRC_MAX_AGE = 19;
        public const int PSYS_SRC_TARGET_KEY = 20;
        public const int PSYS_SRC_OMEGA = 21;
        public const int PSYS_SRC_ANGLE_BEGIN = 22;
        public const int PSYS_SRC_ANGLE_END = 23;
        public const int PSYS_SRC_PATTERN_DROP = 1;
        public const int PSYS_SRC_PATTERN_EXPLODE = 2;
        public const int PSYS_SRC_PATTERN_ANGLE = 4;
        public const int PSYS_SRC_PATTERN_ANGLE_CONE = 8;
        public const int PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 16;
        public const int VEHICLE_TYPE_NONE = 0;
        public const int VEHICLE_TYPE_SLED = 1;
        public const int VEHICLE_TYPE_CAR = 2;
        public const int VEHICLE_TYPE_BOAT = 3;
        public const int VEHICLE_TYPE_AIRPLANE = 4;
        public const int VEHICLE_TYPE_BALLOON = 5;
        public const int VEHICLE_LINEAR_FRICTION_TIMESCALE = 16;
        public const int VEHICLE_ANGULAR_FRICTION_TIMESCALE = 17;
        public const int VEHICLE_LINEAR_MOTOR_DIRECTION = 18;
        public const int VEHICLE_LINEAR_MOTOR_OFFSET = 20;
        public const int VEHICLE_ANGULAR_MOTOR_DIRECTION = 19;
        public const int VEHICLE_HOVER_HEIGHT = 24;
        public const int VEHICLE_HOVER_EFFICIENCY = 25;
        public const int VEHICLE_HOVER_TIMESCALE = 26;
        public const int VEHICLE_BUOYANCY = 27;
        public const int VEHICLE_LINEAR_DEFLECTION_EFFICIENCY = 28;
        public const int VEHICLE_LINEAR_DEFLECTION_TIMESCALE = 29;
        public const int VEHICLE_LINEAR_MOTOR_TIMESCALE = 30;
        public const int VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE = 31;
        public const int VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY = 32;
        public const int VEHICLE_ANGULAR_DEFLECTION_TIMESCALE = 33;
        public const int VEHICLE_ANGULAR_MOTOR_TIMESCALE = 34;
        public const int VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE = 35;
        public const int VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY = 36;
        public const int VEHICLE_VERTICAL_ATTRACTION_TIMESCALE = 37;
        public const int VEHICLE_BANKING_EFFICIENCY = 38;
        public const int VEHICLE_BANKING_MIX = 39;
        public const int VEHICLE_BANKING_TIMESCALE = 40;
        public const int VEHICLE_REFERENCE_FRAME = 44;
        public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1;
        public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2;
        public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4;
        public const int VEHICLE_FLAG_HOVER_TERRAIN_ONLY = 8;
        public const int VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT = 16;
        public const int VEHICLE_FLAG_HOVER_UP_ONLY = 32;
        public const int VEHICLE_FLAG_LIMIT_MOTOR_UP = 64;
        public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128;
        public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256;
        public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512;
        public const int INVENTORY_ALL = -1;
        public const int INVENTORY_NONE = -1;
        public const int INVENTORY_TEXTURE = 0;
        public const int INVENTORY_SOUND = 1;
        public const int INVENTORY_LANDMARK = 3;
        public const int INVENTORY_CLOTHING = 5;
        public const int INVENTORY_OBJECT = 6;
        public const int INVENTORY_NOTECARD = 7;
        public const int INVENTORY_SCRIPT = 10;
        public const int INVENTORY_BODYPART = 13;
        public const int INVENTORY_ANIMATION = 20;
        public const int INVENTORY_GESTURE = 21;
        public const int ATTACH_CHEST = 1;
        public const int ATTACH_HEAD = 2;
        public const int ATTACH_LSHOULDER = 3;
        public const int ATTACH_RSHOULDER = 4;
        public const int ATTACH_LHAND = 5;
        public const int ATTACH_RHAND = 6;
        public const int ATTACH_LFOOT = 7;
        public const int ATTACH_RFOOT = 8;
        public const int ATTACH_BACK = 9;
        public const int ATTACH_PELVIS = 10;
        public const int ATTACH_MOUTH = 11;
        public const int ATTACH_CHIN = 12;
        public const int ATTACH_LEAR = 13;
        public const int ATTACH_REAR = 14;
        public const int ATTACH_LEYE = 15;
        public const int ATTACH_REYE = 16;
        public const int ATTACH_NOSE = 17;
        public const int ATTACH_RUARM = 18;
        public const int ATTACH_RLARM = 19;
        public const int ATTACH_LUARM = 20;
        public const int ATTACH_LLARM = 21;
        public const int ATTACH_RHIP = 22;
        public const int ATTACH_RULEG = 23;
        public const int ATTACH_RLLEG = 24;
        public const int ATTACH_LHIP = 25;
        public const int ATTACH_LULEG = 26;
        public const int ATTACH_LLLEG = 27;
        public const int ATTACH_BELLY = 28;
        public const int ATTACH_RPEC = 29;
        public const int ATTACH_LPEC = 30;
        public const int LAND_LEVEL = 0;
        public const int LAND_RAISE = 1;
        public const int LAND_LOWER = 2;
        public const int LAND_SMOOTH = 3;
        public const int LAND_NOISE = 4;
        public const int LAND_REVERT = 5;
        public const int LAND_SMALL_BRUSH = 1;
        public const int LAND_MEDIUM_BRUSH = 2;
        public const int LAND_LARGE_BRUSH = 3;
        public const int DATA_ONLINE = 1;
        public const int DATA_NAME = 2;
        public const int DATA_BORN = 3;
        public const int DATA_RATING = 4;
        public const int DATA_SIM_POS = 5;
        public const int DATA_SIM_STATUS = 6;
        public const int DATA_SIM_RATING = 7;
        public const int ANIM_ON = 1;
        public const int LOOP = 2;
        public const int REVERSE = 4;
        public const int PING_PONG = 8;
        public const int SMOOTH = 16;
        public const int ROTATE = 32;
        public const int SCALE = 64;
        public const int ALL_SIDES = -1;
        public const int LINK_SET = -1;
        public const int LINK_ROOT = 1;
        public const int LINK_ALL_OTHERS = -2;
        public const int LINK_ALL_CHILDREN = -3;
        public const int LINK_THIS = -4;
        public const int CHANGED_INVENTORY = 1;
        public const int CHANGED_COLOR = 2;
        public const int CHANGED_SHAPE = 4;
        public const int CHANGED_SCALE = 8;
        public const int CHANGED_TEXTURE = 16;
        public const int CHANGED_LINK = 32;
        public const int CHANGED_ALLOWED_DROP = 64;
        public const int CHANGED_OWNER = 128;
        public const int TYPE_INVALID = 0;
        public const int TYPE_INTEGER = 1;
        public const int TYPE_double = 2;
        public const int TYPE_STRING = 3;
        public const int TYPE_KEY = 4;
        public const int TYPE_VECTOR = 5;
        public const int TYPE_ROTATION = 6;
        public const int REMOTE_DATA_CHANNEL = 1;
        public const int REMOTE_DATA_REQUEST = 2;
        public const int REMOTE_DATA_REPLY = 3;
        //public const int PRIM_TYPE = 1;
        public const int PRIM_MATERIAL = 2;
        public const int PRIM_PHYSICS = 3;
        public const int PRIM_TEMP_ON_REZ = 4;
        public const int PRIM_PHANTOM = 5;
        public const int PRIM_POSITION = 6;
        public const int PRIM_SIZE = 7;
        public const int PRIM_ROTATION = 8;
        public const int PRIM_TYPE = 9;
        public const int PRIM_TEXTURE = 17;
        public const int PRIM_COLOR = 18;
        public const int PRIM_BUMP_SHINY = 19;
        public const int PRIM_FULLBRIGHT = 20;
        public const int PRIM_FLEXIBLE = 21;
        public const int PRIM_TEXGEN = 22;
        public const int PRIM_TEXGEN_DEFAULT = 0;
        public const int PRIM_TEXGEN_PLANAR = 1;
        public const int PRIM_TYPE_BOX = 0;
        public const int PRIM_TYPE_CYLINDER = 1;
        public const int PRIM_TYPE_PRISM = 2;
        public const int PRIM_TYPE_SPHERE = 3;
        public const int PRIM_TYPE_TORUS = 4;
        public const int PRIM_TYPE_TUBE = 5;
        public const int PRIM_TYPE_RING = 6;
        public const int PRIM_HOLE_DEFAULT = 0;
        public const int PRIM_HOLE_CIRCLE = 16;
        public const int PRIM_HOLE_SQUARE = 32;
        public const int PRIM_HOLE_TRIANGLE = 48;
        public const int PRIM_MATERIAL_STONE = 0;
        public const int PRIM_MATERIAL_METAL = 1;
        public const int PRIM_MATERIAL_GLASS = 2;
        public const int PRIM_MATERIAL_WOOD = 3;
        public const int PRIM_MATERIAL_FLESH = 4;
        public const int PRIM_MATERIAL_PLASTIC = 5;
        public const int PRIM_MATERIAL_RUBBER = 6;
        public const int PRIM_MATERIAL_LIGHT = 7;
        public const int PRIM_SHINY_NONE = 0;
        public const int PRIM_SHINY_LOW = 1;
        public const int PRIM_SHINY_MEDIUM = 2;
        public const int PRIM_SHINY_HIGH = 3;
        public const int PRIM_BUMP_NONE = 0;
        public const int PRIM_BUMP_BRIGHT = 1;
        public const int PRIM_BUMP_DARK = 2;
        public const int PRIM_BUMP_WOOD = 3;
        public const int PRIM_BUMP_BARK = 4;
        public const int PRIM_BUMP_BRICKS = 5;
        public const int PRIM_BUMP_CHECKER = 6;
        public const int PRIM_BUMP_CONCRETE = 7;
        public const int PRIM_BUMP_TILE = 8;
        public const int PRIM_BUMP_STONE = 9;
        public const int PRIM_BUMP_DISKS = 10;
        public const int PRIM_BUMP_GRAVEL = 11;
        public const int PRIM_BUMP_BLOBS = 12;
        public const int PRIM_BUMP_SIDING = 13;
        public const int PRIM_BUMP_LARGETILE = 14;
        public const int PRIM_BUMP_STUCCO = 15;
        public const int PRIM_BUMP_SUCTION = 16;
        public const int PRIM_BUMP_WEAVE = 17;
        public const int MASK_BASE = 0;
        public const int MASK_OWNER = 1;
        public const int MASK_GROUP = 2;
        public const int MASK_EVERYONE = 3;
        public const int MASK_NEXT = 4;
        public const int PERM_TRANSFER = 8192;
        public const int PERM_MODIFY = 16384;
        public const int PERM_COPY = 32768;
        public const int PERM_MOVE = 524288;
        public const int PERM_ALL = 2147483647;
        public const int PARCEL_MEDIA_COMMAND_STOP = 0;
        public const int PARCEL_MEDIA_COMMAND_PAUSE = 1;
        public const int PARCEL_MEDIA_COMMAND_PLAY = 2;
        public const int PARCEL_MEDIA_COMMAND_LOOP = 3;
        public const int PARCEL_MEDIA_COMMAND_TEXTURE = 4;
        public const int PARCEL_MEDIA_COMMAND_URL = 5;
        public const int PARCEL_MEDIA_COMMAND_TIME = 6;
        public const int PARCEL_MEDIA_COMMAND_AGENT = 7;
        public const int PARCEL_MEDIA_COMMAND_UNLOAD = 8;
        public const int PARCEL_MEDIA_COMMAND_AUTO_ALIGN = 9;
        public const int PAY_HIDE = -1;
        public const int PAY_DEFAULT = -2;
        public const string NULL_KEY = "00000000-0000-0000-0000-000000000000";
        public const string EOF = "\n\n\n";
        public const double PI = 3.14159274f;
        public const double TWO_PI = 6.28318548f;
        public const double PI_BY_TWO = 1.57079637f;
        public const double DEG_TO_RAD = 0.01745329238f;
        public const double RAD_TO_DEG = 57.29578f;
        public const double SQRT2 = 1.414213538f;

        // Can not be public const?
        public Axiom.Math.Vector3 ZERO_VECTOR = new Axiom.Math.Vector3(0, 0, 0);
        public Axiom.Math.Quaternion ZERO_ROTATION = new Axiom.Math.Quaternion(0, 0, 0, 0);



    }
}