Суббота, 19.07.2025, 07:47

Мой блог

Главная | Регистрация | Вход
Приветствую Вас Гость
RSS
Форма входа
Календарь
«  Ноябрь 2008  »
Пн Вт Ср Чт Пт Сб Вс
     12
3456789
10111213141516
17181920212223
24252627282930
Поиск
Друзья сайта
Статистика

Дневник


Главная » 2008 » Ноябрь » 09 » Скрипт для авто/мото/вело и тд...
Скрипт для авто/мото/вело и тд...
14:56

Для начала хочу сказать, что главный прим в слинкованном объекте это должен быть именно тот прим, на котором вы будете сидеть. Например, Кресло пилота в нашем варианте. 

Объект может быть физическим, если в нём не больше 30 примов. Так что попробуйте уложиться в 30 примов. 

Для того, чтобы ваша машина нормально работала, а вы в ней нормално сидели вставляем анимацию. Вставляем анимацию, называем ее driving.

integer loopsnd = 0;

default
{  
  state_entry()
  {
  llSetSitText("Drive");
  llSitTarget(<0.3, 0.0, 0.40>, ZERO_ROTATION);
   
   
  llSetCameraEyeOffset(<-9.0, -0.00, 4.0>);
  llSetCameraAtOffset(<3.0, 0.0, 2.0>);
   
   
  llSetVehicleFlags(-1);
  llSetVehicleType(VEHICLE_TYPE_CAR);
   
  llSetVehicleFlags(VEHICLE_FLAG_NO_FLY_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY);
   
   
  llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);
  llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);
  llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.10);
  llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 0.10);
   
  llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 0.3);
  llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.2);
  llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.3);
  llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.1);
   
   
  llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000.0, 2.0, 1000.0>);
  llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <10.0, 10.0, 1000.0>);
   
   
  llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.90);
  llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.90);
   
   
  llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.05);
  llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 0.1);
   
  llCollisionSound("", 0.0);
  }
   
  changed(integer change)
  {
   
  if (change & CHANGED_LINK)
  {
  key agent = llAvatarOnSitTarget();
   
  if (agent)
  {
  if (agent != llGetOwner())
  {
  llUnSit(agent);
  llPushObject(agent, <0,0,100>, ZERO_VECTOR, FALSE);
  }
   
  else
  {
  llSetStatus(STATUS_PHYSICS, TRUE);
  llRequestPermissions(agent, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
  }
  }
  else
  {
  llSetStatus(STATUS_PHYSICS, FALSE);
  llReleaseControls();
  llStopAnimation("sit");
  }
  }
   
  }
   
  run_time_permissions(integer perm)
  {
  if (perm)
  {
  llStopAnimation("sit");
  llStartAnimation("driving");
  llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
  }
  }
  control(key id, integer level, integer edge)
  {
   
  vector angular_motor;

  if (level & edge & CONTROL_FWD)
  {
   
  llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <10,0,0>);
   
  }
  else if ((edge & CONTROL_FWD) && ((level & CONTROL_FWD) == FALSE))
  {
   
  llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
   
  loopsnd = 0;
  }
  else if (level & CONTROL_FWD)
  {
   
  llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <10,0,0>);
   
   
  }
   
  if(level & CONTROL_BACK)
  {
  llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <-10,0,0>);
  }
  if(level & (CONTROL_RIGHT|CONTROL_ROT_RIGHT))
  {
  angular_motor.x += 100;
  angular_motor.z -= 100;
  }
  if(level & (CONTROL_LEFT|CONTROL_ROT_LEFT))
  {
  angular_motor.x -= 100;
  angular_motor.z += 100;
  }
  if(level & (CONTROL_UP))
  {
  angular_motor.y -= 50;
  }
   
  llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);
  }
   
}


Cохраняем.

Также есть пример скрипта для летательных аппаратов, ковра самолета, метлы, воздушного шара.


integer sit = FALSE;
integer listenTrack;
integer brake = TRUE;
integer BEACON_INT = 1440; //# of mins between beacon messages
integer beaconMins; // current # of minutes elapsed since last beacon message

float X_THRUST = 20;
float Z_THRUST = 15;

float xMotor;
float zMotor;

