26.03.2013, 20:10
I have a litlle problem! Example: If i ban a player at 23:00 clock for 1 day, at 00:00 clock the ban has expired! How i do to expire the ban at next day at 23:00
Код:
if(strcmp(cmd, "/banex", true) == 0) { new name[MAX_PLAYER_NAME]; if(PlayerInfo[playerid][pAdminServer] >= 1) { tmp = strtok(cmdtext,idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD1, "USAGE: /banex [playerid/PartOfName] [days] [reason]"); return 1; } if(PlayerBanned[playerid] == -1)//report timer { SendClientMessage(playerid,COLOR_LIGHTRED,"You can use this command only once at 3 minutes."); return 1; } giveplayerid = ReturnUser(tmp); if(IsPlayerConnected(giveplayerid)) { tmp = strtok(cmdtext, idx); if (!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD1, "USAGE: /banex [playerid/PartOfName] [days] [reason]"); return 1; } new days = strval(tmp); if(!IsNumeric(tmp)) return SendClientMessage(playerid, COLOR_LIGHTRED, "ERROR: You can use only numbers!"); if(strval(tmp) <= 0 || strval(tmp) > 1000) return SendClientMessage(playerid, COLOR_LIGHTRED, "ERROR: Invalid number [1-1000]"); new reason[128]; reason = strtok2(cmdtext,idx); if (!strlen(reason)) return SendClientMessage(playerid, COLOR_LIGHTRED, "ERROR: Reason not specified!"); if (strlen(reason) <= 0 || strlen(reason) > 100) return SendClientMessage(playerid, COLOR_LIGHTRED, "ERROR: Invalid reason length!"); GetPlayerName(playerid, name, sizeof name); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); new File:tempban = fopen("TempBans.ban", io_append); if (tempban) { new year,month,day; getdate(year, month, day); day += days; if (IsMonth31(month)) { if (day > 31) { month += 1; if (month > 12) { year += 1; while(day > 31) day -= 31; } else while(day > 31) day -= 31; } } else if (!IsMonth31(month)) { if (day > 30) { month += 1; if (month > 12) { year += 1; while(day > 30) day -= 30; } else while(day > 30) day -= 30; } } else if (!IsMonth31(month) && IsMonth29(year) && month == 2) { if (day > 29) { month += 1; if (month > 12) { year += 1; while(day > 29) day -= 29; } else while(day > 29) day -= 29; } } else if (!IsMonth31(month) && !IsMonth29(year) && month == 2) { if (day > 28) { month += 1; if (month > 12) { year += 1; while(day > 28) day -= 28; } else while(day > 28) day -= 28; } } format(string, sizeof string, "%d|%d|%d|%s\n", day, month, year, giveplayer); fwrite(tempban, string); fclose(tempban); } new y,m,d; getdate(y,m,d); format(string,128,"AdmCmd: %s was banned by %s for %d days, reason: %s",giveplayer,name,days,reason); SendClientMessageToAll(COLOR_LIGHTRED,string); Kick(giveplayerid); format(string, sizeof string, "(%d/%d/%d) Admin %s banned %s for %d Day, reason: %s",d,m,y,name,giveplayer,days,reason); BanLog(string); PlayerBanned[playerid] = -1; SetTimerEx("ResetBan", 180000, 0, "d", playerid); } else { format(string, sizeof(string), "%d is not an active player.", giveplayerid); SendClientMessage(playerid, COLOR_GRAD1, string); } } else return SendClientMessage(playerid,COLOR_GRAD1,"You are not authorized to use that command."); return true; }
Код:
stock TempBanCheck(playerid) { new banname[24]; new str[128]; new load[4][32]; new ban_day, ban_month, ban_year, ban_name[15]; GetPlayerName(playerid, banname, sizeof banname); new year, month, day; getdate(year, month, day); new File:file = fopen("TempBans.ban",io_read); if (file) { while (fread(file, str, sizeof str)) { split(str, load, '|'); ban_day = strval(load[0]); ban_month = strval(load[1]); ban_year = strval(load[2]); strmid(ban_name, load[3], 0, strlen(load[3])-1, 24); if (!(year >= ban_year && month >= ban_month && day >= ban_day) && !strcmp(ban_name, banname, true)) { format(str, sizeof str, "|- Login de pe cont banat. Banul expira automat la data de: %d/%d/%d -|", ban_day, ban_month, ban_year); SendClientMessage(playerid, COLOR_OOC, str); return Kick(playerid); } } } return true; } stock IsMonth31(month) { switch (month) { case 1: return 1; case 3: return 1; case 5: return 1; case 7: return 1; case 8: return 1; case 10: return 1; case 12: return 1; default: return 0; } return 0; } stock IsMonth29(year) { new y = 2000; for(new i = 4; i < 3000; i += 4) if ((y+i) == year) return 1; return 0; } stock strtok2(const string[], &idx) { new length = strlen(string); while ((idx < length) && (string[idx] <= ' ')) { idx++; } new offset = idx; new result[128]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = string[idx]; idx++; } result[idx - offset] = EOS; return result; }