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
#2

someone?
Reply
#3

Isn't that from LuxAdmin script?
Just recopy it again :P
Reply
#4

Hmmm personal i would save the return of gettime(time in seconds since 1. January 1970) and see the differentses. That would anyway solve this problem.
Reply
#5

Quote:
Originally Posted by Lady-Happy
Посмотреть сообщение
Isn't that from LuxAdmin script?
Just recopy it again :P
Is not LuxAdmin script, it's my personaly script!
Quote:
Originally Posted by Frede
Посмотреть сообщение
Hmmm personal i would save the return of gettime(time in seconds since 1. January 1970) and see the differentses. That would anyway solve this problem.
just add gettime in minutes hours and seconds?
Reply
#6

Help please?
Reply
#7

someone can help me please?
Reply
#8

you can use unix timestamps. Here is a thread:
https://sampforum.blast.hk/showthread.php?tid=254915
everything is explained there
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)