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:
Spoiler anzeigen
[pwn]
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;
}
}
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 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;
}[/pwn]
Und mich per Timeban Befehl banne, dann kommt folgendes Ergebnis raus (print)
Hier mal der /tban Befehl..
Spoiler anzeigen
[pwn]
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;
}[/pwn]
Funktionieren tut alles, nur die Zeit wird nicht richtig angezeigt.
Kann jemand helfen?
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:
[pwn]
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))

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;
}
}
timestamp2 += days_this_year * 86400;
for(new j=1970;j<year;j++) {
timestamp2 += 31536000;
if ( ((year % 4 == 0) && (year % 100 != 0))

}
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;
}[/pwn]
Und mich per Timeban Befehl banne, dann kommt folgendes Ergebnis raus (print)
Hier mal der /tban Befehl..
[pwn]
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

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;
}[/pwn]
Funktionieren tut alles, nur die Zeit wird nicht richtig angezeigt.

Kann jemand helfen?
Mit freundlichen Grüßen, Ap0llinaris.
[Blockierte Grafik: http://img6.imagebanana.com/img/lb4rwabb/newsig111.png]
[Blockierte Grafik: http://img6.imagebanana.com/img/lb4rwabb/newsig111.png]
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Ap0llinaris ()