Beim runterfallen vom Fahrzeug, Fahrzeug aufschließen

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Wie die Überschrift schon sagt, wie kann Ich überprüfen, ob der Spieler vom Fahrzeug gefallen ist?
    Zum Beispiel: Jemand schließt sein Fahrzeug ab und fällt vom Bike.
    Wie kann Ich das Fahrzeug dann aufschließen, wenn er runterfällt?


    Habe folgendes was nicht ganz so funktionieren möchte:

    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    new Vehicle = GetPlayerVehicleID(playerid);
    if(oldstate == PLAYER_STATE_DRIVER)
    {
    if(NormalLocked[Vehicle] == 1)
    {
    NormalLocked[Vehicle] = 0;
    }
    }
    return 1;
    }


    // Eingerückt.

  • Gib bitte mal ein besseres Beispiel, ich verstehe nicht ganz wie du das meinst.


    Ich sitze auf einem Motorrad und schließe es mit dem Befehl /lock ab.
    Andere Spieler können jetzt nicht mehr drauf, da das Fahrzeug abgeschlossen ist.
    Aber wenn Ich gegen die Wand fahre und vom Bike fliege / runterfalle, ist das Fahrzeug weiterhin abgeschlossen und keiner kann mehr drauf.
    Unter OnPlayerExitVehicle wird ja nur gezählt, wenn der Spieler freiwillig das Fahrzeug verlässt, indem Falle ist der Spieler aber rausgeflogen.

  • Dein Ansatz ist garnicht so verkehrt, allerdings hast du einen kleinen Denkfehler drinnen. Du möchtest die ID des Fahrzeuges ermitteln, in dem sich der Spieler befindet und anschließend fragst du ab, ob der Spieler sich vorher in einem Fahrzeug befunden hat. Das heißt also, der Spieler kann sich nicht in einem Fahrzeug befinden, wenn er sich vorher als Fahrer oder Beifahrer in einem Fahrzeug befand und er seine Position verändert hat.
    Um dein Vorhaben zu realisieren, musst du das letzte Fahrzeug des Spielers speichern, zum Beispiel so:


    new oldVehicle[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    oldVehicle[playerid] = 0;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    oldVehicle[playerid] = vehicleid;
    }


    Dann setzt du das entsprechend in deinem Ansatz um:


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(oldstate == PLAYER_STATE_DRIVER)
    {
    if(NormalLocked[oldVehicle[playerid]] == 1)
    {
    NormalLocked[oldVehicle[playerid]] = 0;
    //Hier natürlich daran denken, die Parameter des Fahrzeuges zu ändern, um es zu öffnen.
    }
    }
    return 1;
    }


    BlackLegend

  • Hier:



    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    new Vehicle = GetPlayerVehicleID(playerid);
    if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT)
    {
    if(NormalLocked[Vehicle] == 1)
    {
    NormalLocked[Vehicle] = 0;
    }
    }
    return 1;
    }

  • Dein Ansatz ist garnicht so verkehrt, allerdings hast du einen kleinen Denkfehler drinnen. Du möchtest die ID des Fahrzeuges ermitteln, in dem sich der Spieler befindet und anschließend fragst du ab, ob der Spieler sich vorher in einem Fahrzeug befunden hat. Das heißt also, der Spieler kann sich nicht in einem Fahrzeug befinden, wenn er sich vorher als Fahrer oder Beifahrer in einem Fahrzeug befand.
    Um dein Vorhaben zu realisieren, musst du das letzte Fahrzeug des Spielers speichern, zum Beispiel so:


    Huch, danke dir.
    War auch schon schockiert wieso es nicht funktionieren will.
    #Kann closed werden.

    /e
    Komisch, funktioniert immer noch nicht.


    Variable definieren
    new PlayerOldVehicle[MAX_PLAYERS];


    OnPlayerEnterVehicle
    PlayerOldVehicle[playerid] = vehicleid;


    OnPlayerStateChange
    new Vehicle = PlayerOldVehicle[playerid];
    if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT)
    {
    if(NormalLocked[Vehicle] == 1)
    {
    NormalLocked[Vehicle] = 0;
    }
    }
    return 1;


    /e3
    War ein Fehler von meiner Seite, funktioniert nun. Danke euch beiden ^^