[FilterScript] Ban System save with MySQL
#1

Here's A ban system which saves with MySQL (works efficiently..)

pawn Код:
//Includes-------------

#include <a_samp>
#include <a_mysql>
#include <zcmd>

// -----------------database defines------------------
#define mysql_host            "localhost"
#define mysql_user            "root"
#define mysql_password     ""your database password within ""
#define mysql_database     ""your server name within ""

// ----------------color defines ---------------------
#define C_RED               0xFF0000FF
#define C_GREY              0xAFAFAFFF
#define C_BLUE              0x0000BBFF
#define C_WHITE             0xFFFFFFFF


//================Script ==============================
public OnFilterScriptInit()
{
    mysql_connect(mysql_host, mysql_user, mysql_database, mysql_password);

    mysql_query("CREATE TABLE IF NOT EXISTS bandata(admin VARCHAR(20), player VARCHAR(20), reason VARCHAR(50), IP VARCHAR(16), banned INT(10))");
    if(mysql_ping() == 1)
    {
        mysql_debug(1);
        printf("[MYSQL] Connection with the BAN database: SUCCESS!");
    }
    else
    {
        printf("[MYSQL] Connection with the BAN database: FAIL!");
    }
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    MySQL_BanCheck(playerid);
    return 1;
}

CMD:ban(playerid, params[]) //ban a player
{
  if(IsPlayerAdmin(playerid))
  {
    new targetid, reason[100];
    if(sscanf(params,"ds[100]", targetid, reason)) return SendClientMessage(playerid, C_WHITE,"USAGE: /ban [playerid][reason]");
    if(!IsPlayerConnected(playerid) && targetid != INVALID_PLAYER_ID)
    {
      SendClientMessage(playerid, C_RED,"SERVER: Player is not connected!");
    }
    else
    {
      new bquery[200], IP[16];
      GetPlayerIp(targetid, IP, 16);
      format(bquery, sizeof(bquery),"INSERT INTO bandata(admin, player, reason, IP, banned) VALUES('%s', '%s', '%s','%s', 1)", PlayerName(playerid),PlayerName(targetid), reason, IP);
      mysql_query(bquery);
      new string[256];
      format(string, sizeof(string),"%s has been banned by Admin %s [Reason: %s]", PlayerName(targetid), PlayerName(playerid), reason);
      SendClientMessageToAll(C_RED, string);
      mysql_free_result();
      Kick(playerid);
    }
  } else return SendClientMessage(playerid, C_RED,"You are not authorized to use this command!");
  return 1;
}

CMD:unban(playerid, params[]) //unban a player
{
  if(IsPlayerAdmin(playerid))
  {
  new target[50];
  if(sscanf(params,"s[50]", target)) return SendClientMessage(playerid, C_RED,"USAGE: /unban [player name]");
  new query[200];
  format(query, sizeof(query),"SELECT * FROM `bandata` WHERE `player`='%s' AND `banned`=1 LIMIT 1", target);
  mysql_query(query);
  mysql_store_result();
  new rows = mysql_num_rows();
  if(rows == 1)
  {
    new uquery[200];
    format(uquery, sizeof(uquery),"DELETE FROM `bandata` WHERE player='%s'", target);
    mysql_query(uquery);
    mysql_store_result();
    new string[200];
    format(string, sizeof(string),"You have unbanned %s", target);
    SendClientMessage(playerid, C_BLUE,string);
  }
  else if(!rows)
  {
    new str[128];
    format(str, sizeof(str),"[ERROR]: No ban was found on this name %s", target);
    SendClientMessage(playerid, C_RED, str);
    mysql_free_result();
  }
  }
    else return SendClientMessage(playerid, C_RED,"You are not authorized to use this command!");
  return 1;
}

CMD:sban(playerid, params[])// search for existing bans
{
  if(IsPlayerAdmin(playerid))
  {
    new target[50], admin[50], player[50], reason[100], IP[16];
    if(sscanf(params,"s[50]", target)) return SendClientMessage(playerid, C_RED,"USAGE: /sban [player name]");
    new query[200];
    format(query, sizeof(query),"SELECT admin,player,reason,IP FROM `bandata` WHERE `player`='%s' AND `banned`=1 LIMIT 1", target);
    mysql_query(query);
    mysql_store_result();
    new rows = mysql_num_rows();
    if(rows == 1)
    {
      while(mysql_fetch_row(query))
      {
        mysql_fetch_field_row(admin, "admin");
        mysql_fetch_field_row(player, "player");
        mysql_fetch_field_row(IP, "IP");
        mysql_fetch_field_row(reason, "reason");
      }
      new string[128];
      format(string, sizeof(string),"Admin: %s  | Player:%s | Reason:%s | IP:%s " , admin, player, reason, IP);
      SendClientMessage(playerid, C_RED, string);
    }
    if(!rows)
    {
      SendClientMessage(playerid, C_RED,"SERVER: No ban found on this name!");
    }
  }
  else return SendClientMessage(playerid, C_RED,"You are not authorized to use this command!");
  return 1;
}

