JetBike

De DigiWiki.

(Différences entre les versions)
(Page créée avec « <lsl> 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… »)
 
Ligne 1 : Ligne 1 :
<lsl>
<lsl>
-
 
-
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
 
-
772
 
-
773
 
-
774
 
-
775
 
-
776
 
-
777
 
-
778
 
-
779
 
-
780
 
-
781
 
-
782
 
-
783
 
-
784
 
-
785
 
-
786
 
-
787
 
-
788
 
-
789
 
-
790
 
-
791
 
-
792
 
-
793
 
-
794
 
-
795
 
-
796
 
-
797
 
-
798
 
-
799
 
-
800
 
-
801
 
-
802
 
-
803
 
-
804
 
-
805
 
-
806
 
-
807
 
-
808
 
-
809
 
-
810
 
-
811
 
-
812
 
-
813
 
-
814
 
-
815
 
-
816
 
-
817
 
-
818
 
-
819
 
-
820
 
-
821
 
-
822
 
-
823
 
-
824
 
-
825
 
-
826
 
-
827
 
-
828
 
-
829
 
-
830
 
-
831
 
-
832
 
-
833
 
-
834
 
-
835
 
-
836
 
-
837
 
-
838
 
-
839
 
-
840
 
-
841
 
-
842
 
-
843
 
-
844
 
-
845
 
-
846
 
-
847
 
-
848
 
-
849
 
-
850
 
-
851
 
-
852
 
-
853
 
-
854
 
-
855
 
-
856
 
-
857
 
-
858
 
-
859
 
-
860
 
-
861
 
-
862
 
-
863
 
-
864
 
-
865
 
-
866
 
-
867
 
-
868
 
-
869
 
-
870
 
-
871
 
-
872
 
-
873
 
-
874
 
-
875
 
//*******************************************************
//*******************************************************
// Shin Ingen @ http://ingen-lab.com:8002
// Shin Ingen @ http://ingen-lab.com:8002

Version actuelle en date du 28 mai 2015 à 07:39

//*******************************************************
// Shin Ingen @ http://ingen-lab.com:8002
// LSL | OPENSIM | BulletSim | JetBike v1.0
// iTEC + e3s + DC (ENGINE SPEED SENSITIVE STEERING WITH DYNAMIC CAMERA)
// JANUARY 28, 2013
// TODO: KEYWORD PROCESSOR FOR ** PRIM ANIMATION | AVATAR ANIMATION | SOUNDS | MENU | HUD | DYNAMIC CAMERA
//*******************************************************
 
//---PERMISSION VARIABLES---------------------------------------------
integer         gDrivePermit = 1; // 0=EVERYONE 1=OWNERONLY
string          gSitMessage = "Drive";
string          gUrNotAllowedMessage = "Vehicle is Locked";
vector          gSitTarget_Pos = <0.3,0.02,0.95>;
vector          gSitTarget_Rot;
key             gOldAgent;
key             gAgent;
integer         gRun;     //ENGINE RUNNING
integer         gMoving;  //VEHICLE MOVING
//integer        gIdle;
//---END PREMISSION----------------------------------------------------
 
//---ANIMATION VARIABLES-----------------------------------------------
string      gDrivingAnim = "motorcycle_sit";
//---------------------------------------------------------------------
 
//---CAMERA VARIABLES--------------------------------------------------
//***CONSTANT**********************************************************
integer         gCamFixed=0;             // INITVAL=0            0=FOLLOW CAM 1=FIXED CAM
//integer       gCamAct;                // INITVAL=1            0=INACTIVE  1=ACTIVE
//integer       gCamFocLocked;          // INITVAL=FALSE        (TRUE or FALSE)
//integer       gCamPoslocked;          // INITVAL=FALSE        (TRUE or FALSE)
//***SLIDERS***********************************************************
//float         gCamBAng;               // INITVAL=2.0            (0 to 180) DEGREES
//float         gCamBLag;               // INITVAL=0.1            (0 to 3) SECONDS
//float         gCamDist;               // INITVAL=8.0            (0.5 to 10) METERS
//float         gCamFocLag;             // INITVAL=0.1            (0 to 3) SECONDS
//float         gCamFocThresh;          // INITVAL=0.5            (0 to 4) METERS
//float         gCamPitch;              // INITVAL=20.0           (-45 to 80) DEGREES
//float         gCamPoslag;             // INITVAL=0.1            (0 to 3) SECONDS
//float         gCamPosthresh;          // INITVAL=0.5            (0 to 4) METERS
//vector        gCamFocOff;             // INITVAL=<0.10,0,0>     <-10,-10,-10> to <10,10,10> METERS
//----END CAMERA-------------------------------------------------------
 
