SA-MP Forums Archive
Timeban - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Timeban (/showthread.php?tid=557715)



Timeban - EmpireSk - 14.01.2015

hi,
how to properly timeban through sscanf and that there was no tmp strtok and so on
for example, I'm putting code from one system admin
and that if this could be to sscanf

PHP код:
if(strcmp(cmd, "/tempban", true) == 0) //Credits to LuxAdmin
    
{
        new 
name[MAX_PLAYER_NAME];
        new 
giveplayer[MAX_PLAYER_NAME];
        new 
giveplayerid;
        if(
Account[playerid][Level] < 5) return SendClientMessage(playerid,Red,"ERROR: You are not a high enough level to use this command");
            
tmp = strtok(cmdtext,idx);
            if(!
strlen(tmp))
            {
                  
SendClientMessage(playerid,COLOR_ERROR, "{6EF83C}Usage: {FFFFFF}/tempban [PlayerID] [Day(s)] [Reason]");
                return 
1;
            }
            
giveplayerid = ReturnUser(tmp);
            if(
IsPlayerConnected(giveplayerid))
            {
                
tmp = strtok(cmdtext, idx);
                if (!
strlen(tmp))
                {
                
SendClientMessage(playerid, COLOR_ERROR, "{6EF83C}Usage: {FFFFFF}/tempban [PlayerID] [Day(s)] [Reason]");
                return 
1;
                }
                new 
days = strval(tmp);
                if(!
IsNumeric(tmp))
                return 
SendClientMessage(playerid, Red, "ERROR: Invalid Day! Only Numbers!");
                if(
strval(tmp) <= 0 || strval(tmp) > 1000)
                return 
SendClientMessage(playerid, Red, "ERROR: Invalid Day! (1-1000)");
                new 
reason[128];
                
reason = strtok2(cmdtext,idx);
                if (!
strlen(reason))
                return 
SendClientMessage(playerid, Red, "ERROR: Reason not Specified!");
                if (
strlen(reason) <= 0 || strlen(reason) > 100)
                return 
SendClientMessage(playerid, Red, "ERROR: Invalid Reason length!");
                new 
ip[15];
                
GetPlayerIp(giveplayerid,ip,15);
                
GetPlayerName(playerid, name, sizeof name);
                
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                new 
File:tempban = fopen("ZeroAdmin/Logs/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, ip);
                    
fwrite(tempban, string);
                    
fclose(tempban);
                }
                
format(string,128,"Administrator %s Temporarily Banned %s for %d Day(s)  Reason: %s",name,giveplayer,days,reason);
                
SendClientMessageToAll(Red,string);
                
Kick(giveplayerid);
                
format(string, sizeof string, "Admin %s Temporarily Banned %s for %d Day(s)  Reason: %s",name,giveplayer,days,reason);
                
SaveLogs("TempBansLog",string);
            }
            else
            {
               
SendClientMessage(playerid,Red,"ERROR: Player is not connected");
            }
    }
    return 
0;
} 



Re: Timeban - xVIP3Rx - 14.01.2015

You'll need another command processor though, In here I used zcmd

pawn Код:
CMD:tempban(playerid, params[]) //Credits to LuxAdmin
{
    if(Account[playerid][Level] < 5) return SendClientMessage(playerid,Red,"ERROR: You are not a high enough level to use this command");

    new giveplayerid, days, reason[50];

    if(sscanf(params, "uds[50]", giveplayerid, days, reason)) return SendClientMesage SendClientMessage(playerid,COLOR_ERROR, "{6EF83C}Usage: {FFFFFF}/tempban [PlayerID] [Day(s)] [Reason]");
    if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,Red,"ERROR: Player is not connected");
    if(days <= 0 || days > 1000) return SendClientMessage(playerid, Red, "ERROR: Invalid Day! (1-1000)");

    new name[MAX_PLAYER_NAME], giveplayer[MAX_PLAYER_NAME],
    new ip[15];
   
    GetPlayerIp(giveplayerid,ip,15);
    GetPlayerName(playerid, name, sizeof name);
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    new File:tempban = fopen("ZeroAdmin/Logs/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, ip);
        fwrite(tempban, string);
        fclose(tempban);
    }
    format(string,128,"Administrator %s Temporarily Banned %s for %d Day(s)  Reason: %s",name,giveplayer,days,reason);
    SendClientMessageToAll(Red,string);
    Kick(giveplayerid);

    format(string, sizeof string, "Admin %s Temporarily Banned %s for %d Day(s)  Reason: %s",name,giveplayer,days,reason);
    SaveLogs("TempBansLog",string);
   
    return 1;
}



Re: Timeban - EmpireSk - 14.01.2015

Thanks bro thanks