TempBan
#1

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;
}
Reply


Messages In This Thread
TempBan - by Shean - 26.03.2013, 20:10
Re: TempBan - by Shean - 26.03.2013, 21:13
Re: TempBan - by Lady-Happy - 26.03.2013, 21:55
Re: TempBan - by Frede - 26.03.2013, 22:31
Re: TempBan - by Shean - 27.03.2013, 12:48
Re: TempBan - by Shean - 28.03.2013, 18:42
Re: TempBan - by Shean - 29.03.2013, 12:19
Re: TempBan - by dominik523 - 29.03.2013, 13:10

Forum Jump:


Users browsing this thread: 1 Guest(s)