User
Pass
2FA
 
 

[CERERE] Ban
Go to page 1, 2  Next    
 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Freakz Forum Index -> Trash Bin -> CS 2006-2019 (Archived) -> Plugins - Help / Support
Author Message4099
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 28-06-2017, 22:46:50 | Translate post to: ... (Click for more languages)

Nume: Ban
Descriere plugin: Da ban unu-i player sau debaneaza un player pe ip/nume/steam
Alte detalii: Vreau si eu un plugin de ban care sa poata da unban si pe nume...Nu vreau advanced ban in real time pentru ca in el trebuie sa scriu in ghilimele steam-ul persoanei care vreau s-o debanez (chiar daca eu i-am dat ban pe nume sau ip) si sa apara frumos structurat in consola Nick, Motivul , etc..
Exemplu: Nu am un exemplu concret..

0 0
  
Back to top
View user's profile Send private message
GoreSpintecatoru.

[Inactiv o perioada]



Status: Offline
(since 09-11-2017 19:29)
Joined: 18 Feb 2017
Posts: 638, Topics: 28
Location: Romania

Reputation: 762.7
Votes: 40

       
Post Posted: 30-06-2017, 09:42:43 | Translate post to: ... (Click for more languages)

In advanced ban ai : amx_ban <nick, #userid, authid> <time in minutes> <reason>
si amx_unban <authid or ip>


Regulament|My Official Website[V:1.1]|Panel JB[V:1.0]

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 30-06-2017, 11:19:38 | Translate post to: ... (Click for more languages)

cand scriu amx_unban si numele , ip-ul si steam-ul fara ghilimele imi zice ca nu exista persoana banata pe acel ip/nume/steam . Decat daca scriu Steamul in ghilimele merge atat, daca scriu numele sau ip in ghilimele tot asa zice ca nu exista persoana banata.
P.S.: am incercat sa scriu si nume si ip-ul in ghilimele si tot nu merge..

0 0
  
Back to top
View user's profile Send private message
GoreSpintecatoru.

[Inactiv o perioada]



Status: Offline
(since 09-11-2017 19:29)
Joined: 18 Feb 2017
Posts: 638, Topics: 28
Location: Romania

Reputation: 762.7
Votes: 40

       
Post Posted: 30-06-2017, 17:39:08 | Translate post to: ... (Click for more languages)

Da-mi sma-ul

Regulament|My Official Website[V:1.1]|Panel JB[V:1.0]

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 30-06-2017, 22:09:32 | Translate post to: ... (Click for more languages)

Poftim
Spoiler:

0 0
  
Back to top
View user's profile Send private message
GoreSpintecatoru.

[Inactiv o perioada]



Status: Offline
(since 09-11-2017 19:29)
Joined: 18 Feb 2017
Posts: 638, Topics: 28
Location: Romania

Reputation: 762.7
Votes: 40

       
Post Posted: 01-07-2017, 12:05:36 | Translate post to: ... (Click for more languages)

Spoiler:


Regulament|My Official Website[V:1.1]|Panel JB[V:1.0]

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 01-07-2017, 12:13:10 | Translate post to: ... (Click for more languages)

Da eroare la compilare :

Spoiler:

0 0
  
Back to top
View user's profile Send private message
GoreSpintecatoru.

[Inactiv o perioada]



Status: Offline
(since 09-11-2017 19:29)
Joined: 18 Feb 2017
Posts: 638, Topics: 28
Location: Romania

Reputation: 762.7
Votes: 40

       
Post Posted: 01-07-2017, 12:28:11 | Translate post to: ... (Click for more languages)

Spoiler:


Regulament|My Official Website[V:1.1]|Panel JB[V:1.0]

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 01-07-2017, 12:32:02 | Translate post to: ... (Click for more languages)

Alta eroare
Spoiler:

0 0
  
Back to top
View user's profile Send private message
GoreSpintecatoru.

[Inactiv o perioada]



Status: Offline
(since 09-11-2017 19:29)
Joined: 18 Feb 2017
Posts: 638, Topics: 28
Location: Romania

Reputation: 762.7
Votes: 40

       
Post Posted: 01-07-2017, 12:36:01 | Translate post to: ... (Click for more languages)

Merge compilat https://i.gyazo.com/e31697bca851f130c610feadf4c9be90.png

Regulament|My Official Website[V:1.1]|Panel JB[V:1.0]

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 01-07-2017, 12:39:47 | Translate post to: ... (Click for more languages)

Atunci dami tu amxx , pentru ca mie nu-mi merge sa-l compilez

Update @ 01-07-2017, 13:39:47

Pe bune? Si asta da erori?
Spoiler:

0 0
  
Back to top
View user's profile Send private message
GoreSpintecatoru.

[Inactiv o perioada]



Status: Offline
(since 09-11-2017 19:29)
Joined: 18 Feb 2017
Posts: 638, Topics: 28
Location: Romania

Reputation: 762.7
Votes: 40

       
Post Posted: 01-07-2017, 12:40:08 | Translate post to: ... (Click for more languages)

Daca nu merge , ti-l uploadez undeva , ca nu stiu de ce nu se copiaza bine.
Code:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <regex>

#define PLUGIN_NAME   "Advanced Bans"
#define PLUGIN_VERSION   "0.8.1"
#define PLUGIN_AUTHOR   "Exolent"

#pragma semicolon 1



// ===============================================
// CUSTOMIZATION STARTS HERE
// ===============================================


// uncomment the line below if you want this plugin to
// load old bans from the banned.cfg and listip.cfg files
//#define KEEP_DEFAULT_BANS


// uncomment the line below if you want the history to be in one file
//#define HISTORY_ONE_FILE


// if you must have a maximum amount of bans to be compatible with AMXX versions before 1.8.0
// change this number to your maximum amount
// if you would rather have unlimited (requires AMXX 1.8.0 or higher) then set it to 0
#define MAX_BANS 0


// if you want to use SQL for your server, then uncomment the line below
//#define USING_SQL


// ===============================================
// CUSTOMIZATION ENDS HERE
// ===============================================



#if defined USING_SQL
#include <sqlx>

#define TABLE_NAME      "advanced_bans"
#define KEY_NAME      "name"
#define KEY_STEAMID      "steamid"
#define KEY_BANLENGTH      "banlength"
#define KEY_UNBANTIME      "unbantime"
#define KEY_REASON      "reason"
#define KEY_ADMIN_NAME      "admin_name"
#define KEY_ADMIN_STEAMID   "admin_steamid"

#define RELOAD_BANS_INTERVAL   60.0
#endif

#define REGEX_IP_PATTERN "\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"
#define REGEX_STEAMID_PATTERN "^^STEAM_0:(0|1):\\d+$"

new Regex:g_IP_pattern;
new Regex:g_SteamID_pattern;
new g_regex_return;

/*bool:IsValidIP(const ip[])
{
   return regex_match_c(ip, g_IP_pattern, g_regex_return) > 0;
}*/

#define IsValidIP(%1) (regex_match_c(%1, g_IP_pattern, g_regex_return) > 0)

/*bool:IsValidAuthid(const authid[])
{
   return regex_match_c(authid, g_SteamID_pattern, g_regex_return) > 0;
}*/

#define IsValidAuthid(%1) (regex_match_c(%1, g_SteamID_pattern, g_regex_return) > 0)


