Checkpoint Problem

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
  • Heyho allerseits ;)


    Ich habe ein kleines Checkpoint Problem und zwar möchte ich eine Art Fahrschule absolvieren doch hier kommt es zu Komplikationen. Ich beginne die Prüfungsfahrt und setzte mich in das Fahrzeug dann zeigt es mir wie es sein soll den 1. Checkpunkt an. Durch den fahre ich durch doch dann wird der 2. Checkpoint übersprungen und ich gehe direkt zum 3.


    Hier ist mein pawno auszug. Hoffentlich könnt ihr mir helfen.

    new Checkpoint[MAX_PLAYERS];


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate==PLAYER_STATE_DRIVER)
    {
    for(new i=0; i<sizeof(Fahrcar1); i++)
    {
    if(GetPlayerVehicleID(playerid)==Fahrcar1[i])
    {
    if(GetPVarInt(playerid,"APrüfung")!=1)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Du machst gerade keine Fahrschul-Prüfung.");
    }
    else
    {
    SetPlayerCheckpoint(playerid,1039.9619,-1459.7092,13.4995,5);
    SendClientMessage(playerid,WEISS,"Es geht los.");
    Checkpoint[playerid] = 1;
    }
    }
    }
    }
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    if(Checkpoint[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1061.3191,-1346.2826,13.2653,5.0);
    Checkpoint[playerid] = 2;
    }
    if(Checkpoint[playerid] == 2)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1218.7820,-1162.5214,23.0928,5.0);
    Checkpoint[playerid] = 3;
    }
    if(Checkpoint[playerid] == 3)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1202.6910,-878.2720,42.8365,5.0);
    Checkpoint[playerid] = 4;
    }
    return 1;
    }


    Vielen Dank
    Ping

    Einmal editiert, zuletzt von Ping ()

  • Du kannst das DisablePlayerCheckpoint weglassen, das geht auch ohne. Wenn er reinfährt setzt er einfach einen neuen und der alte verschwindet automatisch.

    Jens ralfts! Ich phillip gleich aus!

  • public OnPlayerEnterCheckpoint(playerid)
    {
    if(Checkpoint[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1061.3191,-1346.2826,13.2653,5.0);
    Checkpoint[playerid] = 2;
    }
    if(Checkpoint[playerid] == 2)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1218.7820,-1162.5214,23.0928,5.0);
    Checkpoint[playerid] = 3;
    }
    if(Checkpoint[playerid] == 3)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1202.6910,-878.2720,42.8365,5.0);
    Checkpoint[playerid] = 4;
    }
    return 1;
    }
    Der Code läuft auch in einem Rutsch durch
    Du gehst in die erste If Abfrage und setzt den Wert auf 2. Dann wird die If-Bedingung beendet.
    Jetzt wird geschaut ob der Wert 2 ist.Das stimmt natürlich,da du ihn zuvor in auf 2 gesetzt hast. Wir gehen rein in die 2. Bedingung und setzen den Wert auf 3.
    Jetzt läuft das immer so weiter ...
    Entweder du machst anstatt if,if if ein if,else if,else if usw oder machst am Ende jeder If-Bedingung ein return.
    Übrigens ist diese Methode der Checkpoint Erstellung eine Katastrophe.
    Versuch es mal lieber so:
    http://bit.ly/lj4FPX