//---SOUND VARIABLES---------------------------------------------------
string       gSoundFlight =          "s_flight";
string       gSoundHorn =            "s_horn";
string       gSoundStartup =         "Ducati-start2";
string       gSoundIdle =            "Ducati-idle2";
string       gSoundSlow =            "Ducati-run";
string       gSoundAggressive =      "Ducati-runfast";
string       gSoundGearUp =          "Ducati-accelerate";
string       gSoundGearDown =        "Ducati-accelerate";
string       gSoundRev =             "s_rev";
string       gSoundAlarm =           "s_alarm";
string       gSoundStop =            "Ducati-off";
//NEED KEYWORD SOUND PROCESSOR
integer      gOldSound=3;   //variable for sound function
integer      gNewSound=3;
//---------------------------------------------------------------------
 
//---iTEC - STOCK ENGINE GLOBAL VARIABLES------------------------------
list        gTSvarList;
float       gVLMT=0.90;                  //INITVAL=0.90   
float       gVLMDT=0.10;                 //INITVAL=0.10  
vector      gVLFT=<8.0, 3000.0, 8.0>;    //INITVAL=<8.0, 3000.0, 8.0>
vector      gVAFT=<0.10, 0.10, 0.10>;    //INITVAL=<0.10, 0.10, 0.10>
float       gVADE=0.20;                  //INITVAL=0.20
float       gVADT=0.50;                  //INITVAL=0.10
float       gVAMT=1.0;                  //INITVAL=0.10 
float       gVAMDT=0.10;                 //INITVAL=0.10
float       gVLDE=1.0;                   //INITVAL=1.0
float       gVLDT=0.10;                  //INITVAL=0.10
float       gVVAE=0.50;                  //INITVAL=0.50
float       gVVAT=5.0;                   //INITVAL=5.0
float       gVHE=0.0;                    //INITVAL=0.0
float       gVHT=0.0;                    //INITVAL=0.0
float       gVHH=0.0;                    //INITVAL=0.0
float       gVB=0.0;                     //INITVAL=0.0
float       gVBE=1.0;                    //INITVAL=1.0
float       gVBM=0.5;                    //INITVAL=0.5
float       gVBT=0.5;                    //INITVAL=0.5
float       gVerticalThrust=10.0;
//---------------------------------------------------------------------
 
//---iTEC POWERTRAIN + (e3s) GLOBAL VARIABLES -------------------------
integer      gGear;
integer      gNewGear;
float        gGearPower;
float        gReversePower            =     -15;
list         gGearPowerList           = [     2,    //  STAGER
                                             15,    //  BURNOUT
                                             20,    //  1ST
                                             40,    //  2ND
                                             70,    //  3RD
                                             80,    //  4TH
                                            100,    //  5TH
                                            110,    //  6TH
                                            155,    //  PRO-STOCK (START-DRAG-CLASS)
                                            170,    //  PRO-MOD
                                            198,    //  TOP-FUEL
                                            256     //  OPEN-PRO
                                         ];
//integer     gGearCount;
string      gPhysEngDesc;
integer     gPhysEng=1; // if os function is off set this to 0=ODE| 1=Bullet
float       gTurnMulti=1.012345;
float       gTurnRatio;
list        gTurnRatioList;
string      gGearName;
list        gGearNameList                 =[   "STAGER",
                                               "BURNOUT",
                                               "1ST-GEAR",
                                               "2ND-GEAR",
                                               "3RD-GEAR",
                                               "4TH-GEAR",
                                               "5TH-GEAR",
                                               "6TH-GEAR",
                                               "PRO-STOCK",
                                               "PRO-MOD",
                                               "TOP-FUEL",
                                               "OPEN-PRO"
                                         ];
float         gSpeed=0;
//---------------------------------------------------------------------
 
//---------------------------------------------------------------------
//NEED A KEYWORD PRIM ANIMATION PROCESSOR
integer            gTurnCount;
string             gTurnAngle =               "NoTurn";  // LeftTurn or RightTurn or NoTurn
string             gNewTurnAngle =            "NoTurn";
string             gTireSpin =                "ForwardSpin";   // ForwardSpin or BackwardSpin or NoSpin
string             gNewTireSpin =             "ForwardSpin";
string             gRotorSpin =               "NoRotate";         // NoRotate or SlowRotate or FastRotate
integer            gTcountL; //for cornerFX
integer            gTcountR;
 
//---------------------------------------------------------------------
 