enum // for name displaying
{
   ACTIVITY_NONE, // nothing is shown
   ACTIVITY_HIDE, // admin name is hidden
   ACTIVITY_SHOW  // admin name is shown
};
new const g_admin_activity[] =
{
   ACTIVITY_NONE, // amx_show_activity 0 = show nothing to everyone
   ACTIVITY_HIDE, // amx_show_activity 1 = hide admin name from everyone
   ACTIVITY_SHOW, // amx_show_activity 2 = show admin name to everyone
   ACTIVITY_SHOW, // amx_show_activity 3 = show name to admins but hide it from normal users
   ACTIVITY_SHOW, // amx_show_activity 4 = show name to admins but show nothing to normal users
   ACTIVITY_HIDE  // amx_show_activity 5 = hide name from admins but show nothing to normal users
};
new const g_normal_activity[] =
{
   ACTIVITY_NONE, // amx_show_activity 0 = show nothing to everyone
   ACTIVITY_HIDE, // amx_show_activity 1 = hide admin name from everyone
   ACTIVITY_SHOW, // amx_show_activity 2 = show admin name to everyone
   ACTIVITY_HIDE, // amx_show_activity 3 = show name to admins but hide it from normal users
   ACTIVITY_NONE, // amx_show_activity 4 = show name to admins but show nothing to normal users
   ACTIVITY_NONE  // amx_show_activity 5 = hide name from admins but show nothing to normal users
};


#if MAX_BANS <= 0
enum _:BannedData
{
   bd_name[32],
   bd_steamid[35],
   bd_banlength,
   bd_unbantime[32],
   bd_reason[128],
   bd_admin_name[64],
   bd_admin_steamid[35]
};

new Trie:g_trie;
new Array:g_array;
#else
new g_names[MAX_BANS][32];
new g_steamids[MAX_BANS][35];
new g_banlengths[MAX_BANS];
new g_unbantimes[MAX_BANS][32];
new g_reasons[MAX_BANS][128];
new g_admin_names[MAX_BANS][64];
new g_admin_steamids[MAX_BANS][35];
#endif
new g_total_bans;

#if !defined USING_SQL
new g_ban_file[64];
#else
new Handle:g_sql_tuple;
new bool:g_loading_bans = true;
#endif

new ab_website;
new ab_immunity;
new ab_bandelay;
new ab_unbancheck;

new amx_show_activity;

#if MAX_BANS <= 0
new Array:g_maxban_times;
new Array:g_maxban_flags;
#else
#define MAX_BANLIMITS   30
new g_maxban_times[MAX_BANLIMITS];
new g_maxban_flags[MAX_BANLIMITS];
#endif
new g_total_maxban_times;

new g_unban_entity;

new g_max_clients;

new g_msgid_SayText;

public plugin_init()
{
   register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
   register_cvar("advanced_bans", PLUGIN_VERSION, FCVAR_SPONLY);
   
   register_dictionary("advanced_bans.txt");
   
   register_concmd("amx_ban", "CmdBan", ADMIN_BAN, "<nick, #userid, authid> <time in minutes> <reason>");
   register_concmd("amx_banip", "CmdBanIp", ADMIN_BAN, "<nick, #userid, authid> <time in minutes> <reason>");
   register_concmd("amx_addban", "CmdAddBan", ADMIN_BAN, "<name> <authid or ip> <time in minutes> <reason>");
   register_concmd("amx_unban", "CmdUnban", ADMIN_BAN, "<authid or ip>");
   register_concmd("amx_banlist", "CmdBanList", ADMIN_BAN, "[start] -- shows everyone who is banned");
   register_srvcmd("amx_addbanlimit", "CmdAddBanLimit", -1, "<flag> <time in minutes>");
   
   ab_website = register_cvar("ab_website", "");
   ab_immunity = register_cvar("ab_immunity", "1");
   ab_bandelay = register_cvar("ab_bandelay", "1.0");
   ab_unbancheck = register_cvar("ab_unbancheck", "5.0");
   
   amx_show_activity = register_cvar("amx_show_activity", "2");
   
   #if MAX_BANS <= 0
   g_trie = TrieCreate();
   g_array = ArrayCreate(BannedData);
   #endif
   
   #if !defined MAX_BANLIMITS
   g_maxban_times = ArrayCreate(1);
   g_maxban_flags = ArrayCreate(1);
   #endif
   
   #if !defined USING_SQL
   get_datadir(g_ban_file, sizeof(g_ban_file) - 1);
   add(g_ban_file, sizeof(g_ban_file) - 1, "/advanced_bans.txt");
   
   LoadBans();
   #else
   g_sql_tuple = SQL_MakeStdTuple();
   PrepareTable();
   #endif
   
   new error[2];
   g_IP_pattern = regex_compile(REGEX_IP_PATTERN, g_regex_return, error, sizeof(error) - 1);
   g_SteamID_pattern = regex_compile(REGEX_STEAMID_PATTERN, g_regex_return, error, sizeof(error) - 1);
   
   g_max_clients = get_maxplayers();
   
   g_msgid_SayText = get_user_msgid("SayText");
}

#if defined USING_SQL
PrepareTable()
{
   new query[128];
   formatex(query, sizeof(query) - 1,\\
      "CREATE TABLE IF NOT EXISTS `%s` (`%s` varchar(32) NOT NULL, `%s` varchar(35) NOT NULL, `%s` int(10) NOT NULL, `%s` varchar(32) NOT NULL, `%s` varchar(128) NOT NULL, `%s` varchar(64) NOT NULL, `%s` varchar(35) NOT NULL);",\\
      TABLE_NAME, KEY_NAME, KEY_STEAMID, KEY_BANLENGTH, KEY_UNBANTIME, KEY_REASON, KEY_ADMIN_NAME, KEY_ADMIN_STEAMID
      );
   
   SQL_ThreadQuery(g_sql_tuple, "QueryCreateTable", query);
}

public QueryCreateTable(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime)
{
   if( failstate == TQUERY_CONNECT_FAILED )
   {
      set_fail_state("Could not connect to database.");
   }
   else if( failstate == TQUERY_QUERY_FAILED )
   {
      set_fail_state("Query failed.");
   }
   else if( errcode )
   {
      log_amx("Error on query: %s", error);
   }
   else
   {
      LoadBans();
   }
}
#endif

public plugin_cfg()
{
   CreateUnbanEntity();
}

public CreateUnbanEntity()
{
   static failtimes;
   
   g_unban_entity = create_entity("info_target");
   
   if( !is_valid_ent(g_unban_entity) )
   {
      ++failtimes;
       
      log_amx("[ERROR] Failed to create unban entity (%i/10)", failtimes);
       
      if( failtimes < 10 )
      {
         set_task(1.0, "CreateUnbanEntity");
      }
      else
      {
         log_amx("[ERROR] Could not create unban entity!");
      }
       
      return;
   }
   
   entity_set_string(g_unban_entity, EV_SZ_classname, "unban_entity");
   entity_set_float(g_unban_entity, EV_FL_nextthink, get_gametime() + 1.0);
   
   register_think("unban_entity", "FwdThink");
}

public client_authorized(client)
{
   static authid[35];
   get_user_authid(client, authid, sizeof(authid) - 1);
   
   static ip[35];
   get_user_ip(client, ip, sizeof(ip) - 1, 1);
   
   #if MAX_BANS > 0
   static banned_authid[35], bool:is_ip;
   for( new i = 0; i < g_total_bans; i++ )
   {
      copy(banned_authid, sizeof(banned_authid) - 1, g_steamids[i]);
       
      is_ip = bool:(containi(banned_authid, ".") != -1);
       
      if( is_ip && equal(ip, banned_authid) || !is_ip && equal(authid, banned_authid) )
      {
         static name[32], reason[128], unbantime[32], admin_name[32], admin_steamid[64];
         copy(name, sizeof(name) - 1, g_names[i]);
         copy(reason, sizeof(reason) - 1, g_reasons[i]);
         new banlength = g_banlengths[i];
         copy(unbantime, sizeof(unbantime) - 1, g_unbantimes[i]);
         copy(admin_name, sizeof(admin_name) - 1, g_admin_names[i]);
         copy(admin_steamid, sizeof(admin_steamid) - 1, g_admin_steamids[i]);
         
         PrintBanInformation(client, name, banned_authid, reason, banlength, unbantime, admin_name, admin_steamid, true, true);
         
         set_task(get_pcvar_float(ab_bandelay), "TaskDisconnectPlayer", client);
         break;
      }
   }
   #else
   static array_pos;
   
   if( TrieGetCell(g_trie, authid, array_pos) || TrieGetCell(g_trie, ip, array_pos) )
   {
      static data[BannedData];
      ArrayGetArray(g_array, array_pos, data);
       
      PrintBanInformation(client, data[bd_name], data[bd_steamid], data[bd_reason], data[bd_banlength], data[bd_unbantime], data[bd_admin_name], data[bd_admin_steamid], true, true);
       
      set_task(get_pcvar_float(ab_bandelay), "TaskDisconnectPlayer", client);
   }
   #endif
}

