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?
[HILFE] Zeit stoppen+Wiedergeben
- YaBroo
- Geschlossen
- Erledigt
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
-
-
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 -
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, (timeMs00)); // Format Minuten:Sekunden.millisekundenErst einmal danke.
racestart ersetze ich durch meinen Counter? Millisekunden will ich garnicht dabei haben, können raus. Also bei mir siehts jetzt so ausforward 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 beielse 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 -
steht alles dabei ...
das eine fügst du beim start ein und wie bei dem anderen kommentar steht -> Einfügen dort wo du die zeit ausrechnen willst -
Danke es funktioniert.
Kann man jetzt noch die Bestzeit sprich von dem Spieler mit der schnellsten Zeit der Runde ermitteln & speichern bei dini?
//Edit2Es 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 2Was hat das mit den TimeMS auf sich?
-
breadfish.de
Hat das Thema geschlossen.