key agent;
key pilot;

vector SIT_POS = <0.25, 0.0, 0.65>; 
vector CAM_OFFSET = <-10.0, 0.0, 2.0>;
vector CAM_ANG = <0.0, 0.0, 2.0>;

listenState(integer on) // start/stop listen
{
  if (listenTrack)
  {
  llListenRemove(listenTrack);
  listenTrack = 0;
  } 
  if (on) listenTrack = llListen(0, "", pilot, "");
}

help()
{
  llWhisper(0,"O Master of the Carpet, you may use these commands to fly me...");
  llWhisper(0," Say START to begin moving.");
  llWhisper(0," Say STOP to stop moving.");
  llWhisper(0," PgUp/PgDn or E/C = hover up/down");
  llWhisper(0," Arrow keys or WASD = forward, back, left, right");
  llWhisper(0," Say HELP to display help.");
}

 
default {
  state_entry() 
  {  
  llSetSitText("Fly");
  llSitTarget(SIT_POS, ZERO_ROTATION);
  llSetCameraEyeOffset(CAM_OFFSET);
  llSetCameraAtOffset(CAM_ANG);
  llCollisionSound("",0.0);  
   
   
  //SET VEHICLE PARAMETERS
  llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
   
  llSetVehicleVectorParam( VEHICLE_LINEAR_FRICTION_TIMESCALE, <200, 20, 20> );
   
   
  // uniform angular friction 
  llSetVehicleFloatParam( VEHICLE_ANGULAR_FRICTION_TIMESCALE, 2 );
   
  // linear motor
  llSetVehicleVectorParam( VEHICLE_LINEAR_MOTOR_DIRECTION, <0, 0, 0> );
  llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_TIMESCALE, 2 );
  llSetVehicleFloatParam( VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 120 );
   
  // agular motor
  llSetVehicleVectorParam( VEHICLE_ANGULAR_MOTOR_DIRECTION, <0, 0, 0> );
  llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0 ); 
  llSetVehicleFloatParam( VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, .4);
   
  // hover 
  llSetVehicleFloatParam( VEHICLE_HOVER_HEIGHT, 2 );
  llSetVehicleFloatParam( VEHICLE_HOVER_EFFICIENCY, 0 ); 
  llSetVehicleFloatParam( VEHICLE_HOVER_TIMESCALE, 10000 );
  llSetVehicleFloatParam( VEHICLE_BUOYANCY, 0.977 );
   
  // no linear deflection 
  llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0 );
  llSetVehicleFloatParam( VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 5 ); 
   
  // no angular deflection 
  llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0);
  llSetVehicleFloatParam( VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 5);
   
  // no vertical attractor 
  llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 1 );
  llSetVehicleFloatParam( VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1 );
   
  // banking
  llSetVehicleFloatParam( VEHICLE_BANKING_EFFICIENCY, 1);
  llSetVehicleFloatParam( VEHICLE_BANKING_MIX, .5);
  llSetVehicleFloatParam( VEHICLE_BANKING_TIMESCALE, 0.01);
   
   
  // default rotation of local frame
  llSetVehicleRotationParam( VEHICLE_REFERENCE_FRAME, <0,0,0,1>);
   
  // remove these flags 
  llRemoveVehicleFlags( VEHICLE_FLAG_NO_DEFLECTION_UP 
  | VEHICLE_FLAG_HOVER_WATER_ONLY
  | VEHICLE_FLAG_LIMIT_ROLL_ONLY 
  | VEHICLE_FLAG_HOVER_TERRAIN_ONLY 
  | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT 
  | VEHICLE_FLAG_HOVER_UP_ONLY 
  | VEHICLE_FLAG_LIMIT_MOTOR_UP );

  }
   
  on_rez(integer num) 
  {
  llSetStatus(STATUS_PHYSICS, FALSE);
  pilot = llGetOwner();
  llSetTimerEvent(60); // beacon timer for 1 min intervals
  } 
   

  listen(integer channel, string name, key id, string message)
  {
  message == llToLower(message);
  if (message == "help")
  {
  help();
  }
   
  if (message == "stop")
  {
  brake = TRUE;
  llWhisper(0,"We are stopped, O Master of the Carpet. You may say START to resume flight.");
  llSetStatus(STATUS_PHYSICS, FALSE);

  }
  else if (message == "start")
  {
  brake = FALSE;
  llWhisper(0,"I hear and obey, O Master of the Carpet. We now begin flight.");
  llSetStatus(STATUS_PHYSICS, TRUE);  
  }
  }


  // DETECT AV SITTING/UNSITTING AND GIVE PERMISSIONS
  changed(integer change)
  {
  agent = llAvatarOnSitTarget();
  if(change & CHANGED_LINK)
  {
  if((agent == NULL_KEY) && (sit))
  {
  //
  // Avatar gets off vehicle 
  // 
  llSetStatus(STATUS_PHYSICS, FALSE);
  llStopAnimation("sit_ground");
  llMessageLinked(LINK_SET, 0, "unseated", "");
  llStopSound();
  llReleaseControls();
  sit = FALSE;
  listenState(FALSE);
  }
  else if ((agent == llGetOwner()) && (!sit))
  {
  //  
  // Avatar gets on vehicle
  //
  pilot = llAvatarOnSitTarget();
  sit = TRUE;
  llRequestPermissions(pilot, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);
  listenState(TRUE);
  llWhisper(0,"O Master of the Carpet, "+llKey2Name(pilot)+", command me as you will. Should you need assistance, please speak the word HELP.");  
  llMessageLinked(LINK_SET, 0, "seated", "");
  }
   
   
  }
  }





  //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, TRUE, FALSE);

  }
  if (perm & PERMISSION_TRIGGER_ANIMATION)
  {
  // Admittedly, animations are bugged. I'll let you figure it out. :) -CT
  llStartAnimation("sit_ground");
  llStopAnimation("sit");
  }
   
  }
   
   
   

   
  //FLIGHT CONTROLS  
  control(key id, integer level, integer edge) 
  {

  vector angular_motor; 
  integer motor_changed;

  if ((level & CONTROL_FWD) || (level & CONTROL_BACK))
  {
   
  if (edge & CONTROL_FWD) xMotor = X_THRUST;
   
  if (edge & CONTROL_BACK) xMotor = -X_THRUST;
  } 
  else
  {  
  xMotor = 0;
  }
   
   
  if ((level & CONTROL_UP) || (level & CONTROL_DOWN))
  {
  if (level & CONTROL_UP) 
  {  
  zMotor = Z_THRUST;
  }  
  if (level & CONTROL_DOWN) 
  {
  zMotor = -Z_THRUST;
  }
   
  }
  else
  {
  zMotor = 0;
   
  }  
   
  llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <xMotor,0,zMotor>);


   
  if (level & CONTROL_RIGHT) {
  angular_motor.x = TWO_PI;
  angular_motor.y /= 8;
  }  
  if (level & CONTROL_LEFT) {
  angular_motor.x = -TWO_PI;
  angular_motor.y /= 8;
  }
   
  if (level & CONTROL_ROT_RIGHT) {  
  angular_motor.x = TWO_PI;
  angular_motor.y /= 8;
  }
   
  if (level & CONTROL_ROT_LEFT) {
  angular_motor.x = -TWO_PI;
  angular_motor.y /= 8;
  }
   
   
  llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_motor);
  }  

  timer()
  {
  //This is a beacon. Vehicles that are not keyed to owner will often get stolen.
  // To avoid leaving vehicle litter all over the world, this beacon notifies the owner of it's location.
  if (beaconMins < BEACON_INT)
  {
  beaconMins += 1;
  }
  else
  {
  beaconMins = 0;
  vector pos = llGetPos();
  llInstantMessage(llGetOwner(), "O Master of the Carpet, I have been left unattended in "+llGetRegionName()+" "+(string)((integer)pos.x)+", "+(string)((integer)pos.y)+", at an altitude of "+(string)((integer)pos.z)+" meters.");
  }
  }
}

Меню скрипта:

В общем чате напишите START чтобы начать двигаться, STOP для остановки движения. PgUp / PgDn или E / C = курсор вверх / вниз для управления объектом.Скажите HELP для отображения справки.



Просмотров: 1236 | Добавил: volldemar | Рейтинг: 5.0/1 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Copyright MyCorp © 2025
Сайт управляется системой uCoz