public CmdBan(client, level, cid)
{
   if( !cmd_access(client, level, cid, 4) ) return PLUGIN_HANDLED;
   
   static arg[128];
   read_argv(1, arg, sizeof(arg) - 1);
   
   new target = cmd_target(client, arg, GetTargetFlags(client));
   if( !target ) return PLUGIN_HANDLED;
   
   static target_authid[35];
   get_user_authid(target, target_authid, sizeof(target_authid) - 1);
   
   if( !IsValidAuthid(target_authid) )
   {
      console_print(client, "[AdvancedBans] %L", client, "AB_NOT_AUTHORIZED");
      return PLUGIN_HANDLED;
   }
   
   #if MAX_BANS <= 0
   if( TrieKeyExists(g_trie, target_authid) )
   {
      console_print(client, "[AdvancedBans] %L", client, "AB_ALREADY_BANNED_STEAMID");
      return PLUGIN_HANDLED;
   }
   #else
   for( new i = 0; i < g_total_bans; i++ )
   {
      if( !strcmp(target_authid, g_steamids[i], 1) )
      {
         console_print(client, "[AdvancedBans] %L", client, "AB_ALREADY_BANNED_STEAMID");
         return PLUGIN_HANDLED;
      }
   }
   #endif
   
   read_argv(2, arg, sizeof(arg) - 1);
   
   new length = str_to_num(arg);
   new maxlength = GetMaxBanTime(client);
   
   if( maxlength && (!length || length > maxlength) )
   {
      console_print(client, "[AdvancedBans] %L", client, "AB_MAX_BAN_TIME", maxlength);
      return PLUGIN_HANDLED;
   }
   
   static unban_time[64];
   if( length == 0 )
   {
      formatex(unban_time, sizeof(unban_time) - 1, "%L", client, "AB_PERMANENT_BAN");
   }
   else
   {
      GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1);
   }
   
   read_argv(3, arg, sizeof(arg) - 1);
   
   static admin_name[64], target_name[32];
   get_user_name(client, admin_name, sizeof(admin_name) - 1);
   get_user_name(target, target_name, sizeof(target_name) - 1);
   
   static admin_authid[35];
   get_user_authid(client, admin_authid, sizeof(admin_authid) - 1);
   
   AddBan(target_name, target_authid, arg, length, unban_time, admin_name, admin_authid);
   
   PrintBanInformation(target, target_name, target_authid, arg, length, unban_time, admin_name, admin_authid, true, true);
   PrintBanInformation(client, target_name, target_authid, arg, length, unban_time, admin_name, admin_authid, false, false);
   
   set_task(get_pcvar_float(ab_bandelay), "TaskDisconnectPlayer", target);
   
   GetBanTime(length, unban_time, sizeof(unban_time) - 1);
   
   PrintActivity(admin_name, "^x04[AdvancedBans] $name^x01 :^x03  banned %s. Reason: %s. Ban Length: %s", target_name, arg, unban_time);
   
   Log("%s <%s> banned %s <%s> || Reason: ^"%s^" || Ban Length: %s", admin_name, admin_authid, target_name, target_authid, arg, unban_time);
   
   return PLUGIN_HANDLED;
}

public CmdBanIp(client, level, cid)
{
   if( !cmd_access(client, level, cid, 4) ) return PLUGIN_HANDLED;
   
   static arg[128];
   read_argv(1, arg, sizeof(arg) - 1);
   
   new target = cmd_target(client, arg, GetTargetFlags(client));
   if( !target ) return PLUGIN_HANDLED;
   
   static target_ip[35];
   get_user_ip(target, target_ip, sizeof(target_ip) - 1, 1);
   
   #if MAX_BANS <= 0
   if( TrieKeyExists(g_trie, target_ip) )
   {
      console_print(client, "[AdvancedBans] %L", client, "AB_ALREADY_BANNED_IP");
      return PLUGIN_HANDLED;
   }
   #else
   for( new i = 0; i < g_total_bans; i++ )
   {
      if( !strcmp(target_ip, g_steamids[i], 1) )
      {
         console_print(client, "[AdvancedBans] %L", client, "AB_ALREADY_BANNED_IP");
         return PLUGIN_HANDLED;
      }
   }
   #endif
   
   read_argv(2, arg, sizeof(arg) - 1);
   
   new length = str_to_num(arg);
   new maxlength = GetMaxBanTime(client);
   
   if( maxlength && (!length || length > maxlength) )
   {
      console_print(client, "[AdvancedBans] %L", client, "AB_MAX_BAN_TIME", maxlength);
      return PLUGIN_HANDLED;
   }
   
   static unban_time[32];
   
   if( length == 0 )
   {
      formatex(unban_time, sizeof(unban_time) - 1, "%L", client, "AB_PERMANENT_BAN");
   }
   else
   {
      GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1);
   }
   
   read_argv(3, arg, sizeof(arg) - 1);
   
   static admin_name[64], target_name[32];
   get_user_name(client, admin_name, sizeof(admin_name) - 1);
   get_user_name(target, target_name, sizeof(target_name) - 1);
   
   static admin_authid[35];
   get_user_authid(client, admin_authid, sizeof(admin_authid) - 1);
   
   AddBan(target_name, target_ip, arg, length, unban_time, admin_name, admin_authid);
   
   PrintBanInformation(target, target_name, target_ip, arg, length, unban_time, admin_name, admin_authid, true, true);
   PrintBanInformation(client, target_name, target_ip, arg, length, unban_time, admin_name, admin_authid, false, false);
   
   set_task(get_pcvar_float(ab_bandelay), "TaskDisconnectPlayer", target);
   
   GetBanTime(length, unban_time, sizeof(unban_time) - 1);
   
   PrintActivity(admin_name, "^x04[AdvancedBans] $name^x01 :^x03  banned %s. Reason: %s. Ban Length: %s", target_name, arg, unban_time);
   
   Log("%s <%s> banned %s <%s> || Reason: ^"%s^" || Ban Length: %s", admin_name, admin_authid, target_name, target_ip, arg, unban_time);
   
   return PLUGIN_HANDLED;
}

