Guest User

Temp Ban

a guest
Nov 13th, 2015
795
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.50 KB | None | 0 0
  1. #include <a_samp>
  2. #include <a_mysql>
  3. #include <sscanf2>
  4. #include <zcmd>
  5.  
  6. #define MYSQL_HOST          "HOST" // e.g (localhost)
  7. #define MYSQL_USER          ""
  8. #define MYSQL_PASSWORD      ""
  9. #define MYSQL_DATABASE      "" // Your database name
  10.                            
  11. static stock
  12.         Connection,
  13.         bool:Ready = false
  14. ;
  15.  
  16. BanPlayer(playerid, bannerid, time[] = "PERMANENT", reason[] = "No Reasons Given")
  17. {
  18.     new
  19.         name[MAX_PLAYER_NAME],
  20.         banner[MAX_PLAYER_NAME],
  21.         query[256],
  22.         ip[16]
  23.     ;
  24.    
  25.     GetPlayerIp(playerid, ip, 16);
  26.     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  27.     GetPlayerName(bannerid, banner, MAX_PLAYER_NAME);
  28.    
  29.     mysql_format(Connection, query, 256, "INSERT INTO `bans`(`username`, `banner`, `reason`,`ip`) VALUES('%e', '%e', '%e', '%s')", name, banner, reason, ip);
  30.     mysql_query(Connection, query, false);
  31.        
  32.     mysql_format(Connection, query, 256, "DROP EVENT IF EXISTS `%e`", name);
  33.     mysql_query(Connection, query, false);
  34.    
  35.     if(strcmp(time, "PERMANENT", true))
  36.     {      
  37.         mysql_format(Connection, query, 256, "CREATE EVENT `%e` ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL %s DO DELETE FROM `bans` WHERE `username` = '%e'", name, time, name);
  38.         mysql_query(Connection, query, false);
  39.     }
  40.    
  41.     if(!mysql_errno(Connection))
  42.     {
  43.         SendClientMessage(playerid, 0xFF000000, "You have been banned!");
  44.         SetTimerEx("DelayKick", 500, false, "d", playerid);
  45.     }
  46.     else
  47.     {
  48.         SendClientMessage(bannerid, 0xFF000000, "Oops! Something wrong at ban query, please check the console");
  49.         printf("Query : %s", query);
  50.     }
  51. }
  52.  
  53. UnbanPlayer(playerid, name[])
  54. {  
  55.     new query[256];
  56.        
  57.     mysql_format(Connection, query, 256, "DROP EVENT IF EXISTS `%e`", name);
  58.     mysql_query(Connection, query, false);
  59.    
  60.     mysql_format(Connection, query, 256, "SELECT * FROM `bans` WHERE `username` = '%e'", name);
  61.     mysql_query(Connection, query, true);
  62.    
  63.     if(cache_get_row_count(Connection))
  64.     {      
  65.         mysql_format(Connection, query, 256, "DELETE FROM `bans` WHERE `username` = '%e'", name);
  66.         mysql_query(Connection, query, false);
  67.         format(query, 256, "%s has been unbanned from this server!", name);
  68.         SendClientMessage(playerid, 0xFFFFFFFF, query);
  69.     }
  70.     else
  71.     {
  72.         SendClientMessage(playerid, 0xFFFFFFFF, "That player isn't banned!");
  73.     }
  74. }
  75.  
  76. public OnFilterScriptInit()
  77. {
  78.     print("\n--------------------------------------");
  79.     print("   Simple Temporary Ban System by Lczy \n");
  80.     print("--------------------------------------\n");
  81.     print("\nInitializing...");
  82.     SetTimer("ConnectSQL", 1000, false);
  83.     return 1;
  84. }
  85.  
  86. public OnFilterScriptExit()
  87. {
  88.     mysql_close(Connection);
  89.     return 1;
  90. }
  91.  
  92. public OnPlayerConnect(playerid)
  93. {
  94.     if(Ready)
  95.     {
  96.         new
  97.             query[100],
  98.             name[MAX_PLAYER_NAME],
  99.             ip[16]
  100.         ;
  101.         GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  102.         GetPlayerIp(playerid, ip, 16);
  103.         mysql_format(Connection, query, 128, "SELECT * FROM `bans` WHERE `username` = '%e' OR `ip` = '%s'", name, ip);
  104.         mysql_tquery(Connection, query, "OnPlayerCheck", "d", playerid);
  105.     }
  106.     return 1;
  107. }
  108.  
  109. forward OnPlayerCheck(playerid);
  110. public OnPlayerCheck(playerid)
  111. {
  112.     if(!!cache_get_row_count(Connection))
  113.     {
  114.         new
  115.             banner[MAX_PLAYER_NAME],
  116.             reason[128],
  117.             str[256],
  118.             query[256],
  119.             name[MAX_PLAYER_NAME],
  120.             unban[16],
  121.             from[16]
  122.         ;
  123.        
  124.         cache_get_field_content(0, "reason", reason, Connection, 128);
  125.         cache_get_field_content(0, "banner", banner, Connection, MAX_PLAYER_NAME);
  126.         GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  127.        
  128.         strcat(str, "You are banned from this server!\n\n{FF0000}Ban Information :\n{FFFFFF}");
  129.         format(str, 256, "%sUsername : %s\n", str, name);
  130.         format(str, 256, "%sBanned By : %s\n", str, banner);
  131.         format(str, 256, "%sReason : %s\n", str, reason);
  132.        
  133.         if(!!cache_get_row_count(Connection))
  134.         {
  135.             mysql_format(Connection, query, 256, "SELECT EXECUTE_AT as `unban`, CREATED as `from` FROM INFORMATION_SCHEMA.EVENTS WHERE `EVENT_NAME` = '%e'", name);
  136.             mysql_query(Connection, query);
  137.             cache_get_field_content(0, "unban", unban, Connection, 16);
  138.             cache_get_field_content(0, "from", from, Connection, 16);
  139.             format(str, 256, "%sUnban Date : %s\n", str, unban);
  140.             format(str, 256, "%sBanned From : %s\n", str, from);
  141.         }
  142.         else
  143.         {
  144.             strcat(str, "Unban Date : Never");
  145.         }
  146.         ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Banned!", str, "Close", "");
  147.         SetTimerEx("DelayKick", 500, false, "d", playerid);
  148.     }
  149. }
  150.  
  151. forward ConnectSQL();
  152. public ConnectSQL()
  153. {
  154.     Connection = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSWORD);
  155.     if(!!mysql_errno(Connection))
  156.     {
  157.         printf("====================================================++");
  158.         printf(" MySQL Error !!!");
  159.         printf(" Lczy FS failed to connect to database!");
  160.         printf(" Gamemode is now exiting...");
  161.         printf("====================================================++");
  162.         SendRconCommand("exit");
  163.     }
  164.     mysql_query(Connection, "CREATE TABLE IF NOT EXISTS `bans` (`id` INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(32) NOT NULL, `banner` VARCHAR(32) NOT NULL, `reason` VARCHAR(128), `ip` VARCHAR(16))", false);
  165.     Ready = true;
  166. }
  167.  
  168. forward DelayKick(playerid);
  169. public DelayKick(playerid)
  170. {
  171.     Kick(playerid);
  172. }
  173.  
  174. COMMAND:ban(playerid, params[])
  175. {
  176.     if(IsPlayerAdmin(playerid))
  177.     {
  178.         new
  179.             id,
  180.             day,
  181.             time[26],
  182.             reason[128]
  183.         ;
  184.        
  185.         if(sscanf(params, "dds[26]S(No Reasons Given)[128]", id, day, time, reason))
  186.         {
  187.             SendClientMessage(playerid, 0xFF000000, "Usage : /ban <id> <time> [Day/Hour/Minute/Week/Second/Year/Month] <Reason>");
  188.             SendClientMessage(playerid, 0xFF000000, "Example : /ban 0 1 Hour Test");
  189.         }
  190.         else
  191.         {
  192.             if(!strcmp(time, "Day", false) || !strcmp(time, "Hour", false) || !strcmp(time, "Minute", false) || !strcmp(time, "Week", false) || !strcmp(time, "Second", false) || !strcmp(time, "Year", false) || !strcmp(time, "Month", false))
  193.             {
  194.                 if(IsPlayerConnected(id))
  195.                 {
  196.                     if(!IsPlayerAdmin(id))
  197.                     {
  198.                         if(day > 0 && day < 1000)
  199.                         {
  200.                             format(time, sizeof(time), "%d %s", day, time);
  201.                             BanPlayer(id, playerid, time, reason);
  202.                         }
  203.                         else
  204.                             SendClientMessage(playerid, 0xFF000000, "Time must be between 1 - 999!");
  205.                     }
  206.                     else
  207.                         SendClientMessage(playerid, 0xFF000000, "You can't ban an RCON Admin!");
  208.                 }
  209.                 else
  210.                     SendClientMessage(playerid, 0xFF000000, "That player is not connected!");
  211.             }
  212.             else
  213.                 cmd_ban(playerid, "");
  214.         }
  215.     }
  216.     else
  217.         SendClientMessage(playerid, 0xFF000000, "Insuffiecient Authority!");
  218.     return 1;
  219. }
  220.  
  221. COMMAND:permban(playerid, params[])
  222. {
  223.     if(IsPlayerAdmin(playerid))
  224.     {
  225.         new
  226.             id,
  227.             reason[128]
  228.         ;
  229.        
  230.         if(sscanf(params, "dS(No Reasons Given)[128]", id, reason))
  231.         {
  232.             SendClientMessage(playerid, 0xFF000000, "Usage : /permban <id> <Reason>");
  233.             SendClientMessage(playerid, 0xFF000000, "Example : /permban 0 Test");
  234.         }
  235.         else
  236.         {
  237.             if(IsPlayerConnected(id))
  238.             {
  239.                 if(!IsPlayerAdmin(id))
  240.                 {
  241.                     BanPlayer(id, playerid, "PERMANENT", reason);
  242.                 }
  243.                 else
  244.                     SendClientMessage(playerid, 0xFF000000, "You can't ban an RCON Admin!");
  245.             }
  246.             else
  247.                 SendClientMessage(playerid, 0xFF000000, "That player is not connected!");
  248.         }
  249.     }
  250.     else
  251.         SendClientMessage(playerid, 0xFF000000, "Insuffiecient Authority!");
  252.     return 1;
  253. }
  254.  
  255. COMMAND:unban(playerid, params[])
  256. {
  257.     if(IsPlayerAdmin(playerid))
  258.     {
  259.         new
  260.             name[32]
  261.         ;
  262.        
  263.         if(sscanf(params, "s[32]", name))
  264.         {
  265.             SendClientMessage(playerid, 0xFF000000, "Usage : /unban <name>");
  266.         }
  267.         else
  268.         {
  269.             UnbanPlayer(playerid, name);
  270.         }
  271.     }
  272.     else
  273.         SendClientMessage(playerid, 0xFF000000, "Insuffiecient Authority!");
  274.     return 1;
  275. }
Advertisement
Add Comment
Please, Sign In to add comment