Hallo leute in diesem Tutorial will ich euch den Timestamp vorstellen , vor allem Beispiele wie man ihn sinnvoll in einem Gamemode benutzen kann.
Zuerst mal was ist ein Timestamp(Zeitstempel) ?
Ein Timestamp zu deutsch Zeitstempel genannt ist nichts anderes als ein Datum das was in einem bestimmten Format angegeben wird .
Ja ok ein datum ? Super oder ... natürlich muss auch gesagt werden welches Datum ? Es wird bei bestimmten Ereignissen benutzt ein gutes Beispiel ist z.B: ein Textdokument auf euren PC
hier habt ihr einen Zeitstempel wann das Dokument das letzte mal Bearbeitet worden ist , oder wann es erstellt worden ist u.s.w ....
Ich hoffe ihr versteht was ich meine
Viele fragen euch sicher was euch so ein Timestamp hilft ... doch ich werde euch hier von einem bestimmten Timestamp erzählen
Das ist der Unix-Timestamp(Unixzeit) , dieser Timestamp kennzeichnet den tag 1970 1.Januar 00:00 Uhr er wird in Sekunden angeben .
Ihr fragt euch sicher wie das gemeint ist , ganz einfach es sind die Sekunden von 1970 bis jetzt .
Wie kann man den Unix-Timestamp sinvoll in einem Gamemode nutzen ?
Zuerst ein mal hier ein gutes Beispiel .
Der Spieler X darf einmal pro "echte" stunde den befehl /selbstmord eingeben . Manche würden hierzu ein Timer nehmen .
Aber wenn der Server off geht dann ist ende im gelände und der timer ist weg. Also können wir hier gemütlich den Timestamp nutzen
Hier das beispiel:
Zuerst brauchen wir mal ne timestamp funktion , wir nutzen wie gesagt die Unix Timestamp funktion .Jetzt fragen sich viele warum,
ganz einfach weil diese sehr verbreitet ist und z.B: auch in php seinen einsatz findet(wenn ihr z.B ein gamemode mit euren ucp verwendet wollt und dem spieler anzeigen lassen wollt wann er das nächste mal /selbstmord benutzen kann)
Hier die funktion (credits an mabako)
stock mktime(hour,minute,second,day,month,year)
{
new timestamp2;
timestamp2 = second + (minute * 60) + (hour * 3600);
new days_of_month[12];
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
} else {
days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
}
new days_this_year = 0;
days_this_year = day;
if(month > 1) { // No January Calculation, because its always the 0 past months
for(new i=0; i<month-1;i++) {
days_this_year += days_of_month[i];
}
}
timestamp2 += days_this_year * 86400;
for(new j=1970;j<year;j++) {
timestamp2 += 31536000;
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
}
return timestamp2;
}
stock Now()
{
new hour,minute,second,year,month,day;
gettime(hour, minute, second);
getdate(year, month, day);
return mktime(hour,minute,second,day,month,year);
}
also bekommen wir mit Now() den aktuellen Unix-Zeitstempel
so jetzt brauchen wir ne Variable für den Spieler , das machen wir ganz oben
mit new NextKill[MAX_PLAYERS];
so und für den befehl nutze ich mal ocmd(danke kleiner_opa )
ocmd:selbstmord(playerid,params[])
{
if(Now()<NextKill[playerid]) return SendClientMessage(playerid,COLOR,"Sie können nur alle 60Minuten /selbstmord machen!");//jetzt überprüfen wir ob NextKill größer als der der Aktuelle Zeitstempel ist , wenn ja sind die 60 minuten noch nicht um
NextKill[playerid]=Now()+3600;//Hier zählen wir die 60Minuten dazu (in Sekunden natürlich)
SetPlayerHealth(playerid,0);
SendClientMessage(playerid,COLOR,"Du hast selbstmord begangen!");
return 1;
}
Jetzt müsst ihr natürlich den NextKill wert irgendwo speichern , damit er noch vorhanden ist wenn der Spieler Off geht
so das war ein beispiel von vielen !
Man kann es auch z.B; bei einem Taxi fahrer machen wo man die "Abrechnung" in sekunden macht , oder bei einem WaffenTransport der nur einmal pro tag gehen soll u.s.w
Der Vorteil ist ein Timestamp verbraucht keine Ressourcen ,man braucht dazu nur eine Variable im Gegensatz zu einem Timer der sehr viel Ressourcen braucht.
Ich hoffe , dass ich euch hier den Timestamp gut erklärt habe und ihr ihn öfters nutzen werdet , ich bedanke mich auch bei php_exec der mir den Timestamp so gut und ausführlich gezeigt hat.