public CmdAddBan(client, level, cid)
{
   if( !cmd_access(client, level, cid, 5) ) return PLUGIN_HANDLED;
   
   static target_name[32], target_authid[35], bantime[10], reason[128];
   read_argv(1, target_name, sizeof(target_name) - 1);
   read_argv(2, target_authid, sizeof(target_authid) - 1);
   read_argv(3, bantime, sizeof(bantime) - 1);
   read_argv(4, reason, sizeof(reason) - 1);
   
   new bool:is_ip = bool:(containi(target_authid, ".") != -1);
   
   if( !is_ip && !IsValidAuthid(target_authid) )
   {
      console_print(client, "[AdvancedBans] %L", client, "AB_INVALID_STEAMID");
      console_print(client, "[AdvancedBans] %L", client, "AB_VALID_STEAMID_FORMAT");
       
      return PLUGIN_HANDLED;
   }
   else if( is_ip )
   {
      new pos = contain(target_authid, ":");
      if( pos > 0 )
      {
         target_authid[pos] = 0;
      }
       
      if( !IsValidIP(target_authid) )
      {
         console_print(client, "[AdvancedBans] %L", client, "AB_INVALID_IP");
         
         return PLUGIN_HANDLED;
      }
   }
   
   #if MAX_BANS <= 0
   if( TrieKeyExists(g_trie, target_authid) )
   {
      console_print(client, "[AdvancedBans] %L", client, is_ip ? "AB_ALREADY_BANNED_IP" : "AB_ALREADY_BANNED_STEAMID");
      return PLUGIN_HANDLED;
   }
   #else
   for( new i = 0; i < g_total_bans; i++ )
   {
      if( !strcmp(target_authid, g_steamids[i], 1) )
      {
         console_print(client, "[AdvancedBans] %L", client, is_ip ? "AB_ALREADY_BANNED_IP" : "AB_ALREADY_BANNED_STEAMID");
         return PLUGIN_HANDLED;
      }
   }
   #endif
   
   new length = str_to_num(bantime);
   new maxlength = GetMaxBanTime(client);
   
   if( maxlength && (!length || length > maxlength) )
   {
      console_print(client, "[AdvancedBans] %L", client, "AB_MAX_BAN_TIME", maxlength);
      return PLUGIN_HANDLED;
   }
   
   if( is_user_connected(find_player(is_ip ? "d" : "c", target_authid)) )
   {
      client_cmd(client, "amx_ban ^"%s^" %i ^"%s^"", target_authid, length, reason);
      return PLUGIN_HANDLED;
   }
   
   static unban_time[32];
   if( length == 0 )
   {
      formatex(unban_time, sizeof(unban_time) - 1, "%L", client, "AB_PERMANENT_BAN");
   }
   else
   {
      GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1);
   }
   
   static admin_name[64], admin_authid[35];
   get_user_name(client, admin_name, sizeof(admin_name) - 1);
   get_user_authid(client, admin_authid, sizeof(admin_authid) - 1);
   
   AddBan(target_name, target_authid, reason, length, unban_time, admin_name, admin_authid);
   
   PrintBanInformation(client, target_name, target_authid, reason, length, unban_time, "", "", false, false);
   
   GetBanTime(length, unban_time, sizeof(unban_time) - 1);
   
   PrintActivity(admin_name, "^x04[AdvancedBans] $name^x01 :^x03  banned %s %s. Reason: %s. Ban Length: %s", is_ip ? "IP" : "SteamID", target_authid, reason, unban_time);
   
   Log("%s <%s> banned %s <%s> || Reason: ^"%s^" || Ban Length: %s", admin_name, admin_authid, target_name, target_authid, reason, unban_time);
   
   return PLUGIN_HANDLED;
}

public CmdUnban(client, level, cid)
{
   if( !cmd_access(client, level, cid, 2) ) return PLUGIN_HANDLED;
   
   static arg[35];
   read_argv(1, arg, sizeof(arg) - 1);
   
   #if MAX_BANS > 0
   static banned_authid[35];
   for( new i = 0; i < g_total_bans; i++ )
   {
      copy(banned_authid, sizeof(banned_authid) - 1, g_steamids[i]);
       
      if( equal(arg, banned_authid) )
      {
         static admin_name[64];
         get_user_name(client, admin_name, sizeof(admin_name) - 1);
         
         static name[32], reason[128];
         copy(name, sizeof(name) - 1, g_names[i]);
         copy(reason, sizeof(reason) - 1, g_reasons[i]);
         
         PrintActivity(admin_name, "^x04[AdvancedBans] $name^x01 :^x03  unbanned %s^x01 [%s] [Ban Reason: %s]", name, arg, reason);
         
         static authid[35];
         get_user_authid(client, authid, sizeof(authid) - 1);
         
         Log("%s <%s> unbanned %s <%s> || Ban Reason: ^"%s^"", admin_name, authid, name, arg, reason);
         
         RemoveBan(i);
         
         return PLUGIN_HANDLED;
      }
   }
   #else
   if( TrieKeyExists(g_trie, arg) )
   {
      static array_pos;
      TrieGetCell(g_trie, arg, array_pos);
       
      static data[BannedData];
      ArrayGetArray(g_array, array_pos, data);
       
      static unban_name[32];
      get_user_name(client, unban_name, sizeof(unban_name) - 1);
       
      PrintActivity(unban_name, "^x04[AdvancedBans] $name^x01 :^x03  unbanned %s^x01 [%s] [Ban Reason: %s]", data[bd_name], data[bd_steamid], data[bd_reason]);
       
      static admin_name[64];
      get_user_name(client, admin_name, sizeof(admin_name) - 1);
       
      static authid[35];
      get_user_authid(client, authid, sizeof(authid) - 1);
       
      Log("%s <%s> unbanned %s <%s> || Ban Reason: ^"%s^"", admin_name, authid, data[bd_name], data[bd_steamid], data[bd_reason]);
       
      RemoveBan(array_pos, data[bd_steamid]);
       
      return PLUGIN_HANDLED;
   }
   #endif
   
   console_print(client, "[AdvancedBans] %L", client, "AB_NOT_IN_BAN_LIST", arg);
   
   return PLUGIN_HANDLED;
}

public CmdBanList(client, level, cid)
{
   if( !cmd_access(client, level, cid, 1) ) return PLUGIN_HANDLED;
   
   if( !g_total_bans )
   {
      console_print(client, "[AdvancedBans] %L", client, "AB_NO_BANS");
      return PLUGIN_HANDLED;
   }
   
   static start;
   
   if( read_argc() > 1 )
   {
      static arg[5];
      read_argv(1, arg, sizeof(arg) - 1);
       
      start = min(str_to_num(arg), g_total_bans) - 1;
   }
   else
   {
      start = 0;
   }
   
   new last = min(start + 10, g_total_bans);
   
   if( client == 0 )
   {
      server_cmd("echo ^"%L^"", client, "AB_BAN_LIST_NUM", start + 1, last);
   }
   else
   {
      client_cmd(client, "echo ^"%L^"", client, "AB_BAN_LIST_NUM", start + 1, last);
   }
   
   for( new i = start; i < last; i++ )
   {
      #if MAX_BANS <= 0
      static data[BannedData];
      ArrayGetArray(g_array, i, data);
       
      PrintBanInformation(client, data[bd_name], data[bd_steamid], data[bd_reason], data[bd_banlength], data[bd_unbantime], data[bd_admin_name], data[bd_admin_steamid], true, false);
      #else
      static name[32], steamid[35], reason[128], banlength, unbantime[32], admin_name[32], admin_steamid[35];
       
      copy(name, sizeof(name) - 1, g_names[i]);
      copy(steamid, sizeof(steamid) - 1, g_steamids[i]);
      copy(reason, sizeof(reason) - 1, g_reasons[i]);
      banlength = g_banlengths[i];
      copy(unbantime, sizeof(unbantime) - 1, g_unbantimes[i]);
      copy(admin_name, sizeof(admin_name) - 1, g_admin_names[i]);
      copy(admin_steamid, sizeof(admin_steamid) - 1, g_admin_steamids[i]);
       
      PrintBanInformation(client, name, steamid, reason, banlength, unbantime, admin_name, admin_steamid, true, false);
      #endif
   }
   
   if( ++last < g_total_bans )
   {
      if( client == 0 )
      {
         server_cmd("echo ^"%L^"", client, "AB_BAN_LIST_NEXT", last);
      }
      else
      {
         client_cmd(client, "echo ^"%L^"", client, "AB_BAN_LIST_NEXT", last);
      }
   }
   
   return PLUGIN_HANDLED;
}

public CmdAddBanLimit()
{
   if( read_argc() != 3 )
   {
      log_amx("amx_addbanlimit was used with incorrect parameters!");
      log_amx("Usage: amx_addbanlimit <flags> <time in minutes>");
      return PLUGIN_HANDLED;
   }
   
   static arg[16];
   
   read_argv(1, arg, sizeof(arg) - 1);
   new flags = read_flags(arg);
   
   read_argv(2, arg, sizeof(arg) - 1);
   new minutes = str_to_num(arg);
   
   #if !defined MAX_BANLIMITS
   ArrayPushCell(g_maxban_flags, flags);
   ArrayPushCell(g_maxban_times, minutes);
   #else
   if( g_total_maxban_times >= MAX_BANLIMITS )
   {
      static notified;
      if( !notified )
      {
         log_amx("The amx_addbanlimit has reached its maximum!");
         notified = 1;
      }
      return PLUGIN_HANDLED;
   }
   
   g_maxban_flags[g_total_maxban_times] = flags;
   g_maxban_times[g_total_maxban_times] = minutes;
   #endif
   g_total_maxban_times++;
   
   return PLUGIN_HANDLED;
}

