Ban command is bugged
#1

When I ban someone, he can still join the server and login.

Where is the problem?

PHP код:
CMD:ban(playerid, params[])
{
    
LevelCheck(playerid, 1);
    new 
target, reason[35], days;
    if(
sscanf(params, "is[35]I(0)", target, reason, days)) return Usage(playerid, "ban [playerid] [reason] [days(0 for permanent ban)]");
    if(!
IsPlayerConnected(target)) return Error(playerid, "The specified player is not connected, use /oban instead.");
    if(
target == playerid) return Error(playerid, "You cannot ban yourself.");
    if(
GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You cannot use this command on higher level admin.");
    if(
days < 0) return Error(playerid, "Invalid days, must be greater than 0 for temp ban, or 0 for permanent ban.");
    if(
strlen(reason) < 3 || strlen(reason) > 35) return Error(playerid, "Invalid reason length, must be b/w 0-35 characters.");
    new 
bandate[18], date[3], time;
    
getdate(date[0], date[1], date[2]);
    
format(bandate, sizeof(bandate), "%02i/%02i/%i", date[2], date[1], date[0]);
    if(
days == 0) time = 0;
    else 
time = ((days * 24 * 60 * 60) + gettime());
    new 
handle = SQL::Open(SQL::INSERT, ""BANS_TABLE"");
    
SQL::ToggleAutoIncrement(handle, true);
    
SQL::WriteString(handle, "ban_username", GetName(target));
    
SQL::WriteString(handle, "ban_ip", GetIP(target));
    
SQL::WriteString(handle, "ban_by", GetName(playerid));
    
SQL::WriteString(handle, "ban_on", bandate);
    
SQL::WriteString(handle, "ban_reason", reason);
    
SQL::WriteInt(handle, "ban_expire", time);
    
SQL::Close(handle);
    if(
days == 0)
    {
        new 
string[144];
        
format(string, sizeof(string), "* %s(%i) has been banned by Admin %s(%d) "orange"[Reason: %s]", GetName(target), target, GetName(playerid), playerid, reason);
        
SendClientMessage(target, COLOR_RED, string);
        
#if defined SAVE_LOGS
            
SaveLog("bans.txt", string);
        
#endif
    
}
    else
    {
        new 
string[258];
        
format(string, sizeof(string), "* %s(%i) has been temp banned by Admin %s(%d) "orange"[Reason: %s] [Days: %i]", GetName(target), target, GetName(playerid), playerid, reason, days);
        
SendClientMessage(target, COLOR_RED, string);
        
#if defined SAVE_LOGS
            
SaveLog("bans.txt", string);
        
#endif
        
format(string, sizeof(string), "* Temp banned for %i days "orange"[Unban on %s]", days, ConvertTime(time));
        
SendClientMessage(target, COLOR_RED, string);
    }
     
PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
    
PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
    
DelayKick(target);
    return 
1;
} 
Reply
#2

I bet it's the ban system by SecretBoss. right?
Well, You have to check if the player banned OnPlayerConnect.
Either with his username, or IP:
PHP код:
//Check username
if(SQL::RowExistsEx(""BANS_TABLE"", "ban_username", GetName(playerid)))

//Check IP
if(SQL::RowExistsEx(""BANS_TABLE"", "ban_ip", GetIP(playerid))) 
take a look on the script you took this from and you will find what I mean under OnPlayerConnect.
Reply
#3

Here:
PHP код:
// Ban Checking system
    
new
        
string[6][24],
        
string2[156],
        
expire,
        
DIALOG[676]
    ;

    if(
SQL::RowExistsEx(""BANS_TABLE"", "ban_username", GetName(playerid)))
    {
        new 
handle = SQL::OpenEx(SQL::READ, ""BANS_TABLE"", "ban_username", GetName(playerid));
        
SQL::ReadString(handle, "ban_username", string[1], 24);
        
SQL::ReadString(handle, "ban_ip", string[2], 24);
        
SQL::ReadString(handle, "ban_by", string[3], 24);
        
SQL::ReadString(handle, "ban_on", string[4], 24);
        
SQL::ReadString(handle, "ban_reason", string[5], 24);
        
SQL::ReadInt(handle, "ban_expire", expire);
        
SQL::Close(handle);

        if(
expire > gettime() || expire == 0)
        {

            
strcat(DIALOG, ""white"Your account is banned from this server,\n\n");

            
format(string2, sizeof(string2), ""white"Username: "red"%s\n", string[1]);
            
strcat(DIALOG, string2);

            
format(string2, sizeof(string2), ""white"IP: "red"%s\n", string[2]);
            
strcat(DIALOG, string2);

            
format(string2, sizeof(string2), ""white"Banned by: "red"%s\n", string[3]);
            
strcat(DIALOG, string2);

            
format(string2, sizeof(string2), ""white"Reason: "red"%s\n", string[5]);
            
strcat(DIALOG, string2);

            
format(string2, sizeof(string2), ""white"Ban date: "red"%s\n", string[4]);
            
strcat(DIALOG, string2);

            new 
expire2[68];
            if(
expire == 0) expire2 = "PERMANENT";
            else 
expire2 = ConvertTime(expire);
            
format(string2, sizeof(string2), ""white"Timeleft: "red"%s\n\n", expire2);
            
strcat(DIALOG, string2);

            
strcat(DIALOG, ""white"If you think that you got banned wrongfully, please make an appeal on our forums. Visit svt-reloaded.com\n");
            
strcat(DIALOG, "Make sure you saved this box by pressing F8.");

            
Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Notice", DIALOG, "Close", "");
            
DelayKick(playerid);

            return 
true;
        }
        else
        {
            
SQL::DeleteRowEx(""BANS_TABLE"", "ban_username", GetName(playerid));
            
Server(playerid, "Your account's ban has expired.");
        }
    }

    else if(
SQL::RowExistsEx(""BANS_TABLE"", "ban_ip", GetIP(playerid)))
    {
        new 
handle = SQL::OpenEx(SQL::READ, ""BANS_TABLE"", "ban_ip", GetIP(playerid));
        
SQL::ReadString(handle, "ban_username", string[1], 24);
        
SQL::ReadString(handle, "ban_ip", string[2], 24);
        
SQL::ReadString(handle, "ban_by", string[3], 24);
        
SQL::ReadString(handle, "ban_on", string[4], 24);
        
SQL::ReadString(handle, "ban_reason", string[5], 24);
        
SQL::ReadInt(handle, "ban_expire", expire);
        
SQL::Close(handle);

        if(
expire > gettime() || expire == 0)
        {

            
strcat(DIALOG, ""white"Your IP is banned from this server,\n\n");

            
format(string2, sizeof(string2), ""white"Username: "red"%s\n", string[1]);
            
strcat(DIALOG, string2);

            
format(string2, sizeof(string2), ""white"IP: "red"%s\n", string[2]);
            
strcat(DIALOG, string2);

            
format(string2, sizeof(string2), ""white"Banned by: "red"%s\n", string[3]);
            
strcat(DIALOG, string2);

            
format(string2, sizeof(string2), ""white"Reason: "red"%s\n", string[5]);
            
strcat(DIALOG, string2);

            
format(string2, sizeof(string2), ""white"Ban date: "red"%s\n", string[4]);
            
strcat(DIALOG, string2);

            new 
expire2[68];
            if(
expire == 0) expire2 = "PERMANENT";
            else 
expire2 = ConvertTime(expire);
            
format(string2, sizeof(string2), ""white"Timeleft: "red"%s\n\n", expire2);
            
strcat(DIALOG, string2);

            
strcat(DIALOG, ""white"If you think that you got banned wrongfully, please make an appeal on our forums. Visit svt-reloaded.\n");
            
strcat(DIALOG, "Make sure you saved this box by pressing F8.");

            
Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Notice", DIALOG, "Close", "");
            
DelayKick(playerid);

            return 
true;
        }
        else
        {
            
SQL::DeleteRowEx(""BANS_TABLE"", "ban_username", GetName(playerid));
            
Server(playerid, "Your IP's ban has expired.");
        }
    } 
Reply
#4

Yup, Just put it under OnPlayerConnect. it should work.
Reply
#5

It is under OnPlayerConnect
Reply
#6

Nothing seems to be wrong, Does it print something in mysql_log.txt ?
Reply
#7

If this is part of a downloaded gamemode, you should be chasing up support there... Unless you messed around with it and broke it...
Reply
#8

The problem is: The ban updates into the database. But when I join I get the ban screen. When I press ok it will let me spawn but my stats will not load. So maybe make on response kick?
Reply
#9

Here is the problem:

PHP код:
Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Notice", DIALOG, "Close", "");
            
DelayKick(playerid); 
It doesn't kick the player
Reply
#10

Go to function DelayKick and Kick(playerid); in some circumstation
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)