• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Bräuchte Hilfe bei Car Script

Achim Gausman

Aktiver Nutzer
Hi Leute,

Ich habe ein Fahrzeug Script, das Problem ist das kann nur vom Owner bedient werden.

Wie bekomme ich das hin, das der Owner beim rezen gefragt wird ob der Wagen Owner, Gruppe oder Publick sein soll?

Und auch das die ausgewählte Gruppe das nachher fahren kann?

Das Script:

float ForwardPower; //Forward power
list ForwardPowerGears = [15, 30, 45, 60, 75, 90];
float ReversePower = -30; //Reverse power
float TurnPower = 200; //Turning power
float TurnSpeedAdjust = 1.0; //how much effect speed has on turning, higher numbers effect more. 0.0 to disable

float FlightForwardPower = 24;
float FlightReversePower = 16;
float FlightUpPower = 14;
float FlightDownPower = 14;
float FlightStrafePower = 12;
float FlightTurnPower = 4;


string SitText = "Drift..."; //Text to show on pie menu
string NonOwnerMessage = "Step Away from this Vehicle !"; //Message when someone other than owner tries to sit

string OwnerName;
integer ListenCh = 3;
string HornCommand = "h";
string RevCommand = "r";
string IdleCommand = "i";
string StopCommand = "s";
string FlightCommand = "f";
string GroundCommand = "g";
string BurnCommand = "burn";

string FlightSound = "DTBFlight";
string HornSound = "DTBHorn";
string NonOwnerSound = "DTBAlarm";
string IdleSound = "DTBIdle"; //Sound to play when idling
string RunSound = "DTBRun"; //Sound to play when the gas in pressed
string RevSound = "DTBRev";
string StartupSound = "DTBStart"; //Sound to play when owner sits
string DrivingAnim = "DriveAnim"; //Animation to play when owner sits

//Other variables
key Owner;
integer NumGears;
integer Gear = 0;
integer NewSound;
string Sound;
integer CurDir;
integer LastDir;
integer Forward;
vector SpeedVec;
vector Linear;
vector Angular;
integer Active;
key sitting;
integer Moving;
string SimName;

integer DIR_STOP = 100;
integer DIR_START = 101;
integer DIR_NORM = 102;
integer DIR_LEFT = 103;
integer DIR_RIGHT = 104;
integer DIR_FLIGHT = 105;


default
{
state_entry()
{
Owner = llGetOwner();
OwnerName = llKey2Name(Owner);
TurnSpeedAdjust *= 0.01;
ForwardPower = llList2Integer(ForwardPowerGears, 0);
NumGears = llGetListLength(ForwardPowerGears);
llSetSitText(SitText);
llCollisionSound("", 0.0);
llSitTarget(<0.6,0.6,1.0>, llEuler2Rot(<0,0,0> ));
state Ground;
}
}

state Ground
{
state_entry()
{
llListen(ListenCh, OwnerName, NULL_KEY, "");
llStopSound();
if(!Active)
{
llSetStatus(STATUS_PHYSICS, FALSE);
llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
llUnSit(llAvatarOnSitTarget());
}else{
SimName = llGetRegionName();
llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);
llMessageLinked(LINK_ALL_CHILDREN, DIR_NORM, "", NULL_KEY);
NewSound = 1;
Sound = IdleSound;
Linear = <0,0,-2>;
}

llSetVehicleType(VEHICLE_TYPE_CAR);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.80);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);

llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.2);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 0.1);

llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 0.1);

llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 0.3);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 0.1);

llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 2.0, 1000.0> );
llSetVehicleVectorParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, <1000.0, 1000.0, 1000.0> );

llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.0);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 300.0);

llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0 );
llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0 );
llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 1000 );
llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0 );

llRemoveVehicleFlags(VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);

llSetVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP);
}

on_rez(integer param)
{
llResetScript();
}

listen(integer channel, string name, key id, string message)
{
if(llGetOwnerKey(id) != Owner) return;
message = llToLower(message);
if(message == HornCommand) llMessageLinked(LINK_SET, 12345, HornSound, NULL_KEY);
else if(message == RevCommand) llMessageLinked(LINK_SET, 12345, RevSound, NULL_KEY);
else if(message == IdleCommand) llLoopSound(IdleSound, 1.0);
else if(message == StopCommand) llStopSound();
else if((message == FlightCommand) && Active) state Flight;
else if(message == BurnCommand) { llMessageLinked(LINK_SET, 5000, "burnout", NULL_KEY); llLoopSound(RunSound,1.0); llSleep(10); llLoopSound(IdleSound,1.0); }
}

