• Das Forum, in dem es wirklich um Opensim geht!
  • Du willst Fakten und kein Bla Bla? Meld Dich an!
  • Beachte unseren Event Kalendar!
Hallo, Gast! Anmelden Registrieren


Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Title: Ein einfaches Fahrscript mit reichlich Kommentaren.
Linearer Modus
#1
1
Better response on post Ein einfaches Fahrscript mit reichlich Kommentaren.
PHP-Code:
string  animation           "sit";                    // Name der Animation, muss im Prim sein, oder eine UUID einfügen in Zeile 71 ist das SitTarget
list    geschwindigkeiten   = [5.015.030.0];        // Die Geschwindigkeiten die Anzahl legt automatisch die Anzahl der Gänge fest
float   rueckwaerts         = -5.0;                     // Geschwindgikeit im Rückwärtsgang
list    kurvenbewegung      = [0.50.20.05];         // Wie stark die Kurve wird. Jeder Gang erhält eigenen Wert. Ist geschwindigkeitsadaptiv, siehe controll Event unter nach rechts, nach links

//////////////// hier muss nix gefummelt werden :)   
key     avatar;                                         // Key des Avatars
integer gang;                                           // aktueller Gang

//////////////////////////////////////////////////
init()
// Setzen der physikalischen Parameter, hier könnt ihr die Fahreigenschaften festlegen
{
    llSetVehicleType(VEHICLE_TYPE_CAR);
            
    
// linear motor geradeaus Motor
    llSetVehicleVectorParamVEHICLE_LINEAR_MOTOR_OFFSET, <0.00.00.0> );      // Ort des Antriebs, realtiv zum Massenmittelpunkt (lGetCenterOfMass( );)
    llSetVehicleVectorParamVEHICLE_LINEAR_FRICTION_TIMESCALE, <502020> );  //Reibung, auch Bremswirkung
    llSetVehicleVectorParamVEHICLE_LINEAR_MOTOR_DIRECTION, <000> );        // Lineare Geschwindigkeit. Wird hier nur gesetzt, wenn das Fahrzeug direkt losfahren soll
    llSetVehicleFloatParamVEHICLE_LINEAR_MOTOR_TIMESCALE);                 // Zeit bis zur maximalen Geschwindigkeit
    llSetVehicleFloatParamVEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE60 );        //Zeit für den Abbau der Antriebskraft (exponentiell)
    
    
// agular motor kurven Motor
    llSetVehicleVectorParamVEHICLE_ANGULAR_MOTOR_DIRECTION, <000> );      // Winkelgeschwindigkeit. Wird hier nur gesetzt, wenn das Fahrzeug direkt losfahren soll
    llSetVehicleFloatParamVEHICLE_ANGULAR_MOTOR_TIMESCALE0.3 );                 // Zeit bis zur maximalen Geschwindigkeit
    llSetVehicleFloatParamVEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE0.4);       //Zeit für den Abbau der Antriebskraft (exponentiell)
    llSetVehicleVectorParamVEHICLE_ANGULAR_FRICTION_TIMESCALE, <1,0.5,1>);    ////Reibung, auch Bremswirkung
    
    
// hover  Schweben
    llSetVehicleFloatParamVEHICLE_HOVER_HEIGHT);                          //Schwebehöhe, Auf die zugehörigen Flags achten
    llSetVehicleFloatParamVEHICLE_HOVER_EFFICIENCY);                      // Schieberegler zwischen 0 (federnd) und 1 (kritisch gedämpft) Schwebeverhalten
    llSetVehicleFloatParamVEHICLE_HOVER_TIMESCALE10 );                      // Zeitspanne, bis das Fahrzeug seine Schwebehöhe erreicht
    llSetVehicleFloatParamVEHICLE_BUOYANCY.977 );                           // Schieberegler zwischen -1 (Doppelgravitation) und 1 (volle Antigravitation) NIEMALS mit llSetBuoyancy mischen
        
    
// linear deflection  Ausrichtung, wie das Fahrzeug versucht sich in seine Bewegungsrichtung auszurichten
    llSetVehicleFloatParamVEHICLE_LINEAR_DEFLECTION_EFFICIENCY0.2 );        // Schieberegler zwischen 0 (keine Ausrichtung) und 1 (maximale Stärke)
    llSetVehicleFloatParamVEHICLE_LINEAR_DEFLECTION_TIMESCALE0.5 );         // exponentielle Zeitskala für das Fahrzeug, um die volle Ausrichtung zu erreichen
        
    
// angular deflection Ausrichtung, wie das Fahrzeug versucht sich in seine Bewegungsrichtung auszurichten
    llSetVehicleFloatParamVEHICLE_ANGULAR_DEFLECTION_EFFICIENCY1);          // Schieberegler zwischen 0 (keine Ausrichtung) und 1 (maximale Stärke)
    llSetVehicleFloatParamVEHICLE_ANGULAR_DEFLECTION_TIMESCALE0.3);         // exponentielle Zeitskala für das Fahrzeug, um die volle Ausrichtung zu erreichen
            
    