public FwdThink(entity)
{
   if( entity != g_unban_entity ) return;
   
   #if defined USING_SQL
   if( g_total_bans > 0 && !g_loading_bans )
   #else
   if( g_total_bans > 0 )
   #endif
   {
      static _hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7];
      format_time(_hours, sizeof(_hours) - 1, "%H");
      format_time(_minutes, sizeof(_minutes) - 1, "%M");
      format_time(_seconds, sizeof(_seconds) - 1, "%S");
      format_time(_month, sizeof(_month) - 1, "%m");
      format_time(_day, sizeof(_day) - 1, "%d");
      format_time(_year, sizeof(_year) - 1, "%Y");
       
      // c = current
      // u = unban
       
      new c_hours = str_to_num(_hours);
      new c_minutes = str_to_num(_minutes);
      new c_seconds = str_to_num(_seconds);
      new c_month = str_to_num(_month);
      new c_day = str_to_num(_day);
      new c_year = str_to_num(_year);
       
      static unban_time[32];
      static u_hours, u_minutes, u_seconds, u_month, u_day, u_year;
       
      for( new i = 0; i < g_total_bans; i++ )
      {
         #if MAX_BANS <= 0
         static data[BannedData];
         ArrayGetArray(g_array, i, data);
         
         if( data[bd_banlength] == 0 ) continue;
         #else
         if( g_banlengths[i] == 0 ) continue;
         #endif
         
         #if MAX_BANS <= 0
         copy(unban_time, sizeof(unban_time) - 1, data[bd_unbantime]);
         #else
         copy(unban_time, sizeof(unban_time) - 1, g_unbantimes[i]);
         #endif
         replace_all(unban_time, sizeof(unban_time) - 1, ":", " ");
         replace_all(unban_time, sizeof(unban_time) - 1, "/", " ");
         
         parse(unban_time,\\
            _hours, sizeof(_hours) - 1,\\
            _minutes, sizeof(_minutes) - 1,\\
            _seconds, sizeof(_seconds) - 1,\\
            _month, sizeof(_month) - 1,\\
            _day, sizeof(_day) - 1,\\
            _year, sizeof(_year) - 1
            );
         
         u_hours = str_to_num(_hours);
         u_minutes = str_to_num(_minutes);
         u_seconds = str_to_num(_seconds);
         u_month = str_to_num(_month);
         u_day = str_to_num(_day);
         u_year = str_to_num(_year);
         
         if( u_year < c_year
         || u_year == c_year && u_month < c_month
         || u_year == c_year && u_month == c_month && u_day < c_day
         || u_year == c_year && u_month == c_month && u_day == c_day && u_hours < c_hours
         || u_year == c_year && u_month == c_month && u_day == c_day && u_hours == c_hours && u_minutes < c_minutes
         || u_year == c_year && u_month == c_month && u_day == c_day && u_hours == c_hours && u_minutes == c_minutes && u_seconds <= c_seconds )
         {
            #if MAX_BANS <= 0
            Log("Ban time is up for: %s [%s]", data[bd_name], data[bd_steamid]);
             
            Print("^x04[AdvancedBans]^x03 %s^x01[^x04%s^x01]^x03 ban time is up!^x01 [Ban Reason: %s]", data[bd_name], data[bd_steamid], data[bd_reason]);
             
            RemoveBan(i, data[bd_steamid]);
            #else
            Log("Ban time is up for: %s [%s]", g_names[i], g_steamids[i]);
             
            Print("^x04[AdvancedBans]^x03 %s^x01[^x04%s^x01]^x03 ban time is up!^x01 [Ban Reason: %s]", g_names[i], g_steamids[i], g_reasons[i]);
             
            RemoveBan(i);
            #endif
             
            i--; // current pos was replaced with another ban, so we need to check it again.
         }
      }
   }
   
   entity_set_float(g_unban_entity, EV_FL_nextthink, get_gametime() + get_pcvar_float(ab_unbancheck));
}

public TaskDisconnectPlayer(client)
{
   server_cmd("kick #%i ^"You are banned from this server. Check your console^"", get_user_userid(client));
}

AddBan(const target_name[], const target_steamid[], const reason[], const length, const unban_time[], const admin_name[], const admin_steamid[])
{
   #if MAX_BANS > 0
   if( g_total_bans == MAX_BANS )
   {
      log_amx("Ban list is full! (%i)", g_total_bans);
      return;
   }
   #endif
   
   #if defined USING_SQL
   static target_name2[32], reason2[128], admin_name2[32];
   MakeStringSQLSafe(target_name, target_name2, sizeof(target_name2) - 1);
   MakeStringSQLSafe(reason, reason2, sizeof(reason2) - 1);
   MakeStringSQLSafe(admin_name, admin_name2, sizeof(admin_name2) - 1);
   
   static query[512];
   formatex(query, sizeof(query) - 1,\\
      "INSERT INTO `%s` (`%s`, `%s`, `%s`, `%s`, `%s`, `%s`, `%s`) VALUES ('%s', '%s', '%i', '%s', '%s', '%s', '%s');",\\
      TABLE_NAME, KEY_NAME, KEY_STEAMID, KEY_BANLENGTH, KEY_UNBANTIME, KEY_REASON, KEY_ADMIN_NAME, KEY_ADMIN_STEAMID,\\
      target_name2, target_steamid, length, unban_time, reason2, admin_name2, admin_steamid
      );
   
   SQL_ThreadQuery(g_sql_tuple, "QueryAddBan", query);
   #else
   new f = fopen(g_ban_file, "a+");
   
   fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",\\
      target_steamid,\\
      target_name,\\
      length,\\
      unban_time,\\
      reason,\\
      admin_name,\\
      admin_steamid
      );
   
   fclose(f);
   #endif
   
   #if MAX_BANS <= 0
   static data[BannedData];
   copy(data[bd_name], sizeof(data[bd_name]) - 1, target_name);
   copy(data[bd_steamid], sizeof(data[bd_steamid]) - 1, target_steamid);
   data[bd_banlength] = length;
   copy(data[bd_unbantime], sizeof(data[bd_unbantime]) - 1, unban_time);
   copy(data[bd_reason], sizeof(data[bd_reason]) - 1, reason);
   copy(data[bd_admin_name], sizeof(data[bd_admin_name]) - 1, admin_name);
   copy(data[bd_admin_steamid], sizeof(data[bd_admin_steamid]) - 1, admin_steamid);
   
   TrieSetCell(g_trie, target_steamid, g_total_bans);
   ArrayPushArray(g_array, data);
   #else
   copy(g_names[g_total_bans], sizeof(g_names[]) - 1, target_name);
   copy(g_steamids[g_total_bans], sizeof(g_steamids[]) - 1, target_steamid);
   g_banlengths[g_total_bans] = length;
   copy(g_unbantimes[g_total_bans], sizeof(g_unbantimes[]) - 1, unban_time);
   copy(g_reasons[g_total_bans], sizeof(g_reasons[]) - 1, reason);
   copy(g_admin_names[g_total_bans], sizeof(g_admin_names[]) - 1, admin_name);
   copy(g_admin_steamids[g_total_bans], sizeof(g_admin_steamids[]) - 1, admin_steamid);
   #endif
   
   g_total_bans++;
   
   #if MAX_BANS > 0
   if( g_total_bans == MAX_BANS )
   {
      log_amx("Ban list is full! (%i)", g_total_bans);
   }
   #endif
}

