Jump to content

Helicopter Won't Lift Up


IZHRAH
 Share

You are about to reply to a thread that has been inactive for 3271 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Hi can you suggest what's missing on my script? I was trying to make my Helicopter Lift Up. I tried using VEHICULAR_LINEAR_MOTOR_DIRECTION on the CONTROL_UP and CONTROL_DOWN but it doesn't work.

 

float FORWARD_POWER = 50.0;
float REVERSE_POWER = -15.0;
float TURNING_RATIO = 5.0; // how sharply the vehicle turns. Less is more sharply. (0.1 to 10.0)

default
{
    on_rez(integer start_param) { llResetScript(); }
    
    state_entry()
    {
        llSetSitText("Fly");
        llSitTarget(<2.5, 0.4, 0.1>, ZERO_ROTATION);
        
        llSetCameraEyeOffset(<-12.0, 0.0, 5.0>);
        llSetCameraAtOffset(<1.0, 0.0, 2.0>);
        
        llSetVehicleFlags(0);
        llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
        
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1.0, 1.0, 1.0>);
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 2.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.05);        
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 5.0);
        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.75);
        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 2.0);
        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 3.0);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10.0);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 1.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 0.1);
        llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.5);
        llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, ZERO_ROTATION);      
    }

    changed(integer change)
    {
        if(change & CHANGED_LINK)
        {
            key avatar = llAvatarOnSitTarget();
            if(avatar)
            {
                if(avatar != llGetOwner())
                {
                    llUnSit(avatar);
                }
                else
                {
                    llSetStatus(STATUS_PHYSICS, TRUE);
                    llRequestPermissions(avatar, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);
                }
            }
            else
            {
                llSetStatus(STATUS_PHYSICS, FALSE);
                llReleaseControls();
            }
        }      
    }
    
    run_time_permissions(integer permission)
    {
        if(permission)
        {
            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);           
        }
    }
    
    control(key id, integer level, integer edge)
    {
        integer reverse = 1;
        vector angular_motor;
        
        // get current speed
        vector velocity = llGetVel();
        float speed = llVecMag(velocity);
    
        if(level & CONTROL_FWD)
        {
            llMessageLinked(LINK_ALL_CHILDREN, 0, "FORWARD", "");
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <FORWARD_POWER, 0.0, 0.0>);
            reverse = 1;
        }
        
        if(level & CONTROL_BACK)
        {   
            llMessageLinked(LINK_ALL_CHILDREN, 0, "REVERSE", "");
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <REVERSE_POWER, 0.0, 0.0>);
            reverse = -1;
        }
        
        if(level & CONTROL_UP)
        {

        }
        
        if(level & CONTROL_DOWN)
        {

        }
        
        if(level & (CONTROL_RIGHT | CONTROL_ROT_RIGHT))
        {
            angular_motor.z -= speed / TURNING_RATIO * reverse;
            angular_motor.x += 15;
        }
        
        if(level & (CONTROL_LEFT | CONTROL_ROT_LEFT))
        {
            angular_motor.z += speed / TURNING_RATIO * reverse;
            angular_motor.x -= 15;
        }
        
        if(level == 0)
        {            

        }
        
        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);       
    }
}

Link to comment
Share on other sites

Hi can you suggest what's missing on my script? I was trying to make my Helicopter Lift Up. I tried using VEHICULAR_LINEAR_MOTOR_DIRECTION on the CONTROL_UP and CONTROL_DOWN but it doesn't work.

 

float FORWARD_POWER = 50.0;
float REVERSE_POWER = -15.0;
float TURNING_RATIO = 5.0; // how sharply the vehicle turns. Less is more sharply. (0.1 to 10.0)

default
{
    on_rez(integer start_param) { llResetScript(); }
    
    state_entry()
    {
        llSetSitText("Fly");
        llSitTarget(<2.5, 0.4, 0.1>, ZERO_ROTATION);
        
        llSetCameraEyeOffset(<-12.0, 0.0, 5.0>);
        llSetCameraAtOffset(<1.0, 0.0, 2.0>);
        
        llSetVehicleFlags(0);
        llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
        
        llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1.0, 1.0, 1.0>);
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 2.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.05);        
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1.0);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 5.0);
        llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.75);
        llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 2.0);
        llSetVehicleFloatParam(VEHICLE_BUOYANCY, 1.0);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 3.0);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10.0);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);
        llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 1.0);
        llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 0.1);
        llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.5);
        llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, ZERO_ROTATION);      
    }

    changed(integer change)
    {
        if(change & CHANGED_LINK)
        {
            key avatar = llAvatarOnSitTarget();
            if(avatar)
            {
                if(avatar != llGetOwner())
                {
                    llUnSit(avatar);
                }
                else
                {
                    llSetStatus(STATUS_PHYSICS, TRUE);
                    llRequestPermissions(avatar, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);
                }
            }
            else
            {
                llSetStatus(STATUS_PHYSICS, FALSE);
                llReleaseControls();
            }
        }      
    }
    
    run_time_permissions(integer permission)
    {
        if(permission)
        {
            llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE);           
        }
    }
    
    control(key id, integer level, integer edge)
    {
        integer reverse = 1;
        vector angular_motor;
        
        // get current speed
        vector velocity = llGetVel();
        float speed = llVecMag(velocity);
    
        if(level & CONTROL_FWD)
        {
            llMessageLinked(LINK_ALL_CHILDREN, 0, "FORWARD", "");
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <FORWARD_POWER, 0.0, 0.0>);
            reverse = 1;
        }
        
        if(level & CONTROL_BACK)
        {   
            llMessageLinked(LINK_ALL_CHILDREN, 0, "REVERSE", "");
            llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <REVERSE_POWER, 0.0, 0.0>);
            reverse = -1;
        }
        
        if(level & CONTROL_UP)
        {

        }
        
        if(level & CONTROL_DOWN)
        {

        }
        
        if(level & (CONTROL_RIGHT | CONTROL_ROT_RIGHT))
        {
            angular_motor.z -= speed / TURNING_RATIO * reverse;
            angular_motor.x += 15;
        }
        
        if(level & (CONTROL_LEFT | CONTROL_ROT_LEFT))
        {
            angular_motor.z += speed / TURNING_RATIO * reverse;
            angular_motor.x -= 15;
        }
        
        if(level == 0)
        {            

        }
        
        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);       
    }
}

Link to comment
Share on other sites

'kay, last guess.


IZHRAH wrote:

llSetVehicleFlags(0);

        llSetVehicleType(VEHICLE_TYPE_AIRPLANE);

Why are you using VEHICLE_TYPE_AIRPLANE, which uses linear deflection for lift instead of VEHICLE_TYPE_BALLOON which has a hover-mode? Is AIRPLANE the most relevant vehicle type for your application?

Link to comment
Share on other sites

You have set a fixed hover height, llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.75);

So it will try stay at this height no matter how hard you try to set linear motors on the z axis.

Set VEHICLE_HOVER_HEIGHT to 0.0 and use the linear motor to lift, or set VEHICLE_HOVER_HEIGHT dynamically.

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 3271 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...