HoverDisk
De DigiWiki.
Version du 17 janvier 2012 à 03:09 par Djphil (discuter | contributions)
float speed=0; float high=2400; float turn=25; float lift=0; integer sit = FALSE; integer vertoff = FALSE; integer adecayoff = FALSE; integer ldecayoff = FALSE; string Vname; key avatar; help() { //llWhisper(0,"Key Actions:"); //llWhisper(0,"Right click and 'Fly' <-- Starts " + Vname); //llWhisper(0,"Click STAND UP button <-- Stops " + Vname + " and returns contols"); //llWhisper(0,"W or Forward <-- Accelerates or goes faster forwards"); //llWhisper(0,"S or Backwards <-- Accelerates or goes faster backwards"); //llWhisper(0,"E or Page up <-- Gains Hieght"); //llWhisper(0,"C or Page down <-- Loses Hieght"); //llWhisper(0,"A or Left <-- Turns left"); //llWhisper(0,"D or Right <-- Turns right"); } stuntparams() { llSitTarget(<-0.5, 0.0, 0.3>, <0,0,0,1>); llSetSitText("Get On"); llSetCameraEyeOffset(<-10.0, 0.0, 3.0>); llSetCameraAtOffset(<0.0, 0.0, 0.0>); llSetVehicleType(VEHICLE_TYPE_AIRPLANE); llRemoveVehicleFlags(-1); // linear friction llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000, .1, 1000> ); //1000,2,0.5 // angular friction llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <.1, .1, .1> ); // linear motor llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> ); llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.1 ); llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1 ); // angular motor llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> ); llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 2.5 ); llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 6 ); // no hover llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 1 ); llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0.1 ); llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 100 ); llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0.1 ); // linear deflection llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 1 ); llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 10 ); // angular deflection llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 1 ); llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 10 ); // vertical attractor llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .1 ); llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 ); // banking llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, .5 );//0 llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0 llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .1 );//1000 // default rotation of local frame llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0, 0, 0, 1> ); // remove these flags llRemoveVehicleFlags( VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT | VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP); } default { state_entry() { stuntparams(); Vname=llGetObjectName(); llSetTimerEvent(0.0); llStopSound(); llSetStatus(STATUS_PHYSICS, FALSE); llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", NULL_KEY); //llWhisper(0,Vname + " is ready for use"); } on_rez(integer start_param) { llResetScript(); } touch(integer total_number) { key owner=llGetOwner(); if (llDetectedKey(0)==owner) { help(); } else { //llWhisper(0,llDetectedName(0) + ", Please step away from the " + Vname); } } changed(integer change) { avatar = llAvatarOnSitTarget(); string name=llKey2Name(avatar); if(change & CHANGED_LINK) { if(avatar == NULL_KEY) { // You have gotten off llSetTimerEvent(0.0); llStopSound(); llMessageLinked(LINK_ALL_CHILDREN, 0, "stop", NULL_KEY); llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, FALSE); llReleaseControls(); llStopAnimation("sit"); sit = FALSE; //llPushObject(llGetOwner(), <0, 2, 7>, <0,0,0>, TRUE); llSetStatus(STATUS_PHYSICS, FALSE); llResetScript(); } else if(avatar == llGetOwner()) { // You have gotten on llSetStatus(STATUS_PHYSICS, TRUE); llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, TRUE); sit = TRUE; llRequestPermissions(avatar,PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION); } else { //llWhisper(0,name + ", Please step away from the " + Vname); llUnSit(avatar); } } } run_time_permissions(integer perms) { if(perms & (PERMISSION_TAKE_CONTROLS)) { llStopAnimation("sit"); llStartAnimation("stand"); llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT | CONTROL_UP | CONTROL_DOWN, TRUE, FALSE); llMessageLinked(LINK_ALL_CHILDREN, 0, "rotor", NULL_KEY); //llLoopSound("jet0",0.7); llSetTimerEvent(0.2); } else { llUnSit(avatar); } } control(key id, integer level, integer edge) { vertoff = FALSE; adecayoff = FALSE; ldecayoff = FALSE; if ((level & CONTROL_FWD) && (level & CONTROL_BACK)) { ldecayoff = TRUE; speed=0; llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>); } if (level & CONTROL_FWD) { ldecayoff = TRUE; if(speed > 30) { speed = 30; } else { speed += 1; } lift= speed * 0.25; llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>); } if (level & CONTROL_BACK) { ldecayoff = TRUE; if(speed < -10) { speed = -10; } else { speed -= 1; } lift= speed * 0.25; llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <speed,0,lift>); } if (level & CONTROL_ROT_RIGHT) { adecayoff = TRUE; llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <turn,0,0>); } if (level & CONTROL_ROT_LEFT) { adecayoff = TRUE; llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <-turn,0,0>); } if (level & CONTROL_RIGHT) { vertoff = TRUE; adecayoff = TRUE; llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <(turn/2),0,0>); } if (level & CONTROL_LEFT) { vertoff = TRUE; adecayoff = TRUE; llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <-(turn/2),0,0>); } if (level & CONTROL_UP) { ldecayoff = TRUE; llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,high>); } if (level & CONTROL_DOWN) { ldecayoff = TRUE; llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,-(high/3)>); } if (vertoff) { llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0 ); llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1000 ); llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 0 );//0 llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0 llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 1000 );//1000 } if (!vertoff) { llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, .1 ); llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 2 ); llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, .5 );//0 llSetVehicleFloatParam( VEHICLE_BANKING_MIX, 0 );//0 llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, .1 );//1000 } if (adecayoff) { llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 300 ); llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <6,6,6> ); } if (!adecayoff) { llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, .2 ); llSetVehicleVectorParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, <.1, .1, .1> ); } if (ldecayoff) { llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 30 ); llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1, 6, 6> ); } if (!ldecayoff) { llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 3 ); llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <1, 2, .05> ); } } timer() { llSetStatus(STATUS_PHYSICS, TRUE); } }