Spieler wird nicht ejected aus Car

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
  • Hey,


    ich habe ein Problem : Spieler werden nicht ejected aus deren Cars z.B wenn sie kein Führerschein haben oder dazu allgemein nicht berechtigt sind.


    Beispiel Code :



    Unter dem Callback :
    public OnPlayerStateChange(playerid, newstate, oldstate)

  • OnPlayerStateChange:
    for(new i=0; i<sizeof(FahrschulCar); i++)
    {
    if(vehicleid!=FahrschulCar[i])continue;
    if(InFahrschule[playerid])
    {
    if(FahrschulCP[playerid]==0)
    {
    //Starten
    SetPlayerCheckpoint(playerid, FahrschulCPs[FahrschulCP[playerid]][cpx], FahrschulCPs[FahrschulCP[playerid]][cpy], FahrschulCPs[FahrschulCP[playerid]][cpz], 4.0);
    JobCar[playerid]=vehicleid;
    PlayerTextDrawShow(playerid, TachoTd[playerid][0]);
    PlayerTextDrawShow(playerid, TachoTd[playerid][1]);
    PlayerTextDrawShow(playerid, TachoTd[playerid][2]);
    ClearPlayerChat(playerid);
    ClearPlayerChat(playerid);
    SendClientMessage(playerid, HBLAU, "* Die Fahrstunde hat begonnen. Bitte achte unten Links auf die Karte, dort wird dein Checkpoint angezeigt.");
    SendClientMessage(playerid, HBLAU, "* Fahre alle Checkpoints ab, und achte das dein Tempomat nicht mehr als 80 km/h anzeigt!");
    SendClientMessage(playerid, HBLAU, "* Du darfst innerhalb der Stadt max. 80 KM/H fahren. Außerhalb begrenzt sich die Geschwindigkeit auf 110 KM/H");
    SendClientMessage(playerid, HBLAU, "* Es ist Pflicht die rechte Fahrspur zu benutzen!");
    spv(playerid,"TachoTimerID",SetTimerEx("TachoUpdate", 200, true, "i", playerid));
    }
    return 1;
    }
    }


    OnPlayerEnterVehicle:
    for(new i=0; i<sizeof(FahrschulCar); i++)
    {
    if(vehicleid!=FahrschulCar[i])continue;
    if(!InFahrschule[playerid])
    {
    SendClientMessage(playerid,GRAU,"Du hast keine Schlüssel für dieses Fahrzeug!");
    TogglePlayerControllable(playerid, false);
    TogglePlayerControllable(playerid, true);
    break;
    }
    }


    So kommt man erst gar nicht in das Fahrzeug, und erst wenn das Einsteigen fertig ist, wird der Checkpoint erstellt.

  • Wenn du einen kurzen Lag hast, dann bringt es dir nicht wirklich was, da du dann trotzdem ins Fahrzeug reingelangst.

    Das stimmt, ist aber der Ausnahmefall.
    Wenn man es wirklich ganz korrekt machen will, dann muss man es so machen (so habe ich es seinerzeit auf meinem Server gehabt, das hat nie zu unerlaubter Nutzung geführt).
    1. OnPlayerEnterVehicle - Methode
    2. Bei OnPlayerStateChange ebenfalls prüfen und dann mit RemovePlayerFromVehicle
    3. Zusätzlich per Timer prüfen, falls nicht erlaubt, das Fahrzeug an die Stelle erneut spawnen



    Lieber bei OnPlayerStateChange irgendwie.

    Alleine würde ich das auch nicht nutzen, das klappt auch nicht immer. Auf Grund dessen habe ich damals mein System auf'm Server wie oben beschrieben umgebaut.


    @Drai
    Du könntest es also zur Sicherheit noch so machen:
    for(new i=0; i<sizeof(FahrschulCar); i++)
    {
    if(vehicleid!=FahrschulCar[i])continue;
    if(InFahrschule[playerid])
    {
    if(FahrschulCP[playerid]==0)
    {
    //Starten
    SetPlayerCheckpoint(playerid, FahrschulCPs[FahrschulCP[playerid]][cpx], FahrschulCPs[FahrschulCP[playerid]][cpy], FahrschulCPs[FahrschulCP[playerid]][cpz], 4.0);
    JobCar[playerid]=vehicleid;
    PlayerTextDrawShow(playerid, TachoTd[playerid][0]);
    PlayerTextDrawShow(playerid, TachoTd[playerid][1]);
    PlayerTextDrawShow(playerid, TachoTd[playerid][2]);
    ClearPlayerChat(playerid);
    ClearPlayerChat(playerid);
    SendClientMessage(playerid, HBLAU, "* Die Fahrstunde hat begonnen. Bitte achte unten Links auf die Karte, dort wird dein Checkpoint angezeigt.");
    SendClientMessage(playerid, HBLAU, "* Fahre alle Checkpoints ab, und achte das dein Tempomat nicht mehr als 80 km/h anzeigt!");
    SendClientMessage(playerid, HBLAU, "* Du darfst innerhalb der Stadt max. 80 KM/H fahren. Außerhalb begrenzt sich die Geschwindigkeit auf 110 KM/H");
    SendClientMessage(playerid, HBLAU, "* Es ist Pflicht die rechte Fahrspur zu benutzen!");
    spv(playerid,"TachoTimerID",SetTimerEx("TachoUpdate", 200, true, "i", playerid));
    }
    return 1;
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,GRAU,"Du hast keine Schlüssel für dieses Fahrzeug!");
    break;
    }
    }