1. Das geht überhaupt nicht, da der public nur aufgerufen wird, wenn ein Befehl eingegeben wird
2. kannst du nicht 5 == 10 setzen
-> if(sekunde == sekunde +5)
Der Parameter sekunde wird jedes Mal neu gesetzt.
3. Ohne Timer kannst du das eig. so gut wie nicht lösen außer du benutzt eine sleep funktion(gibts irgendwo bei den CodeSchnipseln
4. Das ist mir noch aufgefallen, du removest nur die Box und sonst keine anderen Textdraws( du zeigst 4 an und machst nur 1 weg)
gettime statt Timer benutzen
- Helti
- 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
-
-
3. Ohne Timer kannst du das eig. so gut wie nicht lösen außer du benutzt eine sleep funktion(gibts irgendwo bei den CodeSchnipseln)
das stimmt so NICHT.
Bei dem Beispiel geht es nicht ohne Timer.
Aber z.B. bei Jobbefehlen (Du musst noch x Minuten warten) ist das sehr hilfreich.Benutze einen Timer, und beachte die Sachen meines Vorposters.
-
@Kevin1
Ja stimmt habs grad gesehen, wusste nicht mehr ganz wie die funktion aufgebaut ist. -
Das funktioniert schon mit Timestamps. Oftmals verwende ich einen Sekunden-Timer im Script, der Dinge wie spielerspezifische Paydays (3600 Sekunden) etc. handhabt. Also:
#pragma unused onSecondTimerHandle;new oneSecondTimerHandle,
commandFailureTimestamp[MAX_PLAYERS] = {-1, ...};public OnGameModeInit() {
oneSecondTimerHandle = SetTimer("oneSecondTimer", 1000, true);
}forward oneSecondTimer();
public oneSecondTimer() {
if(commandFailureTimestamp[playerid] != -1 && gettime() - commandFailureTimestamp[playerid] >= 5) {
PlayerTextDrawHide(playerid, noCmdBox[playerid]);
PlayerTextDrawHide(playerid, noCmdText[playerid]);
PlayerTextDrawHide(playerid, noCmdBad[playerid]);
PlayerTextDrawHide(playerid, noCmdBefehl[playerid]);
commandFailureTimestamp[playerid] = -1;
}
}public OnPlayerCommandPerformed(playerid,cmdtext[],success) {
if(!success && commandFailureTimestamp[playerid] == -1) {
PlayerTextDrawShow(playerid, noCmdBox[playerid]);
PlayerTextDrawShow(playerid, noCmdText[playerid]);
PlayerTextDrawShow(playerid, noCmdBad[playerid]);
PlayerTextDrawShow(playerid, noCmdBefehl[playerid]);
commandFailureTimestamp[playerid] = gettime();
}return 1;
} -
3. Ohne Timer kannst du das eig. so gut wie nicht lösen außer du benutzt eine sleep funktion(gibts irgendwo bei den CodeSchnipseln
Ja die gibts... hier nennt sie sich "wait" aber auch hier läuft eine Schleife, was nicht wirklich sparender ist
stock wait(seconds)
{
new _newTime[4], _oldTime[4];
gettime(_oldTime[0], _oldTime[1], _oldTime[2]);
_oldTime[3] = _oldTime[2] + (_oldTime[1] * 60) + (_oldTime[0] * 600);
while(_newTime[3] != (_oldTime[3] + seconds)) //Hier die Schleife, die dann die sekunden abläuft
{
gettime(_newTime[0], _newTime[1], _newTime[2]);
_newTime[3] = _newTime[2] + (_newTime[1] * 60) + (_newTime[0] * 600);
}
} -
Ja die gibts... hier nennt sie sich "wait" aber auch hier läuft eine Schleife, was nicht wirklich sparender ist
stock wait(seconds)
{
new _newTime[4], _oldTime[4];
gettime(_oldTime[0], _oldTime[1], _oldTime[2]);
_oldTime[3] = _oldTime[2] + (_oldTime[1] * 60) + (_oldTime[0] * 600);
while(_newTime[3] != (_oldTime[3] + seconds)) //Hier die Schleife, die dann die sekunden abläuft
{
gettime(_newTime[0], _newTime[1], _newTime[2]);
_newTime[3] = _newTime[2] + (_newTime[1] * 60) + (_newTime[0] * 600);
}
}Er meint wohl das:
[ MAKRO ] Sleep Funktion
Funktioniert aber mit Timer.
Dein Code lässt den ganzen Server einfrieren ... Nicht besonders zu empfehlen. -
Ich hab nicht gesagt, dass er ihn benutzen soll... Ich habe eine Möglichkeit gepostet
-
breadfish.de
Hat das Thema geschlossen.