//---MENU HANDLER------------------------------------------------------
list            MENU_MAIN = ["Align", "Hello"]; // up to 12 items in list
integer         menu_handler;
integer         menu_channel;
//---------------------------------------------------------------------
 
//=======================================================================
//==== E N D   G L O B A L   V A R I A B L E   D E C L A R A T I O N ====
//=======================================================================
init_TSvar(integer i){
    if (i==0){
        gTSvarList = [  3.0,               // how fast to reach max speed
                        0.10,               // how fast to reach min speed or zero
                        <7.0,3000.0,100.0>,   // XYZ linear friction
                        <0.10,0.10,0.20>,   // XYZ angular friction
                        0.90,               // how fast turning force is applied 
                        0.50,               // how fast turning force is released
                        1.0,                // adjusted on 0.7.6
                        0.10,
                        0.20,
                        0.10,
                        0.50,
                        5.0,
                        0.0,
                        0.0,
                        0.0,
                        0.0
                     ];
    }else{
        gTSvarList = [  
                        0.90,                   //  0 
                        0.10,                   //  1 
                        <1.0,1.0,1.0>,          //  2 
                        <1.0,1000.0,1000.0>,    //  3 
                        0.20,                   //  4 
                        0.10,                   //  5 
                        0.10,                    // 6 
                       10.00,                   //  7
                        0.10,                   //  8
                       10.00,                   //  9
                        3.00,                   //  10
                        2.00,                    // 11
                        0.0,                    //  12
                        0.0,                    //  13
                        0.0,                    //  14
                        0.0,                    //  15
                        1.0,                    //  16
                        1.0,                    //  17
                        0.5                     //  18
                    ];
    }
    gVLMT=llList2Float(gTSvarList,0);
    gVLMDT=llList2Float(gTSvarList,1);
    gVLFT=llList2Vector(gTSvarList,2);
    gVAFT=llList2Vector(gTSvarList,3);
    gVAMT=llList2Float(gTSvarList,4);
    gVAMDT=llList2Float(gTSvarList,5);
    gVLDE=llList2Float(gTSvarList,6);
    gVLDT=llList2Float(gTSvarList,7);
    gVADE=llList2Float(gTSvarList,8);
    gVADT=llList2Float(gTSvarList,9);
    gVVAE=llList2Float(gTSvarList,10);
    gVVAT=llList2Float(gTSvarList,11);
    gVHE=llList2Float(gTSvarList,12);
    gVHT=llList2Float(gTSvarList,13);
    gVHH=llList2Float(gTSvarList,14);
    gVB=llList2Float(gTSvarList,15);
    gVBE=llList2Float(gTSvarList,16);
    gVBM=llList2Float(gTSvarList,17);
    gVBT=llList2Float(gTSvarList,18);
 
}
 
init_PhysEng(){
    string msg;
 
    //gPhysEngDesc=osGetPhysicsEngineType();
    //if(gPhysEngDesc=="OpenDynamicsEngine"){
    //    msg =":: is tuned for OpenDynamicsEngine";
    //    gPhysEng=0;
    //}else if(gPhysEngDesc=="BulletSim"){
    //    msg =":: is tuned for BulletSim";
    //    gPhysEng=1;
    //}else{
    //    msg ="WARNING:Automatic Detection of Physics Engine is off.";
    //}
 
    if(gPhysEng==0){
        msg =":: is tuned for OpenDynamicsEngine";
    }else if(gPhysEng==1){
        msg =":: is tuned for BulletSim";
    }
 
    if(gPhysEng==0){
        gTurnMulti=gTurnMulti;
        init_TSvar(0);
        gTurnRatioList            = [   2.4,    //  STAGER
                                        2.4,    //  BURNOUT
                                        2.4,    //  1ST
                                        2.5,    //  2ND
                                        4.5,    //  3RD
                                        5.0,    //  4TH
                                        5.5,    //  5TH
                                        6.5,    //  6TH
                                        7.5,    //  PRO-STOCK (START-DRAG-CLASS)
                                        10.0,    //  PRO-MOD
                                        10.0,    //  TOP-FUEL
                                        10.0    //  OPEN-PRO
                                    ];    
       gGearPowerList             = [   2,    //  STAGER
                                        10,    //  BURNOUT
                                        15,    //  1ST
                                        50,    //  2ND
                                        70,    //  3RD
                                        85,    //  4TH
                                        100,    //  5TH
                                        110,    //  6TH
                                        155,    //  PRO-STOCK (START-DRAG-CLASS)
                                        170,    //  PRO-MOD
                                        200,    //  TOP-FUEL
                                        256     //  OPEN-PRO
                                   ];
 
 
    }else{
        gTurnMulti=1.12345;
        init_TSvar(1);
        gTurnRatioList            = [   1.1,    //  STAGER
                                        1.2,    //  BURNOUT
                                        1.5,    //  1ST
                                        1.6,    //  2ND
                                        2.0,    //  3RD
                                        2.1,    //  4TH
                                        2.1,    //  5TH
                                        2.1,    //  6TH
                                        2.1,    //  PRO-STOCK (START-DRAG-CLASS)
                                        2.1,    //  PRO-MOD
                                        2.1,    //  TOP-FUEL
                                        2.1    //  OPEN-PRO
                                    ];
 
       gGearPowerList             = [   2,    //  STAGER
                                        15,    //  BURNOUT
                                        30,    //  1ST
                                        60,    //  2ND
                                        80,    //  3RD
                                        90,    //  4TH
                                        100,    //  5TH
                                        110,    //  6TH
                                        155,    //  PRO-STOCK (START-DRAG-CLASS)
                                        170,    //  PRO-MOD
                                        198,    //  TOP-FUEL
                                        256     //  OPEN-PRO
                                   ];
 
    }
        llSay(0,msg);
}
 
