Jump to content

MIVIMEX

Resident
  • Posts

    177
  • Joined

  • Last visited

Posts posted by MIVIMEX

  1. Hello! I have a question. My seaplane during the movement on water produces foam trace. But the emission goes by impulses, uneven. Help please make the trace smoother and more continuous! Thanks in advance!

    [PSYS_PART_MAX_AGE,5.00,
    PSYS_PART_FLAGS, 291,
    PSYS_PART_START_COLOR, <0.89900, 0.93776, 0.97216>,
    PSYS_PART_END_COLOR, <0.98706, 0.98044, 0.98756>,
    PSYS_PART_START_SCALE,<1.00750, 1.00752, 0.00000>,
    PSYS_PART_END_SCALE,<3.00369, 3.00974, 0.00000>,
    PSYS_SRC_PATTERN, 4,
    PSYS_SRC_BURST_RATE,0.00,
    PSYS_SRC_BURST_PART_COUNT,16,
    PSYS_SRC_BURST_RADIUS,0.00,
    PSYS_SRC_BURST_SPEED_MIN,1.00,
    PSYS_SRC_BURST_SPEED_MAX,1.00,
    PSYS_SRC_ANGLE_BEGIN, 0.00,
    PSYS_SRC_ANGLE_END, 0.00,
    PSYS_SRC_MAX_AGE, 0.0,
    PSYS_SRC_TEXTURE, "013bfffb-d1a5-04e9-d776-67d4ade3b99b",
    PSYS_PART_START_ALPHA, 1.00,
    PSYS_PART_END_ALPHA, 0.50]);

     

    images.jpg

  2. 24 minutes ago, Wulfie Reanimator said:

    Scripted rotation doesn't stay in sync with hand animations and isn't as smooth to look at.

    in my case this is not critical. a simple rotation of objects on the similarity of planets is ok. (it's more like telekinesis, hehehe)

  3. 20 minutes ago, Rolig Loon said:

     

    
    SetEnginePosition()
    {
        vector diff;
        if (fFwd >= 0.0)    // moving forward, don't tip on your nose
        {
            diff = llGetCenterOfMass() - llGetPos() + <-3.25,0.0,0.0>;
        }
        else        // Moving backwards, don't tip onto your tail
        {
            diff = llGetCenterOfMass() - llGetPos() + <0.0,0.0,0.0>;
        }
        llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_OFFSET, diff );
    }

     

    Wow! Thank you very much for this! I will try it! So it's a script, not construction?

  4. Hello, I build a small seaplane, but when on the water (it floats ok) wings or nose go under the water. On the land all ok. The root is a 0,5 prim cube. Is it script or construction (primmy)? Please help! Thank you!

    Seaplane is about 3x3 meters

  5. Hello! I'm trying for the first time to build a seaplane and here I got such a script. The script is excellent, the plane flies, but I can not add the ailerons, rudder, flaps. in the script I see these words are encountered. Please help add them. Thanks for any help.

    // :CATEGORY:Vehicles
    // :NAME:A_flight_script_with_more_realistic
    // :AUTHOR:Fritz Kakapo
    // :CREATED:2010-12-28 21:16:02.003
    // :EDITED:2013-09-18 15:38:46
    // :ID:8
    // :NUM:12
    // :REV:1.0
    // :WORLD:Second Life
    // :DESCRIPTION:
    // My more elaborate airplane and bird scripts are also available free in world, but I suggest that this is the place to start.  This scrpt is public domain "Copyleft!".  My others are distributed under GNU Free Public Licenses, so only the ideas and short sections of script should be used in proprietary flight scripts, not long sections verbatim.  Direct derivatives of the others should remain open source.
    // 
    // I am anxious for others to use my new methods.  I realize that most sl residents don't have strong backgrounds in physical analysis and modeling, numerical methods and real time programming, so I have tried to make this a script that others will be able to use as a starting place and adapt to their own requirements.  One can look at the other scripts when ready to add more details and  features.
    // :CODE:
    //====================================================================================================================================
    
    // PIETENPOL AIR CAMPER FLIGHT SCRIPT MK1, with F. t. C.'s extensive changes
    
    //
    
    // Portions of this script are influenced by or based on work from Alex Linden, Cubey Terra, Eoin Widget, Kerian Bunin, Ronald Krugman
    
    // Script by Ezekiel Bailly 2005-2008
    
    // New, more physical, flight behavior and other changes by Fritz t. Cat (Fritz Kakapo), April--May 2010.
    
    // Copyleft!
    
    //--------------------------------------------------------------------------------------------------------------------------------------
    
    //              Some of Fritz's changes:
    
    //      Making it act like an airplane, maybe even like a Model A engined Air Camper,
    
    //          but keeping it simple and as compatible as I can with what other sl flight scripters are doing.
    
    //      Explaining how this new script relates to the simplified physics of airplanes.
    
    //      Separated aileron and rudder controls.  (The variables controlling the prim angles were already separate.)
    
    //      Some improvements in response time.
    
    //      Pulling loose wires.  When I was a student, they used to send me up to trace signal cables and remove them if open.
    
    //      Trying to make it easier for the next person (or robot?) who works on it.
    
    //      Took out HUD control, for simplicity and efficiency. (Each listen puts a lot of load on the server, or used to at least.)
    
    //      More concise, clearer and more efficient code.  Tables of if statements could be replaced by formulas, for example.
    
    //      Formatting.  I prefer less blank lines, dashes instead.  More consistent and standard indenting.
    
    //          Deleting long obsolete comments, better variable names.
    
    //
    
    //      Wikipedia says stall speed 35 mph, top 100 mph, rate of climb 500 ft/min (152 m/min).
    
    //      It lists the Model as as 40 horsepower (30 kW), and the Camper loaded weight as 995 lb (452 kg).
    
    //      Because of sl limitattions, I have modeled that at half speed.
    
    //      The stall here is not realistic and is too slow, to keep it easy to fly and simple.
    
    //          Too slow can be fixed by increasing LINEAR_FRICTION_TIMESCALE.z to decrease lift.
    
    //          The stall is too gentle because of the approximation that the lift is proportional to the angle of incidence
    
    //              times the square of the speed, which breaks down in a stall because of boundary layer separation.
    
    //          It would be somewhat improved by making the linear friction increase (LINEAR_FRICTION_TIMESCALE decrease) with speed,
    
    //              but this is a simple script, and it is easier to fly without that.
    
    //
    
    //  Come the revolution, there'll be no more flying level, just the same, with the wings vertical!
    
    //  Come the revolution, airplanes will turn toward the low wing, even when up side down!
    
    //======================================================================================================================================
    
    //
    
    //
    
    //  *AC control flags that we set later (It won't do logic in the initialization of variables.)
    
    integer gAngularControls;
    
    // *AC  we may keep track of angular history for more responsive turns
    
    integer gOldAngularLevel;
    
    // Landing Gear Weight on Wheels-Collision Integer
    
    integer onground =  TRUE;
    
    // THROTTLE (SPEED) Sensitive Declarations
    
    // Thrust variables:
    
    // thrust = forward * thrust_multiplier
    
    // Edit the maxThrottle and thrustMultiplier to determine max speed.
    
    integer forward =  0; // this changes when pilot uses throttle controls
    
    integer maxThrottle = 5; // Number of "clicks" in throttle control. Arbitrary, really.
    
    float thrustMultiplier = 11.; // Amount thrust increases per click.
    
    //
    
    // Lift and speed
    
    //float cruiseSpeed = 19.0; // knots, speed at which plane achieves full lift, knots!
    
    float speed =  0.;      // speed in m/s
    
    float requested_timer_interval = 0.5;  // timer call requested rate, it can be much slower
    
    integer sit = FALSE;    // pilot sitting
    
    integer ignition = FALSE;   // engine running, object physical
    
    //
    
    // Control Surface Motion Declarations
    
    string last_aileron_direction;
    
    string cur_aileron_direction;
    
    //
    
    string last_elevator_direction;
    
    string cur_elevator_direction;
    
    string last_rudder_direction;
    
    string cur_rudder_direction;
    
    //
    
    // CAMERA DECLARATIONS
    
    list drive_cam =
    
    [
    
            CAMERA_ACTIVE, TRUE,
    
            CAMERA_BEHINDNESS_ANGLE, 0.0,
    
            CAMERA_BEHINDNESS_LAG, 0.6,
    
            CAMERA_DISTANCE, 10.0,//3.0,
    
            CAMERA_PITCH, 10.0,
    
            // CAMERA_FOCUS,
    
            CAMERA_FOCUS_LAG, 0.05,
    
            CAMERA_FOCUS_LOCKED, FALSE,
    
            CAMERA_FOCUS_THRESHOLD, 0.0,
    
            // CAMERA_POSITION,
    
            CAMERA_POSITION_LAG, 0.3,
    
            CAMERA_POSITION_LOCKED, FALSE,
    
            CAMERA_POSITION_THRESHOLD, 0.0,
    
            //
    
            CAMERA_FOCUS_OFFSET,<0,0,1>//<0,0,1>
    
    ];
    
    integer camon = FALSE;
    
    integer camPermed;
    
    //
    
    key pilot =  NULL_KEY;
    
    vector angular_motor;       //
    
    vector global_vel;             // velocity in the sim coordinate system
    
    vector local_vel;   // velocity in the coordinate system pointed as the airplane
    
    integer thrustPercent =  0;
    
    float ANGULAR_MOTOR_TIMESCALE_0 =  4.;          // strength of angular motor and angular damping
    
    float VERTICAL_ATTRACTION_TIMESCALE_0 =  17.;
    
    //--------------------------------------------------------------------------------------------------------------------------
    
    integer HUDon =  TRUE;  //"Heads Up Display" variables
    
    string HUDtext =  "";
    
    vector HUDcolor;
    
    //==========================================================================================================================
    
    //
    
    init()
    
    {
    
        llListen(0, "", llGetOwner(), "" );
    
        //
    
        llSetCameraEyeOffset( < -12, 0., 3.5 > ); // Position of camera, relative to parent.
    
        llSetCameraAtOffset( <0, 0, 1.9 > );   // Point to look at, relative to parent.
    
        //
    
        llSetSitText( "AirCamper" ); // Text that appears in pie menu when you sit
    
        //
    
        llCollisionSound( "", 0.0 ); // Remove the annoying thump sound from collisions 
    
        //
    
        //SET VEHICLE PARAMETERS -- See www.secondlife.com/badgeo for an explanation
    
        llSetVehicleType( VEHICLE_TYPE_AIRPLANE );
    
        //
    
        // angular deflection, fin and rudder
    
        llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.3 );
    
        llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 1.0 );
    
        //
    
        // linear deflection
    
        llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0. ); // fuselage lift, both pitch and yaw cause lift
    
        llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1000. ); // but we use LINEAR_FRICTION instead.
    
        //
    
        // angular friction
    
        llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, < 1.5, 3., 6. > );  // Caused by drag of extremities.
    
        //
    
        // linear friction
    
        llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, < 37., 9., 0.15 > );
    
        //  This is the all-important trick to get the physics engine to handle the wing lift.
    
        //  The x and y components contribute to parasite drag and to fuselage lift.
    
        //  I have a note card explaining how the dependence of both lift and drag on pitch angle
    
        //      are accurately and efficiently modeled by this parameter.
    
        //  (To get a realistic depenence of lift and drag on speed, this parameter should decrease with speed.)
    
        //
    
        llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> );   // Start with the Model A off.
    
        //
    
        llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 24. );      // loose control to feel like air
    
        llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 10. );     // 20 times the timer interval.
    
        //  If this is too long, it gets lost between sims more often.  If it is too short, it falls in busy sims.
    
        //
    
        // angular motor
    
        llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> );  // control surfaces
    
        //
    
        llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, ANGULAR_MOTOR_TIMESCALE_0/5. );   // strength of " and angular damping
    
        //
    
        llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 3. );    // can be refreshed in timer or not
    
        //
    
        // hover
    
        llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 0. ); // useful for sea planes
    
        llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0. ); // or for taking off from bare ground
    
        llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 1000. );
    
        //
    
        // vertical attractor
    
        //  This tends to keep the airplane right side up.
    
        //  More technically, it gives it dynamic stability against spiral dive.
    
        //  In rl airplanes, this stability is provided largely by dihedral and by
    
        //      the vertical distance between the aerodynamic center and the center of gravity.
    
        //  This vertical attractor is less realistic but simpler than the dihedral approximation I use in Li'l Stinker.
    
        llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY,  0.1 );
    
        llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, VERTICAL_ATTRACTION_TIMESCALE_0 );
    
        //  The /10. is to fix leaning over on ground, probably caused by the lack of a good sit animation.
    
        //
    
        // banking      I don't know much what this does yet, so I am not using it.
    
        //      Used in a straightforward way, it is partly responsible for the
    
        //  un-airplanelike behavior of other sl airplanes.
    
        //  It was obviously not introduced with airplanes in mind (at least not in a rational mind).
    
        //  (I tried reversing it when up side down, but did not understand the result.)
    
        llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0. );
    
        llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1000. );
    
        //
    
        //  Falls half as fast, as though the space and speed were twice as big,
    
        //      to deal with the small size of sims and the slowness of handoffs between sims.
    
        llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0.5 );    // This and must be a constant (for any flight mode).
    
        //
    
        // default rotation of local frame
    
        llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0,0,0,1> );    // A noop, I think.
    
        //
    
        // remove these flags
    
        llRemoveVehicleFlags(   VEHICLE_FLAG_NO_DEFLECTION_UP
    
                              | VEHICLE_FLAG_HOVER_WATER_ONLY
    
                              | VEHICLE_FLAG_HOVER_TERRAIN_ONLY
    
                              | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT
    
                              | VEHICLE_FLAG_HOVER_UP_ONLY
    
                              | VEHICLE_FLAG_LIMIT_MOTOR_UP
    
                              | VEHICLE_FLAG_CAMERA_DECOUPLED);
    
        //-----------------------------------------------------------------------------------------------------------------
    
        //
    
        gAngularControls = CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_BACK | CONTROL_FWD;
    
        //
    
        refreshHUD();
    
        //
    
        llSay(0, "Cogito ergo sum." );  // "I think therefore I am.", Descartes.  Variant on "Hello world!"
    
        //
    
    }   //  End init.
    
    //
    
    //-----------------------------------------------------------------------------------------------------------------------------------
    
    //
    
    refreshHUD()        // from the VICE test airplane
    
    {
    
        if ( !sit )
    
        {
    
            HUDtext="Take a copy, or buy for l$ 0. \n Full permissions,
    
            Revolutionary flight script.
    
            Public domain, no restrictions on use.
    
            Open the airplane as a box to get the documentation.";
    
            HUDcolor =  < 0.2, 0.4, 1. >;
    
            jump GOTO;
    
        }
    
        //
    
        if ( !HUDon )
    
        {
    
            HUDtext="";
    
            jump GOTO;
    
        }
    
        //
    
            HUDtext =  "Airpeed: " + (string)llFloor( (local_vel.x + 0.5) ) + " m/s"
    
            + " = "+(string)llFloor(  ( local_vel.x*1.94 + 0.5 )  ) + " kts."
    
            + " = "+(string)llFloor(  ( local_vel.x * 100./2.54/12./5280. *60.*60. + 0.5 )  ) + " mi./hr."
    
            + "\n " +" = "+(string)llFloor(  local_vel.x *100. /2.54/12. /5280. *60.*60. * 2.  +  0.5  ) + " scaled mi./hr."
    
            + "\n Rate of climb: " + " = " +
    
                (string)(  llFloor(  global_vel.z *100. /2.54 /12. *60. * 2.  /10.  +  0.5  ) * 10  ) + " scaled foot/min."
    
            + "\n " +
    
            "Throttle: " + (string)thrustPercent + "%";
    
            //
    
            HUDcolor =  < 1.0, 1.0, 1.0 >;  // white when combat is disabled
    
        //
    
        @GOTO;
    
        //
    
        llSetText( "", HUDcolor, 1.0);
    
        //llSetText(HUDtext+"\n \n \n \n \n \n \n ", HUDcolor, 1.0);
    
        //
    
        llMessageLinked( 2, 333, (string)HUDcolor, NULL_KEY );
    
        llMessageLinked( 2, 137, HUDtext+"\n \n \n ", NULL_KEY );
    
        //
    
    }   // End refreshHUD().
    
    //
    
    //-----------------------------------------------------------------------------------------------------------------------------------
    
    //
    
    default
    
    {
    
        state_entry()
    
        {
    
            init();
    
        }
    
    //
    
        //----------------------------------------------------------------------------------------------------------------------
    
        on_rez(integer num)
    
        {
    
            llOwnerSay("Welcome to the Pietenpol Air Camper, type 'help' for the manual.");
    
            llOwnerSay("These controls can be typed in chat:");
    
            llOwnerSay("Start, stop the engine: 'contact' ,  'cutoff' ");
    
            //llOwnerSay("Seat position: 'seatup'  'seatdown'  (You will need to Re-sit) ");
    
            llOwnerSay("'smoke' turns colored smoke off and on.");
    
            //
    
            llOwnerSay(" ");
    
            llOwnerSay( "The arrow keys or a, d work the ailerons.");
    
            llOwnerSay( "Shift arrow or shift a, d controls the rudder." );
    
            llOwnerSay( "Up, down arrow or s, w controls the elevator, as usual." );
    
            llOwnerSay( "Page up, down or e, c changes the throttle, as usual." );
    
            llOwnerSay( "For a good turn, start the turn with the ailerons, then continue it with the rudder and elevator." );
    
            llOwnerSay( "But the elevator and ailerons don't work at the same time as the rudder, sorry." );
    
            llOwnerSay( "Use full throttle for take off." );
    
            //
    
            init();
    
        }
    
        //
    
        // DETECT AV SITTING/UNSITTING AND TAKE CONTROLS
    
    //-----------------------------------------------------------------------------------------------------------------------------------
    
        changed( integer change )
    
        {
    
            //
    
            if ( change & CHANGED_LINK )
    
            {
    
                pilot = llAvatarOnSitTarget();
    
                //
    
                if ( pilot )
    
                {
    
                    if ( pilot != llGetOwner() )
    
                    //if ( FALSE )
    
                    {
    
                        // only the owner can use this vehicle
    
                        llWhisper(0,
    
                        "Please take a copy of this airplane and fly your own copy.
    
                        (If it is not set \"free to copy\" or \"for sale 0 l$\" contact the owner or the creator.)
    
                        You aren't the owner -- only the owner can fly this plane.");
    
                        llUnSit( pilot );
    
                        //llPushObject(pilot, <0,0,10>, ZERO_VECTOR, FALSE);
    
                    }
    
                    else
    
                    {   // Pilot sits on vehicle
    
                       
    
                        llRequestPermissions(pilot, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION | PERMISSION_CONTROL_CAMERA);
    
                        llSetTimerEvent( requested_timer_interval );
    
                        llMessageLinked( LINK_SET, 0, "seated", "" );
    
                        llMessageLinked( LINK_ALL_CHILDREN , 0, "CONTROLS_FLYING", NULL_KEY );
    
                        sit = TRUE;
    
                        forward =  0;
    
                        thrustPercent =  0;
    
                        //llSetStatus(STATUS_PHYSICS, TRUE);
    
                        //
    
                        llSay(0, "Seated." );
    
                    }
    
                }   // End pilot.
    
                //
    
                else if ( sit ) 
    
                // When changed is called with flying and CHANGED_LINK, it is usually that the avatar is getting up.
    
                {
    
                    // Pilot is getting up.
    
                    //
    
                    llSetStatus( STATUS_PHYSICS, FALSE );
    
                    llSetTimerEvent( 0 );
    
                    llMessageLinked( LINK_SET, 0, "unseated", "" );
    
                    llStopSound();
    
                    llReleaseControls();
    
                    //
    
                    llClearCameraParams();                            
    
                    sit = FALSE;
    
                    //
    
                    llSay(0, "Unseated." );
    
                    //
    
                    //llPushObject( pilot, <0,0, 10. >, ZERO_VECTOR, FALSE );           <<  This goes in the pilot seat script.
    
                    //llSetStatus(STATUS_PHANTOM, TRUE);    // It falls through the floor.
    
                    //llSleep(4.0);
    
                    //llSetStatus(STATUS_PHANTOM, FALSE );
    
                    //
    
                }   // End sit.
    
                else llSay(0, "??" );   //  for debugging
    
            }
    
            refreshHUD();
    
            //
    
        }   // End changed.
    
        //
    
        //------------------------------------------------------------------------------------------------------------------------
    
        //CHECK PERMISSIONS AND TAKE CONTROLS
    
        run_time_permissions( integer perm )
    
        {
    
            if ( perm & PERMISSION_TAKE_CONTROLS )
    
            {           
    
                llTakeControls( CONTROL_UP | CONTROL_DOWN | CONTROL_FWD | CONTROL_BACK
    
                | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT
    
                // |  CONTROL_ML_LBUTTON | CONTROL_LBUTTON
    
                , TRUE, FALSE);
    
            }
    
        }   // End run_time_permissions.
    
        //
    
        //----------------------------------------------------------------------------------------
    
        //
    
        listen( integer channel, string name, key id, string message )
    
        {
    
            //Aircraft Start Watcher
    
             //if(  (message == "contact")  &&  (ignition == FALSE)  )
    
             if(  message == "contact"  )
    
            {
    
                ignition = TRUE;
    
                llOwnerSay( "Starting Engine" );
    
                llSetStatus( STATUS_PHYSICS, TRUE );
    
                llMessageLinked( LINK_SET, 0, "start", NULL_KEY );
    
                //thrustPercent =  (integer) llFloor(  (float)(forward+1) / (float)maxThrottle * 100.  +  0.5  );
    
            }
    
            //else if( ( message == "cutoff" ) && (ignition == TRUE) )
    
            else if( message == "cutoff" )
    
            {
    
                ignition = FALSE;
    
                llOwnerSay( "Engine Stop" );
    
                llSetStatus( STATUS_PHYSICS, FALSE );
    
                llMessageLinked( LINK_SET, 0, "stop", NULL_KEY );
    
            }
    
            //
    
              else if( (message=="c") && (camon==FALSE) )       // No tested.
    
            {
    
                 llSetCameraParams(drive_cam);
    
                 camon=TRUE;
    
                 llOwnerSay("Dynamic Camera on");
    
                }
    
           
    
            else if( (message=="c") && (camon==TRUE) )
    
            {
    
                 llClearCameraParams();
    
                 camon=FALSE;
    
                 llOwnerSay("Dynamic Camera off");
    
            }
    
            else if( message == "smoke" )
    
            // Added by FtC, because I can't feel the acceleration in the seat of my pants.
    
            {
    
                llMessageLinked( LINK_SET, 0, "smoke", NULL_KEY );
    
                //  (The smoke script starts and stops the smoke with the engine but remembers this command.)
    
            }
    
        }     // End listen. 
    
        //
    
        //----------------------------------------------------------------------------------------
    
        //            
    
        //FLIGHT CONTROLS
    
        control( key id, integer levels, integer edge )
    
        {
    
            // OBC DECLARATIONS
    
            integer throttle_up = CONTROL_UP;
    
            integer throttle_down = CONTROL_DOWN;
    
            //
    
            //               
    
            if ( (levels & (throttle_up+throttle_down)) && ignition )
    
            {           
    
          ////////////// THROTTLE INCREASE ////////////////
    
                if ( levels & throttle_up )
    
                {
    
                    if ( forward < maxThrottle-1 )
    
                    {
    
                        forward += 1;
    
                    }
    
                }
    
                //
    
        ////////////// THROTTLE DECREASE ////////////////
    
                else if ( levels & throttle_down )
    
                {
    
                    if ( forward > 0 )
    
                    {
    
                        forward -= 1;
    
                    }
    
                }
    
                llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <  forward * thrustMultiplier, 0, 0 > );
    
                //
    
                // Calculate percent of max throttle and send to child prims as link message
    
                thrustPercent =  (integer) llFloor(  (float)(forward+1) / (float)maxThrottle * 100.  +  0.5  );
    
                //
    
                llMessageLinked( LINK_SET, thrustPercent, "throttle", "" );
    
                //
    
                llOwnerSay( "Throttle at " + (string)thrustPercent + " %" );
    
                //
    
                refreshHUD();
    
                //
    
                llSleep( 0.15 ); // crappy kludge // This must be to avoid multiple clicks.
    
            }
    
            //
    
            // only change angular motor if the angular levels have changed
    
            //
    
            if (  (edge & gOldAngularLevel)  ||  (levels & gAngularControls)  )
    
            {
    
                //  This is not fly by wire or fly by light, so the controls work when the pilot is seated.
    
                //  The fact that they still have some effect at zero speed is an unrealistic convenience.
    
                //  By the standard simple approximation, both lift and control surface effectiveness are proportional
    
                //      to the square of the speed.  This is a compromise between that and flying ease.
    
                //
    
                angular_motor = <0,0,0>;
    
                cur_aileron_direction = "AILERON_NEUTRAL";  // Start neutral.
    
                cur_elevator_direction = "ELEVATOR_NEUTRAL";
    
                cur_rudder_direction = "RUDDER_NEUTRAL";
    
                //
    
                // ailerons
    
                if( levels & CONTROL_ROT_RIGHT )
    
                {
    
                    cur_aileron_direction = "AILERON_RIGHT";
    
                    angular_motor.x +=  2.5 * (0.5 + speed/10.);
    
                }
    
                //
    
                 if( levels & CONTROL_ROT_LEFT )
    
                {
    
                    cur_aileron_direction = "AILERON_LEFT";
    
                    angular_motor.x -=  2.5 * (0.5 + speed/10.);
    
                }
    
                //
    
                // rudder
    
                if( levels & CONTROL_RIGHT )
    
                {
    
                    cur_rudder_direction = "RUDDER_RIGHT";
    
                    angular_motor.z -=  1.3 * (0.7 + speed/10.);
    
                }
    
                //
    
                 if( levels & CONTROL_LEFT )
    
                {
    
                    cur_rudder_direction = "RUDDER_LEFT";
    
                    angular_motor.z +=  1.3 * (0.7 + speed/10.);
    
                }
    
                //
    
                //  elevator
    
                if( levels & CONTROL_BACK )
    
                {
    
                    // add pitch component ==> causes vehicle lift nose (in local frame)
    
                    cur_elevator_direction = "ELEVATOR_UP";
    
                    angular_motor.y -=  1.2 * (0.7 + speed/10.);
    
                }
    
                if( levels & CONTROL_FWD  )
    
                {
    
                    cur_elevator_direction =  "ELEVATOR_DOWN";
    
                    angular_motor.y +=  1.2 * (0.7 + speed/10.);
    
                }
    
                 llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor );
    
                 //
    
                //  These are moved from timer to reduce the delay.
    
                //
    
                if ( cur_aileron_direction != last_aileron_direction )
    
                {
    
                 llMessageLinked( LINK_ALL_CHILDREN , 0, cur_aileron_direction, NULL_KEY );
    
                 last_aileron_direction = cur_aileron_direction;
    
                }
    
                if ( cur_elevator_direction != last_elevator_direction )
    
                {
    
                    llMessageLinked( LINK_ALL_CHILDREN , 0, cur_elevator_direction, NULL_KEY );
    
                    last_elevator_direction = cur_elevator_direction;
    
                }
    
                if ( cur_rudder_direction != last_rudder_direction )
    
                {
    
                    llMessageLinked( LINK_ALL_CHILDREN , 0, cur_rudder_direction, NULL_KEY );
    
                    last_rudder_direction = cur_rudder_direction;
    
                }
    
            //
    
            }   // End angular controls.
    
            // store the angular levels history for the next control callback
    
            gOldAngularLevel = levels & gAngularControls;
    
            //
    
        }   // End control.
    
        //
    
        //----------------------------------------------------------------------------------------------------------------------------
    
        // LAND COLLISION FILTER FOR turn BEHAVIOR  //  Used now only for unrealistic convenience.
    
        //
    
        collision_start(integer num_detected) {
    
            //llOwnerSay( "Down." );
    
            llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, ANGULAR_MOTOR_TIMESCALE_0/10. );   // More torque needed on ground.
    
            llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, VERTICAL_ATTRACTION_TIMESCALE_0 / 20.  );
    
            // The wheel keep us right side up.
    
            onground = TRUE;
    
        }
    
        collision_end(integer num_detected){
    
            //llOwnerSay( "Up." );
    
            //llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, ANGULAR_MOTOR_TIMESCALE_0 );   // Less torque needed in air.
    
            onground = FALSE;
    
        }       
    
        land_collision_start(vector pos) {
    
            //llOwnerSay( "Down." );
    
            llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, ANGULAR_MOTOR_TIMESCALE_0/10. );   // More torque needed on ground.
    
            llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, VERTICAL_ATTRACTION_TIMESCALE_0 / 20.  );
    
            // The wheel keep us right side up.
    
            onground = TRUE;
    
        }                    
    
        land_collision_end(vector pos) {
    
            //llOwnerSay( "Up." );
    
            //llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, ANGULAR_MOTOR_TIMESCALE_0 );   // Less torque needed in air.
    
            onground = FALSE;
    
        }
    
        //----------------------------------------------------------------------------------------
    
        //Aircraft Start Watcher                                        // I took this out for efficiency and simplicity.
    
        //link_message( integer send, integer num, string msg, key id )
    
        //{                
    
        //    if(( msg == "contact" ) && (ignition == FALSE))
    
        //    {
    
        //        ignition= TRUE;
    
        //        llOwnerSay("Starting Engine");
    
        //        llSetStatus(STATUS_PHYSICS, TRUE);
    
        //    }
    
        //    else if(( msg == "cutoff" ) && (ignition == TRUE) )
    
        //    {
    
        //        ignition = FALSE;
    
        //        llOwnerSay("Engine Stop");
    
        //        llSetStatus(STATUS_PHYSICS, FALSE);
    
        //    }
    
        //}
    
        //------------------------------------------------------------------------------------------------------------------------
    
        //
    
        timer()
    
        {
    
            global_vel =  llGetVel();
    
            speed =  llVecMag( global_vel );
    
            float speed_kt =  speed * 1.94384449;   // Calculate speed in knots.
    
            local_vel =  global_vel / llGetRot();          // to coordinate frame alligned with body
    
            //
    
            llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, < forward*thrustMultiplier, 0, 0 > );    // Keep engine running.
    
            llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor );  // Keeps friction constant.
    
            //
    
            if ( onground )
    
                ;
    
                //llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, VERTICAL_ATTRACTION_TIMESCALE_0 / 10.  );
    
            else
    
                llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, ANGULAR_MOTOR_TIMESCALE_0 / (1.5 + 0.5*speed/10.)  );
    
                // More torque needed at higher speed.
    
                llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, VERTICAL_ATTRACTION_TIMESCALE_0 / (1.5 + 0.5*speed/10.)  );
    
            //  Dihedral and wing sweep are more effective at higher speed.
    
            //
    
            refreshHUD();
    
            //
    
        }  // End timer.
    
    }   // End default.
    
    // 
    
    //=======================================================================================
    
    //
    
    
    
     

     

  6. Hello! I have a question. I can not enter the beta grid because I do not remember the password. How to recover the password? Does the password match the main grid? Because I changed password on the main grid. Please, help!

    Thanks!

  7. @Rolig Loon @Fionalein

    Here's what I got. Now I can control the brightness of the glow by entering values from 0 to 10 in the chat . But if you enter a value more then an error occurs. Which is understandable, it is not possible to glow brighter.

    Is it possible to combine these two properties with a "light" toggle command and brightness 1-10 control?

    integer iSwitch ;
    default
    {
    state_entry()    
    {        
    key owner = llGetOwner();         
    llListen(0, "", owner, "");    }  
    listen (integer channel, string name, key id, string message)
    {
        iSwitch = (integer)message;
        llSetPrimitiveParams( [PRIM_GLOW, ALL_SIDES, 0.1 * iSwitch ]);
    }}

     

     

  8. 4 minutes ago, Fionalein said:

    iSwitch is binary information, true or false (wich is an integer to LSL)

    light intensity is multiplied by the iSwitch state, which is 1 for TRUE and 0 for FALSE, the * is simple math it ... multiplies numbers =^.^=

     

     

    3 minutes ago, Rolig Loon said:

    LSL does not have true Boolean variables. Instead we can use any integer variable and  assign it a value == 0 or != 0. That is, any integer variable can be a simple TRUE/FALSE, or ON/OFF binary switch.  So if iSwitch == 0 ....... ;)

    I think I understand. If multiplies by one then the light is on, if zero is not.

    • Like 2
  9. 27 minutes ago, Rolig Loon said:

    See if you can figure out why this does the same thing ....

    
    listen (integer channel, string name, key id, string message)
    {
        iSwitch = !iSwitch; 
        llSetPrimitiveParams([PRIM_POINT_LIGHT,iSwitch,<1.0, 1.0, 1.0>,1.0,15,0.750, 
    PRIM_GLOW, ALL_SIDES, 0.4 * iSwitch]); 
    }

    9_9

     

    It works! But I can not see yet what's the matter there ... it seems like it's related to the symbol *

  10. @Rolig Loon

    Hooray! One more script was successfully created thanks to you! Thank you! Here's what I got.

    integer iSwitch ;
    default
    {
    state_entry()    
    {        
    key owner = llGetOwner();         
    llListen(0, "", owner, "light");    }  
    listen (integer channel, string name, key id, string message)
    {
        iSwitch = !iSwitch;  // That is, whatever the switch was before, make it the opposite when any message is received
        if ( iSwitch == TRUE)
        {
            llSetPrimitiveParams([PRIM_POINT_LIGHT,TRUE,<1.0, 1.0, 1.0>,1.0,15,0.750, 
    PRIM_GLOW, ALL_SIDES, 0.4]); 
        }
        else if ( iSwitch == FALSE)
        {
            llSetPrimitiveParams([PRIM_POINT_LIGHT,FALSE,<1.0, 1.0, 1.0>,1.0,15,0.750, PRIM_GLOW, ALL_SIDES, 0.0]); 
        }
    }}

     

  11. Hello! I have such a wonderful script. It is turned on/off by chat command "ON/OFF". But I need the light to turn on and off on the same command, for example light. You say "light" for the first time and the light turns on. The second time and it turns off. Please help!

    Thanks for your help in advance!

    default
    {
    state_entry()    
    {        
    key owner = llGetOwner();         
    llListen(0, "", owner, "");    }    
    listen(integer channel, string name, key id, string message)  
    {        
    if (message == "ON")        
       {            
       llSetPrimitiveParams([PRIM_POINT_LIGHT,TRUE,<1.0, 1.0, 1.0>,1.0,15,0.750, 
    PRIM_GLOW, ALL_SIDES, 0.4]);        }                
    else if (message == "OFF")        {            
     llSetPrimitiveParams([PRIM_POINT_LIGHT,FALSE,<1.0, 1.0, 1.0>,1.0,15,0.750, PRIM_GLOW, ALL_SIDES, 0.0]);        }      }}

     

  12. On 29.06.2018 at 10:48 PM, Fionalein said:

    see old forum posts...

    like this one:

     

    Hello! Thank you very much for the answer! Works great!! But what if I need the light to turn on and off on the same command, for example "light".  Hello! thank you very much for the answer! works great!! but what if I need the light to turn on and off on the same command, for example light. You say "light" for the first time and the light turns on. The second time and it turns off.

  13. I even conducted such a wild experiment and made a model without floor and ceiling, subsequently replacing them with mesh cubes. and all to no avail. I come to the conclusion that the matter is in the physics of the game and we all walk a little in the air ...

  14. Hello! I have this situation with the physics of the mesh.
    I upload the building, do the analysis, set it to prim - all successfully. But when I try to walk on it, I stand a little in the air.When I rez a prim, it appears where it should be. But if you turn it into a physical it pops up a bit. And it does not even touch a physics highlighted blue and hangs over it. Why is this happening?

    (You can see a small doorstep, I did for it a separate cube in the physics, I tried even the model completely without the doorstep but the situation repeated.)

    Please help!

    THANK YOU!

     

    Snapshot_002.jpg

  15. 13 hours ago, arton Rotaru said:

    If you don't hit the analyze button, the physics mesh will be a so called Triangle-based physics mesh. Tri-based physics will secretly switch to convex hull physics by the physics engine, when the object is set physical. Now when standing up, the server seems to be quite slow in setting it back to prim physics. Hence, if that sroom is one physics shape, the Avatar will be pushed out. To avoid the secret physics type change, the physics mesh needs to be decomposed (Analyze) in the uploader.

    Hello! Thank you very much for the answer! I do not know why, but the physics worked for me without analysis... but this happened only once! Later I tried to change something but I did not succeed. So you really helped !!! Much grateful!

    By the way do you really need to apply analysis to all the elements of vehicle?

  16. 11 hours ago, arton Rotaru said:

    I have 2 questions.
    Will the boat be set physical when sitting on it?
    How did you upload the physics shapes? Tri-based, or decomposed (Analyzed)?

    Physics I do separately and at loading I choose "from a file". and at the end switch the "Convex Hull" to "Prim".

    Boat will be physical and your friends even can walk on it!

    Do not hit the analyse! I used simple physics made from individual cubes (per cube on each side), keeped only the doorways.

    Безымянный.png

  17. 8 minutes ago, Fionalein said:

    Did you use hollow prims to build the boat? It could also be part of the script you are using, intended to give the user a push out of the vehicle upon exit (who likes to stand in the middle of their car ayways?)

    Yes I use a simplified model without windows with a void inside. Maybe you could tell where in the script to look for a moment of ejection overboard?

  18. 19 minutes ago, Fionalein said:

    I bet it is some unlucky combination of physics and boat shape. When you get up are you by chance inside a physical prim? That could explain the effect.

    Thanks for answer! I checked, in the place where I throw out, I can walk freely. can the transport when I get up become a hull? or the wall is too thin ... what if in this place to attach a thicker unseen prim?

×
×
  • Create New...