Eduardo_AC icon

[FilterScript] Ban Temporário [SQLite]

Eduardo_AC | PRO | 08/28/17 08:26:20 PM UTC | 0 ⭐ | 7786 👁️ | Never ⏰ | []
Pawn |

13.25 KB

|

None

|

0 👍

/

0 👎

/*      ______________________________________
        |_____FILTERSCRIPT_TEMP_BAN_SYSTEM___|
        |______________BY_F1N4L______________|
        |_______Initialized_29_03_2016_______|
        |_________Updated_30_03_2016_________|
        |___________v_0.3z__v.2.0____________|
        
        STOCKS:
        BanirPlayer(Nome[], IP[], Banido_Por[], Data[], Motivo[], GetTime, Tempo[])
        BanirIpPlayer(Nome[], IP[], Banido_Por[], Data[], Motivo[], GetTime, Tempo[])
        DesbanirPlayer(Conta[])
*/
 
#include a_samp // By SA:MP Team
#include sscanf2 // By Y_Less
#include zcmd // By Zeex
 
#define             BAN_TABLE               "BANIMENTOS"
#define             BAN_DB                  "Bans.db"
 
#define             DIALOG_BAN              222
 
new 
    DB:Ban_Database
;
 
public OnFilterScriptInit()
{
    new
        BAN_STR[500]
    ;
    
    Ban_Database = db_open(BAN_DB);
    strcat(BAN_STR, "CREATE TABLE IF NOT EXISTS `"BAN_TABLE"` (");
    strcat(BAN_STR, "`ID` INTEGER PRIMARY KEY AUTOINCREMENT,");
    strcat(BAN_STR, "`NOME` TEXT DEFAULT 'N/A',");
    strcat(BAN_STR, "`IP` TEXT DEFAULT '0.0.0.0',");
    strcat(BAN_STR, "`BANIDO POR` TEXT DEFAULT 'N/A',");
    strcat(BAN_STR, "`DATA` TEXT DEFAULT 'N/A',");
    strcat(BAN_STR, "`MOTIVO` TEXT DEFAULT 'N/A',");
    strcat(BAN_STR, "`GETTIME` NUMERIC DEFAULT '0',");
    strcat(BAN_STR, "`TEMPO` TEXT DEFAULT 'N/A')");
    db_free_result(db_query(Ban_Database, BAN_STR));
    
    return 1;
}
 
public OnFilterScriptExit()
{
    db_close(Ban_Database);
    return 1;
}
 