preload_sounds(){
    llPreloadSound(gSoundFlight);
    llPreloadSound(gSoundHorn);
    llPreloadSound(gSoundStartup);
    llPreloadSound(gSoundIdle);
    llPreloadSound(gSoundSlow);
    llPreloadSound(gSoundAggressive);
    llPreloadSound(gSoundGearUp);
    llPreloadSound(gSoundGearDown);
    llPreloadSound(gSoundRev);
    llPreloadSound(gSoundAlarm);
}
 
init_engine(){
    gRun = 0;
    llSetSitText(gSitMessage);
    llCollisionSound("", 0.0);
    gSitTarget_Rot = llRot2Euler( llGetRootRotation() ); // SIT TARGET IS BASED ON VEHICLE'S ROTATION.
    llSitTarget(gSitTarget_Pos, llEuler2Rot(DEG_TO_RAD * gSitTarget_Rot));
    gOldSound=3; 
    gNewSound=3;
    gTireSpin = "NoSpin";
    gTurnAngle = "NoTurn";
    gRotorSpin = "NoRotate";
    llSetLinkPrimitiveParamsFast(LINK_ALL_CHILDREN, [PRIM_PHYSICS_SHAPE_TYPE, PRIM_PHYSICS_SHAPE_NONE]);
    llMessageLinked(LINK_SET, 0, gTireSpin, NULL_KEY);      // NO SPIN
    llMessageLinked(LINK_SET, 0, gTurnAngle, NULL_KEY);     // NO TURN
    llMessageLinked(LINK_SET, 0, gRotorSpin, NULL_KEY);     // SLOW SPIN
}
 
init_followCam(){
    llSetCameraParams([
                       CAMERA_ACTIVE, 1,                 // 0=INACTIVE  1=ACTIVE
                       CAMERA_BEHINDNESS_ANGLE, 2.5,     // (0 to 180) DEGREES
                       CAMERA_BEHINDNESS_LAG, 0.3,       // (0 to 3) SECONDS
                       CAMERA_DISTANCE, 6.0,             // ( 0.5 to 10) METERS
                       CAMERA_PITCH, 12.0,                // (-45 to 80) DEGREES
                       CAMERA_POSITION_LOCKED, FALSE,    // (TRUE or FALSE)
                       CAMERA_POSITION_LAG, 0.0,         // (0 to 3) SECONDS
                       CAMERA_POSITION_THRESHOLD, 0.0,   // (0 to 4) METERS
                       CAMERA_FOCUS_LOCKED, FALSE,       // (TRUE or FALSE)
                       CAMERA_FOCUS_LAG, 0.0,           // (0 to 3) SECONDS
                       CAMERA_FOCUS_THRESHOLD, 0.0,      // (0 to 4) METERS
                       CAMERA_FOCUS_OFFSET, <0.0,0,0>   // <-10,-10,-10> to <10,10,10> METERS
                      ]);
                      llForceMouselook(FALSE);
}
 
init_fixedCam(float degrees) {
    rotation sitRot = llAxisAngle2Rot(<0, 0, 1>, degrees * PI);
    llSetCameraEyeOffset(<-10, 0, 3.5> * sitRot);
    llSetCameraAtOffset(<4, 0, 3> * sitRot);
    llForceMouselook(FALSE);
}
 
