• 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.
Baumstrukturmodus
#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
#2
1
Better response on post RE: Ein einfaches Fahrscript mit reichlich Kommentaren.Achso, ich habe ganz vergessen zu schreiben, 

das Script ist für die UBode Physik gemacht.

Unter Bulletsim oder ODE wird es nicht funktionieren.
 
Zitieren
  


Gehe zu:


Browsing: 1 Gast/Gäste