Problem beim eigenen /auto System

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. Unzwar sollen V.I.P's auf meinem Server ein eigenes /Auto haben. Das heißt ein Auto das nur sie fahren können und mit dem Befehl /auto rufen können.
    So, folgendes Problem. Jeder kann mit dem Auto's fahren. Auch die, denen das Auto nicht gehört. Sie bekommen zwar eine Nachricht, das ihnen das Auto nicht gehört, können aber trotzdem fahren. :(
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(vehicleid == Slashauto[i]){
    SetTimerEx("kickausmcar", 100, false, "i", playerid);
    SendClientMessage(playerid, Rot, "Dieses Auto gehört nicht dir!");
    } else if(vehicleid == Slashauto[playerid]) {
    }
    }
    TextDrawShowForPlayer(playerid, carhealth[playerid]); //ist hier irrelevant.. D:
    return 1;
    }


    // Habe es doch alleine hinbekommen indem ich SetPlayerPos und GetPlayerPos durch den Timer ersetzt habe.

    "when you got nothing to lose, then baby you got it all" - OPERATOR

    Einmal editiert, zuletzt von XHSD ()

  • Benutze RemovePlayerFromVehicle(playerid); um jemand aus dem Auto zu entfernen.
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(vehicleid == Slashauto[i]){
    SetTimerEx("kickausmcar", 100, false, "i", playerid);
    SendClientMessage(playerid, Rot, "Dieses Auto gehört nicht dir!");
    RemovePlayerFromVehicle(playerid);
    } else if(vehicleid == Slashauto[playerid]) {
    }
    }
    TextDrawShowForPlayer(playerid, carhealth[playerid]); //ist hier irrelevant.. D:
    return 1;
    }

  • Leider kann man RemovePlayerFromVehicle unter OnPlayerEnterVehicle nicht benutzen, da er noch in keinem Fahrzeug sitzt ;)

  • Porte den Spieler auf die Position, auf der er gerade ist. Das sollte den Prozess beenden. Wenn nicht freezen.

    ▬|██████|▬
    This is Nudelholz.
    Copy Nudelholz in your Signatur
    to make better Kuchens
    and other Teigprodukte!

  • TogglePlayerControllable(playerid,1);
    Damit hinderst du den Spieler am betreten des Fahrzeugs.

  • ElDiabolo Danke! Das hat geholfen! :)
    Habe Leider immernoch ein Problem. Jetzt kann auch kein Beifahrer mehr einsteigen. Wieso? :/ Habe doch else if(GetPlayerVehicleSeat(playerid) > 0) 
    Rein geklatscht.


    {


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))
    continue;
    if(vehicleid == Slashauto[playerid])
    {
    } else if(vehicleid == Slashauto[i]){
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    SetPlayerPos(playerid, X, Y, Z);
    SendClientMessage(playerid, Rot, "Dieses Auto gehört nicht dir!");
    } else if(GetPlayerVehicleSeat(playerid) > 0)
    {
    }
    }
    TextDrawShowForPlayer(playerid, carhealth[playerid]);
    return 1;
    }

    "when you got nothing to lose, then baby you got it all" - OPERATOR

  • Die Reihenfolge spielt hier auch eine Rolle. Mach es so:
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(vehicleid == Slashauto[playerid])
    {
    }
    else if(ispassenger)
    {
    }
    else if(vehicleid == Slashauto[i])
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    SetPlayerPos(playerid, X, Y, Z);
    SendClientMessage(playerid, Rot, "Dieses Auto gehört nicht dir!");
    }
    }
    TextDrawShowForPlayer(playerid, carhealth[playerid]);
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Wofür die schleife?
    Kannst dort doch playerid verwenden.


    Naja, an sich ist es nicht falsch, die Schleife ist notwendig, wenn auch an der Stelle vielleicht etwas ungeschickt gesetzt.


    So wäre es geschickter:
    {
    if(vehicleid == Slashauto[playerid])
    {
    //nix
    }
    else if(ispassenger)
    {
    //nix
    }
    else
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(vehicleid == Slashauto[i])
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    SetPlayerPos(playerid, X, Y, Z);
    SendClientMessage(playerid, Rot, "Dieses Auto gehört nicht dir!");
    }
    }
    }
    TextDrawShowForPlayer(playerid, carhealth[playerid]);
    return 1;
    }


    Aber gut, das sind Kleinigkeiten.