set_engine(){
    integer vfW = VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT;
    integer vfG = VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY |
        VEHICLE_FLAG_LIMIT_MOTOR_UP;
    integer vfA = VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT;
    llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
    llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0.00000, 0.00000, 0.00000, 0.00000>);
    llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, gVLMT);
    llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, gVLMDT);
    llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, gVLFT );
    llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, gVAFT );
    llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, gVAMT);
    llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, gVAMDT);
    llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, gVLDE);
    llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, gVLDT);
    llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, gVADE);
    llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, gVADT);
    llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, gVVAE);
    llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, gVVAT);
    llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, gVHE );
    llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, gVHT );
    llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, gVHH );
    llSetVehicleFloatParam(VEHICLE_BUOYANCY, gVB );
    llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, gVBE );
    llSetVehicleFloatParam( VEHICLE_BANKING_MIX, gVBM );
    llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, gVBT );
 
    // llRemoveVehicleFlags(vfW);      // NOT FOR OPENSIM
    // llRemoveVehicleFlags(vfA);      // NOT FOR OPENSIM
    //llSetVehicleFlags(vfG);        // NOT FOR OPENSIM
    gRotorSpin = "SlowRotate";
    llMessageLinked(LINK_SET, 0, gRotorSpin, NULL_KEY);     // SLOW SPIN
    llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
}
 
powershift(integer g){
    if(!gMoving){
        if(gCamFixed==0){
           // llSetCameraParams([CAMERA_BEHINDNESS_ANGLE,0.0]);
           // llSetCameraParams([CAMERA_DISTANCE,0.0]);
        }
    }
    else {
    vector vel = llGetVel();
    float speed = llVecMag(vel);
    if (speed <=20){
         if(gCamFixed==0){
           // llSetCameraParams([CAMERA_BEHINDNESS_ANGLE,2.5]);
           // llSetCameraParams([CAMERA_DISTANCE,8.0]);
            }
        }
        else if ((speed >=21) || (speed <=50)){
            if(gCamFixed==0){    
               // llSetCameraParams([CAMERA_BEHINDNESS_ANGLE,1.5]);
               // llSetCameraParams([CAMERA_DISTANCE,6.0]);
            }
        }
        else  if (speed >=51) {
             if(gCamFixed==0){   
               // llSetCameraParams([CAMERA_BEHINDNESS_ANGLE,1.5]);
               // llSetCameraParams([CAMERA_DISTANCE,6.0]);
            }
 
        }
    }
    gGearPower = llList2Integer(gGearPowerList, g);
}
 
gearshift(integer g){
    gGearName = llList2String(gGearNameList, g);
    enginesound();
    llSay(0,gGearName);
}
 
nearestpi(){
    // ALIGNS THE VEHICLE EAST WEST SOUTH NORTH BASED ON CURRENT ROTATION (PRESTAGE AND STAGE DURING DRAG MODE)    
    vector Rad = llRot2Euler( llGetRootRotation() );
    llSetRot( llEuler2Rot( <Rad.x, Rad.y, llRound( Rad.z / PI_BY_TWO ) * PI_BY_TWO > ) );
}
 
menu(key user,string title,list buttons)
{
    llListenRemove(menu_handler);
    menu_channel = (integer)(llFrand(99999.0) * -1);
    menu_handler = llListen(menu_channel,"","","");
    llDialog(user,title,buttons,menu_channel);
    llSetTimerEvent(30.0); 
}
 
showdata(string s){
    llSetText(s+"\n.\n.\n.\n.",<1,1,.6>,1.0);
    //llSetText("",<0,0,0>,1.0);
}
 
enginesound(){
    vector vel = llGetVel();
    float speed = llVecMag(vel);
    if (speed <=10){
        gNewSound = 0;
        }
        else if (speed >=50){
            gNewSound = 2;
        }
        else {
            gNewSound = 1;
        }
 
    if (gOldSound != gNewSound){
        if (speed <=10){
            llLoopSound(gSoundIdle,1.0);
            }
            else if (speed >=50){
                llLoopSound(gSoundAggressive,1.0);
            }
            else {
                llLoopSound(gSoundSlow,1.0);
            }    
    gOldSound = gNewSound;
    }
}
 
cornerFXR(){
    vector vel = llGetVel();
    float speed = llVecMag(vel);
    if (speed >50){
    llMessageLinked(LINK_SET, 0, "letsburnR", NULL_KEY);
        }
}
 
