hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.06.16. 12:24



Jelenlévő felhasználók

Jelenleg 353 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 353 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 23 hozzászólás ]  Oldal Előző 1 2 3
Szerző Üzenet
 Hozzászólás témája: Re: Ban információ
HozzászólásElküldve: 2011.08.27. 15:49 
Offline
Developer
Avatar

Csatlakozott: 2011.06.01. 21:11
Hozzászólások: 7965
Megköszönt másnak: 295 alkalommal
Megköszönték neki: 537 alkalommal
exert szerintem ha rossz lenne akkor nem lenne fent az alliedmodson:)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Ban információ
HozzászólásElküldve: 2011.08.27. 15:58 
Offline
Őstag
Avatar

Csatlakozott: 2010.04.16. 16:50
Hozzászólások: 1342
Megköszönt másnak: 42 alkalommal
Megköszönték neki: 58 alkalommal
Akkor miért nem jó??már mindent megprobáltam vele.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Ban információ
HozzászólásElküldve: 2011.08.29. 18:03 
Offline
Őstag
Avatar

Csatlakozott: 2010.04.16. 16:50
Hozzászólások: 1342
Megköszönt másnak: 42 alkalommal
Megköszönték neki: 58 alkalommal
Na az a helyzet ,hogy a plugin az tökéletes mostmár csak az sma,az nem.Az a gond vele hogy ha a kodot átalakitom és berakom és felülirom a régit akkor nem banolja le a játékost.Az alap plugin pedig az müködik.Nem tom mi lehet elálitva benne de aki tudja kérem irja le mert már lassan 4 napja szenvedek ezzel a pluginnal és már nagyon kiégtem töle ...itt a kód

Kód:
#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 ^"Te ki vagy tiltva a szerverrol,Nezd meg a konzolod aljat tovabbi informacioert^"", 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 }
*/


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 23 hozzászólás ]  Oldal Előző 1 2 3


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 117 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole