Schwieriges Countdown 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
  • Hey Leute :D


    Also, heut hab ich ein doch ziemlich 'vielseitiges' Problem.
    Es betrifft die Fahrprüfung der Fahrschule auf meinem Server, an dem ich ab & zu ein wenig herumbastle ;)
    Folgendes:
    Ich habe für den Spieler einen Kurs erstellt, welcher ihn auf verschiedene Fahrfertigkeiten testet. Dieser besteht aus simplen aufeinander folgenden Checkpoints, welche der Player in einer Zeit von 3:00min abfahren muss. Dabei darf er am Auto so wenig wie möglich Schaden verursachen.
    Problem:
    Das System funktioniert einwandfrei, außer dem Countdown, der läuft wenn man ihn zum Test auserhalb einer Fahrprüfung startet ganz normal & alles
    passt, nur nicht wenn ich ihn dann in die Fahrprüfung einbindet. Mit jedem Checkpoint den ich mit dem Fahrzeug durchfahre wird er schneller - mit dem ersten CP doppelt so schnell, dann dreimal so schnell, usw.
    Wechselwirkt der vllt irgendwie mit meinen GameTextForPlayer-Befehlen? Die haben ja auch eine Zeitangabe...
    Zweites, eher nebensächlicheres Problem:
    Der vorherigen Zahlen des Countdowns bleiben alle im Textdraw stehen, er legt also nur die neuen Zahlen drüber? Kann ich da irgendwas dagegen tun?


    Da ich in meinem Script Wert darauf lege meine Funktionen selbst zu programmieren bin ich nicht der Typ, der einfach Scripte kopiert, heißt, was ich hier programmiert habe könnte für den einen oder anderen evtl. etwas primitiv wirken ;)


    Zum Script:


    1. Der Countdown



    new countdown1 = 60;//Sekunden-Anzeige
    new countdown2 = 2;//Minuten-Anzeige


    forward Pruefung(playerid);


    public Pruefung(playerid)
    {
    if(countdown1 > 0)//Starten des Countdowns
    {
    new pruefstring[128];
    format(pruefstring,sizeof(pruefstring),"Verbleibende~n~Zeit:~n~~b~%d:d",countdown2,countdown1);
    TextDrawSetString(PRUEF,pruefstring);//Textdraw Code findet ihr unten
    MyTextDraw4(playerid);
    TextDrawShowForPlayer(playerid,PRUEF);
    SetTimerEx("Pruefung", 1000, false, "i", playerid);
    countdown1 --;
    }
    else if(countdown1 == 0 && countdown2 == 2)//wenn die erste Minute um ist, muss manuell der Wert 2:00min
    //angezeigt werden, da eine Variable in samp nicht den Wert
    //null annehmen kann
    {
    countdown2 --;//Minuten eins zurückstellen
    countdown1 = 60;//Sekunden wieder hoch auf 60
    new pruefstring[128];
    format(pruefstring,sizeof(pruefstring),"Verbleibende~n~Zeit:~n~~b~2:00");//Kurze manuelle Ausgabe
    TextDrawSetString(PRUEF,pruefstring);
    MyTextDraw4(playerid);
    TextDrawShowForPlayer(playerid,PRUEF);
    SetTimerEx("Pruefung", 1000, false, "i", playerid);
    countdown1 --;

    }
    else if(countdown1 == 59 && countdown2 == 1)//Selbe Funktion wie am Anfang nur jetzt eben für die 2. Minute
    {
    new pruefstring[128];
    format(pruefstring,sizeof(pruefstring),"Verbleibende~n~Zeit:~n~~y~%d:d",countdown2,countdown1);
    TextDrawSetString(PRUEF,pruefstring);
    MyTextDraw4(playerid);
    TextDrawShowForPlayer(playerid,PRUEF);
    SetTimerEx("Pruefung", 1000, false, "i", playerid);
    countdown1 --;
    }
    else if(countdown1 == 0 && countdown2 == 1)//wieder manuelle Ausgabe des Wertes 1:00
    {
    countdown2 --;
    countdown1 = 60;
    new pruefstring[128];
    format(pruefstring,sizeof(pruefstring),"Verbleibende~n~Zeit:~n~~y~1:00");
    TextDrawSetString(PRUEF,pruefstring);
    MyTextDraw4(playerid);
    TextDrawShowForPlayer(playerid,PRUEF);
    SetTimerEx("Pruefung", 1000, false, "i", playerid);
    countdown1 --;


    }
    else if(countdown1 == 0 && countdown2 == 1)
    {
    countdown2 --;
    countdown1 = 59;
    new pruefstring[128];
    format(pruefstring,sizeof(pruefstring),"Verbleibende~n~Zeit:~n~~r~%d:d",countdown2,countdown1);
    TextDrawSetString(PRUEF,pruefstring);
    MyTextDraw4(playerid);
    TextDrawShowForPlayer(playerid,PRUEF);
    SetTimerEx("Pruefung", 1000, false, "i", playerid);
    countdown1 --;
    }
    else if(countdown1 >> 1 && countdown2 >> 1)//sollte der Countdown durch sein bevor entsprechende Variable
    //true ist(also die Fahrprüfung noch nicht beendet wurde)
    //werden die Bedingungen für eine nicht bestandene Fahrprüfung ausgeführt
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);


    if(Auto[playerid] == 1)// wenn der Spieler sich in der Fahrprüfung für den Auto-Führerschein befindet(habe
    //auch noch das selbe für Motorrad & LKW)
    {
    new Float:vHealth;
    new Float:vSchaden;
    new string[126];
    GetVehicleHealth(GetPlayerVehicleID(playerid),vHealth);
    vSchaden = 1000 - vHealth;
    GameTextForPlayer(playerid,"~r~Durchgefallen~n~~y~Zeitlimit ueberschritten...",5000,3);
    SendClientMessage(playerid,GELB,"*'___})Fahrschule({___'*");
    SendClientMessage(playerid,ROT,"TUT UNS LEID");
    SendClientMessage(playerid,ROT,"Du hast die Fahrprüfung leider nicht bestanden!");
    //Fahrzeug Schaden
    format(string,sizeof(string),"Fahrzeugschaden: %.1f/1000.0",vSchaden);
    SendClientMessage(playerid,GRAU,string);
    SendClientMessage(playerid,ROT2,"Geh zurück in die Fahrschule & melde dich für die nächste Prüfung an...");
    dini_BoolSet(Spielerdatei,"Bfailed",true);
    FS1[playerid] = 0;//Checkpoint werden 'resettet'
    Auto[playerid] = 0;//Fahrprüfungsvariable = 0(nicht in der Prüfung)


    DisablePlayerCheckpoint(playerid);
    SetTimer("Fahrschule",15,false);//Fahrzeug respawnen
    new vehicle;
    vehicle = GetPlayerVehicleID(playerid);
    SetVehicleToRespawn(vehicle);


    TextDrawHideForPlayer(playerid,PRUEF);
    }
    if(LKW[playerid] == 1)
    {
    new Float:vHealth;
    new Float:vSchaden;
    new string[126];
    GetVehicleHealth(GetPlayerVehicleID(playerid),vHealth);
    vSchaden = 1000 - vHealth;
    GameTextForPlayer(playerid,"~r~Durchgefallen~n~~y~Zeitlimit ueberschritten...",5000,3);
    SendClientMessage(playerid,GELB,"*'___})Fahrschule({___'*");
    SendClientMessage(playerid,ROT,"TUT UNS LEID");
    SendClientMessage(playerid,ROT,"Du hast die Fahrprüfung leider nicht bestanden!");
    //Fahrzeug Schaden
    format(string,sizeof(string),"Fahrzeugschaden: %.1f/1000.0",vSchaden);
    SendClientMessage(playerid,GRAU,string);
    SendClientMessage(playerid,ROT2,"Geh zurück in die Fahrschule & melde dich für die nächste Prüfung an...");
    dini_BoolSet(Spielerdatei,"CDfailed",true);
    FS2[playerid] = 0;
    LKW[playerid] = 0;


    DisablePlayerCheckpoint(playerid);
    SetTimer("Fahrschule",15,false);
    //Fahrzeug respawnen
    new vehicle;
    vehicle = GetPlayerVehicleID(playerid);
    SetVehicleToRespawn(vehicle);

    TextDrawHideForPlayer(playerid,PRUEF);
    }
    if(Motorrad[playerid] == 1)
    {
    new Float:vHealth;
    new Float:vSchaden;
    new string[126];
    GetVehicleHealth(GetPlayerVehicleID(playerid),vHealth);
    vSchaden = 1000 - vHealth;
    GameTextForPlayer(playerid,"~r~Durchgefallen~n~~y~Zeitlimit ueberschritten...",5000,3);
    SendClientMessage(playerid,GELB,"*'___})Fahrschule({___'*");
    SendClientMessage(playerid,ROT,"TUT UNS LEID");
    SendClientMessage(playerid,ROT,"Du hast die Fahrprüfung leider nicht bestanden!");
    //Fahrzeug Schaden
    format(string,sizeof(string),"Fahrzeugschaden: %.1f/1000.0",vSchaden);
    SendClientMessage(playerid,GRAU,string);
    SendClientMessage(playerid,ROT2,"Geh zurück in die Fahrschule & melde dich für die nächste Prüfung an...");
    dini_BoolSet(Spielerdatei,"Afailed",true);
    FS3[playerid] = 0;
    Motorrad[playerid] = 0;


    DisablePlayerCheckpoint(playerid);
    SetTimer("Fahrschule",15,false);
    //Fahrzeug respawnen
    new vehicle;
    vehicle = GetPlayerVehicleID(playerid);
    SetVehicleToRespawn(vehicle);

    TextDrawHideForPlayer(playerid,PRUEF);
    }
    }
    return 1;
    }


    So viel zum Countdown...


    2. Der TextDraw



    MyTextDraw4(playerid)
    {
    new pruefstring[128];
    PRUEF = TextDrawCreate(10.0,275.0,pruefstring);
    TextDrawColor(PRUEF,GRÜN);
    TextDrawSetOutline(PRUEF,1);
    TextDrawSetShadow(PRUEF,0);
    TextDrawFont(PRUEF,1);
    TextDrawLetterSize(PRUEF,0.6,1.2);
    TextDrawShowForPlayer(playerid,PRUEF);
    }


    3. Die Checkpoints & Bedingungen für den Erhalt des Führerscheins



    new FS1[MAX_PLAYERS];//Auto
    new Auto[MAX_PLAYERS];
    new FSauto[8];//verfügbare Fahrschulautos
    new FSCPa[19];//Checkpoints

    Nach Auswahl der Prüfung für den Auto-Führerschein durch einen DIALOG werden folgende Variablen gesetzt:
    (Zeig euch jetz nicht den ganzen Code, zu verwirrend & tut auch nix zur sache ;)

    FSCPa[0] = SetPlayerCheckpoint(playerid,-2055.2590,-126.5977,35.3067,3.0);
    FS1[playerid] = 1;
    Auto[playerid] = 1;


    public OnPlayerEnterCheckpoint(playerid)
    {
    //////SPIELERDATEI
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    //-> Fahrschule
    //AUTO
    new vehicleid;
    vehicleid = GetPlayerVehicleID(playerid);
    if(Auto[playerid]==1)//wenn der Spieler sich in der Prüfung befindet
    {
    if(IsPlayerInVehicle(playerid, vehicleid))//ist er in einem Fahrzeug(Wenn nicht wird die unten angegeben
    // Nachricht ausgegeben)
    {
    if(vehicleid >= FSauto[0] && vehicleid <= FSauto[7])//ist er in einem Fahrschulauto
    {
    if(IsPlayerInCheckpoint(playerid)==FSCPa[0])//ist er im ersten Checkpoint
    {
    GameTextForPlayer(playerid,"~g~START~n~~r~Schaden am Wagen gibt Abzug~n~~y~3 Minuten Zeit",3000,3);
    FS1[playerid] = 2;//Checkpointvariable eins hoch
    Pruefung(playerid);//Countdown starten
    //In "OnPlayerLeaveCheckpoint(playerid)" wird der nächste CP erstellt
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[1])
    {
    GameTextForPlayer(playerid,"~r~Checkpoint (1/18)",1000,3);
    FS1[playerid] = 3;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[2])
    {
    GameTextForPlayer(playerid,"~g~Slalom (2/18)",2000,3);
    FS1[playerid] = 4;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[3])
    {
    GameTextForPlayer(playerid,"~g~Rueckwaerts Einparken (3/18)",2000,3);
    FS1[playerid] = 5;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[4])
    {
    GameTextForPlayer(playerid,"~g~Vorwaerts Einparken (4/18)",2000,3);
    FS1[playerid] = 6;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[5])
    {
    GameTextForPlayer(playerid,"~r~Checkpoint (5/18)",1000,3);
    FS1[playerid] = 7;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[6])
    {
    GameTextForPlayer(playerid,"~g~Seitlich Einparken (6/18)",2000,3);
    FS1[playerid] = 8;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[7])
    {
    GameTextForPlayer(playerid,"~r~Checkpoint (7/18)",1000,3);
    FS1[playerid] = 9;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[8])
    {
    GameTextForPlayer(playerid,"~r~Checkpoint (8/18)",1000,3);
    FS1[playerid] = 10;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[9])
    {
    GameTextForPlayer(playerid,"~g~Vollbremsung im naechsten Checkpoint (9/18)",3000,3);
    FS1[playerid] = 11;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[10])
    {
    GameTextForPlayer(playerid,"~y~BREMSEN (10/18)",1000,3);
    FS1[playerid] = 12;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[11])
    {
    GameTextForPlayer(playerid,"~r~Checkpoint (11/18)",1000,3);
    FS1[playerid] = 13;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[12])
    {
    GameTextForPlayer(playerid,"~r~Wenden in einem Zug (12/18)",2000,3);
    FS1[playerid] = 14;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[13])
    {
    GameTextForPlayer(playerid,"~g~Runkurs (13/18)~n~~r~Vorne LINKS",3000,3);
    FS1[playerid] = 15;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[14])
    {
    GameTextForPlayer(playerid,"~r~<--~n~Checkpoint (14/18)",1000,3);
    FS1[playerid] = 16;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[15])
    {
    GameTextForPlayer(playerid,"~r~<--~n~Checkpoint (15/18)",1000,3);
    FS1[playerid] = 17;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[16])
    {
    GameTextForPlayer(playerid,"~r~<--~n~Checkpoint (16/18)",1000,3);
    FS1[playerid] = 18;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[17])
    {
    GameTextForPlayer(playerid,"~r~<--~n~Checkpoint (17/18)",1000,3);
    FS1[playerid] = 19;
    }
    if(IsPlayerInCheckpoint(playerid)==FSCPa[18])//Ist der Spieler im Ziel(natürlich nur wenn der
    // Countdown vorher nicht abläuft)
    {
    FS1[playerid] = 20;


    new Float:vHealth;
    new Float:vSchaden;
    new string[126];
    GetVehicleHealth(GetPlayerVehicleID(playerid),vHealth);
    vSchaden = 1000 - vHealth;
    if(vHealth >= 900)//Fahrzeug-Schaden im Rahmen?
    {
    GameTextForPlayer(playerid,"~g~Bestanden",5000,3);
    SendClientMessage(playerid,GELB,"*'___})Fahrschule({___'*");
    SendClientMessage(playerid,GRÜN,"*** GLÜCKWUNSCH ****");
    SendClientMessage(playerid,GRÜN,"Du hast die Fahrprüfung erfolgreich bestanden!");
    //Fahrzeug Schaden
    format(string,sizeof(string),"Fahrzeugschaden: %.1f/1000.0",vSchaden);
    SendClientMessage(playerid,GRAU,string);
    dini_BoolSet(Spielerdatei,"FüB",true);//bekommt den Fürherschein
    dini_BoolSet(Spielerdatei,"FSauto",false);
    FS1[playerid] = 0;//Variablen wieder auf 0
    Auto[playerid] = 0;


    DisablePlayerCheckpoint(playerid);
    SetTimer("Fahrschule",15,false);
    countdown = 0;
    //Fahrzeug respawnen
    new vehicle;
    vehicle = GetPlayerVehicleID(playerid);
    SetVehicleToRespawn(vehicle);
    TextDrawHideForPlayer(playerid,PRUEF);
    return 1;
    }
    if(vHealth <= 899)//Fahrzeug-Schaden nicht im Rahmen
    {
    GameTextForPlayer(playerid,"~r~Durchgefallen",5000,3);
    SendClientMessage(playerid,GELB,"*'___})Fahrschule({___'*");
    SendClientMessage(playerid,ROT,"TUT UNS LEID");
    SendClientMessage(playerid,ROT,"Du hast die Fahrprüfung leider nicht bestanden!");
    //Fahrzeug Schaden
    format(string,sizeof(string),"Fahrzeugschaden: %.1f/1000.0",vSchaden);
    SendClientMessage(playerid,GRAU,string);
    SendClientMessage(playerid,ROT2,"Geh zurück in die Fahrschule & melde dich für die nächste Prüfung an...");
    dini_BoolSet(Spielerdatei,"Bfailed",true);//Einmal durchgefallen wird vermerkt
    //(da nun niedrigere Gebühren beim nächsten Versuch)
    dini_BoolSet(Spielerdatei,"FSauto",false);
    FS1[playerid] = 0;
    Auto[playerid] = 0;


    DisablePlayerCheckpoint(playerid);
    SetTimer("Fahrschule",15,false);
    countdown = 0;
    //Fahrzeug respawnen
    new vehicle;
    vehicle = GetPlayerVehicleID(playerid);
    SetVehicleToRespawn(vehicle);
    TextDrawHideForPlayer(playerid,PRUEF);
    return 1;
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid,GELB,"*'___})Fahrschule({___'*");
    SendClientMessage(playerid,ROT2,"Steig in ein Fahrschul-AUTO um die Prüfung zu machen...");
    //Besagte Nachricht wenn der Spieler ohne Fahrzeug in den CP geht
    }
    }




    public OnPlayerLeaveCheckpoint(playerid)
    {
    //AUTO
    new vehicleid;
    vehicleid = GetPlayerVehicleID(playerid);
    if(Auto[playerid]==1)
    {
    if(IsPlayerInVehicle(playerid, vehicleid))
    {
    if(vehicleid >= FSauto[0] && vehicleid <= FSauto[7])
    {
    if(FS1[playerid]==2)//Ist Spieler im ersten Checkpoint & verlässt ihn
    {
    FSCPa[1] = SetPlayerCheckpoint(playerid,-2090.0313,-142.8927,35.3203,3.0);//p1
    }
    if(FS1[playerid]==3)
    {
    FSCPa[2] = SetPlayerCheckpoint(playerid,-2085.2576,-164.2339,35.3203,3.0);//p2(slalom)
    }
    if(FS1[playerid]==4)
    {
    FSCPa[3] = SetPlayerCheckpoint(playerid,-2084.8738,-259.3287,35.3203,3.0);//p3(parken)
    }
    if(FS1[playerid]==5)
    {
    FSCPa[4] = SetPlayerCheckpoint(playerid,-2088.5686,-278.3327,35.3203,3.0);//p4
    }
    if(FS1[playerid]==6)
    {
    FSCPa[5] = SetPlayerCheckpoint(playerid,-2079.7358,-278.3954,35.3203,3.0);//p5
    }
    if(FS1[playerid]==7)
    {
    FSCPa[6] = SetPlayerCheckpoint(playerid,-2066.9626,-262.5959,35.3274,3.0);//p6
    }
    if(FS1[playerid]==8)
    {
    FSCPa[7] = SetPlayerCheckpoint(playerid,-2052.7097,-278.0153,35.3274,2.0);//p7
    }
    if(FS1[playerid]==9)
    {
    FSCPa[8] = SetPlayerCheckpoint(playerid,-2025.1770,-270.6463,35.327,3.0);//p8
    }
    if(FS1[playerid]==10)
    {
    FSCPa[9] = SetPlayerCheckpoint(playerid,-2057.9827,-245.1774,35.3203,3.0);//p9
    }
    if(FS1[playerid]==11)
    {
    FSCPa[10] = SetPlayerCheckpoint(playerid,-2057.7407,-165.9292,35.3203,3.0);//p10
    }
    if(FS1[playerid]==12)
    {
    FSCPa[11] = SetPlayerCheckpoint(playerid,-2044.2831,-172.5241,35.3274,3.0);//p11
    }
    if(FS1[playerid]==13)
    {
    FSCPa[12] = SetPlayerCheckpoint(playerid,-2045.1210,-221.3237,35.3274,3.0);//p12
    }
    if(FS1[playerid]==14)
    {
    FSCPa[13] = SetPlayerCheckpoint(playerid,-2034.0541,-209.9391,35.3203,3.0);//p13
    }
    if(FS1[playerid]==15)
    {
    FSCPa[14] = SetPlayerCheckpoint(playerid,-2038.9460,-153.4344,35.3203,3.0);//p15
    }
    if(FS1[playerid]==16)
    {
    FSCPa[15] = SetPlayerCheckpoint(playerid,-2038.9485,-215.7825,35.3203,3.0);//p14
    }
    if(FS1[playerid]==17)
    {
    FSCPa[16] = SetPlayerCheckpoint(playerid,-2038.9460,-153.4344,35.3203,3.0);//p15(wiederholen)
    }
    if(FS1[playerid]==18)
    {
    FSCPa[17] = SetPlayerCheckpoint(playerid,-2038.9485,-215.7825,35.3203,3.0);//p14(wiederholen)
    }
    if(FS1[playerid]==19)
    {
    FSCPa[18] = SetPlayerCheckpoint(playerid,-2044.5792,-126.9101,35.2586,3.0);//p16
    }
    }
    }
    }



    /edit


    Hab herausgefunden, dass der Countdown nicht mit den GameText-Anweisungen zusammen hängt.
    Hab die GameTexte mal als TextDraws erstellt ohne bestimmte Anzeigedauer & es gab immer noch das selbe Problem,
    der Countdown wird immer schneller mit jedem Checkpoint den ich durchfahre!
    Daraus schließe ich, dass es mit den Checkpoints zusammenhängen muss.


    Was könnte der Fehler sein?


    Gruß

    THE STORM941

    Einmal editiert, zuletzt von TheStorm941 ()

  • Du machst es dir viel zu kompliziert, in dem du die Restzeit immer in Sekunde und Minuten aufteilst .


    Lass es doch bei Sekunden, die kann man einfach umwandeln. Wenn es noch 100 Sekunden sind,dann sind noch 1 Minuten und 40 Sekunden Restzeit.
    Rechnung zum Aufteilen ist doch ganz einfach.


    restzeit = 100;
    minuten = restzeit / 60;
    sekunden = restzeit % 60;
    minuten wäre 1, sekunden 40.


    // Edit:
    Da Code scheint noch viel mehr Fehler zu enthalten.
    Wieso rufst du ständig MyTextDraw4 auf ?


    else if(countdown1 >> 1 && countdown2 >> 1)
    Bitshiften, wirklich ?! Du meinst bestimmt > , nicht >>.
    SetTimer("Fahrschule",15,false);//Fahrzeug respawnen
    Eventuell SetTimerEx ?


    if(IsPlayerInCheckpoint(playerid)==FSCPa[1])
    IsPlayerInCheckpoint gibt nur 0 oder 1 zurück. Das kannst du gar nicht mit irgendeinem Checkpoint vergleichen.


    FSCPa[6] = SetPlayerCheckpoint(playerid,-2066.9626,-262.5959,35.3274,3.0);//p6
    Das ist auch Quatsch. SetPlayerCheckpoint gibt dir keinen Wert zurück, mit dem du etwas anfangen kannst.
    Du solltest eher in FSCPa einfach den Wert 6 schreiben, sofern er beim 6 Checkpoint ist.
    Für die Checkpoints empfehle ich dir daher mein Tutorial:
    [ SCRIPTING ] Checkpoints abfahren


    //Edit^X: Da sind bestimmt noch mehr Dinge, die nicht ganz richtig sind. Fang lieber nochmal neu an.

  • Hey Goldkiller :)


    Danke dass du dir das Ganze mal angeschaut hast!


    Mit dem "MyTextDraw4" hast recht, hab ich irgendwie die Funktion ein wenig verpeilt - Problem fällt ja mit deiner Countdown-Methode eh weg ;)


    Die Rechnung ist logisch, dachte ich machs mir mit zwei Countdowns leichter, da ich einfach mit dem Ablaufen des Sekunden-Countdowns eif immer die Minuten
    eins runter setzen wollte. War dann doch aufwendiger als gedacht :P Werde ich ändern!


    Zum Bitshiften - ist schon bewusst so, hab immer gedacht doppelt würde die Sache sicherer machen(hatte ich glaub irgendwo aus nem MrMonat TuT) - habs schon normal mit einem versucht ">" versucht, Folge: Fehlermeldung in Pawno, mit zwei war der Fehler weg?!


    Was ändert "SetTimerEx"? Funkt doch mit "SetTimer".


    Zu den Checkpoints, mit denen hab ich eigentlich keinerlei Probleme & FSCPa[i] wird auch nicht als 0 oder 1 erkannt, sondern tut schön was es soll & gibt den jeweiligen GameText aus & setzt FS1[playerid] auf den nächsten Wert. FS1 wird in "OnPlayerLeaveCheckpoint" sauber ausgelesen & der richtige CP wird gesetzt.
    Das ganze Fahrschulsystem hat - ohne den Countdown/Zeitlimit - optimal funktioniert, nur bekomm ich den verflixten Countdown nicht richtig eingebunden.


    Danke dir, der Countdown ist mit der Rechnung um einiges einfacher gestaltet!
    Nur das Problem, dass er schneller abläuft mit jedem CP den man durchfährt ist noch da. Meinst du deine Version CPs abzufahren ändert da was?



    public Pruefung(playerid)
    {
    new countdownFS = 180;


    new minuten = countdownFS / 60;
    new sekunden = countdownFS % 60;


    MyTextDraw4(playerid);
    new CountItDown;

    if(countdownFS > 0)
    {
    new pruefstring[128];
    format(pruefstring,sizeof(pruefstring),"Verbleibende~n~Zeit:~n~~r~%d:%02d",minuten,sekunden);
    TextDrawSetString(PRUEF,pruefstring);
    TextDrawShowForPlayer(playerid,PRUEF);
    CountItDown = SetTimerEx("Pruefung", 1000, false, "i", playerid);
    countdownFS --;
    }
    if(countdownFS < 1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    TextDrawHideForPlayer(playerid,PRUEF);
    TextDrawDestroy(PRUEF);

    KillTimer(CountItDown);


    if(bool:dini_Bool(Spielerdatei,"FSauto")==true)
    {//... siehe oben, bleibt gleich


    Gruß & vielen Dank nochmal Goldkiller

    THE STORM941

  • Zitat

    Zum Bitshiften - ist schon bewusst so, hab immer gedacht doppelt würde die Sache sicherer machen(hatte ich glaub irgendwo aus nem MrMonat TuT) - habs schon normal mit einem versucht ">" versucht, Folge: Fehlermeldung in Pawno, mit zwei war der Fehler weg?!


    Ne, Bitshiften macht was ganz anderes.
    X > Y ist etwas völlig anderes als X >> Y.
    Es sollte schon ein einfaches Größer/Kleiner/Gleich sein.
    Der Fehler kommt vllt weil du neben > noch ein = benutzt hast und es auf der falschen Seite war.


    Zitat

    Was ändert "SetTimerEx"? Funkt doch mit "SetTimer".


    Ich sehe zwar die Funktion "Fahrschule" nicht,allerdings glaube ich nicht,dass du diese Funktion global arbeiten lässt ohne zusätzliche Parameter.



    Zitat

    Zu den Checkpoints, mit denen hab ich eigentlich keinerlei Probleme & FSCPa wird auch nicht als 0 oder 1 erkannt, sondern tut schön was es soll & gibt den jeweiligen GameText aus & setzt FS1[playerid] auf den nächsten Wert. FS1 wird in "OnPlayerLeaveCheckpoint" sauber ausgelesen & der richtige CP wird gesetzt.
    Das ganze Fahrschulsystem hat - ohne den Countdown/Zeitlimit - optimal funktioniert, nur bekomm ich den verflixten Countdown nicht richtig eingebunden.


    Dann probier es mal mit einem zusätzlichem Spieler aus.Das kann dann schon mal gar nicht funktionieren. Dein Textdraw via MyTextDraw4 funktioniert auch nur solange es nur 1 Spieler gibt der gleichzeitig die Fahrschule macht.
    Das hier alles zu erklären würde den Rahmen sprengen, eine gute Methode ( Zumindest für die Checkpoints ) findest du wie gesagt in dem Tutorial.


    Zitat

    Nur das Problem, dass er schneller abläuft mit jedem CP den man durchfährt ist noch da. Meinst du deine Version CPs abzufahren ändert da was?


    Ich denke ja. Außerdem zeigt es wie man eine Serie von Checkpoints leicht abarbeiten lässt. Dein Code ist mMn viel zu umständlich und nicht gut lesbar.
    Mmn müsste sich der Code bei dir ständig überschneiden an dieser Stelle:
    if(IsPlayerInCheckpoint(playerid)==FSCPa[0])//<<<<<<<<<<<<<<
    {
    GameTextForPlayer(playerid,"~g~START~n~~r~Schaden am Wagen gibt Abzug~n~~y~3 Minuten Zeit",3000,3);
    FS1[playerid] = 2;//Checkpointvariable eins hoch
    Pruefung(playerid);//Countdown starten
    //In "OnPlayerLeaveCheckpoint(playerid)" wird der nächste CP erstellt
    }

    Denn diese Abfrage wird nach dem 1 Checkpoint auch immer wahr sein. Mein Vorschlag nochmal, schau dir das Tutorial an ;).


    Zu deinem neuem Quellcode:
    countdownFS unter Pruefung zu deklarieren ist nicht so klever. Denn es wird ständig mit dem Wert 180 gearbeitet und du zählst praktisch nie runter. Du solltest den Wert für die Restzeit an die Funktion Pruefung als Parameter weitergeben.
    Du brauchst auch den Timer nie unter CountItDown ablegen, da du sowieso repeat ausgeschaltet hast.Hier wieder das gleiche: Es funktioniert nur für 1 Spieler.