Hallo.
Ich habe hier nen kleinen Timeban-Fail.
Undzwar hatte ich damals mal eine Unixtime-Convert Funktion welche einen Unix-Timestamp in ein Datum & Uhrzeit umgewandelt hat.
Wenn ich nun die Funktion verwende:
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;
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
}
timestamp2 += 31536000;
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
}
return timestamp2;
}
}
stock ConvertUnix(zeitpunkt, &hour, &minute, &second, &day, &month, &year)
{
new h = 0, m = 0, s = 0, da = 1, mo = 1, ye = 1970;
for(;;) { ye++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { ye--; break; } }
for(;;) { mo++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { mo--; break; } }
for(;;) { da++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { da--; break; } }
for(;;) { h++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { h--; break; } }
for(;;) { m++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { m--; break; } }
for(;;) { s++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { s--; break; } }
hour = h; minute = m; second = s; day = da; month = mo; year = ye; return 1;
}
{
new h = 0, m = 0, s = 0, da = 1, mo = 1, ye = 1970;
for(;;) { ye++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { ye--; break; } }
for(;;) { mo++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { mo--; break; } }
for(;;) { da++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { da--; break; } }
for(;;) { h++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { h--; break; } }
for(;;) { m++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { m--; break; } }
for(;;) { s++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { s--; break; } }
hour = h; minute = m; second = s; day = da; month = mo; year = ye; return 1;
}
Und mich per Timeban Befehl banne, dann kommt folgendes Ergebnis raus (print)
Hier mal der /tban Befehl..
CMD:tban(playerid, params[])
{
new pID, grund[64], time, string[128];
if(sscanf(params, "uis[64]", pID, time, grund))return SendClientMessage(playerid, COLOR_GREY, "* Benutze /tban [SpielerID/Name] [Zeit in Min.] [Grund]");
if(Spieler[playerid][pAdmin] < 1)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt nicht die benötigten Rechte.");
if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist nicht online.");
if(time < 1 || time > 14400)return SendClientMessage(playerid, COLOR_GREY, "Die Zeit sollte sich zwischen 1 und 14400 liegen. (1 Minute oder 10 Tage)");
new tBanTime = time * 60;
tBanTime = tBanTime + gettime();
Spieler[pID][pTimeBan] = tBanTime;
new tDay, tMonth, tYear, tHour, tMinute, tSecond;
ConvertUnix(tBanTime, tHour, tMinute, tSecond, tDay, tMonth, tYear);
printf("User %s time banned - Date: %02d.%02d.%d - Time: %02d:%02d:%02d", GetName(pID), tDay, tMonth,tYear, tHour, tMinute, tSecond);
format(string, sizeof(string), "%s wurde von %s für %d Minuten gebannt, Grund: %s", GetName(pID), GetName(playerid), time, grund);
SendClientMessageToAll(COLOR_DARKRED, string);
Kick(pID);
return 1;
}
Funktionieren tut alles, nur die Zeit wird nicht richtig angezeigt.
Kann jemand helfen?
//Edit
Ist wirklich dringend, die User wollen Bugfrei spielen.
Hab mich auch schon überall erkundigt, und alle Themen durchgeschaut. Da hatte ich glaube Nortex die Funktion, die ich hier auch habe. (ConvertUnix) nur geht es nicht.
//Edit-2
Hab schon überall nachgefragt bei Leuten wie VIPER Usw, die können aber auch net helfen.
//Edit-3
Überschrift ...