changed(integer change)
{
if((change & CHANGED_LINK) == CHANGED_LINK)
{
sitting = llAvatarOnSitTarget();
if((sitting != NULL_KEY) && !Active)
{
if(sitting != llGetOwner())
{
llWhisper(0, NonOwnerMessage);
llTriggerSound(NonOwnerSound, 1.0);
llUnSit(sitting);
}else{
llRequestPermissions(Owner, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA);
llTriggerSound(StartupSound, 1.0);
llMessageLinked(LINK_ALL_CHILDREN, DIR_START, "", NULL_KEY);
llSetPos(llGetPos() + <0,0,0.15>);
llSetStatus(STATUS_PHYSICS, TRUE);
SimName = llGetRegionName();
llLoopSound(IdleSound,1);
llSetTimerEvent(0.1);
CurDir = DIR_NORM;
LastDir = DIR_NORM;
}
}else if((sitting == NULL_KEY) && Active)
{
llSetTimerEvent(0.0);
llStopAnimation(DrivingAnim);
Active = 0;
llStopSound();
llSetStatus(STATUS_PHYSICS, FALSE);
llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
llReleaseControls();
}
}
}

run_time_permissions(integer perms)
{
if(perms == (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_CONTROL_CAMERA))
{
Active = 1;
Linear = <0,0,-2>;
Angular = <0,0,0>;
llStopAnimation("sit");
llStartAnimation(DrivingAnim);
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_DOWN | CONTROL_UP | CONTROL_RIGHT | CONTROL_LEFT | CONTROL_ROT_RIGHT | CONTROL_ROT_LEFT, TRUE, FALSE);
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 2.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds
CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters
// CAMERA_FOCUS, <0,0,0>, // region-relative position
CAMERA_FOCUS_LAG, 0.1 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.5, // (0 to 4) meters
CAMERA_PITCH, 20.0, // (-45 to 80) degrees
// CAMERA_POSITION, <0,0,0>, // region-relative position
CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.5, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
}

control(key id, integer levels, integer edges)
{
if(!Moving)
{
Moving = 1;
llSetStatus(STATUS_PHYSICS, TRUE);
}
SpeedVec = llGetVel() / llGetRot();
if((edges & levels & CONTROL_UP))
{
if((Gear + 1) != NumGears)
{
++Gear;
llWhisper(0, "Gear " + (string)(Gear + 1));
ForwardPower = llList2Float(ForwardPowerGears, Gear);
if(Linear.x > 0) Linear.x = ForwardPower;
}
}else if((edges & levels & CONTROL_DOWN))
{
if((Gear - 1) != -1)
{
--Gear;
llWhisper(0, "Gear " + (string)(Gear + 1));
ForwardPower = llList2Float(ForwardPowerGears, Gear);
if(Linear.x > 0) Linear.x = ForwardPower;
}
}
if((edges & levels & CONTROL_FWD))
{
Linear.x += ForwardPower;
NewSound = 1;
}else if((edges & ~levels & CONTROL_FWD))
{
Linear.x -= ForwardPower;
NewSound = 1;
}
if((edges & levels & CONTROL_BACK))
{
Linear.x += ReversePower;
NewSound = 1;
}else if((edges & ~levels & CONTROL_BACK))
{
Linear.x -= ReversePower;
NewSound = 1;
}
if(NewSound)
{
if(Linear.x) Sound = RunSound;
else Sound = IdleSound;
}
if(llFabs(SpeedVec.x) < 0.5)
{
if(levels & CONTROL_ROT_LEFT) CurDir = DIR_LEFT;
else if(levels & CONTROL_ROT_RIGHT) CurDir = DIR_RIGHT;
else CurDir = DIR_NORM;
Angular.z = 0.0;
}else{
if(SpeedVec.x < 0.0)
{
Forward = -1;
SpeedVec.x *= -TurnSpeedAdjust;
}else{
Forward = 1;
SpeedVec.x *= TurnSpeedAdjust;
}
if(levels & CONTROL_ROT_LEFT)
{
CurDir = DIR_LEFT;
Angular.z = (TurnPower - SpeedVec.x) * Forward;
}else if((edges & ~levels & CONTROL_ROT_LEFT))
{
CurDir = DIR_NORM;
Angular.z = 0;
}
if(levels & CONTROL_ROT_RIGHT)
{
CurDir = DIR_RIGHT;
Angular.z = -((TurnPower - SpeedVec.x) * Forward);
}else if((edges & ~levels & CONTROL_ROT_RIGHT))
{
CurDir = DIR_NORM;
Angular.z = 0;
}
}
}

moving_end()
{
if(llGetRegionName() == SimName)
{
Moving = 0;
llSetStatus(STATUS_PHYSICS, FALSE);
}else{
SimName = llGetRegionName();
}
}

timer()
{
if(Linear != <0.0, 0.0, -2.0>)
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);
llApplyImpulse(Linear, TRUE);
}
if(Angular != <0.0, 0.0, 0.0>) llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);
if(CurDir != LastDir)
{
llMessageLinked(LINK_ALL_CHILDREN, CurDir, "", NULL_KEY);
LastDir = CurDir;
}
if(NewSound)
{
llStopSound();
NewSound = 0;
llLoopSound(Sound, 1.0);
}
}
}

state Flight
{
state_entry()
{
Linear = <0,0,0>;
llStopSound();
llMessageLinked(LINK_ALL_CHILDREN, DIR_FLIGHT, "", NULL_KEY);
llLoopSound(FlightSound, 1.0);
llSetStatus(STATUS_PHYSICS, FALSE);
llSetPos(llGetPos() + <0,0,0.25>);
vector rot = llRot2Euler(llGetRot());
llSetRot(llEuler2Rot(<0,0,rot.z>));
llListen(ListenCh, OwnerName, NULL_KEY, "");
llSetVehicleType(VEHICLE_TYPE_AIRPLANE);

// linear friction
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <100.0, 100.0, 100.0>);

// uniform angular friction
llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.5);

