Problem beim Race erstellen

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
  • Guten Abend,


    ich möchte mit einem Befehl ein Air-Race erstellen, jedoch fehlen mir die nötigen Kenntnisse wie ich mehrere Checkpoints hintereinander machen (und dass die Vorherigen wieder Verschwinden).
    Bisher habe ich nur:

    if (strcmp("/start", cmdtext, true, 10) == 0)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2096.2998046875, 1285.2998046875, 83.300003051758, 2096.2998046875, 1285.2998046875, 83.300003051758, 4);
    return 1;
    }


    Jedoch ist das nicht das was ich möchte, und hier bleibe ich auch hängen...
    Wie kann ich nun machen,
    dass ich in diesem Checkpoint fliege, und danach verschwindet der Checkpoint, und der nächste taucht auf?
    Sollte ich das mit einer If und Else abfrage machen?
    Und wie mache ich die am Sinnvollsten?


    Könntet ihr mir dabei etwas Helfen?
    Ich bin euch schon mal sehr Dankbar :)


    Mit freundlichen Grüßen
    Chris.Stone

  • Guten Abend,
    da du mit RaceCheckpoints arbeitest
    Wird der Public OnPlayerEnterRaceCheckpoint aufgerufen sobald der Spieler den Checkpoint betritt.
    Da musst du dann deine Abfrage rein machen ob der Spieler bei dem und dem Rennen ist.
    Dann fragst du ab bei welchem Checkpoint er bereits ist.

  • Nein, der Befehl muss weiterhin außerhalb des Public's stehen bleiben.
    Du erstellst eine Variable z.B.
    new Race[MAX_PLAYERS]; //Ob er ein Rennen fährt.
    new RaceCP[MAX_PLAYERS]; //Bei welchem Checkpoint er ist.


    Bei deinem Befehl musst du dann
    die Variable Race auf 1 setzen so



    if (strcmp("/start", cmdtext, true, 10) == 0)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2096.2998046875, 1285.2998046875, 83.300003051758, 2096.2998046875, 1285.2998046875, 83.300003051758, 4);
    Race[playerid] = 1
    return 1;
    }


    Unter OnPlayerEnterRaceCheckpoint
    Muss du dann abfragen ob der Spieler das Race auf 1 hat


    Function OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Race[playerid] == 1)
    {
    if(RaceCP[playerid] == 1)
    {
    // Der Naächste Checkpoint.
    RaceCP ++; //Immer 1 hoch setzen pro checkpoint
    }
    }
    return 1;
    }

  • Sollte das dann so aussehen?


    Ganz Oben jedoch noch unter #include <a_samp>, Habe ich jetzt auch noch:

    new Race[MAX_PLAYERS];
    new RaceCP[MAX_PLAYERS];


    Bei OnPlayerCommandText:

    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/start", cmdtext, true, 10) == 0)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2096.2998046875, 1285.2998046875, 83.300003051758, 2096.2998046875, 1285.2998046875, 83.300003051758, 4);
    Race[playerid] = 1
    return 1;
    }
    return 0;
    }


    und bei OnPlayerEnterRaceCheckpoint habe ich:

    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    Function OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Race[playerid] == 1)
    {
    if(RaceCP[playerid] == 1)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    RaceCP 1;
    }
    }
    return 1;
    }
    return 1;
    }


    Jedoch Schätze ich dass ein "return 1;" zuviel ist.


    jedoch sollte das so passen oder?

  • public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Race[playerid] == 1)
    {
    if(RaceCP[playerid] == 1)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    RaceCP[playerid] = 1; //Das playerid nicht vergessen und das = auch nicht
    }
    }
    return 1;
    }


    so ohne Function ....
    Das ist das selbe

  • Jetzt habe ich 4 Errors



    Ja okay mit den Zeilen ist es jetzt schwer zu sehen ;D


    1 error



    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(130) : error 001: expected token: ";", but found "return"
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(171) : warning 217: loose indentation
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.

  • public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/start", cmdtext, true, 10) == 0)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2096.2998046875, 1285.2998046875, 83.300003051758, 2096.2998046875, 1285.2998046875, 83.300003051758, 4);
    Race[playerid] = 1;//Das Simikolion nicht vergessen
    return 1;
    }
    return 0;
    }


    //EDIT Fehler gefunden

  • Einmal Hier



    if (strcmp("/start", cmdtext, true, 10) == 0)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2096.2998046875, 1285.2998046875, 83.300003051758, 2096.2998046875, 1285.2998046875, 83.300003051758, 4);
    (129) Race[playerid] = 1
    (130) return 1;
    (131)}
    return 0;
    }

    Und:

    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Race[playerid] == 1)
    {
    if(RaceCP[playerid] == 1)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    Race[playerid] = 1;
    }
    (172) }
    (171)return 1;
    }


    Die beiden return 1;
    Geben einen fehler aus.

  • Fehler 1:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/start", cmdtext, true, 10) == 0)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2096.2998046875, 1285.2998046875, 83.300003051758, 2096.2998046875, 1285.2998046875, 83.300003051758, 4);
    Race[playerid] = 1;//Das Simikolion nicht vergessen
    return 1;
    }
    return 0;
    }


    Fehler 2:
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Race[playerid] == 1)
    {
    if(RaceCP[playerid] == 1)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    Race[playerid] = 1;
    return 1;
    }
    }
    return 1;
    }

  • Hmm..
    Ich hab iwas Falsch ;(



    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Race[playerid] == 1)
    {
    if(RaceCP[playerid] == 1)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    Race[playerid] = 1;
    return 1;
    else if(RaceCP == 2)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    return 1;
    }
    else if(RaceCP == 3)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2179.1072, 1285.8127, 44.0660, 2179.1072, 1285.8127, 44.0660, 4);
    return 1;
    }
    }
    }
    return 1;
    }


    Und die Gehler dazu:

    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : warning 225: unreachable code
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : warning 217: loose indentation
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : error 029: invalid expression, assumed zero
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : warning 215: expression has no effect
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : error 001: expected token: ";", but found "if"
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : error 033: array must be indexed (variable "RaceCP")
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    170 ist diese zeile:

    else if(RaceCP == 2)

  • Wenn ich die [playerid] hinzufüge bleiben 2 Errors in der Selben zeile übrig:



    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : warning 225: unreachable code
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : warning 217: loose indentation
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : error 029: invalid expression, assumed zero
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : warning 215: expression has no effect
    C:\Users\Christian\Desktop\SAMP (1)\gamemodes\testscript.pwn(170) : error 001: expected token: ";", but found "if"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.


    Sieht jetzt so aus:


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Race[playerid] == 1)
    {
    if(RaceCP[playerid] == 1)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    Race[playerid] = 1;
    return 1;
    else if(RaceCP[playerid] == 2)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    return 1;
    }
    else if(RaceCP[playerid] == 3)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2179.1072, 1285.8127, 44.0660, 2179.1072, 1285.8127, 44.0660, 4);
    return 1;
    }
    }
    }
    return 1;
    }

  • Es it ein } zu viel.
    Richtig:

    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Race[playerid] == 1)
    {
    if(RaceCP[playerid] == 1)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    Race[playerid] = ++;
    return 1;
    else if(RaceCP[playerid] == 2)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2180.3994140625, 1286.099609375, 48, 2180.3994140625, 1286.099609375, 48, 4);
    Race[playerid] = ++;
    return 1;
    }
    else if(RaceCP[playerid] == 3)
    {
    SetPlayerRaceCheckpoint(playerid, 3, 2179.1072, 1285.8127, 44.0660, 2179.1072, 1285.8127, 44.0660, 4);
    Race[playerid] = ++;
    return 1;
    }
    }
    return 1;
    }