// vertical attractor Aufrichter, wie das Fahrzeug aus der Kurvenneigung zurückkommt
    llSetVehicleFloatParamVEHICLE_VERTICAL_ATTRACTION_EFFICIENCY0.2 );      // Schieberegler zwischen 0 (federnd) und 1 (kritisch gedämpft) Anziehung der Fahrzeug-Z-Achse zur Welt-Z-Achse (vertikal)
    llSetVehicleFloatParamVEHICLE_VERTICAL_ATTRACTION_TIMESCALE5.0 );       // exponentielle Zeitskala für das Fahrzeug, um seine Z-Achse an der Welt-Z-Achse (vertikal) auszurichten
         
    
// banking  Kurvenneigung
    llSetVehicleFloatParamVEHICLE_BANKING_EFFICIENCY1.0);                   // Schieberegler zwischen -1 (aus Kurven herausgeneigt), 0 (keine Neigung) und +1 (in Kurven hineingeneigt)
    llSetVehicleFloatParamVEHICLE_BANKING_MIX1.0);                          // Schieberegler zwischen 0 (statisches Banking) und 1 (dynamisches Banking)
    llSetVehicleFloatParamVEHICLE_BANKING_TIMESCALE0.5);                    // exponentielle Zeitspanne, bis das Bankingverhalten seine volle Wirkung entfaltet
        
        
    
// default rotation of local frame   Fahrtrichtung hier positive x-Achse
    llSetVehicleRotationParamVEHICLE_REFERENCE_FRAME,<0.0000.0000.0001.000>);  // Fahrtrichtung anstelle des Quaternions kann auch llEuler2Rot(<0,0,0>*DEG_TO_RAD) geschrieben werden
        
    
// alle flags entfernen, macht Sinn wenn ihr das Script in ein vorhandenes Fahrzeug kopiert
    llRemoveVehicleFlagsVEHICLE_FLAG_NO_DEFLECTION_UP                     // Dieses Flag verhindert eine lineare Ablenkung parallel zur Welt-Z-Achse. Dies ist nützlich, um zu verhindern, dass Bodenfahrzeuge mit großer linearer Ablenkung, wie z. B. Autoscooter, ihre lineare Ablenkung verlieren und in den Himmel klettern.
                          VEHICLE_FLAG_HOVER_WATER_ONLY                   // Ignoriert die Geländehöhe beim Schweben.
                          VEHICLE_FLAG_HOVER_TERRAIN_ONLY                 // Ignoriert die Wasserhöhe beim Schweben.
                          VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT                // Schwebt auf globaler Höhe statt auf Höhe über dem Boden oder Wasser.
                          VEHICLE_FLAG_HOVER_UP_ONLY                      // Schweben drückt nicht nach unten. Verwende dieses Flag für schwebende Fahrzeuge, die über ihre Schwebehöhe springen können sollen.
                          VEHICLE_FLAG_LIMIT_MOTOR_UP                     // Verhindert, dass Bodenfahrzeuge in den Himmel steigen. Diese Markierung hat einen subtilen Effekt in Verbindung mit einer Schräglage: Die Schräglage nimmt ab, sobald das Fahrzeug keine Kollisionen mehr erfährt. Die Abklingzeit entspricht der von VEHICLE_BANKING_TIMESCALE. Dies soll verhindern, dass Bodenfahrzeuge während des Sprungs lenken.
                          VEHICLE_FLAG_CAMERA_DECOUPLED                   // Lässt die Mausblick-Kamera unabhängig vom Fahrzeug rotieren. Standardmäßig rotiert die Mausblick-Kamera des Clients mit dem Fahrzeug. Ist dieses Flag jedoch gesetzt, ist die Kamerarichtung unabhängig von der Fahrzeugrotation.
                          VEHICLE_FLAG_LIMIT_ROLL_ONLY                    // Für Fahrzeuge mit vertikalem Attraktor, die steigen/tauchen können sollen, beispielsweise Flugzeuge, die die Schräglagefunktion nutzen möchten.
                          VEHICLE_FLAG_MOUSELOOK_STEER                    // Steuert das Fahrzeug mit der Maus. Verwende dieses Flag, damit der Winkelmotor versucht, das Fahrzeug so zu drehen, dass seine lokale X-Achse in die gleiche Richtung zeigt wie die clientseitige Kamera.
                          VEHICLE_FLAG_MOUSELOOK_BANK                     // Wie oben, basiert aber auf der Neigung. Es ordnet Links-Rechts-Bewegungen der Client-Kamera (auch als „Gieren“ bezeichnet) Rotationen um die lokale x-Achse des Fahrzeugs zu. ( Für Flugzeuge genial)
                          );
    
    
    
// hier die benötigten flags setzen Erklärung siehe oben
    llSetVehicleFlagsVEHICLE_FLAG_NO_DEFLECTION_UP 
                        