cornerFXL(){
    vector vel = llGetVel();
    float speed = llVecMag(vel);
    if (speed >50){
    llMessageLinked(LINK_SET, 0, "letsburnL", NULL_KEY);
        }
}
 
default {
    state_entry()
    {
        init_engine();
        state Ground;
    }
}
 
state Ground{
 
    state_entry(){
    }
    on_rez(integer param) {
        llResetScript();
        preload_sounds();
        init_PhysEng();
    }
 
    changed(integer change){
        if ((change & CHANGED_LINK) == CHANGED_LINK){
            gAgent = llAvatarOnSitTarget();
            if (gAgent != NULL_KEY){
                if( (gAgent != llGetOwner()) && (gDrivePermit == 1)){
                    llSay(0, gUrNotAllowedMessage);
                    llUnSit(gAgent);
                    llPlaySound(gSoundAlarm,1.0);
                    llPushObject(gAgent, <3,3,20>, ZERO_VECTOR, FALSE);
                }
                else {
                    llSetStatus(STATUS_PHYSICS, TRUE);
                    llSetStatus(STATUS_ROTATE_Y,TRUE);
                    llSetStatus(STATUS_ROTATE_Z,TRUE);
                    gOldAgent = gAgent;
                    init_PhysEng();
                    set_engine();
                    llRequestPermissions(gAgent, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);
                    gRun = 1;
                }
            }
            else {
                llSetStatus(STATUS_PHYSICS, FALSE); //SHOULD THIS BE THE LAST THING YOU SET??
                gRun = 0;
                //init_PhysEng();
                init_engine();
                llTriggerSound(gSoundStop,1);
                llStopAnimation(gDrivingAnim);
                llPushObject(gAgent, <3,3,20>, ZERO_VECTOR, FALSE);
                llSetTimerEvent(0.0);
                llStopSound();
                llReleaseControls();
                llClearCameraParams();
                llSetCameraParams([CAMERA_ACTIVE, 0]);
                llSetText("",<0,0,0>,1.0);
            }
        }
    }
    run_time_permissions(integer perm){
        if (perm) {
            gGear = 2; // GEAR#0 IS STAGER | GEAR#1 IS BURNOUT | GEAR#2 IS THE FIRST GEAR (LIST INDEX STARTS @ 0)
            //gNewGear = 2;  
            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
            if (gCamFixed == 1) {
                init_fixedCam(0);
            }else{
                init_followCam();
            }
            llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "headlight", "0");
            llStartAnimation(gDrivingAnim);
            llTriggerSound(gSoundStartup,1.0);
            llSleep(1.5);
            enginesound();
        }
    }
 
    control(key id, integer held, integer change){
        if(gRun == 0){
            return;
        }
        integer reverse=1;
        vector vel = llGetVel();
        vector speedvec = llGetVel() / llGetRot();
        gSpeed = llVecMag(vel);
        gTurnRatio = llList2Float(gTurnRatioList,gGear);
 
        if ((held & change & CONTROL_RIGHT) || ((gGear >= 11) && (held & CONTROL_RIGHT))){
            gGear=gGear+1;
            if (gGear < 0) gGear = 0;
            if (gGear > 11) gGear = 11;
            gearshift(gGear);
        }
 
        if ((held & change & CONTROL_LEFT) || ((gGear >= 11) && (held & CONTROL_LEFT))){
            gGear=gGear-1;
            if (gGear < 0) gGear = 0;
            if (gGear > 11) gGear = 11;
            gearshift(gGear);
 
        }
 
        if (held & CONTROL_FWD){
            if(gGear == 0) {
                //llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1.0, 2.0, 8.0>);
            }else{
                //llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, gVLFT);
            }
            if(gGear == 1)  {
                //llMessageLinked(LINK_SET, 0, "letsburn", NULL_KEY);
                //llMessageLinked(LINK_SET, 0, "letsscreech", NULL_KEY);
                //llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            }
            if(gGear == 2)  {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            }
            if(gGear == 3)  {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            }
            if(gGear == 4)  {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            }
            if(gGear == 5)  {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            }
            if(gGear == 6)  {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            }
            if(gGear == 7)  {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame_strong", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            }
            if(gGear == 8)  {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame_strong", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            }
            if(gGear == 9)  {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame_strong", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            }
            if(gGear == 10) {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame_strong", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            }
            if(gGear == 11) {
            llMessageLinked(LINK_SET, 0, "pipeflame_steady", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame_strong", NULL_KEY);
            llMessageLinked(LINK_SET, 0, "pipeflame", NULL_KEY);
            }
            powershift(gGear);
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <gGearPower,0,0>);
            gMoving=1;
            reverse=1;
            gNewTireSpin = "ForwardSpin";
 
        }
 
        if (held & CONTROL_BACK){
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <gReversePower,0,0>);
            llSetCameraParams([CAMERA_BEHINDNESS_ANGLE,-45.0]);
            llSetCameraParams([CAMERA_DISTANCE,8.0]);
            gTurnRatio = -2.0;
            reverse = -1;
            gNewTireSpin = "BackwardSpin";
            llMessageLinked(LINK_SET, 0, gTireSpin, NULL_KEY);
        }
         if (~held & change & CONTROL_FWD){
            //llSay(0,"CONTROL_FWD:Released");
            llMessageLinked(LINK_SET, 0, gTireSpin, NULL_KEY);             
            gNewTireSpin = "NoSpin";
            gNewTurnAngle = "NoTurn";
 
            if (gGear > 9){
                gGear = 3;
            }
 
                }
         if (~held & change & CONTROL_BACK){
            //llSay(0,"CONTROL_BACK:Released");
            llMessageLinked(LINK_SET, 0, gTireSpin, NULL_KEY);             
            gNewTireSpin = "NoSpin";
            gNewTurnAngle = "NoTurn";
        }
         if (~held & ~change & CONTROL_FWD){
            //llSay(0,"CONTROL_FWD:Inactive");
            llMessageLinked(LINK_SET, 0, gTireSpin, NULL_KEY);             
        }
         if (~held & ~change & CONTROL_BACK){
            //llSay(0,"CONTROL_BACK:Inactive");
            llMessageLinked(LINK_SET, 0, gTireSpin, NULL_KEY);             
        }
 
       showdata("Speed Vector:" + (string)speedvec + " Speed:" + (string)(gSpeed*2.23692912) + " mph");
       enginesound();
 
        vector AngularMotor;
        AngularMotor.y = 0;  
        if (held & (CONTROL_ROT_RIGHT)){
            if (gGear<3){
            AngularMotor.x += ((gTurnRatio/gTurnMulti)*1);
            AngularMotor.z -= ((gTurnRatio*gTurnMulti)/1);
            }else if(gGear==3){
            AngularMotor.x += ((gTurnRatio/gTurnMulti)*1);
            AngularMotor.z -= ((gTurnRatio/gTurnMulti)/2);
            }else{
            AngularMotor.x += ((gTurnRatio/gTurnMulti)*1);
            AngularMotor.z -= ((gTurnRatio/gTurnMulti)/8);
            }
            gNewTurnAngle = "RightTurn";
            gTurnCount = 10;
            gTcountR = 2;
        }
 
        if (held & (CONTROL_ROT_LEFT)){
            if (gGear<3){
            AngularMotor.x -= ((gTurnRatio/gTurnMulti)*1);
            AngularMotor.z += ((gTurnRatio*gTurnMulti)/1);
            }else if (gGear==3){
            AngularMotor.x -= ((gTurnRatio/gTurnMulti)*1);
            AngularMotor.z += ((gTurnRatio/gTurnMulti)/2);
            }else{
            AngularMotor.x -= ((gTurnRatio/gTurnMulti)*1);
            AngularMotor.z += ((gTurnRatio/gTurnMulti)/8);
            }
            gNewTurnAngle = "LeftTurn";
            gTurnCount = 10;
            gTcountL = 2;
         }
          // going up or stop going up
        if(held & CONTROL_UP) {
                if(gGear!=0){
                    llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <gGearPower,0,gVerticalThrust*gGear>);
                    AngularMotor.y -= 0.5; //((gTurnRatio/gTurnMulti)*1);
                }else{
                 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,gVerticalThrust>);
                }
        } else if (change & CONTROL_UP) {
                 if(gGear!=0){
                    llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <gGearPower,0,0>);
                    AngularMotor.y = 0;
                }else{
                    llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
                }
                       }
 
        // going down or stop going down
 
        if(held & CONTROL_DOWN) {
                if(gGear!=0){
                    llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <gGearPower,0,-gVerticalThrust*gGear>);
                    AngularMotor.y += 0.5; //((gTurnRatio/gTurnMulti)*1);
                }else{
                    llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,-gVerticalThrust>);
                }
        } else if (change & CONTROL_DOWN) {
                 if(gGear!=0){
                    llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <gGearPower,0,0>);
                    AngularMotor.y = 0;
                }else{
                    llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
                }
        }
        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, AngularMotor);
            if(gTcountL > 0){
                gTcountL--;
                //llSay(0,(string)gTcountL);
            }
            if(gTcountL == 1){
                cornerFXL();
            }
            if(gTcountR > 0){
                gTcountR--;
               // llSay(0,(string)gTcountR);
            }
            if(gTcountR == 1){
                cornerFXR();
            }
 
        if(gTurnCount > 0){
            gTurnCount--;
        }
        if(gTurnCount == 1){
            gNewTurnAngle = "NoTurn";
        }
        if(gTurnAngle != gNewTurnAngle){
            gTurnAngle = gNewTurnAngle;
            llMessageLinked(LINK_ALL_OTHERS, 0, gTurnAngle, NULL_KEY);
        }
        if(gTireSpin != gNewTireSpin){
            gTireSpin = gNewTireSpin;
            //llMessageLinked(LINK_ALL_OTHERS, 0, gTireSpin, NULL_KEY);
           llMessageLinked(LINK_SET, 0, gTireSpin, NULL_KEY);
        }
 
    }
 
    touch_start(integer total_number){
        if (gAgent != NULL_KEY){
            menu(llDetectedKey(0), "\nDriver's Menu.", MENU_MAIN);
        }
    }
 
    listen(integer channel,string name,key id,string message){
        if (channel == menu_channel){
            llListenRemove(menu_handler);
            llSetTimerEvent(0);
            if (message == "Align"){
                llSay(0, "Car is lined up...");
                nearestpi();
            }
            else if (message == "Hello"){
                llSay(0, "Hello yourself");
            }
            // else if (message == "Button"){
            // do something
            //}
        }
    }
 
 
    link_message(integer sender, integer num, string str, key id){
 
        integer i = llGetLinkNumber() != 0;   // Start at zero (single prim) or 1 (two or more prims)
        integer x = llGetNumberOfPrims() + i; // [0, 1) or [1, llGetNumberOfPrims()]
 
        for (; i < x; ++i)
        {
 
            if (llGetLinkName(i) == "spin")
            {
                rotation rootRot = llGetRootRotation();
                vector rootPos = llGetRootPosition();
 
                list params = llGetLinkPrimitiveParams(i,[PRIM_POSITION,PRIM_ROT_LOCAL,PRIM_SIZE]);
                rotation childRot = llList2Rot(params,1);
                vector childPos = (llList2Vector(params,0)-rootPos)/rootRot;
                vector childSize = llList2Vector(params,2);
 
                    if(str == "ForwardSpin"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,90.0,0.0>*DEG_TO_RAD*childRot, TWO_PI, 2.0]);
                    }else if (str == "BackwardSpin"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,90.0,0.0>*DEG_TO_RAD*childRot, -TWO_PI, 1.0]);
                    }else if (str == "NoSpin"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,00.0,0.0>*DEG_TO_RAD*childRot, 0, 1.0]);
                    }
            }else if (llGetLinkName(i) == "spin_y"){
                    if(str == "NoRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,00.0,0.0>*DEG_TO_RAD*0, 0, 0.987654]);
                    }else if (str == "SlowRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,90.0,0.0>*DEG_TO_RAD*1, TWO_PI*2, 0.987654]); 
                    }else if (str == "FastRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,90.0,0.0>*DEG_TO_RAD*1, TWO_PI*4, 0.987654]);
                    }
            }else if (llGetLinkName(i) == "spin_x"){
                    if(str == "NoRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,00.0,0.0>*DEG_TO_RAD*0, 0, 0.987654]);
                    }else if (str == "SlowRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <90.0,0.0,0.0>*DEG_TO_RAD*1, TWO_PI*2, 0.987654]); 
                    }else if (str == "FastRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <90.0,0.0,0.0>*DEG_TO_RAD*1, TWO_PI*4, 0.987654]);
                    }
            }else if (llGetLinkName(i) == "spin_z"){
                    if(str == "NoRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,00.0,0.0>*DEG_TO_RAD*0, 0, 0.987654]);
                    }else if (str == "SlowRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,0.0,90.0>*DEG_TO_RAD*1, TWO_PI*2, 0.987654]); 
                    }else if (str == "FastRotate"){
                    llSetLinkPrimitiveParamsFast(i, [PRIM_OMEGA, <0.0,0.0,90.0>*DEG_TO_RAD*1, TWO_PI*4, 0.987654]);
                    }
                }
            }
        }
 
    timer(){
        llListenRemove(menu_handler);
        if(gRun == 1){
 
        }else{
                llSetTimerEvent(0.0);
        }
    }
}
Outils personnels
  • Cette page a été consultée 883 fois.
donate
Google Ads