#if defined USING_SQL
public QueryAddBan(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime)
{
   if( failstate == TQUERY_CONNECT_FAILED )
   {
      set_fail_state("Could not connect to database.");
   }
   else if( failstate == TQUERY_QUERY_FAILED )
   {
      set_fail_state("Query failed.");
   }
   else if( errcode )
   {
      log_amx("Error on query: %s", error);
   }
   else
   {
      // Yay, ban was added! We can all rejoice!
   }
}

public QueryDeleteBan(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime)
{
   if( failstate == TQUERY_CONNECT_FAILED )
   {
      set_fail_state("Could not connect to database.");
   }
   else if( failstate == TQUERY_QUERY_FAILED )
   {
      set_fail_state("Query failed.");
   }
   else if( errcode )
   {
      log_amx("Error on query: %s", error);
   }
   else
   {
      // Yay, ban was deleted! We can all rejoice!
   }
}

public QueryLoadBans(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime)
{
   if( failstate == TQUERY_CONNECT_FAILED )
   {
      set_fail_state("Could not connect to database.");
   }
   else if( failstate == TQUERY_QUERY_FAILED )
   {
      set_fail_state("Query failed.");
   }
   else if( errcode )
   {
      log_amx("Error on query: %s", error);
   }
   else
   {
      if( SQL_NumResults(query) )
      {
         #if MAX_BANS <= 0
         static data[BannedData];
         while( SQL_MoreResults(query) )
         #else
         while( SQL_MoreResults(query) && g_total_bans < MAX_BANS )
         #endif
         {
            #if MAX_BANS <= 0
            SQL_ReadResult(query, 0, data[bd_name], sizeof(data[bd_name]) - 1);
            SQL_ReadResult(query, 1, data[bd_steamid], sizeof(data[bd_steamid]) - 1);
            data[bd_banlength] = SQL_ReadResult(query, 2);
            SQL_ReadResult(query, 3, data[bd_unbantime], sizeof(data[bd_unbantime]) - 1);
            SQL_ReadResult(query, 4, data[bd_reason], sizeof(data[bd_reason]) - 1);
            SQL_ReadResult(query, 5, data[bd_admin_name], sizeof(data[bd_admin_name]) - 1);
            SQL_ReadResult(query, 6, data[bd_admin_steamid], sizeof(data[bd_admin_steamid]) - 1);
             
            ArrayPushArray(g_array, data);
            TrieSetCell(g_trie, data[bd_steamid], g_total_bans);
            #else
            SQL_ReadResult(query, 0, g_names[g_total_bans], sizeof(g_names[]) - 1);
            SQL_ReadResult(query, 1, g_steamids[g_total_bans], sizeof(g_steamids[]) - 1);
            g_banlengths[g_total_bans] = SQL_ReadResult(query, 2);
            SQL_ReadResult(query, 3, g_unbantimes[g_total_bans], sizeof(g_unbantimes[]) - 1);
            SQL_ReadResult(query, 4, g_reasons[g_total_bans], sizeof(g_reasons[]) - 1);
            SQL_ReadResult(query, 5, g_admin_names[g_total_bans], sizeof(g_admin_names[]) - 1);
            SQL_ReadResult(query, 6, g_admin_steamids[g_total_bans], sizeof(g_admin_steamids[]) - 1);
            #endif
             
            g_total_bans++;
             
            SQL_NextRow(query);
         }
      }
       
      set_task(RELOAD_BANS_INTERVAL, "LoadBans");
       
      g_loading_bans = false;
   }
}
#endif

#if MAX_BANS > 0
RemoveBan(remove)
{
   #if defined USING_SQL
   static query[128];
   formatex(query, sizeof(query) - 1,\\
      "DELETE FROM `%s` WHERE `%s` = '%s';",\\
      TABLE_NAME, KEY_STEAMID, g_steamids[remove]
      );
   
   SQL_ThreadQuery(g_sql_tuple, "QueryDeleteBan", query);
   #endif
   
   for( new i = remove; i < g_total_bans; i++ )
   {
      if( (i + 1) == g_total_bans )
      {
         copy(g_names[i], sizeof(g_names[]) - 1, "");
         copy(g_steamids[i], sizeof(g_steamids[]) - 1, "");
         g_banlengths[i] = 0;
         copy(g_unbantimes[i], sizeof(g_unbantimes[]) - 1, "");
         copy(g_reasons[i], sizeof(g_reasons[]) - 1, "");
         copy(g_admin_names[i], sizeof(g_admin_names[]) - 1, "");
         copy(g_admin_steamids[i], sizeof(g_admin_steamids[]) - 1, "");
      }
      else
      {
         copy(g_names[i], sizeof(g_names[]) - 1, g_names[i + 1]);
         copy(g_steamids[i], sizeof(g_steamids[]) - 1, g_steamids[i + 1]);
         g_banlengths[i] = g_banlengths[i + 1];
         copy(g_unbantimes[i], sizeof(g_unbantimes[]) - 1, g_unbantimes[i + 1]);
         copy(g_reasons[i], sizeof(g_reasons[]) - 1, g_reasons[i + 1]);
         copy(g_admin_names[i], sizeof(g_admin_names[]) - 1, g_admin_names[i + 1]);
         copy(g_admin_steamids[i], sizeof(g_admin_steamids[]) - 1, g_admin_steamids[i + 1]);
      }
   }
   
   g_total_bans--;
   
   #if !defined USING_SQL
   new f = fopen(g_ban_file, "wt");
   
   static name[32], steamid[35], banlength, unbantime[32], reason[128], admin_name[32], admin_steamid[35];
   for( new i = 0; i < g_total_bans; i++ )
   {
      copy(name, sizeof(name) - 1, g_names[i]);
      copy(steamid, sizeof(steamid) - 1, g_steamids[i]);
      banlength = g_banlengths[i];
      copy(unbantime, sizeof(unbantime) - 1, g_unbantimes[i]);
      copy(reason, sizeof(reason) - 1, g_reasons[i]);
      copy(admin_name, sizeof(admin_name) - 1, g_admin_names[i]);
      copy(admin_steamid, sizeof(admin_steamid) - 1, g_admin_steamids[i]);
       
      fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",\\
         steamid,\\
         name,\\
         banlength,\\
         unbantime,\\
         reason,\\
         admin_name,\\
         admin_steamid
         );
   }
   
   fclose(f);
   #endif
}
#else
RemoveBan(pos, const authid[])
{
   TrieDeleteKey(g_trie, authid);
   ArrayDeleteItem(g_array, pos);
   
   g_total_bans--;
   
   #if defined USING_SQL
   static query[128];
   formatex(query, sizeof(query) - 1,\\
      "DELETE FROM `%s` WHERE `%s` = '%s';",\\
      TABLE_NAME, KEY_STEAMID, authid
      );
   
   SQL_ThreadQuery(g_sql_tuple, "QueryDeleteBan", query);
   
   new data[BannedData];
   for( new i = 0; i < g_total_bans; i++ )
   {
      ArrayGetArray(g_array, i, data);
      TrieSetCell(g_trie, data[bd_steamid], i);
   }
   #else
   new f = fopen(g_ban_file, "wt");
   
   new data[BannedData];
   for( new i = 0; i < g_total_bans; i++ )
   {
      ArrayGetArray(g_array, i, data);
      TrieSetCell(g_trie, data[bd_steamid], i);
       
      fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",\\
         data[bd_steamid],\\
         data[bd_name],\\
         data[bd_banlength],\\
         data[bd_unbantime],\\
         data[bd_reason],\\
         data[bd_admin_name],\\
         data[bd_admin_steamid]
         );
   }
   
   fclose(f);
   #endif
}
#endif