VEHICLE_FLAG_LIMIT_ROLL_ONLY 
                        
VEHICLE_FLAG_HOVER_UP_ONLY 
                        
VEHICLE_FLAG_LIMIT_MOTOR_UP);
}
default
{
    state_entry()
    //start des Scriptes, nicht mit Objekt wird gerezt zu verwechseln
    {
        init();
        llSitTarget(<0,0,1.0>, llEuler2Rot(<0,0,0>*DEG_TO_RAD));  // darf nicht komplett Null sein, sonst kommt kein llAvatarOnSitTarget
    }
    changed(integer change
    //Es verändert sich etwas an oder im Objekt
    {
        if (change CHANGED_LINK)  // Ein Avatar der sich setzt oder aufsteht wird mit dem Objekt ver- oder entlinkt
        {
            avatar llAvatarOnSitTarget();
            if ( avatar != NULL_KEY)  // avatar sitzt
            {
                llRequestPermissions(avatarPERMISSION_TAKE_CONTROLS PERMISSION_TRIGGER_ANIMATION);  // Wenn der Avatar in dem Menü antowrtet wird das run_time_permissions Event ausgelöst
            }
            else //Avatar steht auf
            {
                llSetStatus(STATUS_PHYSICSFALSE);  // Parkbremse anziehen :))
            }
        }
    }
    run_time_permissions(integer perm
    // Zugriffsrechte für den Avatar 
    {
        if (perm PERMISSION_TAKE_CONTROLS)  
        
// controls abfragen reicht, da für alle Rechte nur eine Anfrage gestellt wird
        {
            llTakeControls(CONTROL_FWD  // Pfeiltaste nach oben
            CONTROL_BACK              // Pfeiltaste nach unten
            CONTROL_DOWN              // Bild unten / page down
            CONTROL_UP                // Bild oben / page up
            CONTROL_RIGHT             // Shift + Pfeil rechts
            CONTROL_LEFT              // Shift + Pfeil links
            CONTROL_ROT_RIGHT         // Pfeil links
            CONTROL_ROT_LEFT          // Pfeil rechts
            TRUE                      // TRUE, wenn eine der definierten Taste ngedrückt wird, wird das controll event ausgelöst. FALSE, das control event wird nicht ausgelöst
            FALSE                     // FALSE, die normale Funktion der Taste(z.b. gehen) wird ausgeschaltet, TRUE, die normale Funktion wird ausgeführt
            );             
            llStartAnimation
(animation);
            llSetStatus(STATUS_PHYSICSTRUE);  // Bremse lösen //
        }
    }
    control(key idinteger levelinteger edge
    // wird eine Aktion mit den in llTakeControls festgelegten Tasten durchgeführt
    
        integer start level edge;           // Taste wird gedrückt
        integer end = ~level edge;            // Taste wird losgelassen
        integer held level & ~edge;           //Taste wird gedrückt gehalten
        integer untouched = ~(level edge);    // Taste ist nicht gedrückt, kann nur ausgewertet werden, wenn der Event durch eine andere Taste ausgelöst wurde
        
        vector speed 
= <0.00.00.0>;
        vector anglespeed = <0.00.00.>;

        if ((start held )& CONTROL_FWD)  // vorwärts
        {
            speed.llList2Float(geschwindigkeiten,gang);
        }
        else if ((start held) & CONTROL_BACK)   // rückwärts
        {
            gang 0;  // auf den ersten Gang zurück schalten
            speed.rueckwaerts;
        }
        
        
if ((start held) & CONTROL_ROT_LEFT)  // nach links
        {
            anglespeed.llList2Float(kurvenbewegunggang)* llList2Float(geschwindigkeitengang);
        }
        else if ((start held) & CONTROL_ROT_RIGHT)  // nach rechts
        {
            anglespeed.= -1.0 llList2Float(kurvenbewegunggang)* llList2Float(geschwindigkeitengang);
        }
        
        
if (start CONTROL_UP)  // gang hoch
        {
            if (gang llGetListLength(geschwindigkeiten)-1)
            {
                gang ++;
                llWhisper(0,(string) (gang+1) + " Gang eingelegt.");  // gang+1 weil der Listenindex bei Null beginnt, aber die Chat Ausgabe  mit Eins beginnnen soll
            }
        }
        else if (start CONTROL_DOWN)  //gang runter
        {
            if (gang >0)
            {
                gang--;
                llWhisper(0,(string) (gang+1) + " Gang eingelegt.");    // gang+1 weil der Listenindex bei Null beginnt, aber die Chat Ausgabe  mit Eins beginnnen soll
            }
        }
        // Motoren ansprechen
        llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION,speed);        // Linear Motor
        llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION,anglespeed);   // Kurven Motor
    }

 
Zitieren
  


Nachrichten in diesem Thema
Ein einfaches Fahrscript mit reichlich Kommentaren. - von Karsten Runningbear - 04-14-2025, 06:07 PM

Gehe zu:


Browsing: 1 Gast/Gäste