Problem mit Race Checkpoints

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
  • Nabend Community!
    Ich habe ein Problem, und zwar wenn ich im ersten Checkpoint rein fliege/fahre passiert garnix.
    Ich Habe 30 Checkpoints und ich denke es liegt an OnPlayerEnterRaceCheckpoint.


    Hier das wird beim "/kaufen" command gemacht. (wegen einer Flugschule)
    SetPlayerRaceCheckpoint(playerid, 3,fsCP[0][fx],fsCP[0][fy],fsCP[0][fz], fsCP[1][fx],fsCP[1][fy],fsCP[1][fz], 10);



    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(Prufung[playerid] == 1)
    {
    new cID = GetPVarInt(playerid, "fCP");
    if(IsPlayerInRangeOfPoint(playerid, 5, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]))
    {
    cID++;
    if(cID >= sizeof(fsCP))
    {
    SetPVarInt(playerid, "fCP", 0);
    new string[128];
    format(string,128,"{C8C8C8}Du hast den Flugschein erfolgreich {41FF00}bestanden.");
    DestroyVehicle(GetPVarInt(playerid,"Flugzeug"));
    SetPlayerPos(playerid,415.1635,2535.5076,19.1484);
    SetPlayerVirtualWorld(playerid,0);
    Prufung[playerid] = 0;
    Flugschein[playerid] = 1;
    }
    else
    {
    SetPVarInt(playerid, "fCP", cID);
    SetPlayerRaceCheckpoint(playerid, 3, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], 10);
    }
    }
    return 1;
    }
    DisablePlayerRaceCheckpoint(playerid);
    return 1;
    }

  • Debugge es mal so:
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    printf("Prüfung: %d", Prufung[playerid]);
    if(Prufung[playerid] == 1)
    {
    new cID = GetPVarInt(playerid, "fCP");
    printf("cID: %d /Range: %d", cID, IsPlayerInRangeOfPoint(playerid, 5, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]));
    if(IsPlayerInRangeOfPoint(playerid, 5, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]))
    {
    cID++;
    if(cID >= sizeof(fsCP))
    {
    printf("Ende");
    SetPVarInt(playerid, "fCP", 0);
    new string[128];
    format(string,128,"{C8C8C8}Du hast den Flugschein erfolgreich {41FF00}bestanden.");
    DestroyVehicle(GetPVarInt(playerid,"Flugzeug"));
    SetPlayerPos(playerid,415.1635,2535.5076,19.1484);
    SetPlayerVirtualWorld(playerid,0);
    Prufung[playerid] = 0;
    Flugschein[playerid] = 1;
    }
    else
    {
    printf("Nächster: %d", cID);
    SetPVarInt(playerid, "fCP", cID);
    SetPlayerRaceCheckpoint(playerid, 3, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], 10);
    }
    }
    return 1;
    }
    DisablePlayerRaceCheckpoint(playerid);
    return 1;
    }


    Falls Range 0 ist, dann erhöhe mal die 5 beim Umkreis von IsPlayerInRangeOfPoint.

  • Ah Danke, ich hab aber noch ein Problem.
    Diese Checkpoint stehen ganz anders als ich sie hin gestellt habe die verdrehen sich einfach.
    BsP: Ich fliege gerade aus aber der Checkpoint ist so hin gestellt als wenn ich von Links/Rechts komme.
    Und der Letzte Checkpoint den kann ich nicht abfliegen der tut davor schon abbrechen.
    Das heißt bis 29 Checkpoints kommt er.
    Haste da eventuell auch noch eine Lösung für?

  • Das liegt daran, dass du den nächsten Checkpoint auch angeben musst, damit die Richtung passt:
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    printf("Prüfung: %d", Prufung[playerid]);
    if(Prufung[playerid] == 1)
    {
    new cID = GetPVarInt(playerid, "fCP");
    printf("cID: %d /Range: %d", cID, IsPlayerInRangeOfPoint(playerid, 10, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]));
    if(IsPlayerInRangeOfPoint(playerid, 10, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]))
    {
    cID++;
    if(cID > sizeof(fsCP))
    {
    printf("Ende");
    SetPVarInt(playerid, "fCP", 0);
    new string[128];
    format(string,128,"{C8C8C8}Du hast den Flugschein erfolgreich {41FF00}bestanden.");
    DestroyVehicle(GetPVarInt(playerid,"Flugzeug"));
    SetPlayerPos(playerid,415.1635,2535.5076,19.1484);
    SetPlayerVirtualWorld(playerid,0);
    Prufung[playerid] = 0;
    Flugschein[playerid] = 1;
    }
    else
    {
    printf("Nächster: %d", cID);
    SetPVarInt(playerid, "fCP", cID);
    if(cID < sizeof(fsCP)-1) SetPlayerRaceCheckpoint(playerid, 3, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID+1][fx], fsCP[cID+1][fy],fsCP[cID+1][fz], 10);
    else SetPlayerRaceCheckpoint(playerid, 4, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], 10);
    }
    }
    return 1;
    }
    DisablePlayerRaceCheckpoint(playerid);
    return 1;
    }


    Das mit dem letzten Checkpoint war wegen dem >=, das musste nur > sein.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: Fehler behoben

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wenn ich das jetzt richtig habe, müsstest du doch einfach mal +1 anstatt -1 hinschreiben, oder?

  • Die prints hatte ich noch drinne.
    Durch Checkpoint 19 kann man nicht mehr durchfliegen.
    Da ändert sich die Range wieder auf 0.


  • Ok. Um nicht unnötig viel Radius um die anderen Checkpoints zu prüfen, schreib es so:
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    printf("Prüfung: %d", Prufung[playerid]);
    if(Prufung[playerid] == 1)
    {
    new cID = GetPVarInt(playerid, "fCP");
    new Float:range;
    if(cID == sizeof(fsCP)-1) range = 20.0;
    else range = 10.0;
    printf("cID: %d /Range: %d", cID, IsPlayerInRangeOfPoint(playerid, range, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]));
    if(IsPlayerInRangeOfPoint(playerid, range, fsCP[cID][fx], fsCP[cID][fy], fsCP[cID][fz]))
    {
    cID++;
    if(cID > sizeof(fsCP))
    {
    printf("Ende");
    SetPVarInt(playerid, "fCP", 0);
    new string[128];
    format(string,128,"{C8C8C8}Du hast den Flugschein erfolgreich {41FF00}bestanden.");
    DestroyVehicle(GetPVarInt(playerid,"Flugzeug"));
    SetPlayerPos(playerid,415.1635,2535.5076,19.1484);
    SetPlayerVirtualWorld(playerid,0);
    Prufung[playerid] = 0;
    Flugschein[playerid] = 1;
    }
    else
    {
    printf("Nächster: %d", cID);
    SetPVarInt(playerid, "fCP", cID);
    if(cID < sizeof(fsCP)) SetPlayerRaceCheckpoint(playerid, 3, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID+1][fx], fsCP[cID+1][fy],fsCP[cID+1][fz], 10);
    else SetPlayerRaceCheckpoint(playerid, 4, fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], fsCP[cID][fx], fsCP[cID][fy],fsCP[cID][fz], 10);
    }
    }
    return 1;
    }
    DisablePlayerRaceCheckpoint(playerid);
    return 1;
    }


    Falls 20.0 nicht reicht, nimm 30.0.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Das Funktioniert auch nicht, meine Ideen sind Langsam auch weg.


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen