Beiträge von Nostraa

    Mein Fehler, war schon spät


    if(floatcmp(GetPVarFloat(playerid, "TVx") , 0.00) != 0 || floatcmp(GetPVarFloat(playerid, "TVy" ), 0.00) != 0 || floatcmp(GetPVarFloat(playerid, "TVz") , 0.00) != 0)


    DeletePVar(playerid, "TVx"); DeletePVar(playerid, "TVy"); DeletePVar(playerid, "TVz");


    Edit: Klammern -.-

    PVars sind nichts anders als Variablen die pro Spieler gehalten werden.
    Das SetPVar fügst du in deine /truck Funktion direkt nach dem SetPlayerCheckpoint ein.


    Und aus dem
    if(IsPlayerInCheckpoint(playerid))

    machst du

    new AktuellerCheckpoint[32];
    GetPVarString(playerid, "Checkpoint", AktuellerCheckpoint, sizeof(AktuellerCheckpoint));
    if(IsPlayerInCheckpoint(playerid) && !strcmp(AktuellerCheckpoint, "Truck"))

    Füge deinem /aus Befehl noch hinzu:
    Am Anfang (nach dem Stringcompare für /aus)
    if(GetPVarFloat(playerid, "TVx") != 0.00 || GetPVarFloat(playerid, "TVy") != 0.00 || GetPVarFloat(playerid, "TVz") != 0.00))
    Um sicherzustellen, dass man nicht versehentlich aufgrund gelöschter Variablen in der Pampa bei 0/0/0 landet.


    Und am Ende nach dem SetPlayerPos:

    DeletePVar(playerid, TVx); DeletePVar(playerid, TVy); DeletePVar(playerid, TVz);

    Nebenher spart man so auchnoch etwas RAM.

    Beim erstellen des Checkpoints:


    SetPVarString(playerid, "Checkpoint", "Truck");
    Dann haste den Checkpointnamen (in diesem Fall "Truck" in der PVar "Checkpoint") gespeichert.


    Und bei der IsPlayerInCheckpoint Funktion
    new AktuellerCheckpoint[32];
    GetPVarString(playerid, "Checkpoint", AktuellerCheckpoint, sizeof(AktuellerCheckpoint));


    Damit ließt du den Wert wieder auf und schreibst ihn in die lokale Variable AktuellerCheckpoint.
    Nun kannst du über eine if Abfrage prüfen, ob der Spieler im Trucker Checkpoint ist:
    if(!strcmp(AktuellerCheckpoint, "Truck"))


    MfG

    Wieviele Dateien existieren denn? Alle 2000?
    Du musst einfach bedenken, wievielPerformance das ganze Beanspurcht. Im schlimmsten Fall würden 2000 Dateien geöffnet und geparst (d.h gestückelt und ausgelesen). Schonmal drüber nachgedacht auf Datenbanken umzusteigen? Das sollte weniger auf die Performance schlagen.

    Theoretisch könnte er aber 1 (Integer) zurückgegeben bekommen. Dem Compiler gehts um dieses theoretisch. Entferne das return 1 oder mach return "1" (dann isses ein String) drauß, wenn unbedingt 1 in die Variable geschrieben werden soll.

    "countr" gehört nicht mit in die format-Funktion.
    format(str, sizeof str, "Fahrzeug: %d: %s, ID: %d", CarNames[PlayerCar[i][model]-400], PlayerCar[i][NSID]);


    Im übrigen würd ich das sowieso anders lösen. Deklarier countr als boolean und setz es in der if Abfrage auf true. Die Schleife über die ini Dateien ist bei vielen Fahrzeugen übrigends der absolute Performancekiller.


    EDIT: Wenn countr die Fahrzeuganzahl sein soll, dann initialisiere sie mit dem Defaultwert 0 und änder unten die Abfrage, sonst macht das Ergebnis keinen Sinn.