#if defined KEEP_DEFAULT_BANS
LoadOldBans(filename[])
{
   if( file_exists(filename) )
   {
      new f = fopen(filename, "rt");
       
      static data[96];
      static command[10], minutes[10], steamid[35], length, unban_time[32];
       
      while( !feof(f) )
      {
         fgets(f, data, sizeof(data) - 1);
         if( !data[0] ) continue;
         
         parse(data, command, sizeof(command) - 1, minutes, sizeof(minutes) - 1, steamid, sizeof(steamid) - 1);
         if( filename[0] == 'b' && !equali(command, "banid") || filename[0] == 'l' && !equali(command, "addip") ) continue;
         
         length = str_to_num(minutes);
         GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1);
         
         AddBan("", steamid, "", length, unban_time, "", "");
      }
       
      fclose(f);
       
      static filename2[32];
       
      // copy current
      copy(filename2, sizeof(filename2) - 1, filename);
       
      // cut off at the "."
      // banned.cfg = banned
      // listip.cfg = listip
      filename2[containi(filename2, ".")] = 0;
       
      // add 2.cfg
      // banned = banned2.cfg
      // listip = listip2.cfg
      add(filename2, sizeof(filename2) - 1, "2.cfg");
       
      // rename file so that it isnt loaded again
      while( !rename_file(filename, filename2, 1) ) { }
   }
}
#endif

public LoadBans()
{
   if( g_total_bans )
   {
      #if MAX_BANS <= 0
      TrieClear(g_trie);
      ArrayClear(g_array);
      #endif
       
      g_total_bans = 0;
   }
   
   #if defined USING_SQL
   static query[128];
   formatex(query, sizeof(query) - 1,\\
      "SELECT * FROM `%s`;",\\
      TABLE_NAME
      );
   
   SQL_ThreadQuery(g_sql_tuple, "QueryLoadBans", query);
   
   g_loading_bans = true;
   #else
   if( file_exists(g_ban_file) )
   {
      new f = fopen(g_ban_file, "rt");
       
      static filedata[512], length[10];
       
      #if MAX_BANS <= 0
      static data[BannedData];
      while( !feof(f) )
      #else
      while( !feof(f) && g_total_bans < MAX_BANS )
      #endif
      {
         fgets(f, filedata, sizeof(filedata) - 1);
         
         if( !filedata[0] ) continue;
         
         #if MAX_BANS <= 0
         parse(filedata,\\
            data[bd_steamid], sizeof(data[bd_steamid]) - 1,\\
            data[bd_name], sizeof(data[bd_name]) - 1,\\
            length, sizeof(length) - 1,\\
            data[bd_unbantime], sizeof(data[bd_unbantime]) - 1,\\
            data[bd_reason], sizeof(data[bd_reason]) - 1,\\
            data[bd_admin_name], sizeof(data[bd_admin_name]) - 1,\\
            data[bd_admin_steamid], sizeof(data[bd_admin_steamid]) - 1
            );
         
         data[bd_banlength] = str_to_num(length);
         
         ArrayPushArray(g_array, data);
         TrieSetCell(g_trie, data[bd_steamid], g_total_bans);
         #else
         static steamid[35], name[32], unbantime[32], reason[128], admin_name[32], admin_steamid[35];
         
         parse(filedata,\\
            steamid, sizeof(steamid) - 1,\\
            name, sizeof(name) - 1,\\
            length, sizeof(length) - 1,\\
            unbantime, sizeof(unbantime) - 1,\\
            reason, sizeof(reason) - 1,\\
            admin_name, sizeof(admin_name) - 1,\\
            admin_steamid, sizeof(admin_steamid) - 1
            );
         
         copy(g_names[g_total_bans], sizeof(g_names[]) - 1, name);
         copy(g_steamids[g_total_bans], sizeof(g_steamids[]) - 1, steamid);
         g_banlengths[g_total_bans] = str_to_num(length);
         copy(g_unbantimes[g_total_bans], sizeof(g_unbantimes[]) - 1, unbantime);
         copy(g_reasons[g_total_bans], sizeof(g_reasons[]) - 1, reason);
         copy(g_admin_names[g_total_bans], sizeof(g_admin_names[]) - 1, admin_name);
         copy(g_admin_steamids[g_total_bans], sizeof(g_admin_steamids[]) - 1, admin_steamid);
         #endif
         
         g_total_bans++;
      }
       
      fclose(f);
   }
   #endif
   
   // load these after, so when they are added to the file with AddBan(), they aren't loaded again from above.
   
   #if defined KEEP_DEFAULT_BANS
   LoadOldBans("banned.cfg");
   LoadOldBans("listip.cfg");
   #endif
}

#if defined USING_SQL
MakeStringSQLSafe(const input[], output[], len)
{
   copy(output, len, input);
   replace_all(output, len, "'", "*");
   replace_all(output, len, "^"", "*");
   replace_all(output, len, "`", "*");
}
#endif

GetBanTime(const bantime, length[], len)
{
   new minutes = bantime;
   new hours = 0;
   new days = 0;
   
   while( minutes >= 60 )
   {
      minutes -= 60;
      hours++;
   }
   
   while( hours >= 24 )
   {
      hours -= 24;
      days++;
   }
   
   new bool:add_before;
   if( minutes )
   {
      formatex(length, len, "%i minute%s", minutes, minutes == 1 ? "" : "s");
       
      add_before = true;
   }
   if( hours )
   {
      if( add_before )
      {
         format(length, len, "%i hour%s, %s", hours, hours == 1 ? "" : "s", length);
      }
      else
      {
         formatex(length, len, "%i hour%s", hours, hours == 1 ? "" : "s");
         
         add_before = true;
      }
   }
   if( days )
   {
      if( add_before )
      {
         format(length, len, "%i day%s, %s", days, days == 1 ? "" : "s", length);
      }
      else
      {
         formatex(length, len, "%i day%s", days, days == 1 ? "" : "s");
         
         add_before = true;
      }
   }
   if( !add_before )
   {
      // minutes, hours, and days = 0
      // assume permanent ban
      copy(length, len, "Permanent Ban");
   }
}

GenerateUnbanTime(const bantime, unban_time[], len)
{
   static _hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7];
   format_time(_hours, sizeof(_hours) - 1, "%H");
   format_time(_minutes, sizeof(_minutes) - 1, "%M");
   format_time(_seconds, sizeof(_seconds) - 1, "%S");
   format_time(_month, sizeof(_month) - 1, "%m");
   format_time(_day, sizeof(_day) - 1, "%d");
   format_time(_year, sizeof(_year) - 1, "%Y");
   
   new hours = str_to_num(_hours);
   new minutes = str_to_num(_minutes);
   new seconds = str_to_num(_seconds);
   new month = str_to_num(_month);
   new day = str_to_num(_day);
   new year = str_to_num(_year);
   
   minutes += bantime;
   
   while( minutes >= 60 )
   {
      minutes -= 60;
      hours++;
   }
   
   while( hours >= 24 )
   {
      hours -= 24;
      day++;
   }
   
   new max_days = GetDaysInMonth(month, year);
   while( day > max_days )
   {
      day -= max_days;
      month++;
   }
   
   while( month > 12 )
   {
      month -= 12;
      year++;
   }
   
   formatex(unban_time, len, "%i:%02i:%02i %i/%i/%i", hours, minutes, seconds, month, day, year);
}

GetDaysInMonth(month, year=0)
{
   switch( month )
   {
      case 1:      return 31; // january
      case 2:      return ((year % 4) == 0) ? 29 : 28; // february
      case 3:      return 31; // march
      case 4:      return 30; // april
      case 5:      return 31; // may
      case 6:      return 30; // june
      case 7:      return 31; // july
      case 8:      return 31; // august
      case 9:      return 30; // september
      case 10:   return 31; // october
      case 11:   return 30; // november
      case 12:   return 31; // december
   }
   
   return 30;
}