public OnPlayerConnect(playerid)
{
    new
        String[350],
        Strcat[500],
        GetTime,
        GetIp[30],
        DBResult:Resultado
    ;
    
    format(String,sizeof(String),"SELECT * FROM `"BAN_TABLE"` WHERE `IP` = '%s' OR `NOME` = '%s' COLLATE NOCASE", GetIP(playerid), GetName(playerid));
    Resultado = db_query(Ban_Database,String);
    if(db_num_rows(Resultado))
    {
        db_get_field_assoc(Resultado, "GETTIME", String, 40);
        GetTime = strval(String);
        if(GetTime > gettime())
        {
            format(String,sizeof(String), "NOME: %s\n", GetName(playerid));strcat(Strcat, String);
            db_get_field_assoc(Resultado, "IP", GetIp, 30);
            format(String,sizeof(String), "IP: %s\n", GetIp);strcat(Strcat, String);
            db_get_field_assoc(Resultado, "BANIDO POR", String, 30);
            format(String,sizeof(String), "BANIDO POR: %s\n", String);strcat(Strcat, String);
            db_get_field_assoc(Resultado, "MOTIVO", String, 40);
            format(String,sizeof(String), "MOTIVO: %s\n", String);strcat(Strcat, String);
            db_get_field_assoc(Resultado, "DATA", String, 40);
            format(String,sizeof(String), "DATA: %s\n", String);strcat(Strcat, String);
            db_get_field_assoc(Resultado, "TEMPO", String, 50);
            format(String,sizeof(String), "TEMPO: %s\n", String);strcat(Strcat, String);
            format(String,sizeof(String), "TEMPO RESTANTE: %s", ConvertTime(GetTime - gettime()));strcat(Strcat, String);
            ShowPlayerDialog(playerid, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Painel de Banimento:", Strcat, "SAIR","");
            
            SetTimerEx("Kickar", 500, false, "i", playerid);
        }
        else if(GetTime < gettime())
        {
            format(String,sizeof(String),"DELETE FROM `"BAN_TABLE"` WHERE `NOME` = '%s'", GetName(playerid));
            Resultado = db_query(Ban_Database,String);
            
            SendClientMessage(playerid, 0xFF0000FF, "Sua conta foi desbanida.");
        }
    }
    db_free_result(db_query(Ban_Database, String));
    
    return 1;
}
 
public OnPlayerSpawn(playerid)
{
    return 1;
}
 
CMD:ban(playerid, params[])
{
    new
        TARGET,
        MOTIVO[30],
        DATA[50],
        STRING[300],
        Data[3],
        Hora[3],
        GetTime,
        TEMPO
    ;
    
    if(!IsPlayerAdmin(playerid))
        return SendClientMessage(playerid, -1, "Você precisa ser Admin RCON para realizar esta ação.");
    
    if(sscanf(params, "us[300]is[30]", TARGET, STRING, TEMPO, MOTIVO))
        return SendClientMessage(playerid, -1, "/BAN [ID] [DIAS(D) ou HORAS(H) ou MINUTOS(M)] [TEMPO] [MOTIVO]");
        
    if(strlen(MOTIVO) < 3 || strlen(MOTIVO) > 30)
        return SendClientMessage(playerid, -1, "Motivo inválido. Utilize entre 3 - 30  caracteres.");
    
    if(TEMPO < 1 || TEMPO > 1000)
        return SendClientMessage(playerid, -1, "Tempo inválido. Utilize entre 1 - 1000  minutos/horas/dias.");
    
    if(!IsPlayerConnected(TARGET))
        return SendClientMessage(playerid, -1, "Player não está conectado.");
    
    getdate(Data[0], Data[1], Data[2]);
    gettime(Hora[0], Hora[1], Hora[2]);
    
    format(DATA, sizeof(DATA), "%02i/%02i/%02i | %02i:%02i:%02i", Data[2], Data[1], Data[0], Hora[0], Hora[1], Hora[2]);
    
    if(strcmp(STRING, "D", true) == 0)
        GetTime = TEMPO * 24 * 60 * 60,
        BanirPlayer(GetName(TARGET), GetIP(TARGET), GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
        db_free_result(db_query(Ban_Database, STRING));
    else if(strcmp(STRING, "H", true) == 0)
        GetTime = TEMPO * 60 * 60,
        BanirPlayer(GetName(TARGET), GetIP(TARGET), GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
        db_free_result(db_query(Ban_Database, STRING));
    else if(strcmp(STRING, "M", true) == 0)
        GetTime = TEMPO * 60,
        BanirPlayer(GetName(TARGET), GetIP(TARGET), GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
        db_free_result(db_query(Ban_Database, STRING));
    else return SendClientMessage(playerid, -1, "/BAN [ID] [MOTIVO] [DIAS(D) ou HORAS(H) ou MINUTOS(M)] [TEMPO]");
    
    format(STRING,sizeof(STRING), "Admin '%s' baniu temporariamente o jogador '%s [ID: %i]'. Motivo: '%s'. TEMPO: '%s'", GetName(playerid), GetName(TARGET), TARGET, MOTIVO, ConvertTime(GetTime));
    SendClientMessageToAll(-1, STRING);
    
    return 1;
}
 
CMD:banip(playerid, params[])
{
    new
        IP[30],
        MOTIVO[30],
        DATA[50],
        STRING[300],
        Data[3],
        Hora[3],
        GetTime,
        TEMPO
    ;
    
    if(!IsPlayerAdmin(playerid))
        return SendClientMessage(playerid, -1, "Você precisa ser Admin RCON para realizar esta ação.");
    
    if(sscanf(params, "s[30]s[300]is[30]", IP, STRING, TEMPO, MOTIVO))
        return SendClientMessage(playerid, -1, "/BANIP [IP] [DIAS(D) ou HORAS(H) ou MINUTOS(H)] [TEMPO] [MOTIVO]");
    
    if(strlen(MOTIVO) < 3 || strlen(MOTIVO) > 30)
        return SendClientMessage(playerid, -1, "Motivo inválido. Utilize entre 3 - 30  caracteres.");
    
    if(strlen(IP) < 1 || strlen(IP) > 30) 
        return SendClientMessage(playerid, -1, "Tamanho de IP inválido.");
    
    if(TEMPO < 1 || TEMPO > 1000)
        return SendClientMessage(playerid, -1, "Tempo inválido. Utilize entre 1 - 1000  minutos/horas/dias.");
    
    getdate(Data[0], Data[1], Data[2]);
    gettime(Hora[0], Hora[1], Hora[2]);
    
    format(DATA, sizeof(DATA), "%02i/%02i/%02i | %02i:%02i:%02i", Data[2], Data[1], Data[0], Hora[0], Hora[1], Hora[2]);
    
    if(strcmp(STRING, "D", true) == 0)
        GetTime = TEMPO * 24 * 60 * 60,
        BanirIpPlayer("N/A", IP, GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
        db_free_result(db_query(Ban_Database, STRING));
    else if(strcmp(STRING, "H", true) == 0)
        GetTime = TEMPO * 60 * 60,
        BanirIpPlayer("N/A", IP, GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
        db_free_result(db_query(Ban_Database, STRING));
    else if(strcmp(STRING, "M", true) == 0)
        GetTime = TEMPO * 60,
        BanirIpPlayer("N/A", IP, GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
        db_free_result(db_query(Ban_Database, STRING));
    else return SendClientMessage(playerid, -1, "/BAN [ID] [DIAS(D) ou HORAS(H) ou MINUTOS(M)] [TEMPO] [MOTIVO]");
    
    format(STRING,sizeof(STRING), "Admin '%s' baniu temporariamente o IP '%s'. Motivo: '%s'. TEMPO: '%s'", GetName(playerid), IP, MOTIVO, ConvertTime(GetTime));
    SendClientMessageToAll(-1, STRING);
    
    return 1;
}
 
CMD:desban(playerid, params[])
{
    new
        DESBAN[30],
        CONTA[30],
        STRING[200],
        DBResult:Resultado
    ;
    
    if(!IsPlayerAdmin(playerid))
        return SendClientMessage(playerid, -1, "Você precisa ser Admin RCON para realizar esta ação.");
    
    if(sscanf(params, "s[30]s[30]", DESBAN, CONTA))
        return SendClientMessage(playerid, -1, "/DESBAN IP [IP] | /DESBAN NOME [NOME]");
    
    if(strcmp(DESBAN, "IP", true) == 0)
    {
        format(STRING, sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `IP` = '%s'", CONTA);
    }
    else if(strcmp(DESBAN, "NOME", true) == 0)
    {
        format(STRING, sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `NOME` = '%s' COLLATE NOCASE", CONTA);
    }
    else return SendClientMessage(playerid, -1, "/DESBAN IP [IP] | /DESBAN NOME [NOME]");
 
    Resultado = db_query(Ban_Database, STRING);
    if(db_num_rows(Resultado))
    {
        DesbanirPlayer(CONTA);
        SendClientMessage(playerid, -1, "Conta desbanida com sucesso.");
    }
    else SendClientMessage(playerid, -1, "Conta inexistente no Banco de Dados.");
 
    db_free_result(db_query(Ban_Database, STRING));
    
    return 1;
}
 
stock BanirPlayer(xNome[], xIP[], xBanido_Por[], xData[], xMotivo[], xGetTime, xTempo[])
{
    new
        STRING[500],
        STRCAT[300],
        DBResult:Resultado
    ;
    
    format(STRING,sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `NOME` = '%s' COLLATE NOCASE", xNome);
    Resultado = db_query(Ban_Database,STRING);
    if(!db_num_rows(Resultado))
        format(STRING, sizeof(STRING), "INSERT INTO `"BAN_TABLE"` (`NOME`, `IP`, `BANIDO POR`, `DATA`, `MOTIVO`, `GETTIME`, `TEMPO`)VALUES('%s', '%s', '%s', '%s', '%s', '%i', '%s')", xNome, xIP, xBanido_Por, xData, xMotivo, xGetTime + gettime(), xTempo);
    db_free_result(db_query(Ban_Database, STRING));
    
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(strcmp(GetName(i), xNome, false) == 0)
        {
            format(STRING, sizeof(STRING), "NOME: %s\n", xNome);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "IP: %s\n", xIP);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "BANIDO POR: %s\n", xBanido_Por);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "MOTIVO: %s\n", xMotivo);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "DATA: %s\n", xData);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "TEMPO: %s\n", ConvertTime(xGetTime));strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "TEMPO RESTANTE: %s", ConvertTime(xGetTime));strcat(STRCAT, STRING);
            ShowPlayerDialog(i, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Painel de Banimento:", STRCAT, "SAIR","");
            
            SetTimerEx("Kickar", 500, false, "i", i);
        }
    }
    
    return 1;
}
 
stock BanirIpPlayer(xNome[], xIP[], xBanido_Por[], xData[], xMotivo[], xGetTime, xTempo[])
{
    new
        STRING[500],
        STRCAT[300],
        DBResult:Resultado
    ;
    
    format(STRING, sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `IP` = '%s'", xIP);
    Resultado = db_query(Ban_Database, STRING);
    if(db_num_rows(Resultado))
        format(STRING, sizeof(STRING), "UPDATE `"BAN_TABLE"` SET `DATA` = '%s', `MOTIVO` = '%s', `GETTIME` = '%i', `TEMPO` = '%s' WHERE `IP` = '%s'", xData, xMotivo, xGetTime + gettime(), xTempo, xIP);
    else
        format(STRING, sizeof(STRING), "INSERT INTO `"BAN_TABLE"` (`NOME`, `IP`, `BANIDO POR`, `DATA`, `MOTIVO`, `GETTIME`, `TEMPO`)VALUES('%s', '%s', '%s', '%s', '%s', '%i', '%s')", xNome, xIP, xBanido_Por, xData, xMotivo, xGetTime + gettime(), xTempo);
    db_free_result(db_query(Ban_Database, STRING));
    
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(strcmp(GetIP(i), xIP, true) == 0)
        {
            format(STRING, sizeof(STRING), "NOME: %s\n", GetName(i));strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "IP: %s\n", xIP);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "BANIDO POR: %s\n", xBanido_Por);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "MOTIVO: %s\n", xMotivo);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "DATA: %s\n", xData);strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "TEMPO: %s\n", ConvertTime(xGetTime));strcat(STRCAT, STRING);
            format(STRING, sizeof(STRING), "TEMPO RESTANTE: %s", ConvertTime(xGetTime));strcat(STRCAT, STRING);
            ShowPlayerDialog(i, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Painel de Banimento:", STRCAT, "SAIR","");
            
            SetTimerEx("Kickar", 500, false, "i", i);
        }
    }
    
    return 1;
}
 
stock DesbanirPlayer(xConta[])
{
    new
        STRING[500],
        DBResult:Resultado
    ;
    
    format(STRING, sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `IP` = '%s' OR `NOME` = '%s' COLLATE NOCASE", xConta, xConta);
    Resultado = db_query(Ban_Database, STRING);
    if(db_num_rows(Resultado))
        format(STRING, sizeof(STRING), "DELETE FROM `"BAN_TABLE"` WHERE `IP` = '%s' OR `NOME` = '%s' COLLATE NOCASE", xConta, xConta),
    db_free_result(db_query(Ban_Database, STRING));
    
    return 1;
}
 
forward Kickar(playerid);
public Kickar(playerid)
{
    return Kick(playerid);
}
 
stock ConvertTime(SEGUNDOS)
{
    new 
        MINUTOS,
        HORAS,
        DIAS,
        String[200]
    ;
    
    if(SEGUNDOS > 59)
    {
        MINUTOS = SEGUNDOS / 60;
        SEGUNDOS = SEGUNDOS - MINUTOS * 60;
    }
    if(MINUTOS > 59)
    {
        HORAS = MINUTOS / 60;
        MINUTOS = MINUTOS - HORAS * 60;
    }
    if(HORAS > 23)
    {
        DIAS = HORAS / 24;
        HORAS = HORAS - DIAS * 24;
    }
    
    format(String, sizeof(String), "%02d Dias e %02d Horas e %02d Minutos e %02d Segundos", DIAS, HORAS, MINUTOS, SEGUNDOS);
    if(DIAS == 0) format(String, sizeof(String),"%02d Horas e %02d Minutos e %02d Segundos", HORAS, MINUTOS, SEGUNDOS);
    if(DIAS == 0 && HORAS == 0) format(String, sizeof(String),"%02d Minutos e %02d Segundos", MINUTOS, SEGUNDOS);
    if(DIAS == 0 && HORAS == 0 && MINUTOS == 0) format(String, sizeof(String),"%02d Segundos", SEGUNDOS);
    return String;
}
 
stock GetName(playerid)
{
    new
        GetName_[24]
    ;
    
    GetPlayerName(playerid, GetName_, sizeof(GetName_));
    
    return GetName_;
}
 
stock GetIP(playerid)
{
    new
        GetIP_[30]
    ;
    
    GetPlayerIp(playerid, GetIP_, sizeof(GetIP_));
    
    return GetIP_;
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