//======================Ban system Stocks=====================================
stock escpname(playerid)
{
    new escname[24], Pname[24];
    GetPlayerName(playerid, Pname, 24);
    mysql_real_escape_string(Pname, escname);
    return escname;
}
stock PlayerName(playerid)
{
  new name[MAX_PLAYER_NAME];
  GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  return name;
}
stock MySQL_BanCheck(playerid)
{
  new query[200], admin[50], pname[50], IP[16], string1[100];
  GetPlayerIp(playerid, IP, 16);
  format(query, sizeof(query),"SELECT * FROM `bandata` WHERE(`player`='%s' OR `IP`='%s') AND `banned`=1 LIMIT 1", escpname(playerid), IP);
  mysql_query(query);
  mysql_store_result();
  if(mysql_num_rows() != 0)
  {
     while(mysql_fetch_row(query))
     {
       mysql_fetch_field_row(admin, "admin");
       mysql_fetch_field_row(pname, "player");
       mysql_fetch_field_row(string1, "reason");
     }

     new string[50], str[50], str1[100];
     format(string, sizeof(string),"Admin: %s", admin);
     format(str, sizeof(str),"Player: %s", pname);
     format(str1, sizeof(str1),"Reason: %s", string1);
     SendClientMessage(playerid, C_RED,"You are banned from this server!");
     SendClientMessage(playerid, C_RED,"___________________");
     SendClientMessage(playerid, C_RED, str);
     SendClientMessage(playerid, C_RED, string);
     SendClientMessage(playerid, C_RED, str1);
     SendClientMessage(playerid, C_RED,"___________________");
     SendClientMessage(playerid, C_RED, "If you think that this BAN was a mistake, then post a screenshot(using F8) on our website");
     SendClientMessage(playerid, C_RED, "www.yourservername.com");
     Kick(playerid);
  }
  mysql_free_result();
  return 1;
}