// linear motor
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, 1.0);

// angular motor
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0.0, 0.0, 0.0>);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_TIMESCALE, 1.0);
llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE, 2.0);

// hover
llSetVehicleFloatParam(VEHICLE_HOVER_HEIGHT, 0.0);
llSetVehicleFloatParam(VEHICLE_HOVER_EFFICIENCY, 0.0);
llSetVehicleFloatParam(VEHICLE_HOVER_TIMESCALE, 360.0);
llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0.988);

// linear deflection
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY, 0.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 1.0);

// angular deflection
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY, 0.25);
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 100.0);

// vertical attractor
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 1.0);

// banking
llSetVehicleFloatParam(VEHICLE_BANKING_EFFICIENCY, 0.0);
llSetVehicleFloatParam(VEHICLE_BANKING_MIX, 1.0);
llSetVehicleFloatParam(VEHICLE_BANKING_TIMESCALE, 1.0);

// default rotation of local frame
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, <0.00000, 0.00000, 0.00000, 0.00000>);

// removed vehicle flags
llRemoveVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP | VEHICLE_FLAG_HOVER_WATER_ONLY | VEHICLE_FLAG_HOVER_TERRAIN_ONLY | VEHICLE_FLAG_HOVER_UP_ONLY | VEHICLE_FLAG_LIMIT_MOTOR_UP | VEHICLE_FLAG_LIMIT_ROLL_ONLY);

// set vehicle flags
llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON, TRUE, FALSE);

llSetStatus(STATUS_PHYSICS, TRUE);
}

listen(integer channel, string name, key id, string message)
{
if(llGetOwnerKey(id) != Owner) return;
message = llToLower(message);
if(message == GroundCommand) state Ground;
}

control(key name, integer levels, integer edges)
{
if((levels & CONTROL_LBUTTON))
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>);
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, <0,0,0>);
llSetStatus(STATUS_PHYSICS, FALSE);
llSleep(0.1);
llSetStatus(STATUS_PHYSICS, TRUE);
return;
}

if((edges & levels & CONTROL_UP)) Linear.z += FlightUpPower;
else if((edges & ~levels & CONTROL_UP)) Linear.z = 0.0;

if((edges & levels & CONTROL_DOWN)) Linear.z -= FlightDownPower;
else if((edges & ~levels & CONTROL_DOWN)) Linear.z = 0.0;

if((edges & levels & CONTROL_FWD)) Linear.x += FlightForwardPower;
else if((edges & ~levels & CONTROL_FWD)) Linear.x = 0.0;

if((edges & levels & CONTROL_BACK)) Linear.x -= FlightReversePower;
else if((edges & ~levels & CONTROL_BACK)) Linear.x = 0.0;

if((edges & levels & CONTROL_LEFT)) Linear.y += FlightStrafePower;
else if((edges & ~levels & CONTROL_LEFT)) Linear.y = 0.0;

if((edges & levels & CONTROL_RIGHT)) Linear.y -= FlightStrafePower;
else if((edges & ~levels & CONTROL_RIGHT)) Linear.y = 0.0;

if((edges & levels & CONTROL_ROT_LEFT)) Angular.z = FlightTurnPower;
else if((edges & ~levels & CONTROL_ROT_LEFT)) Angular.z = 0;

if((edges & levels & CONTROL_ROT_RIGHT)) Angular.z = -FlightTurnPower;
else if((edges & ~levels & CONTROL_ROT_RIGHT)) Angular.z = 0;
}

changed(integer change)
{
if((change & CHANGED_LINK) == CHANGED_LINK)
{
sitting = llAvatarOnSitTarget();
if(sitting == NULL_KEY)
{
llSetTimerEvent(0.0);
llStopAnimation(DrivingAnim);
Active = 0;
llStopSound();
llSetStatus(STATUS_PHYSICS, FALSE);
llMessageLinked(LINK_ALL_CHILDREN , DIR_STOP, "", NULL_KEY);
llReleaseControls();
state Ground;
}
}
}

timer()
{
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, Linear);

llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, Angular);
}
}

Danke Schonmal für eure Hilfe

MfG
Achim
 
Huhu,
so auf die Schnelle könnte das das hier in dem einen changed-event sein:

Code:
if(sitting != llGetOwner())
{
llWhisper(0, NonOwnerMessage);
llTriggerSound(NonOwnerSound, 1.0);
llUnSit(sitting); 
}

das dafür sorgt, dass nur der Owner das Dings fahren darf.
Da musst du eben andere Bedingungen abfragen drinne, z.B.
Code:
if( !(llSameGroup(sitting)))
{
    ....
    llUnsit(sitting);
    ....
}

oder das Dings mit dem Unsit halt ganz abschalten und jeden drauf lassen.
 

Users who are viewing this thread

Zurück
Oben Unten