Advertisement
salahzar

script veicolo elicottero

Feb 2nd, 2014
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //OpenSim Helicopter script
  2. //Kayaker Magic aka Mike Kayaker
  3. // June 2012
  4. //      This script is open source, have fun!
  5. // WARNING: This script takes advantage of KNOWN BUGS in OpenSim to
  6. //    get the vehicle to work reliably.
  7. //        Written from the ground up for OpenSim, won't work on SL!
  8. //  It has been tested to work in OS 0.7.1.1 & 0.7.4.0 and will fail when
  9. //        the bugs are fixed in later versions!
  10. //  I make no attempt to set the camera, you can usually cam around behind
  11. //      yourself with CTRL-ALT-mouse and get it to stay there while flying.
  12. //  To use: Put this script in the root prim of a helicopter
  13. //      putting it in a 2x1x0.01 box makes a nice magic carpet for starters.
  14. //      Sit on the vehicle an then:
  15. //    up-arrow pitches the helicopter nose down so the prop starts pulling it foreword
  16. //    down-arrow pitches the helicopter nose up so the prop pulls you backward.
  17. //    left-arrow rotates the helicopter left
  18. //    right-arrow rotates the helicopter right
  19. //    Page-up page-down moves the helicopter smoothly up and down in one meter increments.
  20. //        (tap and release page-up/down multiple times to rise fast)
  21.  
  22. float gHeight;      //global height
  23. string sitanim="sit_ground";    //how to sit on the vehicle
  24.  
  25. default
  26. {
  27.     state_entry()
  28.     {
  29.         llSetSitText("Fly");
  30.         llCollisionSound("",0.0);
  31.         llSitTarget(<-0.3, 0.0, 0.8>, ZERO_ROTATION);
  32.         vector pos=llGetPos();      //position to initialize global hover height
  33.         gHeight=pos.z;
  34.         llSetRot(ZERO_ROTATION);    //level it off on a reset
  35.  
  36.  
  37.         llSetVehicleType(VEHICLE_TYPE_BALLOON); //start with a simple vehicle type
  38.             // linear friction high so we don't run into the sim boundary so soon
  39.         llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <3,3,3> );
  40.             // uniform angular friction
  41.         llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 20 );
  42.             //BUG NUMBER ONE (mantis issue 6040)
  43.             // linear motor is constantly straining up against the linear motor bug
  44.             // so when you tilt the vehicle, it moves horizontally
  45.         llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 20> );
  46.         llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 5 );
  47.         llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1000 );
  48.             // agular motor, apply fast, decays slow 'cause I stop it on button up
  49.         llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> );
  50.         llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 3 );
  51.         llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 100 );
  52.             // hover is used to move the vehicle up and down
  53.             // because the linear motor won't work in Z (bug number one)
  54.         llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT,gHeight);
  55.         llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 1 );
  56.         llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 3 );
  57.         llSetVehicleFloatParam( VEHICLE_BUOYANCY, 1 ); //should be on, but make sure
  58.             // no linear deflection
  59. //        llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0 );
  60. //        llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 5 );
  61.             // no angular deflection
  62. //        llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0 );
  63. //        llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 5 );
  64.             // vertical attractor helps slow me down, since tilt controls speed
  65.         llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .99 );
  66.         llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 3 );
  67.             // no banking
  68. //        llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 1 );
  69. //        llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0.7 );
  70. //        llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 5 );
  71.             // default rotation of local frame
  72. //        llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> );
  73.             // remove all flags but hover global height
  74.         llRemoveVehicleFlags(
  75.               VEHICLE_FLAG_NO_DEFLECTION_UP
  76.             | VEHICLE_FLAG_HOVER_WATER_ONLY
  77.             | VEHICLE_FLAG_LIMIT_ROLL_ONLY
  78.             | VEHICLE_FLAG_HOVER_TERRAIN_ONLY
  79. //            | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT
  80.             | VEHICLE_FLAG_HOVER_UP_ONLY
  81.             | VEHICLE_FLAG_LIMIT_MOTOR_UP );
  82.         llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
  83.     }
  84.  
  85.     on_rez(integer pram)
  86.     {
  87.         llSetPos(llGetPos()+<0,0,1.5>);     //jump up to clear the ground a little bit
  88.         llResetScript();
  89.     }
  90.     changed(integer change)
  91.     {
  92.         if (change & CHANGED_LINK)
  93.         {
  94.             if (llAvatarOnSitTarget()!=NULL_KEY)
  95.             {
  96.                     llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 20>);
  97.                     llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0>);
  98.                     llRequestPermissions(llAvatarOnSitTarget(), PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
  99.                          //bounce up a bit to get away from obstacles
  100.                     gHeight+=2.0;
  101.                     llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT,gHeight);
  102.             }
  103.             else
  104.             {
  105.                         //BUG NUMBER TWO (mantis issue 5964)
  106.                         //turning physics off does not always work, so try to set all the
  107.                         //vehicle parameters to zero so it will not run away
  108.                 llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0>);
  109.                 llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0>);
  110.                 llSetStatus(STATUS_PHYSICS, FALSE); //try to turn it off, might help
  111.                         //OPENSIM FEATURE: You are allowed to call llSetRot on a
  112.                         //physical object. I want to set the tilt to zero to make sure
  113.                         //the vehicle stops moving horizontally
  114.                 vector angles=llRot2Euler(llGetRot());
  115.                 llSetRot(llEuler2Rot(<0,0,angles.z>));
  116.                 llReleaseControls();
  117.                 llStopAnimation(sitanim);
  118.             }
  119.         }
  120.  
  121.     }
  122.  
  123.     run_time_permissions(integer perm)
  124.     {
  125.         if (perm)
  126.         {
  127.             if (perm & PERMISSION_TRIGGER_ANIMATION)
  128.             {
  129.                 llStopAnimation("sit");
  130.                 llStartAnimation(sitanim);
  131.                 llSetStatus(STATUS_PHYSICS, TRUE);
  132.                 gHeight+=2.0;       //bounce up a bit to get away from obstacles
  133.                 llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT,gHeight);
  134.             }
  135.             if (perm & PERMISSION_TAKE_CONTROLS)
  136.                 llTakeControls(
  137.                     CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT |
  138.                     CONTROL_BACK | CONTROL_FWD | CONTROL_UP | CONTROL_DOWN,
  139.                 TRUE, FALSE);
  140.         }
  141.     }
  142.     control(key id, integer level, integer edge)
  143.     {
  144.         vector angmotor=<0,0,0>;
  145.         integer angflag=0;
  146.  
  147.         if (level &  edge & CONTROL_UP)  //page up pressed
  148.         {
  149.             gHeight += 1.0;
  150.             llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT,gHeight);
  151.         }
  152.         if ( level & edge & CONTROL_DOWN)  //page down pressed
  153.         {
  154.             gHeight -= 1.0;
  155.             if (gHeight<llGround(ZERO_VECTOR)+2.0) gHeight=llGround(ZERO_VECTOR)+2.0;
  156.             llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT,gHeight);
  157.         }
  158.                      
  159.         if ( level & edge & CONTROL_FWD)   //foreward button pressed
  160.         {
  161.             angmotor.y = 2;
  162.             angflag = 1;
  163.         }
  164.         if (~level & edge & CONTROL_FWD) //foreward button released
  165.             angflag = 1;
  166.            
  167.         if ( level & edge & CONTROL_BACK)   //back button pressed
  168.         {
  169.             angmotor.y = -2;
  170.             angflag = 1;
  171.         }
  172.         if (~level & edge & CONTROL_BACK) //back button released
  173.             angflag = 1;
  174.            
  175.         if( level & edge & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
  176.         {
  177.             angmotor.z = -1;
  178.             angmotor.x = .5;
  179.             angflag = 1;
  180.         }
  181.         if(~level & edge & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
  182.             angflag = 1;        //default is to go to zero
  183.  
  184.         if( level & edge & (CONTROL_LEFT|CONTROL_ROT_LEFT))
  185.         {
  186.             angmotor.z = 1;
  187.             angmotor.x = -0.5;
  188.             angflag = 1;
  189.         }
  190.         if(~level & edge & (CONTROL_LEFT|CONTROL_ROT_LEFT))
  191.             angflag = 1;
  192.                 //BUG NUMBER THREE (mantis issue 6039)
  193.                 //The angular motor rotates around the global region axis
  194.                 //to make the vehicle pitch around it's local axis
  195.                 //I had do multiply the angular motor by llGetRot()
  196.         if (angflag)
  197.             llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angmotor*llGetRot());
  198.     } //control
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement