[HILFE] Zeit stoppen+Wiedergeben

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
  • Servus Leute,
    wie manche von heute mittag bestimmt wissen, sitze ich derzeit an einem kleinen Race Script.
    Jetzt möchte ich einen Countdown laufen lassen, und beim erreichen des letzten Checkpoints möchte ich das die Zahl sprich da wo der countdown gekillt wurde gemerkt und im Chat wiedergegeben wird.
    Den Countdown habe ich bereits, der funktioniert auch Einwand frei, aber wie komme ich an die Zeit?

    KleineHilfe 2.0

  • die grünen kommentare und http://wiki.sa-mp.com/wiki/GetTickCount sollten alles erklären
    new racestart;



    //start
    racestart = GetTickCount();



    //zu einem späteren Zeitpunkt die Zeit berechnen:
    new timeMs = ( GetTickCount() - racestart );
    //timeMs(millisekunden) in Min:Sek.Ms umrechnen
    new minuten = (timeMs/60000);
    timeMs -= (minuten * 60000);
    new sekunden = (timeMs/1000);
    format(str,sizeof(str), "%d:%d.%d", minuten, sekunden, (timeMs%1000)); // Format Minuten:Sekunden.millisekunden

  • Erst einmal danke.
    racestart ersetze ich durch meinen Counter? Millisekunden will ich garnicht dabei haben, können raus. Also bei mir siehts jetzt so aus


    forward countdown();


    SetTimer("countdown",1000,true);


    new Mini;
    new second;
    public countdown()
    {
    new String2[256];
    second++;
    format(String2, sizeof(String2), "Zeit: %d:%d",Mini,second);
    TextDrawSetString(Textdraw7, String2);
    if (second == 59)
    {
    second = 0;
    Mini += 1;
    }
    if (second <= 9)
    {
    format(String2, sizeof(String2), "Zeit: %d:0%d",Mini,second);
    TextDrawSetString(Textdraw7, String2);
    }
    if(Mini <= 9)
    {
    format(String2, sizeof(String2), "Zeit: 0%d:%d",Mini,second);
    TextDrawSetString(Textdraw7, String2);
    }
    return 1;
    }

    Wo müsste ich was einsetzen um bei


    else if(CheckpointStatus[playerid] == MAX_RACE_POINTS)
    {
    sieger += 1;
    CheckpointStatus[playerid] = 0;
    new name[MAX_PLAYER_NAME], string[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof string,"Spieler %s ist als %d. durchs Ziel gefahren !",name,sieger);
    SendClientMessageToAll(grün, string);
    format(string, sizeof string,"Deine Plazierung: %d. Platz!",sieger);
    SendClientMessage(playerid, grün, string);
    Finishstock(playerid);
    DisablePlayerRaceCheckpoint(playerid);
    MachtArbeit[playerid]= 0;
    return 1;
    }


    in der Client Message die Zeit mit einzubauen? Sollte für jeden Spieler einzelnt sein natürlich
    //Edit3

    KleineHilfe 2.0

  • Danke es funktioniert.
    Kann man jetzt noch die Bestzeit sprich von dem Spieler mit der schnellsten Zeit der Runde ermitteln & speichern bei dini?
    //Edit2


    Es funktioniert doch noch nicht so ganz.
    Ich habe den Counter wirklich Zeitgleich mit dem counter der hoch zählt laufen.


    SetTimer("countdown",1000,true);
    SetTimer("countdown2",1000,false);


    new Mini;
    new second;
    public countdown()
    {
    new String2[256];
    second++;
    format(String2, sizeof(String2), "Zeit: %d:%d",Mini,second);
    TextDrawSetString(Textdraw7, String2);
    if (second == 59)
    {
    second = 0;
    Mini += 1;
    }
    if (second <= 9)
    {
    format(String2, sizeof(String2), "Zeit: %d:0%d",Mini,second);
    TextDrawSetString(Textdraw7, String2);
    }
    if(Mini <= 9)
    {
    format(String2, sizeof(String2), "Zeit: 0%d:%d",Mini,second);
    TextDrawSetString(Textdraw7, String2);
    }
    return 1;
    }
    forward countdown2();
    public countdown2()
    {
    racestart = GetTickCount();
    }


    Nach dem letzten Checkpoint
    else if(CheckpointStatus[playerid] == MAX_RACE_POINTS)
    {
    new timeMs = ( GetTickCount() - racestart );
    //timeMs(millisekunden) in Min:Sek.Ms umrechnen
    new minuten = (timeMs/60000);
    timeMs -= (minuten * 60000);
    new sekunden = (timeMs/1000);
    sieger += 1;
    CheckpointStatus[playerid] = 0;
    new name[MAX_PLAYER_NAME], string[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof string,"Spieler %s ist als %d. durchs Ziel gefahren.(Zeit:0%d/%d) !",name,sieger,minuten,sekunden);
    SendClientMessageToAll(grün, string);
    format(string, sizeof string,"Deine Plazierung: %d. Platz!",sieger);
    SendClientMessage(playerid, grün, string);
    Finishstock(playerid);
    DisablePlayerRaceCheckpoint(playerid);
    MachtArbeit[playerid]= 0;
    return 1;
    }


    Das problem ist jetzt, das der Counter der die Zeit stopt, komischer Weise bei 2:38(Wo der Racetimer im Ziel ist) bei 2:50 oder höher steht sprich immer paar Sekunden vorne. Wie kann das sein?
    //Edit 2


    Was hat das mit den TimeMS auf sich?

    KleineHilfe 2.0

    Einmal editiert, zuletzt von YaBroo ()