stock sscanf(string[], format[], {Float,_}:...)
{
        #if defined isnull
                if (isnull(string))
        #else
                if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
        #endif
                {
                        return format[0];
                }
        #pragma tabsize 4
        new
                formatPos = 0,
                stringPos = 0,
                paramPos = 2,
                paramCount = numargs(),
                delim = ' ';
        while (string[stringPos] && string[stringPos] <= ' ')
        {
                stringPos++;
        }
        while (paramPos < paramCount && string[stringPos])
        {
                switch (format[formatPos++])
                {
                        case '\0':
                        {
                                return 0;
                        }
                        case 'i', 'd':
                        {
                                new
                                        neg = 1,
                                        num = 0,
                                        ch = string[stringPos];
                                if (ch == '-')
                                {
                                        neg = -1;
                                        ch = string[++stringPos];
                                }
                                do
                                {
                                        stringPos++;
                                        if ('0' <= ch <= '9')
                                        {
                                                num = (num * 10) + (ch - '0');
                                        }
                                        else
                                        {
                                                return -1;
                                        }
                                }
                                while ((ch = string[stringPos]) > ' ' && ch != delim);
                                setarg(paramPos, 0, num * neg);
                        }
                        case 'h', 'x':
                        {
                                new
                                        num = 0,
                                        ch = string[stringPos];
                                do
                                {
                                        stringPos++;
                                        switch (ch)
                                        {
                                                case 'x', 'X':
                                                {
                                                        num = 0;
                                                        continue;
                                                }
                                                case '0' .. '9':
                                                {
                                                        num = (num << 4) | (ch - '0');
                                                }
                                                case 'a' .. 'f':
                                                {
                                                        num = (num << 4) | (ch - ('a' - 10));
                                                }
                                                case 'A' .. 'F':
                                                {
                                                        num = (num << 4) | (ch - ('A' - 10));
                                                }
                                                default:
                                                {
                                                        return -1;
                                                }
                                        }
                                }
                                while ((ch = string[stringPos]) > ' ' && ch != delim);
                                setarg(paramPos, 0, num);
                        }
                        case 'c':
                        {
                                setarg(paramPos, 0, string[stringPos++]);
                        }
                        case 'f':
                        {

                                new changestr[16], changepos = 0, strpos = stringPos;
                                while(changepos < 16 && string[strpos] && string[strpos] != delim)
                                {
                                        changestr[changepos++] = string[strpos++];
                                }
                                changestr[changepos] = '\0';
                                setarg(paramPos,0,_:floatstr(changestr));
                        }
                        case 'p':
                        {
                                delim = format[formatPos++];
                                continue;
                        }
                        case '\'':
                        {
                                new
                                        end = formatPos - 1,
                                        ch;
                                while ((ch = format[++end]) && ch != '\'') {}
                                if (!ch)
                                {
                                        return -1;
                                }
                                format[end] = '\0';
                                if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
                                {
                                        if (format[end + 1])
                                        {
                                                return -1;
                                        }
                                        return 0;
                                }
                                format[end] = '\'';
                                stringPos = ch + (end - formatPos);
                                formatPos = end + 1;
                        }
                        case 'u':
                        {
                                new
                                        end = stringPos - 1,
                                        id = 0,
                                        bool:num = true,
                                        ch;
                                while ((ch = string[++end]) && ch != delim)
                                {
                                        if (num)
                                        {
                                                if ('0' <= ch <= '9')
                                                {
                                                        id = (id * 10) + (ch - '0');
                                                }
                                                else
                                                {
                                                        num = false;
                                                }
                                        }
                                }
                                if (num && IsPlayerConnected(id))
                                {
                                        setarg(paramPos, 0, id);
                                }
                                else
                                {
                                        #if !defined foreach
                                                #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
                                                #define __SSCANF_FOREACH__
                                        #endif
                                        string[end] = '\0';
                                        num = false;
                                        new
                                                name[MAX_PLAYER_NAME];
                                        id = end - stringPos;
                                        foreach (Player, playerid)
                                        {
                                                GetPlayerName(playerid, name, sizeof (name));
                                                if (!strcmp(name, string[stringPos], true, id))
                                                {
                                                        setarg(paramPos, 0, playerid);
                                                        num = true;
                                                        break;
                                                }
                                        }
                                        if (!num)
                                        {
                                                setarg(paramPos, 0, INVALID_PLAYER_ID);
                                        }
                                        string[end] = ch;
                                        #if defined __SSCANF_FOREACH__
                                                #undef foreach
                                                #undef __SSCANF_FOREACH__
                                        #endif
                                }
                                stringPos = end;
                        }
                        case 's', 'z':
                        {
                                new
                                        i = 0,
                                        ch;
                                if (format[formatPos])
                                {
                                        while ((ch = string[stringPos++]) && ch != delim)
                                        {
                                                setarg(paramPos, i++, ch);
                                        }
                                        if (!i)
                                        {
                                                return -1;
                                        }
                                }
                                else
                                {
                                        while ((ch = string[stringPos++]))
                                        {
                                                setarg(paramPos, i++, ch);
                                        }
                                }
                                stringPos--;
                                setarg(paramPos, i, '\0');
                        }
                        default:
                        {
                                continue;
                        }
                }
                while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
                {
                        stringPos++;
                }
                while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
                {
                        stringPos++;
                }
                paramPos++;
        }
        do
        {
                if ((delim = format[formatPos++]) > ' ')
                {
                        if (delim == '\'')
                        {
                                while ((delim = format[formatPos++]) && delim != '\'') {}
                        }
                        else if (delim != 'z')
                        {
                                return delim;
                        }
                }
        }
        while (delim > ' ');
        return 0;
}
Reply
#2

I was actually wrong.

~~
Reply
#3

Nice!
Reply
#4

Код:
warning 202: number of arguments does not match definition
pawn Код:
Kick(playerid, 100);
Reply
#5

Really nice work, but I have a question...Where can I find a control panel. I have php my admin and can I put this on it?
Reply
#6

Quote:
Originally Posted by PabloDiCostanzo
Посмотреть сообщение
Really nice work, but I have a question...Where can I find a control panel. I have php my admin and can I put this on it?
You need to to have XAMPP, software with phpmyadmin and Mysql>>> download http://sourceforge.net/projects/xampp/

install xammp and open it...
click "start" in MySQL

and load your filterscript... it will show the status...
Reply
#7

XAMP app is bad....maybe WAMP =D ^^
Reply
#8

WAMP is better than XAMP.btw nice work
Reply
#9

do i need to have everything mysql??the accounts mysql?or i can add it like this!!
Reply
#10

Quote:
Originally Posted by Akcent_Voltaj
Посмотреть сообщение
do i need to have everything mysql??the accounts mysql?or i can add it like this!!
You can add it as it is but you need to modify some lines in your server
Reply
#11

You didn't explain shit, I'll try to test it
Reply
#12

Really nice Good Job
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)