GetTargetFlags(client)
{
   static const flags_no_immunity = (CMDTARGET_ALLOW_SELF|CMDTARGET_NO_BOTS);
   static const flags_immunity = (CMDTARGET_ALLOW_SELF|CMDTARGET_NO_BOTS|CMDTARGET_OBEY_IMMUNITY);
   
   switch( get_pcvar_num(ab_immunity) )
   {
      case 1: return flags_immunity;
      case 2: return access(client, ADMIN_IMMUNITY) ? flags_no_immunity : flags_immunity;
   }
   
   return flags_no_immunity;
}

GetMaxBanTime(client)
{
   if( !g_total_maxban_times ) return 0;
   
   new flags = get_user_flags(client);
   
   for( new i = 0; i < g_total_maxban_times; i++ )
   {
      #if !defined MAX_BANLIMITS
      if( flags & ArrayGetCell(g_maxban_flags, i) )
      {
         return ArrayGetCell(g_maxban_times, i);
      }
      #else
      if( flags & g_maxban_flags[i] )
      {
         return g_maxban_times[i];
      }
      #endif
   }
   
   return 0;
}

PrintBanInformation(client, const target_name[], const target_authid[], const reason[], const length, const unban_time[], const admin_name[], const admin_authid[], bool:show_admin, bool:show_website)
{
   static website[64], ban_length[64];
   if( client == 0 )
   {
      server_print("************************************************");
      server_print("%L", client, "AB_BAN_INFORMATION");
      server_print("%L: %s", client, "AB_NAME", target_name);
      server_print("%L: %s", client, IsValidAuthid(target_authid) ? "AB_STEAMID" : "AB_IP", target_authid);
      server_print("%L: %s", client, "AB_REASON", reason);
      if( length > 0 )
      {
         GetBanTime(length, ban_length, sizeof(ban_length) - 1);
         server_print("%L: %s", client, "AB_BAN_LENGTH", ban_length);
      }
      server_print("%L: %s", client, "AB_UNBAN_TIME", unban_time);
      if( show_admin )
      {
         server_print("%L: %s", client, "AB_ADMIN_NAME", admin_name);
         server_print("%L: %s", client, "AB_ADMIN_STEAMID", admin_authid);
      }
      if( show_website )
      {
         get_pcvar_string(ab_website, website, sizeof(website) - 1);
         if( website[0] )
         {
            server_print("");
            server_print("%L", client, "AB_WEBSITE");
            server_print("%s", website);
         }
      }
      server_print("************************************************");
   }
   else
   {
      client_cmd(client, "echo ^"************************************************^"");
      client_cmd(client, "echo ^"%L^"", client, "AB_BAN_INFORMATION");
      client_cmd(client, "echo ^"%L: %s^"", client, "AB_NAME", target_name);
      client_cmd(client, "echo ^"%L: %s^"", client, IsValidAuthid(target_authid) ? "AB_STEAMID" : "AB_IP", target_authid);
      client_cmd(client, "echo ^"%L: %s^"", client, "AB_REASON", reason);
      if( length > 0 )
      {
         GetBanTime(length, ban_length, sizeof(ban_length) - 1);
         client_cmd(client, "echo ^"%L: %s^"", client, "AB_BAN_LENGTH", ban_length);
      }
      client_cmd(client, "echo ^"%L: %s^"", client, "AB_UNBAN_TIME", unban_time);
      if( show_admin )
      {
         client_cmd(client, "echo ^"%L: %s^"", client, "AB_ADMIN_NAME", admin_name);
         client_cmd(client, "echo ^"%L: %s^"", client, "AB_ADMIN_STEAMID", admin_authid);
      }
      if( show_website )
      {
         get_pcvar_string(ab_website, website, sizeof(website) - 1);
         if( website[0] )
         {
            client_cmd(client, "echo ^"^"");
            client_cmd(client, "echo ^"%L^"", client, "AB_WEBSITE");
            client_cmd(client, "echo ^"%s^"", website);
         }
      }
      client_cmd(client, "echo ^"************************************************^"");
   }
}

PrintActivity(const admin_name[], const message_fmt[], any:...)
{
   if( !get_playersnum() ) return;
   
   new activity = get_pcvar_num(amx_show_activity);
   if( !(0 <= activity <= 5) )
   {
      set_pcvar_num(amx_show_activity, (activity = 2));
   }
   
   static message[192], temp[192];
   vformat(message, sizeof(message) - 1, message_fmt, 3);
   
   for( new client = 1; client <= g_max_clients; client++ )
   {
      if( !is_user_connected(client) ) continue;
       
      switch( is_user_admin(client) ? g_admin_activity[activity] : g_normal_activity[activity] )
      {
         case ACTIVITY_NONE:
         {
             
         }
         case ACTIVITY_HIDE:
         {
            copy(temp, sizeof(temp) - 1, message);
            replace(temp, sizeof(temp) - 1, "$name", "ADMIN");
             
            message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client);
            write_byte(client);
            write_string(temp);
            message_end();
         }
         case ACTIVITY_SHOW:
         {
            copy(temp, sizeof(temp) - 1, message);
            replace(temp, sizeof(temp) - 1, "$name", admin_name);
             
            message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client);
            write_byte(client);
            write_string(temp);
            message_end();
         }
      }
   }
}

Print(const message_fmt[], any:...)
{
   if( !get_playersnum() ) return;
   
   static message[192];
   vformat(message, sizeof(message) - 1, message_fmt, 2);
   
   for( new client = 1; client <= g_max_clients; client++ )
   {
      if( !is_user_connected(client) ) continue;
       
      message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client);
      write_byte(client);
      write_string(message);
      message_end();
   }
}

Log(const message_fmt[], any:...)
{
   static message[256];
   vformat(message, sizeof(message) - 1, message_fmt, 2);
   
   static filename[96];
   #if defined HISTORY_ONE_FILE
   if( !filename[0] )
   {
      get_basedir(filename, sizeof(filename) - 1);
      add(filename, sizeof(filename) - 1, "/logs/ban_history.log");
   }
   #else
   static dir[64];
   if( !dir[0] )
   {
      get_basedir(dir, sizeof(dir) - 1);
      add(dir, sizeof(dir) - 1, "/logs");
   }
   
   format_time(filename, sizeof(filename) - 1, "%m%d%Y");
   format(filename, sizeof(filename) - 1, "%s/BAN_HISTORY_%s.log", dir, filename);
   #endif
   
   log_amx("%s", message);
   log_to_file(filename, "%s", message);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\\\ rtf1\\\\ ansi\\\\ deff0{\\\\ fonttbl{\\\\ f0\\\\ fnil Tahoma;}}\\n\\\\ viewkind4\\\\ uc1\\\\ pard\\\\ lang1033\\\\ f0\\\\ fs16 \\n\\\\ par }
*/


Regulament|My Official Website[V:1.1]|Panel JB[V:1.0]

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 01-07-2017, 12:42:10 | Translate post to: ... (Click for more languages)

Compileaza si mie pluginul ca tot imi da erori
0 0
  
Back to top
View user's profile Send private message
GoreSpintecatoru.

[Inactiv o perioada]



Status: Offline
(since 09-11-2017 19:29)
Joined: 18 Feb 2017
Posts: 638, Topics: 28
Location: Romania

Reputation: 762.7
Votes: 40

       
Post Posted: 01-07-2017, 12:42:49 | Translate post to: ... (Click for more languages)

http://www.girlshare.ro/3489873343

Regulament|My Official Website[V:1.1]|Panel JB[V:1.0]

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 01-07-2017, 12:47:41 | Translate post to: ... (Click for more languages)

Tot asa da frate , daca scriu amx_unban numele sau ip-ul nu merge zice ca nu exista..
trb sa scriu iar steam id-ul in ghilimele sa mearga

0 0
  
Back to top
View user's profile Send private message
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Freakz Forum Index -> Trash Bin -> CS 2006-2019 (Archived) -> Plugins - Help / Support  
Go to page 1, 2  Next    


The time now is 30-07-2025, 23:49:34
Copyright info

Based on phpBB ro/com
B

 
 
 







I forgot my password