amxbans.sma
/*
AMXBans, managing bans for Half-Life modifications
Copyright (C) 2003, 2004 Ronald Renes / Jeroen de Rover
web : http://amxbans.net/
IRC : #hlm (Quakenet, nickname lantz69)
IRC2 : #amxmodx (GameSurge, nickname lantz69)
This file is part of AMXBans.
AMXBans is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
AMXBans is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with AMXBans; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Check out readme.html for more information
Current version: v5.0
--------------------------------------------------------------
Changelog for Plugin Amxbans changes/fixes by lantz69 after version 4.0 by YoMama
--------------------------------------------------------------
5.0 Sat Oct 28, 2006 16:00
- Fixed: runtime error when trying to ban admin with immunity
4.4RC6 Wed Oct 04, 2006 18:39
- Changed: Cvar amxbans_max_time_gone_to_unban was changed from seconds to minutes instead.
- Changed: Cvar amxbans_max_time_to_show_preban was changed from seconds to days instead.
- Updated: The langfile amxbans.txt with all the static ban reasons. (thx Gizmo)
- Updated: amxbans.cfg with the new values that was changed to minutes/days. Also updated text and the order of the settings.
- Removed: [ru] Rushian language had to be removed in amxbans.txt because it is not in the official Amxmodx.
- Added: Block for multiple bans with ATAC when the player was not present in the server (rep. Scooby)
- Changed: Now you see 7 players/page in the menu instead of only 6.
- Changed: now you can have 1-12 bantimes in the menu. See amxbans.cfg (done by Gizmo)
- Fixed: If player has VALVE_ID_PENDING the ban will be an IP ban (LAN Servers)
- Removed: replaceall func. Now using the replace_all func from amxmodx instead.
- Changed: Banhistory Menu is now automatically loaded to the amxmodx menu
4.4RC5 Mon Sep 18, 2006 16:58
- Fixed: The banmenu did not get enabled at once when a new server was added.
- Fixed: amx_list is now a server command. (rep. Mayhem)
- Added: Extra check for bad characters in ban_reason for sql query.
- Changed: Now uses the new replace_all func from amxmodx to have safe sql queries
- Fixed: An INSERT query for mysql 5.x servers that have Set the SQL mode to STRICT...
- Fixed: motd when using motdURL (ONLY LAN Servers)
- Added: amxbans.cfg that should be in addons/amxmodx/configs/ (thx. Gizmo)
- Fixed: Bantime in console must be a number and can not be text anymore.
- Fixed: Menu sometimes made non admins red. (thx. Gizmo)
4.4RC4 Fri Sep 08, 2006 9:12
- Fixed: The connection info to the sql server was set to late on mapchange.
4.4RC3 Wed Sep 06, 2006 2:33
- Changed: Optimized the code by removing a redundant function.
- Changed: Made the pruning of bans better and at the same time fixed an issue for LAN bans.
- Fixed: Amxbans interfered with other plugins like timeleft to not function properly (server_exec())
- Added: The banned Player nick is shown to the banned player that reconnect to the server (sugg. rhino)
- Added: The banannounce will also print to console and not only to chat.
- Updated: The lang file amxbans.txt
- Fixed: Another mix of lang in rare circumstances
4.4RC2 Sun Sep 03, 2006 18:31
- Added: New cvar amxbans_show_name_evenif_mole If you have this set to 1 the showacivity system will not be overidden.
- Added: New compiler option ADMIN_MOLE_ACCESS to be able to choose which admin flag the admin must have to be a mole.
- Added: New flagsystem by Gizmo so you can mark a player being checked out. That is found in the ban menu by changing bantimes.
This is useful if you are recording a demo for proof and dont want another admin to ban him right away.
- Fixed: UnBan was broken.
4.4RC1 Sat Sep 02, 2006 10:53
- Fixed: language was sometimes wrong/mixed in messages in logs or to players.
- Changed: removed redundant functions and some debug code
- Changed: pcvar is now used (thx Gizmo)
- Added: New cvar amxbans_show_prebans_from_atac 1 // neohasses custom to not report/count expired atac bans in the amx_chat to admins
4.4b13 Sun Aug 27, 2006 14:03
- Fixed: Bug with prebanned showed wrong info sometimes.
- Added: New cvar amxbans_max_time_to_show_preban "999999999" // How many seconds must go if the ban should not count
This cvar is useful if you dont want to show 6 months old bans or maybe 1-2 year old bans in the bancount report to admins in amx_chat.
- Update: lang file amxbans.txt
- Changed: Optimized code (thx Gizmo)
4.4b12 Fri Aug 18, 2006 18:48
- Fixed: Some old unnecesary variables.
- Fixed: banmenu was not updated
- Update: lang file amxbans.txt removed old strings
4.4b11 Sun Jul 30, 2006 22:31
- Changed: Gizmo converted amxbans to threaded sqlX (Very big thx)
- Fixed: Lan bans could get same IP on all db rows sometimes.
- Fixed: Bancounts printed to adminis on LAN servers was wrong.
- Added: Added compile option #define SHOW_IN_HLSW To be able to disable the greed hud when a player is banned.
- Added: Added compile option #define SHOW_HUD_MESSAGES To be able to remove bans being showed as green hudmessage
4.4b10 Sat Jul 22, 2006 12:12
- Fixed: Multiple bantimes on the same steamID
- Fixed: If a ban is done by the ATAC plugin, the adminNick will be [ATAC]
- Fixed: Banning admin with immunity or a bot from console generated wrong output
4.4b9 Thu May 25, 2006 15:51 (CVS)
- Fixed: Banmenu showed wrong bantimes
- Added: Optional SQL connection type <Persistant|NonPersistant> Persistant is default
- Updated: amxbans.txt (Langfile)
- Fixed: SQL-fix for amxmodx 1.75 (thx teame06)
4.4b8 Sun May 21, 2006 12:26 (CVS)
- Changed: Static reasons is auto loaded if none is found in database
- Fixed: Only the reasons added in database will show in menu. No more the number and emty reason.(Prevents blank resons)
- Added: The banmenu will now show the bantime in weeks, days, hours instead of only minutes
- Added: new compiler option (g_FirstBanMenuValue) to be able to set the first ban time in the menu (in minutes)
- Updated: More language strings added in the langfile amxbans.txt
4.4b7 Fri May 12, 2006 12:04 (CVS)
- Changed: The sql connection is not persistent anymore
4.4b6 Mon Apr 24, 2006 20:16 (CVS)
- Added: New CVAR amxbans_show_prebanned <0|1> which show if a player has been banned before as amx_chat to admins.
- Added: New CVAR amxbans_show_prebanned_num <1,2,3,...> How many offences should the player have atleast to notify admins?
- Fixed: hudmessages was not properly translated to players
4.4b5 Fri Apr 14, 2006 13:59 (CVS)
- Merged sql_ban() into cmdBan()
- Added: New cvar amxbans_complain_url so banned players know where to complain <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.gif' class='bbc_emoticon' alt=':D' />
- Added: All strings are now translated (except debugmessages)
- Added: A green Hudmessage will show when you ban a player.
- Added: Normal admins (d-flag) can only unban if the ban is max 1 day old
This can be configured with the define in the amxbans.sma (MAX_TIME_GONE_TO_UNBAN)
- Updated: amxbans.txt (Languagefile)
- Removed: steamID pending check. But if a player has STEAM_ID_PENDING when banning his IP will be banned instead of steamID.
4.4b4 Thu Apr 13, 2006 15:34 (CVS)
- Changed: HLTV will be checked when connecting
- Added: InGame amx_unban command. Syntax: amx_unban <STEAMID>
- Updated: amxbans.txt (Languagefile)
4.4b3 Wed Mar 15, 2006 22:52 (CVS)
- Changed: AMXMODX 1.70 is now required
- Changed: Brads time functions is now used from the amxmodx includes instead.
- Updated: amxbans.txt (Languagefile)
4.4b2 Wed Mar 15, 2006 20:31 (CVS)
- Added: If a ban is done by ATAC or HLGUARD the adminname will be [ATAC] OR [HLGUARD] in the banlist
- Changed: Optimized the two ban functions to one ban function
4.4b1 Mon Nov 7, 2005 19:21 (CVS)
- Fixed: Baning on LAN only bans the IP and not the authid
- Fixed: The Ban menu now also only bans the IP if the server is on a LAN
- Fixed: Now you can ban using IP again (amx_ban <time> <IP> <reason>)
- Added: 2 More bantimes (total 6)
- Added: new CVAR amxbans_ban_evenif_disconnected ( default 0 )
This is to be able to ban a steamID even if the player is not on the server.
------------------------------------------------------------
4.3 Friday October 28, 2005
- Fixed: MOTDURL in amxbans web Interface was broken in 4.2 (reported by QuakerOates)
- Fixed: amx_find & amx_findex got an error when no result was found.(reported by QuakerOates)
- Fixed: Better filtering of data before it goes to a mysql query.
- Added: log_amx commands to make all sql errors write to the amxmodx/logs.
- Changed: New method of banning players to minimize bad data to the DB.
You can enable the old system by commenting #define USE_NEW_BANMETHOD
- Fixed: Removed some dbi_free_result that should not be there. (reported by Janet J)
- Fixed: (DOD) When banning with HLSW or in server console an error would occour. (reported by [MUPPETS]Gonzo])
- Added: A check for STEAM_ID_PENDING so they will be kicked.
a new cvar is added for the above amxbans_steamid_pending 1 enabled 0 disabled (default 1)
- Added: new cvar amxbans_servernick to be able to set the admin name you want to have when the server bans with Ie. hlsw, atac or hlguard
this was requested by Us3r.
-------------------------------------------------------------
4.2 Thursday October 13, 2005
- Changed: Merged amxbans and amxbans_menu into one plugin (amxbans_4.2.sma).
- Added: Made defines at the top of source to make it easy to change bantimes etc.
- Changed: Rearranged the functions and changed the coding style.
- Fixed: The get port bug is solved. Before the port always was 27015 even if the server was 27017 or another port.
- Fixed: Some data was not written to the data base correctly when player pruned the data base himself
- Changed: Now you get the bantime in weeks, days, hours, minutes and seconds instead of only minutes (thx Brad Jones)
- Recomendation: Dont use the MOTDURL from the web. You should use the one in the plugin as it is more reliable and faster.
- Fixed: amx_find now works and searches the active amx_ban table. Syntax: amx_find <steamID>.
- Added: amx_findex searches in the expired ban_history table. Syntax: amx_findex <steamID>.
- Fixed: Banmenu reasons could max be 6 now it can be 7 like it should (thx DerProfi)
- Added: The map name can be added to the servername in the ban. This is by Default disabled.
- Added: New cvar amxbans_debug <1|0>. Use this if you want to debug false kicked players.
- Changed: Implemented Brad Jones function to get hours,days week in HLSW chat and amxx logs (thx Brad Jones)
- Updated: Language file amxmodxdatalangamxbans.txt is updated. Dont forget to update or amxbans 4.2 won't work properly
--------------------------------------------------------------
4.1 Fri Sep 23, 2005
- Added so admins with the d-flag can ban max 600 minutes in console.
- Added so admins with the d-flag AND n-flag can ban whatever time they like in console and will also get higher bantimes in the menu.
- Fixed an issue when a string was formatted incorrectly when banning.
- Changed the way results from the data base are handled to ged rid of memory leaks.
- Fixed so you can compile when you want STATIC REASONS and not reasons from the DB.
--------------------------------------------------------------
4.01 Sun Sep 04, 2005
- Fixed some result variables that where wrong and crashed the server when using amxmodx 1.50 and later versions.
- Fixed when a recently banned player comes back after ban is expired. Now the data base gets pruned correctly.
- Fixed so Bots don't triggers errors in the logs when connecting.
- Changed so players recieve better info when they get kicked when they are banned.
*/
new AUTHOR[] = "YoMama/Lux & lantz69 -Sqlx by Gizmo"
new PLUGIN_NAME[] = "AMXBans"
new VERSION[] = "5.0" // This is used in the plugins name
new amxbans_version[] = "amxx_5.0" // This is for the DB
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <time>
// Amxbans .inl files
#include "amxbans/global_vars.inl"
#include "amxbans/init_functions.inl"
#include "amxbans/check_player.inl"
#include "amxbans/menu.inl"
#include "amxbans/cmdBan.inl"
#include "amxbans/cmdUnban.inl"
#include "amxbans/search.inl"
// 16k * 4 = 64k stack size
#pragma dynamic 16384 // Give the plugin some extra memory to use
public plugin_init()
{
register_concmd("amx_reloadreasons", "reasonReload", ADMIN_CFG)
register_clcmd("amx_banmenu", "cmdBanMenu", ADMIN_BAN, "- displays ban menu") //Changed this line to make this menu come up instead of the normal amxx ban menu
register_clcmd("amxbans_custombanreason", "setCustomBanReason", ADMIN_BAN, "- configures custom ban message")
register_clcmd("amx_banhistorymenu", "cmdBanhistoryMenu", ADMIN_BAN, "- displays banhistorymenu")
register_menucmd(register_menuid("Ban Menu"), 1023, "actionBanMenu")
register_menucmd(register_menuid("Ban Reason Menu"), 1023, "actionBanMenuReason")
register_menucmd(register_menuid("Banhistory Menu"), 1023, "actionBanhistoryMenu")
g_coloredMenus = colored_menus()
g_MyMsgSync = CreateHudSyncObj()
register_plugin(PLUGIN_NAME, VERSION, AUTHOR)
register_cvar("amxbans_version", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY)
amxbans_cmd_sql = register_cvar("amxbans_cmd_sql", "0") // A custom plugin that is not released yet so dont touch this cvar.
amxbans_debug = register_cvar("amxbans_debug", "0") // Set this to 1 to enable debug
server_nick = register_cvar("amxbans_servernick", "") // Set this cvar to what the adminname should be if the server make the ban.
// Ie. amxbans_servernick "My Great server" put this in server.cfg or amxx.cfg
ban_evenif_disconn = register_cvar("amxbans_ban_evenif_disconnected", "0") // 1 enabled and 0 disabled ban of players not in server
complainurl = register_cvar("amxbans_complain_url", "www.yoursite.com") // Dont use http:// then the url will not show
show_prebanned = register_cvar("amxbans_show_prebanned", "1") // Will show if a player has been banned before as amx_chat to admins. 0 to disable
show_prebanned_num = register_cvar("amxbans_show_prebanned_num", "2") // How many offences should the player have to notify admins?
max_time_to_show_preban = register_cvar("amxbans_max_time_to_show_preban", "9999") // How many days must go if the ban should not count
banhistmotd_url = register_cvar("amxbans_banhistmotd_url","http://pathToYour/findex.php?steamid=%s")
show_atacbans = register_cvar("amxbans_show_prebans_from_atac", "1") // neohasses custom to not count or count atac bans in the chat to admins
show_name_evenif_mole = register_cvar("amxbans_show_name_evenif_mole", "1")
firstBanmenuValue = register_cvar("amxbans_first_banmenu_value", "5")
consoleBanMax = register_cvar("amxbans_consolebanmax", "1440")
max_time_gone_to_unban = register_cvar("amxbans_max_time_gone_to_unban", "1440") // This is set in minutes
higher_ban_time_admin = register_cvar("amxbans_higher_ban_time_admin", "n")
admin_mole_access = register_cvar("amxbans_admin_mole_access", "r")
show_in_hlsw = register_cvar("amxbans_show_in_hlsw", "1")
show_hud_messages = register_cvar("amxbans_show_hud_messages", "1")
add_mapname_in_servername = register_cvar("amxbans_add_mapname_in_servername", "0")
register_dictionary("amxbans.txt")
register_dictionary("common.txt")
register_dictionary("time.txt")
register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<time in mins> <steamID or nickname or #authid or IP> <reason>")
register_srvcmd("amx_ban", "cmdBan", -1, "<time in min> <steamID or nickname or #authid or IP> <reason>")
register_concmd("amx_banip", "cmdBan", ADMIN_BAN, "<time in mins> <steamID or nickname or #authid or IP> <reason>")
register_srvcmd("amx_banip", "cmdBan", -1, "<time in mins> <steamID or nickname or #authid or IP> <reason>")
register_concmd("amx_unban", "cmdUnBan", ADMIN_BAN, "<steamID>")
register_srvcmd("amx_unban", "cmdUnBan", -1, "<steamID>")
register_concmd("amx_find", "amx_find", ADMIN_BAN, "<steamID>")
register_srvcmd("amx_find", "amx_find", -1, "<steamID>")
register_concmd("amx_findex", "amx_findex", ADMIN_BAN, "<steamID>")
register_srvcmd("amx_findex", "amx_findex", -1, "<steamID>")
register_srvcmd("amx_list", "cmdLst", -1, "Displays playerinfo")
register_srvcmd("amx_sethighbantimes", "setHighBantimes")
register_srvcmd("amx_setlowbantimes", "setLowBantimes")
new configsDir[64]
get_configsdir(configsDir, 63)
new configfile[128]
format(configfile, 127, "%s/amxbans.cfg", configsDir)
server_cmd("exec %s/sql.cfg", configsDir)
if(file_exists(configfile))
{
server_cmd("exec %s", configfile)
}
else
{
loadDefaultBantimes(0)
server_print("[AMXBANS] Could not find amxbans.cfg, loading default bantimes")
log_amx("[AMXBANS] Could not find amxbans.cfg, loading default bantimes")
log_amx("[AMXBANS] You should put amxbans.cfg in addons/amxmodx/configs/")
}
//server_exec() // Made other plugins dont work properly b/c settings in amxx.cfg was not read properly
set_task(0.5, "sql_init")
set_task(5.0, "addBanhistMenu")
}
public addBanhistMenu()
AddMenuItem("Banhistory Menu", "amx_banhistorymenu", ADMIN_BAN, "AMXBans")
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)
g_SqlX = SQL_MakeDbTuple(host, user, pass, db)
set_task(1.0, "banmod_online")
set_task(1.0, "fetchReasons")
}
public reasonReload(id,level,cid)
{
if (!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED
else
{
fetchReasons(id)
if (id != 0)
{
if (g_aNum == 1)
console_print(id,"[AMXBANS] %L", LANG_SERVER, "SQL_LOADED_REASON" )
else
console_print(id,"[AMXBANS] %L", LANG_SERVER, "SQL_LOADED_REASONS", g_aNum )
}
}
return PLUGIN_HANDLED
}
public client_connect(id)
{
if( (id > 0 || id < 32) && is_user_connected(id) )
{
g_lastCustom[id][0] = '^0'
g_inCustomReason[id] = 0
g_player_flagged[id] = false
g_being_banned[id] = false
}
}
public client_disconnect(id)
{
g_lastCustom[id][0] = '^0'
g_inCustomReason[id] = 0
g_player_flagged[id] = false
g_being_banned[id] = false
}
public client_authorized(id)
{
if (get_pcvar_num(show_prebanned) == 1)
{
set_task(1.0, "prebanned_check", id)
}
set_task(1.1, "check_player", id)
return PLUGIN_CONTINUE
}
public delayed_kick(id_str[])
{
new player_id = str_to_num(id_str)
new userid = get_user_userid(player_id)
new kick_message[128]
format(kick_message,127,"%L", LANG_PLAYER,"KICK_MESSAGE")
if ( get_pcvar_num(amxbans_debug) == 1 )
log_amx("[AMXBANS DEBUG] Delayed Kick ID: <%s>", id_str)
server_cmd("kick #%d %s",userid, kick_message)
return PLUGIN_CONTINUE
}
/********* This is used by live ban on the webpages ************/
public cmdLst(id,level,cid)
{
new players[32], inum, authid[32],name[32],ip[50]
get_players(players,inum)
console_print(id,"playerinfo")
for(new a = 0; a < inum; a++)
{
get_user_ip(players[a],ip,49,1)
get_user_authid(players[a],authid,31)
get_user_name(players[a],name,31)
console_print(id,"#WM#%s#WMW#%s#WMW#%s#WMW#",name,authid,ip)
}
return PLUGIN_HANDLED
}
public get_higher_ban_time_admin_flag()
{
new flags[24]
get_pcvar_string(higher_ban_time_admin, flags, 23)
return(read_flags(flags))
}
public get_admin_mole_access_flag()
{
new flags[24]
get_pcvar_string(admin_mole_access, flags, 23)
return(read_flags(flags))
}
/* This function will attempt to find a player based on the following options:
- Partial Player Name
- Steam ID
- User ID
- User IP Address
*/
public locate_player(id, identifier[])
{
g_ban_type = "S"
// Check based on steam ID
new player = find_player("c", identifier)
// Check based on a partial non-case sensitive name
if (!player) {
player = find_player("bl", identifier)
}
if (!player) {
// Check based on IP address
player = find_player("d", identifier)
if ( player )
g_ban_type = "SI"
}
// Check based on user ID
if ( !player && identifier[0]=='#' && identifier[1] ) {
player = find_player("k",str_to_num(identifier[1]))
}
if ( player )
{
/* Check for immunity */
if (get_user_flags(player) & ADMIN_IMMUNITY) {
new name[32]
get_user_name(player, name, 31)
if( id == 0 )
server_print("[AMXBANS] Client ^"%s^" has immunity", name)
else
console_print(id,"[AMXBANS] Client ^"%s^" has immunity", name)
return -1
}
/* Check for a bot */
else if (is_user_bot(player)) {
new name[32]
get_user_name(player, name, 31)
if( id == 0 )
server_print("[AMXBANS] Client ^"%s^" is a bot", name)
else
console_print(id,"[AMXBANS] Client ^"%s^" is a bot", name)
return -1
}
}
return player
}
public setHighBantimes()
{
new arg[32]
new argc = read_argc() - 1
g_highbantimesnum = argc
//server_print("args: %d", argc)
if(argc < 1 || argc > 12)
{
log_amx("[AMXBANS] You have more than 12 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)
//server_print("Num: %s, Flag: %s", num, flag)
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)
}
//server_print("HighBantime: %d", str_to_num(num))
i++
}
return PLUGIN_HANDLED
}
public setLowBantimes()
{
new arg[32]
new argc = read_argc() - 1
g_lowbantimesnum = argc
//server_print("args: %d", argc)
if(argc < 1 || argc > 12)
{
log_amx("[AMXBANS] You have more than 12 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)
//server_print("Num: %s, Flag: %s", num, flag)
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)
}
//server_print("LowBantime: %d", str_to_num(num))
i++
}
return PLUGIN_HANDLED
}
loadDefaultBantimes(num)
{
if(num == 1 || num == 0)
server_cmd("amx_sethighbantimes 5 60 240 600 6000 0 -1")
if(num == 2 || num == 0)
server_cmd("amx_setlowbantimes 5 30 60 480 600 1440 -1")
}
/********* 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)
}
public plugin_end()
{
SQL_FreeHandle(g_SqlX)
}cmdUnban.inl
/*
This function will UnBan by steamID amx_unban <STEAMID>
*/
public cmdUnBan(id,level,cid)
{
if (!cmd_access(id,level,cid,3))
return PLUGIN_HANDLED
read_args(g_unban_player_steamid, 50)
trim(g_unban_player_steamid)
if ( contain(g_unban_player_steamid, "STEAM_") == -1 )
{
client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"UNABAN_STEAMID_ONLY")
return PLUGIN_HANDLED
}
new query[512]
new data[1]
format(query, 511, "SELECT bid,ban_created,ban_length,ban_reason,admin_nick,admin_id,player_nick,player_ip,player_id,ban_type,server_ip,server_name FROM `%s` WHERE player_id='%s'", tbl_bans, g_unban_player_steamid)
data[0] = id
SQL_ThreadQuery(g_SqlX, "cmd_unban_select", query, data, 1)
return PLUGIN_HANDLED
}
public cmd_unban_select(failstate, Handle:query, error[], errnum, data[], size)
{
new id = data[0]
new bool:serverCmd = false
// Determine if this was a server command or a command issued by a player in the game
if ( id == 0 )
serverCmd = true
if (failstate)
{
new szQuery[256]
MySqlX_ThreadError( szQuery, error, errnum, failstate, 11 )
}
else
{
if (!SQL_NumResults(query))
{
client_print(id, print_console, "[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_NORESULT", g_unban_player_steamid)
server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_NORESULT", g_unban_player_steamid)
return PLUGIN_HANDLED
}
else
{
client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_1",g_unban_player_steamid)
new ban_created[50], ban_length[50], ban_reason[255], admin_nick[100]
new ban_created_int, current_time_int
new player_ip[30],player_steamid[50], ban_type[10], server_ip[30], server_name[100]
new bid = SQL_ReadResult(query, 0)
SQL_ReadResult(query, 1, ban_created, 49)
SQL_ReadResult(query, 2, ban_length, 49)
SQL_ReadResult(query, 3, ban_reason, 254)
SQL_ReadResult(query, 4, admin_nick, 99)
SQL_ReadResult(query, 5, g_admin_steamid, 49)
SQL_ReadResult(query, 6, g_player_nick, 49)
SQL_ReadResult(query, 7, player_ip, 29)
SQL_ReadResult(query, 8, player_steamid, 49)
SQL_ReadResult(query, 9, ban_type, 9)
SQL_ReadResult(query, 10, server_ip, 29)
SQL_ReadResult(query, 11, server_name, 99)
current_time_int = get_systime(0)
ban_created_int = str_to_num(ban_created)
/* Check how many minutes have gone since the ban was created */
new banned_minutes_ago = (current_time_int - ban_created_int)/60
new banned_ago_str[128], banned_ago_str2[128]
get_time_length(id, get_pcvar_num(max_time_gone_to_unban), timeunit_minutes, banned_ago_str, 127)
get_time_length(id, banned_minutes_ago, timeunit_minutes, banned_ago_str2, 127)
if (banned_minutes_ago > get_pcvar_num(max_time_gone_to_unban) && !(get_user_flags(id)&get_higher_ban_time_admin_flag()) )
{
client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"UNBAN_TO_OLD_BAN", banned_ago_str)
client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"UNBAN_TO_OLD_BAN2", banned_ago_str2)
return PLUGIN_HANDLED
}
client_print(id,print_console," ")
client_print(id,print_console,"[AMXBANS] =================")
client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_2", bid, g_player_nick)
client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_3", admin_nick, g_admin_steamid, ban_reason)
client_print(id,print_console,"[AMXBANS] =================")
client_print(id,print_console," ")
server_print(" ")
server_print("[AMXBANS] =================")
server_print("[AMXBANS] %L",LANG_SERVER,"AMX_FIND_RESULT_2", bid, g_player_nick)
server_print("[AMXBANS] %L",LANG_SERVER,"AMX_FIND_RESULT_3", admin_nick, g_admin_steamid, ban_reason)
server_print("[AMXBANS] =================")
server_print(" ")
new unban_admin_steamid[32]
if (!serverCmd)
{
get_user_authid(id, unban_admin_steamid, 31)
get_user_team(id, g_unban_admin_team, 9)
get_user_name(id, g_unban_admin_nick, 99)
}
else
{
/* If the server does the ban you cant get any steam_ID or team */
unban_admin_steamid = ""
g_unban_admin_team = ""
/* This is so you can have a shorter name for the servers hostname.
Some servers hostname can be very long b/c of sponsors and that will make the ban list on the web bad */
new servernick[100]
get_pcvar_string(server_nick, servernick, 99)
if (strlen(servernick))
g_unban_admin_nick = servernick
else
get_cvar_string("hostname", g_unban_admin_nick, 99)
}
new unban_created = get_systime(0)
new query[512]
format(query, 511, "INSERT INTO `%s` (player_id,player_ip,player_nick,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_ip,server_name,unban_created,unban_reason,unban_admin_nick) VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%i','UnBanned in Game','%s %s')",tbl_banhist,g_unban_player_steamid,player_ip,g_player_nick,g_admin_steamid,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_ip,server_name,unban_created, g_unban_admin_nick, unban_admin_steamid)
new data[2]
data[0] = id
data[1] = bid
SQL_ThreadQuery(g_SqlX, "cmd_unban_insert", query, data, 2)
if ( get_pcvar_num(amxbans_debug) == 1 )
log_amx("[AMXBANS DEBUG] UNBAN IN GAME: INSERT INTO `%s` (VALUES('%s','%s','%s', '%s')",tbl_banhist,g_unban_player_steamid,g_player_nick,ban_length, g_unban_admin_nick)
}
}
return PLUGIN_HANDLED
}
public cmd_unban_insert(failstate, Handle:query, error[], errnum, data[], size)
{
new id = data[0]
new bid = data[1]
if (failstate)
{
new szQuery[256]
MySqlX_ThreadError( szQuery, error, errnum, failstate, 12 )
}
else
{
new query[512]
new data[1]
format(query, 511, "DELETE FROM `%s` WHERE bid=%d", tbl_bans, bid)
data[0] = id
SQL_ThreadQuery(g_SqlX, "cmd_unban_delete_and_print", query, data, 1)
if ( get_pcvar_num(amxbans_debug) == 1 )
log_amx("[AMXBANS DEBUG] UNBAN IN GAME: DELETE FROM `%s` WHERE bid=%d",tbl_bans, bid)
}
return PLUGIN_HANDLED
}
public cmd_unban_delete_and_print(failstate, Handle:query, error[], errnum, data[], size)
{
new id = data[0]
if (failstate)
{
new szQuery[256]
MySqlX_ThreadError( szQuery, error, errnum, failstate, 13 )
}
else
{
log_amx("%L", LANG_SERVER, "UNBAN_LOG", g_unban_admin_nick, get_user_userid(id), g_admin_steamid, g_unban_admin_team, g_player_nick, g_unban_player_steamid)
if ( get_pcvar_num(show_in_hlsw) == 1 )
{
// If you use HLSW you will see when someone ban a player if you can see the chatlogs
log_message("^"%s<%d><%s><%s>^" triggered ^"amx_chat^" (text ^"%L^")", g_unban_admin_nick, get_user_userid(id) , g_admin_steamid, g_unban_admin_team,
LANG_SERVER, "UNBAN_CHATLOG", g_player_nick, g_unban_player_steamid)
}
new show_activity = get_cvar_num("amx_show_activity")
if( (get_user_flags(id)&get_admin_mole_access_flag() || id == 0) && (get_pcvar_num(show_name_evenif_mole) == 0) )
show_activity = 1
if (show_activity == 1)
{
client_print(0,print_chat,"%L",LANG_PLAYER,"PUBLIC_UNBAN_ANNOUNCE", g_player_nick)
}
if (show_activity == 2)
{
client_print(0,print_chat,"%L",LANG_PLAYER,"PUBLIC_UNBAN_ANNOUNCE_2", g_player_nick, g_unban_admin_nick)
}
client_print(id,print_console," ")
client_print(id,print_console,"[AMXBANS] =================")
client_print(id,print_console,"%L",LANG_PLAYER,"PUBLIC_UNBAN_ANNOUNCE", g_player_nick)
client_print(id,print_console,"[AMXBANS] =================")
client_print(id,print_console," ")
server_print(" ")
server_print("[AMXBANS] =================")
server_print("[AMXBANS] %L",LANG_SERVER,"PUBLIC_UNBAN_ANNOUNCE", g_player_nick)
server_print("[AMXBANS] =================")
server_print(" ")
}
return PLUGIN_HANDLED
}


Dodatki SourceMod



Temat jest zamknięty









