amxbans_core.sma
Kód: #include <amxmodx> #include <amxmisc> #include <sqlx>
new AdminCount;
new PLUGINNAME[] = "AMXBans Core" new PLUGINVERSION[] = "6.0.1"
#define ADMIN_LOOKUP (1<<0) #define ADMIN_NORMAL (1<<1) #define ADMIN_STEAM (1<<2) #define ADMIN_IPADDR (1<<3) #define ADMIN_NAME (1<<4)
new g_cmdLoopback[16] new bool:g_CaseSensitiveName[33];
// pcvars new amx_mode; new amx_password_field; new amx_default_access;
//amxbans new pcvarip,pcvarprefix,pcvaradminsfile new g_ServerAddr[100],g_dbPrefix[32],g_AdminsFromFile new g_szAdminNick[33][32],g_iAdminUseStaticBantime[33] new Array:g_AdminNick new Array:g_AdminUseStaticBantime
//multi forward handles new bool:g_isAdmin[33] enum MFHANDLE_TYPES { Amxbans_Sql_Initialized=0, Admin_Connect, Admin_Disconnect } new MFHandle[MFHANDLE_TYPES]
new Handle:info new bool:g_bSqlInitialized
public plugin_init() { register_plugin(PLUGINNAME, PLUGINVERSION, "AMXBans Dev Team")
register_dictionary("admin.txt") register_dictionary("common.txt") amx_mode=register_cvar("amx_mode", "1") amx_password_field=register_cvar("amx_password_field", "_pw") amx_default_access=register_cvar("amx_default_access", "")
register_cvar("amx_vote_ratio", "0.02") register_cvar("amx_vote_time", "10") register_cvar("amx_vote_answers", "1") register_cvar("amx_vote_delay", "60") register_cvar("amx_last_voting", "0") register_cvar("amx_show_activity", "2") register_cvar("amx_votekick_ratio", "0.40") register_cvar("amx_voteban_ratio", "0.40") register_cvar("amx_votemap_ratio", "0.40")
set_cvar_float("amx_last_voting", 0.0)
register_srvcmd("amx_sqladmins", "adminSql") register_cvar("amx_sql_table", "admins") // amxbans pcvarip=register_cvar("amxbans_server_address","") pcvarprefix=register_cvar("amx_sql_prefix", "amx") pcvaradminsfile=register_cvar("amxbans_use_admins_file","0") g_AdminNick=ArrayCreate(32,32) g_AdminUseStaticBantime=ArrayCreate(1,32) // register_cvar("amx_sql_host", "127.0.0.1") register_cvar("amx_sql_user", "root") register_cvar("amx_sql_pass", "") register_cvar("amx_sql_db", "amx") register_cvar("amx_sql_type", "mysql")
register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG) //register_concmd("amx_addadmin", "addadminfn", ADMIN_RCON, "<playername|auth> <accessflags> [password] [authtype] - add specified player as an admin to users.ini")
format(g_cmdLoopback, 15, "amxauth%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'))
register_clcmd(g_cmdLoopback, "ackSignal")
remove_user_flags(0, read_flags("z")) // Remove 'user' flag from server rights
new configsDir[64] get_configsdir(configsDir, 63) server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file server_cmd("exec %s/sql.cfg", configsDir) //server_cmd("exec %s/amxbans.cfg", configsDir)
} public client_connect(id) { g_CaseSensitiveName[id] = false; } public plugin_cfg() { //fixx to be sure cfgs are loaded create_forwards() set_task(0.1,"delayed_plugin_cfg") } create_forwards() { MFHandle[Amxbans_Sql_Initialized]=CreateMultiForward("amxbans_sql_initialized",ET_IGNORE,FP_CELL,FP_STRING) MFHandle[Admin_Connect]=CreateMultiForward("amxbans_admin_connect",ET_IGNORE,FP_CELL) MFHandle[Admin_Disconnect]=CreateMultiForward("amxbans_admin_disconnect",ET_IGNORE,FP_CELL) } public delayed_plugin_cfg() { //check if amxbans plugins are the first plugins and default admin plugins are disabled //added for admins who cant read the docs if(find_plugin_byfile("admin.amxx") != INVALID_PLUGIN_ID) { log_amx("[AMXBans] WARNING: admin.amxx plugin running! stopped.") pause("acd","admin.amxx") } if(find_plugin_byfile("admin_sql.amxx") != INVALID_PLUGIN_ID) { log_amx("[AMXBans] WARNING: admin_sql.amxx plugin running! stopped.") pause("acd","admin_sql.amxx") } if(find_plugin_byfile("amxbans_core.amxx") != 0) log_amx("[AMXBans] WARNING: amxbans_core.amxx should be the fist entry in your plugins.ini!") if(find_plugin_byfile("amxbans_main.amxx") != 1) log_amx("[AMXBans] WARNING: amxbans_main.amxx should be the second entry in your plugins.ini!") get_pcvar_string(pcvarprefix,g_dbPrefix,charsmax(g_dbPrefix)) get_pcvar_string(pcvarip,g_ServerAddr,charsmax(g_ServerAddr)) g_AdminsFromFile=get_pcvar_num(pcvaradminsfile) if(strlen(g_ServerAddr) < 9) { new ip[32] get_user_ip(0,ip,31) formatex(g_ServerAddr,charsmax(g_ServerAddr),"%s",ip) } if(get_cvar_num("amxbans_debug") >= 1) server_print("[AMXBans] plugin_cfg: ip %s / prefix %s",g_ServerAddr,g_dbPrefix) server_cmd("amx_sqladmins") server_exec();
set_task(6.1, "delayed_load") }
public delayed_load() { new configFile[128], curMap[64], configDir[128]
get_configsdir(configDir, sizeof(configDir)-1) get_mapname(curMap, sizeof(curMap)-1)
new i=0; while (curMap[i] != '_' && curMap[i++] != '^0') {/*do nothing*/} if (curMap[i]=='_') { // this map has a prefix curMap[i]='^0'; formatex(configFile, sizeof(configFile)-1, "%s/maps/prefix_%s.cfg", configDir, curMap);
if (file_exists(configFile)) { server_cmd("exec %s", configFile); } }
get_mapname(curMap, sizeof(curMap)-1)
formatex(configFile, sizeof(configFile)-1, "%s/maps/%s.cfg", configDir, curMap)
if (file_exists(configFile)) { server_cmd("exec %s", configFile) } }
loadSettings(szFilename[]) { new File=fopen(szFilename,"r"); if (File) { new Text[512]; new Flags[32]; new Access[32] new AuthData[44]; new Password[32]; new Name[32]; new Static[2]; while (!feof(File)) { fgets(File,Text,sizeof(Text)-1); trim(Text); // comment if (Text[0]==';') { continue; } Flags[0]=0; Access[0]=0; AuthData[0]=0; Password[0]=0; Name[0] = 0; Static[0] = 0; // not enough parameters if (parse(Text, AuthData, charsmax(AuthData), Password, charsmax(Password), Access, charsmax(Access), Flags, charsmax(Flags), Name, charsmax(Name), Static, charsmax(Static)) < 2) { continue; } admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); ArrayPushString(g_AdminNick, Name); ArrayPushCell(g_AdminUseStaticBantime, str_to_num(Static)); AdminCount++; } fclose(File); }
if (AdminCount == 1) { server_print("[AMXBans] %L", LANG_SERVER, "LOADED_ADMIN"); } else { server_print("[AMXBans] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount); } return 1; }
public adminSql() { new table[32], error[128], errno SQL_SetAffinity("mysql") info = SQL_MakeStdTuple() new Handle:sql = SQL_Connect(info, errno, error, 127) get_cvar_string("amx_sql_table", table, 31) //sql error or amxbans_use_admins_file == 1 if (sql == Empty_Handle || g_AdminsFromFile == 1) { if(!g_AdminsFromFile) server_print("[AMXBans] %L", LANG_SERVER, "SQL_CANT_CON", error) //backup to users.ini new configsDir[64] get_configsdir(configsDir, 63) format(configsDir, 63, "%s/users.ini", configsDir) loadSettings(configsDir) // Load admins accounts
return PLUGIN_HANDLED } if(g_AdminsFromFile > 1) return PLUGIN_HANDLED admins_flush(); ArrayClear(g_AdminNick) ArrayClear(g_AdminUseStaticBantime) new Handle:query //amxbans new temp[1024] formatex(temp,1023,"SELECT aa.steamid,aa.password,aa.access,aa.flags,aa.nickname,ads.custom_flags,ads.use_static_bantime \ FROM PREFIX_amxadmins as aa, PREFIX_admins_servers as ads, PREFIX_serverinfo as si \ WHERE ((ads.admin_id=aa.id) AND (ads.server_id=si.id) AND \ ((aa.days=0) OR (aa.expired>UNIX_TIMESTAMP(NOW()))) AND (si.address='%s'))",g_ServerAddr) new pquery[1024] prepare_prefix(temp,pquery,charsmax(pquery)) query = SQL_PrepareQuery(sql,pquery) SQL_Execute(query) // AdminCount = 0 if(SQL_NumRows(query)) { /** do this incase people change the query order and forget to modify below */ new qcolAuth = SQL_FieldNameToNum(query, "steamid") new qcolPass = SQL_FieldNameToNum(query, "password") new qcolAccess = SQL_FieldNameToNum(query, "access") new qcolFlags = SQL_FieldNameToNum(query, "flags") new qcolNick = SQL_FieldNameToNum(query, "nickname") new qcolCustom = SQL_FieldNameToNum(query, "custom_flags") new qcolStatic = SQL_FieldNameToNum(query, "use_static_bantime") new AuthData[44]; new Password[44]; new Access[32]; new Flags[32]; new Nick[32]; new Static[5] new iStatic while (SQL_MoreResults(query)) { SQL_ReadResult(query, qcolAuth, AuthData, sizeof(AuthData)-1); SQL_ReadResult(query, qcolPass, Password, sizeof(Password)-1); SQL_ReadResult(query, qcolStatic, Static, sizeof(Static)-1); SQL_ReadResult(query, qcolCustom, Access, sizeof(Access)-1); SQL_ReadResult(query, qcolNick, Nick, sizeof(Nick)-1); SQL_ReadResult(query, qcolFlags, Flags, sizeof(Flags)-1); //if custom access not set get the global trim(Access) if(equal(Access,"")) SQL_ReadResult(query, qcolAccess, Access, sizeof(Access)-1); admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); //save nick ArrayPushString(g_AdminNick,Nick) //save static bantime iStatic=1 if(equal(Static,"no")) iStatic=0 ArrayPushCell(g_AdminUseStaticBantime,iStatic) ++AdminCount; SQL_NextRow(query) } }
if (AdminCount == 1) { server_print("[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMIN") } else { server_print("[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount) } SQL_FreeHandle(query) SQL_FreeHandle(sql) if(!g_bSqlInitialized) { new ret ExecuteForward(MFHandle[Amxbans_Sql_Initialized],ret,info,g_dbPrefix) } g_bSqlInitialized=true return PLUGIN_HANDLED } public plugin_end() { if(info != Empty_Handle) SQL_FreeHandle(info) }
public cmdReload(id, level, cid) { if (!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
//strip original flags (patch submitted by mrhunt) remove_user_flags(0, read_flags("z")) AdminCount = 0 adminSql()
if (id != 0) { if (AdminCount == 1) console_print(id, "[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMIN") else console_print(id, "[AMXBans] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount) }
new players[32], num, pv new name[32] get_players(players, num) for (new i=0; i<num; i++) { pv = players[i] get_user_name(pv, name, 31) accessUser(pv, name) }
return PLUGIN_HANDLED }
getAccess(id, name[], authid[], ip[], password[]) { new index = -1 new result = 0 static Count; static Flags; static Access; static AuthData[44]; static Password[32]; g_CaseSensitiveName[id] = false;
Count=admins_num(); for (new i = 0; i < Count; ++i) { Flags=admins_lookup(i,AdminProp_Flags); admins_lookup(i,AdminProp_Auth,AuthData,sizeof(AuthData)-1); if (Flags & FLAG_AUTHID) { if (equal(authid, AuthData)) { index = i break } } else if (Flags & FLAG_IP) { new c = strlen(AuthData) if (AuthData[c - 1] == '.') /* check if this is not a xxx.xxx. format */ { if (equal(AuthData, ip, c)) { index = i break } } /* in other case an IP must just match */ else if (equal(ip, AuthData)) { index = i break } } else { if (Flags & FLAG_CASE_SENSITIVE) { if (Flags & FLAG_TAG) { if (contain(name, AuthData) != -1) { index = i g_CaseSensitiveName[id] = true break } } else if (equal(name, AuthData)) { index = i g_CaseSensitiveName[id] = true break } } else { if (Flags & FLAG_TAG) { if (containi(name, AuthData) != -1) { index = i break } } else if (equali(name, AuthData)) { index = i break } } } }
if (index != -1) { Access=admins_lookup(index,AdminProp_Access); //amxbans ArrayGetString(g_AdminNick,index,g_szAdminNick[id],31) g_iAdminUseStaticBantime[id]=ArrayGetCell(g_AdminUseStaticBantime,index) //
if (Flags & FLAG_NOPASS) { result |= 8 new sflags[32] get_flags(Access, sflags, 31) set_user_flags(id, Access) new ret if(!g_isAdmin[id]) ExecuteForward(MFHandle[Admin_Connect],ret,id) g_isAdmin[id]=true log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^") (nick ^"%s^") (static %d)", \ name, get_user_userid(id), authid, AuthData, sflags, ip,g_szAdminNick[id],g_iAdminUseStaticBantime[id]) } else { admins_lookup(index,AdminProp_Password,Password,sizeof(Password)-1);
if (equal(password, Password)) { result |= 12 set_user_flags(id, Access) new sflags[32] get_flags(Access, sflags, 31) new ret if(!g_isAdmin[id]) ExecuteForward(MFHandle[Admin_Connect],ret,id) g_isAdmin[id]=true log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^") (nick ^"%s^") (static %d)", \ name, get_user_userid(id), authid, AuthData, sflags, ip,g_szAdminNick[id],g_iAdminUseStaticBantime[id]) } else { result |= 1 if (Flags & FLAG_KICK) { result |= 2 g_isAdmin[id]=false log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, ip) } } } } else if (get_pcvar_float(amx_mode) == 2.0) { result |= 2 } else { new defaccess[32] get_pcvar_string(amx_default_access, defaccess, 31) if (!strlen(defaccess)) { copy(defaccess, 32, "z") } new idefaccess = read_flags(defaccess) if (idefaccess) { result |= 8 set_user_flags(id, idefaccess) } } return result }
accessUser(id, name[] = "") { remove_user_flags(id) new userip[32], userauthid[32], password[32], passfield[32], username[32] get_user_ip(id, userip, 31, 1) get_user_authid(id, userauthid, 31) if (name[0]) { copy(username, 31, name) } else { get_user_name(id, username, 31) } get_pcvar_string(amx_password_field, passfield, 31) get_user_info(id, passfield, password, 31) new result = getAccess(id, username, userauthid, userip, password) if (result & 1) { client_cmd(id, "echo ^"* %L^"", id, "INV_PAS") } if (result & 2) { client_cmd(id, "%s", g_cmdLoopback) return PLUGIN_HANDLED } if (result & 4) { client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC") } if (result & 8) { client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET") } return PLUGIN_CONTINUE }
public client_infochanged(id) { if (!is_user_connected(id) || !get_pcvar_num(amx_mode)) { return PLUGIN_CONTINUE }
new newname[32], oldname[32] get_user_name(id, oldname, 31) get_user_info(id, "name", newname, 31)
if (g_CaseSensitiveName[id]) { if (!equal(newname, oldname)) { accessUser(id, newname) } } else { if (!equali(newname, oldname)) { accessUser(id, newname) } } return PLUGIN_CONTINUE } public client_disconnect(id) { if(g_isAdmin[id]) { new ret ExecuteForward(MFHandle[Admin_Disconnect],ret,id) } g_isAdmin[id]=false } public ackSignal(id) { server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY") return PLUGIN_HANDLED }
public client_authorized(id) return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE
public client_putinserver(id) { if (!is_dedicated_server() && id == 1) return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE return PLUGIN_CONTINUE } //amxbans prepare_prefix(szQuery[],output[],len) { copy(output,len,szQuery) replace_all(output,len,"PREFIX",g_dbPrefix) return PLUGIN_CONTINUE } //natives public plugin_natives() { register_library("AMXBansCore") register_native("amxbans_get_db_prefix","native_amxbans_get_prefix") register_native("amxbans_get_admin_nick","native_amxbans_get_nick") register_native("amxbans_get_static_bantime","native_amxbans_static_bantime") } public native_amxbans_get_prefix() { new len= get_param(2) set_array(1,g_dbPrefix,len) } public native_amxbans_get_nick() { new id = get_param(1) new len= get_param(3) set_array(2,g_szAdminNick[id],len) } public native_amxbans_static_bantime() { new id = get_param(1) if(get_cvar_num("amxbans_debug") >= 3) log_amx("[AMXBans Core] Native static bantime: id: %d | result: %d",id,g_iAdminUseStaticBantime[id]) return g_iAdminUseStaticBantime[id] }
amxbans_main.sma
Kód: new const AUTHOR[] = "AMXBans Dev Team" new const PLUGIN_NAME[] = "AMXBans Main" new const VERSION[] = "6.0.1" // This is used in the plugins name
new const amxbans_version[] = "6.0.1" // This is for the DB
#include <amxmodx> #include <amxmisc> #include <sqlx> #include <time>
// Amxbans Core natives #include "include/amxbans_core.inc"
// Amxbans .inl files #include "include/amxbans/global_vars.inl" #include "include/amxbans/color_chat.inl" #include "include/amxbans/init_functions.inl" #include "include/amxbans/check_player.inl" #include "include/amxbans/check_flag.inl" #include "include/amxbans/menu_stocks.inl" #include "include/amxbans/menu_ban.inl" #include "include/amxbans/menu_disconnected.inl" #include "include/amxbans/menu_history.inl" #include "include/amxbans/menu_flag.inl" #include "include/amxbans/cmdBan.inl" //#include "include/amxbans/cmdUnban.inl" #include "include/amxbans/web_handshake.inl"
// 16k * 4 = 64k stack size #pragma dynamic 16384 // Give the plugin some extra memory to use
public plugin_init() { register_plugin(PLUGIN_NAME, VERSION, AUTHOR) register_cvar("amxbans_version", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY) register_dictionary("amxbans.txt") register_dictionary("common.txt") register_dictionary("time.txt") new szGame[20]; get_modname(szGame, charsmax(szGame)); if (equal(szGame, "cstrike") || equal(szGame, "czero")) register_event("HLTV", "event_new_round", "a", "1=0", "2=0"); else if (equal(szGame, "dod")) register_event("RoundState", "event_new_round", "a", "1=1"); else g_supported_game = false; register_clcmd("amx_banmenu", "cmdBanMenu", ADMIN_BAN, "- displays ban menu") register_clcmd("amxbans_custombanreason", "setCustomBanReason", ADMIN_BAN, "- configures custom ban message") register_clcmd("amx_banhistorymenu", "cmdBanhistoryMenu", ADMIN_BAN, "- displays banhistorymenu") register_clcmd("amx_bandisconnectedmenu", "cmdBanDisconnectedMenu", ADMIN_BAN, "- displays bandisconnectedmenu") register_clcmd("amx_flaggingmenu","cmdFlaggingMenu",ADMIN_BAN,"- displays flagging menu") register_srvcmd("amx_sethighbantimes", "setHighBantimes") register_srvcmd("amx_setlowbantimes", "setLowBantimes") register_srvcmd("amx_setflagtimes","setFlagTimes") register_concmd("amx_reloadreasons", "cmdFetchReasons", ADMIN_CFG) pcvar_serverip = register_cvar("amxbans_server_address","") pcvar_server_nick = register_cvar("amxbans_servernick", "") pcvar_discon_in_banlist = register_cvar("amxbans_discon_players_saved","10") pcvar_complainurl = register_cvar("amxbans_complain_url", "www.yoursite.com") // Dont use http:// then the url will not show pcvar_debug = register_cvar("amxbans_debug", "0") // Set this to 1 to enable debug pcvar_newbancmd = register_cvar("amxbans_use_newbancmd","1") pcvar_add_mapname = register_cvar("amxbans_add_mapname_in_servername", "0") pcvar_flagged_all = register_cvar("amxbans_flagged_all_server","1") pcvar_show_in_hlsw = register_cvar("amxbans_show_in_hlsw", "1") pcvar_show_hud_messages = register_cvar("amxbans_show_hud_messages", "1") pcvar_higher_ban_time_admin = register_cvar("amxbans_higher_ban_time_admin", "n") pcvar_admin_mole_access = register_cvar("amxbans_admin_mole_access", "r") pcvar_show_name_evenif_mole = register_cvar("amxbans_show_name_evenif_mole", "1") pcvar_custom_statictime = register_cvar("amxbans_custom_statictime","1440") pcvar_show_prebanned = register_cvar("amxbans_show_prebanned","1") pcvar_show_prebanned_num = register_cvar("amxbans_show_prebanned_num","2") pcvar_default_banreason = register_cvar("amxbans_default_ban_reason","unknown") register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<steamID or nickname or #authid or IP> <time in mins> <reason>") register_srvcmd("amx_ban", "cmdBan", -1, "<steamID or nickname or #authid or IP> <time in mins> <reason>") register_concmd("amx_banip", "cmdBan", ADMIN_BAN, "<steamID or nickname or #authid or IP> <time in mins> <reason>") register_srvcmd("amx_banip", "cmdBan", -1, "<steamID or nickname or #authid or IP> <time in mins> <reason>") register_srvcmd("amx_list", "cmdLst", ADMIN_RCON, "sends playerinfos to web") g_coloredMenus = colored_menus() g_MyMsgSync = CreateHudSyncObj() g_banReasons = ArrayCreate(128,7) g_banReasons_Bantime = ArrayCreate(1,7) g_disconPLname = ArrayCreate(32,1) g_disconPLauthid = ArrayCreate(35,1) g_disconPLip = ArrayCreate(22,1) new configsDir[64] get_configsdir(configsDir, 63) server_cmd("exec %s/sql.cfg", configsDir) server_cmd("exec %s/amxbans.cfg", configsDir) color_chat_init() } create_forwards() { MFHandle[Ban_MotdOpen]=CreateMultiForward("amxbans_ban_motdopen",ET_IGNORE,FP_CELL) MFHandle[Player_Flagged]=CreateMultiForward("amxbans_player_flagged",ET_IGNORE,FP_CELL,FP_CELL,FP_STRING) MFHandle[Player_UnFlagged]=CreateMultiForward("amxbans_player_unflagged",ET_IGNORE,FP_CELL) } public addMenus() { new szKey[64] format(szKey,charsmax(szKey),"%L",LANG_SERVER,"ADMMENU_FLAGGING") AddMenuItem(szKey,"amx_flaggingmenu",ADMIN_BAN,PLUGIN_NAME) format(szKey,charsmax(szKey),"%L",LANG_SERVER,"ADMMENU_DISCONNECTED") AddMenuItem(szKey,"amx_bandisconnectedmenu",ADMIN_BAN,PLUGIN_NAME) format(szKey,charsmax(szKey),"%L",LANG_SERVER,"ADMMENU_HISTORY") AddMenuItem(szKey,"amx_banhistorymenu",ADMIN_BAN,PLUGIN_NAME) } //forward from amxbans_core public amxbans_sql_initialized(Handle:sqlTuple,dbPrefix[]) { copy(g_dbPrefix,charsmax(g_dbPrefix),dbPrefix) //db was already initialized, second init can be caused by a second forward from main plugin //this should never happen!! if(g_SqlX != Empty_Handle) { log_amx("[AMXBans Error] DB Info Tuple from amxbans_core initialized twice!!") return PLUGIN_HANDLED } g_SqlX=sqlTuple if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans] Received DB Info Tuple from amxbans_core: %d | %s", sqlTuple,g_dbPrefix) if(g_SqlX==Empty_Handle) { log_amx("[AMXBans Error] DB Info Tuple from amxbans_main is empty! Trying to get a valid one") new host[64], user[64], pass[64], db[64]
get_cvar_string("amx_sql_host", host, 63) get_cvar_string("amx_sql_user", user, 63) get_cvar_string("amx_sql_pass", pass, 63) get_cvar_string("amx_sql_db", db, 63) g_SqlX = SQL_MakeDbTuple(host, user, pass, db) get_cvar_string("amx_sql_prefix",g_dbPrefix,charsmax(g_dbPrefix)) } create_forwards() set_task(0.1, "banmod_online") set_task(0.2, "fetchReasons") set_task(2.0, "addMenus") return PLUGIN_HANDLED } /* public plugin_cfg() { //set_task(0.1, "sql_init") } public sql_init() { new host[64], user[64], pass[64], db[64]
get_cvar_string("amx_sql_host", host, 63) get_cvar_string("amx_sql_user", user, 63) get_cvar_string("amx_sql_pass", pass, 63) get_cvar_string("amx_sql_db", db, 63) get_cvar_string("amx_sql_prefix",g_dbPrefix,charsmax(g_dbPrefix)) //amxbans_get_db_prefix(g_dbPrefix,charsmax(g_dbPrefix)) g_SqlX = SQL_MakeDbTuple(host, user, pass, db) create_forwards() set_task(0.1, "banmod_online") set_task(0.2, "fetchReasons") set_task(2.0, "addMenus") } */ ////////////////////////////////////////////////////////////////// public get_higher_ban_time_admin_flag() { new flags[24] get_pcvar_string(pcvar_higher_ban_time_admin, flags, 23) return(read_flags(flags)) } public get_admin_mole_access_flag() { new flags[24] get_pcvar_string(pcvar_admin_mole_access, flags, 23) return(read_flags(flags)) } public delayed_kick(player_id) { player_id-=200 new userid = get_user_userid(player_id) new kick_message[128] format(kick_message,127,"%L", player_id,"KICK_MESSAGE")
if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBANS DEBUG] Delayed Kick ID: <%d>", player_id)
server_cmd("kick #%d %s",userid, kick_message) g_kicked_by_amxbans[player_id]=true g_being_banned[player_id] = false return PLUGIN_CONTINUE } public event_new_round() { new plnum=get_maxplayers() for(new i=1;i <= plnum; i++) { if(g_nextround_kick[i]) { if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans] New Round Kick ID: <%d> | bid:%d",i,g_nextround_kick_bid[i]) if(!is_user_connected(i) || is_user_bot(i)) continue //player is banned, so select motd and kick him select_amxbans_motd(0,i,g_nextround_kick_bid[i]) } } } /********* Error handler ***************/ MySqlX_ThreadError(szQuery[], error[], errnum, failstate, id) { if (failstate == TQUERY_CONNECT_FAILED) { log_amx("%L", LANG_SERVER, "TCONNECTION_FAILED") } else if (failstate == TQUERY_QUERY_FAILED) { log_amx("%L", LANG_SERVER, "TQUERY_FAILED") } log_amx("%L", LANG_SERVER, "TQUERY_ERROR", id) log_amx("%L", LANG_SERVER, "TQUERY_MSG", error, errnum) log_amx("%L", LANG_SERVER, "TQUERY_STATEMENT", szQuery) } /********* client functions ************/ public client_authorized(id) { //fix for the invalid tuple error at mapchange, only a fast fix now if(g_SqlX==Empty_Handle) { set_task(2.0,"client_authorized",id) return PLUGIN_HANDLED } //check if an activ ban exists check_player(id) return PLUGIN_CONTINUE } public client_putinserver(id) { //fix for the invalid tuple error at mapchange, only a fast fix now if(g_SqlX==Empty_Handle) { set_task(5.0,"client_putinserver",id) return PLUGIN_HANDLED } //check if the player was banned before prebanned_check(id) //remove the player from the disconnect player list because he is already connected ;-) disconnect_remove_player(id) return PLUGIN_CONTINUE } public client_disconnect(id) { g_being_banned[id]=false if(!g_kicked_by_amxbans[id]) { //only add players to disconnect list if not kicked by amxbans disconnected_add_player(id) } else if(g_being_flagged[id]) { // if kicked by amxbans maybe remove the flagged, not added yet /*****///remove_flagged_by_steam(0,id,0) } //reset some vars g_kicked_by_amxbans[id]=false g_being_flagged[id]=false g_nextround_kick[id]=false } /********* timecmd functions ************/ public setHighBantimes() { new arg[32] new argc = read_argc() - 1 g_highbantimesnum = argc
if(argc < 1 || argc > 14) { log_amx("[AMXBANS] You have more than 14 or less than 1 bantimes set in amx_sethighbantimes") log_amx("[AMXBANS] Loading default bantimes") loadDefaultBantimes(1)
return PLUGIN_HANDLED }
new i = 0 new num[32], flag[32] while (i < argc) { read_argv(i + 1, arg, 31) parse(arg, num, 31, flag, 31)
if(equali(flag, "m")) { g_HighBanMenuValues[i] = str_to_num(num) } else if(equali(flag, "h")) { g_HighBanMenuValues[i] = (str_to_num(num) * 60) } else if(equali(flag, "d")) { g_HighBanMenuValues[i] = (str_to_num(num) * 1440) } else if(equali(flag, "w")) { g_HighBanMenuValues[i] = (str_to_num(num) * 10080) } i++ } return PLUGIN_HANDLED } public setLowBantimes() { new arg[32] new argc = read_argc() - 1 g_lowbantimesnum = argc if(argc < 1 || argc > 14) { log_amx("[AMXBANS] You have more than 14 or less than 1 bantimes set in amx_setlowbantimes") log_amx("[AMXBANS] Loading default bantimes") loadDefaultBantimes(2) return PLUGIN_HANDLED }
new i = 0 new num[32], flag[32] while (i < argc) { read_argv(i + 1, arg, 31) parse(arg, num, 31, flag, 31)
if(equali(flag, "m")) { g_LowBanMenuValues[i] = str_to_num(num) } else if(equali(flag, "h")) { g_LowBanMenuValues[i] = (str_to_num(num) * 60) } else if(equali(flag, "d")) { g_LowBanMenuValues[i] = (str_to_num(num) * 1440) } else if(equali(flag, "w")) { g_LowBanMenuValues[i] = (str_to_num(num) * 10080) } i++ } return PLUGIN_HANDLED } public setFlagTimes() { new arg[32] new argc = read_argc() - 1 g_flagtimesnum = argc if(argc < 1 || argc > 14) { log_amx("[AMXBANS] You have more than 14 or less than 1 flagtimes set in amx_setflagtimes") log_amx("[AMXBANS] Loading default flagtimes") loadDefaultBantimes(3) return PLUGIN_HANDLED } new i = 0 new num[32], flag[32] while (i < argc) { read_argv(i + 1, arg, 31) parse(arg, num, 31, flag, 31)
if(equali(flag, "m")) { g_FlagMenuValues[i] = str_to_num(num) } else if(equali(flag, "h")) { g_FlagMenuValues[i] = (str_to_num(num) * 60) } else if(equali(flag, "d")) { g_FlagMenuValues[i] = (str_to_num(num) * 1440) } else if(equali(flag, "w")) { g_FlagMenuValues[i] = (str_to_num(num) * 10080) } i++ } return PLUGIN_HANDLED } loadDefaultBantimes(num) { if(num == 1 || num == 0) server_cmd("amx_sethighbantimes 5 60 240 600 6000 0") if(num == 2 || num == 0) server_cmd("amx_setlowbantimes 5 30 60 480 600 1440") if(num == 3 || num == 0) server_cmd("amx_setflagtimes 60 240 600 1440 10080 40320 90720 0") } /********* mysql escape functions ************/ mysql_escape_string(const source[],dest[],len) { copy(dest, len, source); replace_all(dest,len,"\\","\\\\"); replace_all(dest,len,"\0","\\0"); replace_all(dest,len,"\n","\\n"); replace_all(dest,len,"\r","\\r"); replace_all(dest,len,"\x1a","\Z"); replace_all(dest,len,"'","\'"); replace_all(dest,len,"^"","\^""); } mysql_get_username_safe(id,dest[],len) { new name[128] get_user_name(id,name,127) mysql_escape_string(name,dest,len) } mysql_get_servername_safe(dest[],len) { new server_name[256] get_cvar_string("hostname", server_name, charsmax(server_name)) mysql_escape_string(server_name,dest,len) }
|