Jump to content

Question

Posted

Am o problema, de exemplu daca "x" primeste ban la ora 23:59 pentru o zii la ora 00:00 ban-ul va expira.

[pawn]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;

}[/pawn]

3 answers to this question

Recommended Posts

Posted

Am facut variabilile dar acum daca banez pe cineva si reintru pe server ma pot loga nu imi mai apare ca sunt banat

[pawn]stock TempBanCheck(playerid)

{

new banname[MAX_PLAYER_NAME];

//new banname[24];

new str[128];

new load[7][32];

new ban_day, ban_month, ban_year, ban_name[15], ban_hour, ban_minute, ban_second;

GetPlayerName(playerid, banname, sizeof banname);

new year, month, day,h,mi,s;

getdate(year, month, day);

gettime(h, mi, s);

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]);

        ban_hour = strval(load[3]);

        ban_minute = strval(load[4]);

        ban_second = strval(load[5]);

        strmid(ban_name, load[6], 0, strlen(load[6])-1, 24);

    if (!(year >= ban_year && month >= ban_month && day >= ban_day))

    {

        if(h <= ban_hour)

{

    if(mi <= ban_minute)

    {

  if(!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;

}[/pawn]

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.