Problem mit 2 Routen von 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
  • Hallo,


    ich habe ein kleines Problem. Ich will ein Bus-Script schreiben und hab es eig sogut wie fertig nur es gibt ein problem. Bei mir gibt es 2 Routen 1*Los Santos und 1* San Fierro.
    Nun gibt es folgendes Problem. Fahre ich in den ersten Checkpoint von Los Santos kommt auf einmal der nächste Checkpoint in San Fierro obwohl diese Gruppiert sind also


    hsf..... alle Checkpoints von sf
    haltestellen.....alle checkpoints von ls


    man soll halt immer trinkgeld und so bekommen.


    Bei fragen bitte melden


    lg



    Edit: zur besseren vorstellung hier ein auszug ausm FS
    public OnPlayerEnterCheckpoint(playerid)
    {
    new
    trinkgeld,
    string[128];
    trinkgeld = random(20);
    Checkpoint[playerid] ++;


    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 437) {
    DisablePlayerCheckpoint(playerid);
    GivePlayerMoney(playerid, trinkgeld);
    format(string, sizeof(string), "Haltestelle erreicht - %d $ verdient !", trinkgeld);
    SendClientMessage(playerid, 0xDC143CAA, string);
    SendClientMessage(playerid, 0xDC143CAA, "Fahre nun zur nächsten Haltestelle");
    {
    if(Checkpoint[playerid] <= sizeof(haltestellen))
    SetPlayerCheckpoint(playerid,haltestellen[Checkpoint[playerid]][X],haltestellen[Checkpoint[playerid]][Y],haltestellen[Checkpoint[playerid]][Z],haltestellen[Checkpoint[playerid]][Rad]);
    {
    if(Checkpoint[playerid] <= sizeof(hsf))
    SetPlayerCheckpoint(playerid,hsf[Checkpoint[playerid]][X],hsf[Checkpoint[playerid]][Y],hsf[Checkpoint[playerid]][Z],hsf[Checkpoint[playerid]][Rad]);
    }
    return 1;
    }
    }
    return 1;



    }

  • Hi,
    ich verstehe nicht ganz was du dir bei
    if(Checkpoint[playerid] <= sizeof(haltestellen))
    gedacht hast. sizeof() gibt doch die Länge bzw. Größe eines Arrays.


    Ich würde beim Erstellen des Checkpoints eine Zahl in einer Variable speichern und dann später beim Erreichen überprüfen welche Zahl in der Variable ist und dem entsprechend den neuen Checkpoint erstellen.


    MfG Valdis

  • hey


    erstmal danke für deine antwort. Aber dann müsste ich ja zu jedem checkpoint schreiben
    setplayercheckpoint blablabla 1,
    setplayercheckpoint blablabla 2,
    setplayercheckpoint blablabla 3,
    usw


    wobei ich das aber nicht will weil es doch viele checkpoints sind

  • Also mit deiner Klammerführung komm ich irgendwie nicht klar... kein wunder das die durcheinander kommen, nich böse sein aber hab noch nie ne klammer gesehen die vor dem if anfängt...


    Dann fehlt dir Allgemein die Unterscheidung welche Rute er überhaupt fährt...


    Darum würde ich dem Spieler eine Variable zuweisen welche Strecke er fährt...


    new strecke[MAX_PLAYERS]=0;


    Ich weiß ja nicht wie du den Spieler die Strecke Auswählen lässt aber ich gehe mal davon aus per Command:


    /*Dein Command und alle abfragen*/
    strecke[playerid]=1; //Für LS
    oder
    strecke[playerid]=2; //Für SF
    /*rest deines Commands */



    So würde ich das machen:


    public OnPlayerEnterCheckpoint(playerid){if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 437){if(strecke[playerid]>0){new trinkgeld, string[128];trinkgeld = random(20);Checkpoint[playerid] ++;DisablePlayerCheckpoint(playerid);GivePlayerMoney(playerid, trinkgeld);format(string, sizeof(string), "Haltestelle erreicht : %d $ verdient !", trinkgeld);SendClientMessage(playerid, 0xDC143CAA, string);if(strecke[playerid]==1){if(Checkpoint[playerid] < sizeof(haltestellen)) //nur "<" da ein Array ab 0 zählt würdest du hier sonst 1 zu viel gehen was fehler verursachen könnte{SetPlayerCheckpoint(playerid,haltestellen[Checkpoint[playerid]][X],haltestellen[Checkpoint[playerid]][Y],haltestellen[Checkpoint[playerid]][Z],haltestellen[Checkpoint[playerid]][Rad]);SendClientMessage(playerid, 0xDC143CAA, "Fahre nun zur nächsten Haltestelle");return 1;}else if(Checkpoint[playerid] >= sizeof(haltestellen)) // Wenn er an der letzten Haltestelle ist{SendClientMessage(playerid, 0xDC143CAA, "Du hast die letzte Haltestelle erreicht!"); // Oder sowas^^ kann auch noch Geld gegeben werden... kareturn 1;}}else if(strecke[playerid]==2){if(Checkpoint[playerid] < sizeof(hsf)) // das selbe^^{SetPlayerCheckpoint(playerid,hsf[Checkpoint[playerid]][X],hsf[Checkpoint[playerid]][Y],hsf[Checkpoint[playerid]][Z],hsf[Checkpoint[playerid]][Rad]);SendClientMessage(playerid, 0xDC143CAA, "Fahre nun zur nächsten Haltestelle");return 1;}else if(Checkpoint[playerid] >= sizeof(hsf)) // Wenn er an der letzten Haltestelle ist{SendClientMessage(playerid, 0xDC143CAA, "Du hast die letzte Haltestelle erreicht!"); // Oder sowas^^ kann auch noch Geld gegeben werden... kareturn 1;}}}}return 1;}


    // Edit: habs mit millionen Zeilenümbrüchen probiert KA warum der shit pwn kram meine Zeilenumbrüche frisst...
    hoffe du kannst da trotzdem was brauchbares rausfiltern...

    2 Mal editiert, zuletzt von Xerxis ()

  • ich hab jetz alles so eingebaut. aber ich weiß nicht wirklich was ich nun bei den command für das starten der tour eintragen muss.


    Denn im moment ist es so das er bei mir nun den ersten Checkpoint per command hinsetzt fahr ich rein gibts keine auswirkung


    //EDIT: Ich habs hinbekommen! Danke für eure Hilfen



    Mfg
    Black