2014-08-04 12:12:15 +00:00
// vim: set ts=4 sw=4 tw=99 noet:
//
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
// Copyright (C) The AMX Mod X Development Team.
//
// This software is licensed under the GNU General Public License, version 3 or higher.
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
// https://alliedmods.net/amxmodx-license
//
// Admin Commands Plugin
//
2004-01-31 20:56:22 +00:00
2004-03-05 19:35:38 +00:00
# include <amxmodx>
2004-03-07 14:30:53 +00:00
# include <amxmisc>
2004-01-31 20:56:22 +00:00
2007-08-03 15:26:22 +00:00
// This is not a dynamic array because it would be bad for 24/7 map servers.
# define OLD_CONNECTION_QUEUE 10
2007-05-24 17:11:11 +00:00
2004-01-31 20:56:22 +00:00
new g_pauseCon
new Float : g_pausAble
new bool : g_Paused
2005-11-28 16:22:12 +00:00
new bool : g_PauseAllowed = false
2004-01-31 20:56:22 +00:00
2007-03-09 03:04:40 +00:00
new pausable ;
new rcon_password ;
2013-06-17 10:18:11 +00:00
new timelimit ;
2013-08-16 16:49:55 +00:00
new p_amx_tempban_maxtime ;
2007-03-09 03:04:40 +00:00
2007-08-03 15:26:22 +00:00
// Old connection queue
2014-07-20 10:27:02 +00:00
new g_Names [ OLD_CONNECTION_QUEUE ] [ MAX_NAME_LENGTH ] ;
2007-08-03 15:26:22 +00:00
new g_SteamIDs [ OLD_CONNECTION_QUEUE ] [ 32 ] ;
new g_IPs [ OLD_CONNECTION_QUEUE ] [ 32 ] ;
new g_Access [ OLD_CONNECTION_QUEUE ] ;
new g_Tracker ;
new g_Size ;
2013-08-16 16:49:55 +00:00
public Trie : g_tempBans
2014-03-20 22:41:10 +00:00
new Trie : g_tXvarsFlags ;
2013-08-16 16:49:55 +00:00
2007-08-03 15:26:22 +00:00
stock InsertInfo ( id )
{
// Scan to see if this entry is the last entry in the list
// If it is, then update the name and access
// If it is not, then insert it again.
if ( g_Size > 0 )
{
new ip [ 32 ]
new auth [ 32 ] ;
get_user_authid ( id , auth , charsmax ( auth ) ) ;
get_user_ip ( id , ip , charsmax ( ip ) , 1 /*no port*/ ) ;
new last = 0 ;
if ( g_Size < sizeof ( g_SteamIDs ) )
{
last = g_Size - 1 ;
}
else
{
last = g_Tracker - 1 ;
if ( last < 0 )
{
last = g_Size - 1 ;
}
}
if ( equal ( auth , g_SteamIDs [ last ] ) & &
equal ( ip , g_IPs [ last ] ) ) // need to check ip too, or all the nosteams will while it doesn't work with their illegitimate server
{
get_user_name ( id , g_Names [ last ] , charsmax ( g_Names [ ] ) ) ;
g_Access [ last ] = get_user_flags ( id ) ;
return ;
}
}
// Need to insert the entry
new target = 0 ; // the slot to save the info at
// Queue is not yet full
if ( g_Size < sizeof ( g_SteamIDs ) )
{
target = g_Size ;
+ + g_Size ;
}
else
{
target = g_Tracker ;
+ + g_Tracker ;
// If we reached the end of the array, then move to the front
if ( g_Tracker = = sizeof ( g_SteamIDs ) )
{
g_Tracker = 0 ;
}
}
get_user_authid ( id , g_SteamIDs [ target ] , charsmax ( g_SteamIDs [ ] ) ) ;
get_user_name ( id , g_Names [ target ] , charsmax ( g_Names [ ] ) ) ;
get_user_ip ( id , g_IPs [ target ] , charsmax ( g_IPs [ ] ) , 1 /*no port*/ ) ;
g_Access [ target ] = get_user_flags ( id ) ;
}
stock GetInfo ( i , name [ ] , namesize , auth [ ] , authsize , ip [ ] , ipsize , & access )
{
if ( i > = g_Size )
{
abort ( AMX_ERR_NATIVE , " GetInfo: Out of bounds (%d:%d) " , i , g_Size ) ;
}
new target = ( g_Tracker + i ) % sizeof ( g_SteamIDs ) ;
copy ( name , namesize , g_Names [ target ] ) ;
copy ( auth , authsize , g_SteamIDs [ target ] ) ;
copy ( ip , ipsize , g_IPs [ target ] ) ;
access = g_Access [ target ] ;
}
2015-07-16 22:26:30 +00:00
public client_disconnected ( id )
2007-08-03 15:26:22 +00:00
{
if ( ! is_user_bot ( id ) )
{
InsertInfo ( id ) ;
}
}
2007-05-24 17:11:11 +00:00
2005-09-12 21:06:24 +00:00
public plugin_init ( )
{
register_plugin ( " Admin Commands " , AMXX_VERSION_STR , " AMXX Dev Team " )
2007-05-24 17:11:11 +00:00
2005-09-12 21:06:24 +00:00
register_dictionary ( " admincmd.txt " )
register_dictionary ( " common.txt " )
2007-03-09 03:04:40 +00:00
register_dictionary ( " adminhelp.txt " )
2014-07-28 21:33:08 +00:00
2005-09-12 21:06:24 +00:00
register_concmd ( " amx_kick " , " cmdKick " , ADMIN_KICK , " <name or #userid> [reason] " )
2013-08-16 16:49:55 +00:00
register_concmd ( " amx_ban " , " cmdBan " , ADMIN_BAN | ADMIN_BAN_TEMP , " <name or #userid> <minutes> [reason] " )
register_concmd ( " amx_banip " , " cmdBanIP " , ADMIN_BAN | ADMIN_BAN_TEMP , " <name or #userid> <minutes> [reason] " )
2007-08-03 15:26:22 +00:00
register_concmd ( " amx_addban " , " cmdAddBan " , ADMIN_BAN , " <^ " authid ^ " or ip> <minutes> [reason] " )
2013-08-16 16:49:55 +00:00
register_concmd ( " amx_unban " , " cmdUnban " , ADMIN_BAN | ADMIN_BAN_TEMP , " <^ " authid ^ " or ip> " )
2005-09-12 21:06:24 +00:00
register_concmd ( " amx_slay " , " cmdSlay " , ADMIN_SLAY , " <name or #userid> " )
register_concmd ( " amx_slap " , " cmdSlap " , ADMIN_SLAY , " <name or #userid> [power] " )
register_concmd ( " amx_leave " , " cmdLeave " , ADMIN_KICK , " <tag> [tag] [tag] [tag] " )
register_concmd ( " amx_pause " , " cmdPause " , ADMIN_CVAR , " - pause or unpause the game " )
register_concmd ( " amx_who " , " cmdWho " , ADMIN_ADMIN , " - displays who is on server " )
register_concmd ( " amx_cvar " , " cmdCvar " , ADMIN_CVAR , " <cvar> [value] " )
2014-03-20 22:41:10 +00:00
register_concmd ( " amx_xvar_float " , " cmdXvar " , ADMIN_CVAR , " <xvar> [value] " )
register_concmd ( " amx_xvar_int " , " cmdXvar " , ADMIN_CVAR , " <xvar> [value] " )
2005-09-12 21:06:24 +00:00
register_concmd ( " amx_plugins " , " cmdPlugins " , ADMIN_ADMIN )
register_concmd ( " amx_modules " , " cmdModules " , ADMIN_ADMIN )
register_concmd ( " amx_map " , " cmdMap " , ADMIN_MAP , " <mapname> " )
2013-06-17 10:18:11 +00:00
register_concmd ( " amx_extendmap " , " cmdExtendMap " , ADMIN_MAP , " <number of minutes> - extend map " )
2005-09-12 21:06:24 +00:00
register_concmd ( " amx_cfg " , " cmdCfg " , ADMIN_CFG , " <filename> " )
register_concmd ( " amx_nick " , " cmdNick " , ADMIN_SLAY , " <name or #userid> <new nick> " )
2007-08-03 15:26:22 +00:00
register_concmd ( " amx_last " , " cmdLast " , ADMIN_BAN , " - list the last few disconnected clients info " ) ;
2005-09-12 21:06:24 +00:00
register_clcmd ( " amx_rcon " , " cmdRcon " , ADMIN_RCON , " <command line> " )
2006-05-11 08:55:29 +00:00
register_clcmd ( " amx_showrcon " , " cmdShowRcon " , ADMIN_RCON , " <command line> " )
2005-09-12 21:06:24 +00:00
register_clcmd ( " pauseAck " , " cmdLBack " )
2007-03-09 03:04:40 +00:00
rcon_password = get_cvar_pointer ( " rcon_password " ) ;
pausable = get_cvar_pointer ( " pausable " ) ;
2013-06-17 10:18:11 +00:00
timelimit = get_cvar_pointer ( " mp_timelimit " ) ;
2014-07-28 21:33:08 +00:00
p_amx_tempban_maxtime = register_cvar ( " amx_tempban_maxtime " , " 4320 " , FCVAR_PROTECTED ) ;
2013-08-16 16:49:55 +00:00
g_tempBans = TrieCreate ( ) ;
2004-01-31 20:56:22 +00:00
2014-07-28 21:33:08 +00:00
new flags = get_pcvar_flags ( rcon_password ) ;
2007-04-17 19:03:25 +00:00
2014-07-28 21:33:08 +00:00
if ( ! ( flags & FCVAR_PROTECTED ) )
{
set_pcvar_flags ( rcon_password , flags | FCVAR_PROTECTED ) ;
}
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdKick ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new arg [ 32 ]
2013-08-05 16:18:58 +00:00
read_argv ( 1 , arg , charsmax ( arg ) )
2007-07-25 18:10:08 +00:00
new player = cmd_target ( id , arg , CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF )
2005-09-12 21:06:24 +00:00
if ( ! player )
return PLUGIN_HANDLED
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , authid2 [ 32 ] , name2 [ MAX_NAME_LENGTH ] , name [ MAX_NAME_LENGTH ] , userid2 , reason [ 32 ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_authid ( player , authid2 , charsmax ( authid2 ) )
get_user_name ( player , name2 , charsmax ( name2 ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
userid2 = get_user_userid ( player )
2013-08-05 16:18:58 +00:00
read_argv ( 2 , reason , charsmax ( reason ) )
2005-09-12 21:06:24 +00:00
remove_quotes ( reason )
log_amx ( " Kick: ^ " % s < % d > < % s > < > ^ " kick ^ " % s < % d > < % s > < > ^ " (reason ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , name2 , userid2 , authid2 , reason )
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_KICK_1 " , " ADMIN_KICK_2 " , name , name2 ) ;
2005-09-12 21:06:24 +00:00
if ( is_user_bot ( player ) )
server_cmd ( " kick #%d " , userid2 )
else
{
if ( reason [ 0 ] )
server_cmd ( " kick #%d ^ " % s ^ " " , userid2 , reason )
else
server_cmd ( " kick #%d " , userid2 )
}
console_print ( id , " [AMXX] Client ^ " % s ^ " kicked " , name2 )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2017-05-27 14:28:15 +00:00
/ * *
2020-05-28 23:10:38 +00:00
* ';' and ' ^ n ' are command delimiters . If a command arg contains these 2
2017-05-27 14:28:15 +00:00
* it is not safe to be passed to server_cmd ( ) as it may be trying to execute
* a command .
* /
isCommandArgSafe ( const arg [ ] )
{
2020-05-28 23:10:38 +00:00
return contain ( arg , " ; " ) = = - 1 & & contain ( arg , " ^n " ) = = - 1 ;
2017-05-27 14:28:15 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdUnban ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
2014-07-20 10:27:02 +00:00
new arg [ 32 ] , authid [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
read_argv ( 1 , arg , charsmax ( arg ) )
2013-08-16 16:49:55 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
2017-05-27 19:47:24 +00:00
if ( ! ( get_user_flags ( id ) & ( ADMIN_BAN | ADMIN_RCON ) ) )
2013-08-16 16:49:55 +00:00
{
new storedAdminAuth [ 32 ]
if ( ! TrieGetString ( g_tempBans , arg , storedAdminAuth , charsmax ( storedAdminAuth ) ) | | ! equal ( storedAdminAuth , authid ) )
{
2017-05-27 19:47:24 +00:00
console_print ( id , " %L " , id , " ADMIN_MUST_TEMPUNBAN " ) ;
2013-08-16 16:49:55 +00:00
return PLUGIN_HANDLED ;
}
}
2005-09-12 21:06:24 +00:00
if ( contain ( arg , " . " ) ! = - 1 )
{
server_cmd ( " removeip ^ " % s ^ " ;writeip " , arg )
console_print ( id , " [AMXX] %L " , id , " IP_REMOVED " , arg )
} else {
2017-05-27 14:28:15 +00:00
if ( ! isCommandArgSafe ( arg ) )
{
console_print ( id , " %l " , " CL_NOT_FOUND " ) ;
return PLUGIN_HANDLED ;
}
server_cmd ( " removeid %s;writeid " , arg )
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] %L " , id , " AUTHID_REMOVED " , arg )
}
2013-08-05 16:18:58 +00:00
get_user_name ( id , name , charsmax ( name ) )
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_UNBAN_1 " , " ADMIN_UNBAN_2 " , name , arg ) ;
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " unban ^ " % s ^ " " , name , get_user_userid ( id ) , authid , arg )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2007-08-03 15:26:22 +00:00
/ * amx_addban is a special command now .
* If a user with rcon uses it , it bans the user . No questions asked .
* If a user without rcon but with ADMIN_BAN uses it , it will scan the old
* connection queue , and if it finds the info for a player in it , it will
* check their old access . If they have immunity , it will not ban .
* If they do not have immunity , it will ban . If the user is not found ,
* it will refuse to ban the target .
* /
2005-09-12 21:06:24 +00:00
public cmdAddBan ( id , level , cid )
{
2007-08-03 15:26:22 +00:00
if ( ! cmd_access ( id , level , cid , 3 , true ) ) // check for ADMIN_BAN access
{
if ( get_user_flags ( id ) & level ) // Getting here means they didn't input enough args
{
return PLUGIN_HANDLED ;
}
if ( ! cmd_access ( id , ADMIN_RCON , cid , 3 ) ) // If somehow they have ADMIN_RCON without ADMIN_BAN, continue
{
return PLUGIN_HANDLED ;
}
}
2005-09-12 21:06:24 +00:00
2014-07-20 10:27:02 +00:00
new arg [ 32 ] , authid [ 32 ] , name [ MAX_NAME_LENGTH ] , minutes [ 32 ] , reason [ 32 ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
read_argv ( 1 , arg , charsmax ( arg ) )
read_argv ( 2 , minutes , charsmax ( minutes ) )
read_argv ( 3 , reason , charsmax ( reason ) )
2005-09-12 21:06:24 +00:00
2014-07-28 21:00:07 +00:00
trim ( arg ) ;
2007-08-03 15:26:22 +00:00
if ( ! ( get_user_flags ( id ) & ADMIN_RCON ) )
{
new bool : canban = false ;
new bool : isip = false ;
// Limited access to this command
if ( equali ( arg , " STEAM_ID_PENDING " ) | |
equali ( arg , " STEAM_ID_LAN " ) | |
equali ( arg , " HLTV " ) | |
equali ( arg , " 4294967295 " ) | |
equali ( arg , " VALVE_ID_LAN " ) | |
equali ( arg , " VALVE_ID_PENDING " ) )
{
// Hopefully we never get here, so ML shouldn't be needed
console_print ( id , " Cannot ban %s " , arg ) ;
return PLUGIN_HANDLED ;
}
if ( contain ( arg , " . " ) ! = - 1 )
{
isip = true ;
}
// Scan the disconnection queue
if ( isip )
{
new IP [ 32 ] ;
2014-07-20 10:27:02 +00:00
new Name [ MAX_NAME_LENGTH ] ;
2007-08-03 15:26:22 +00:00
new dummy [ 1 ] ;
new Access ;
for ( new i = 0 ; i < g_Size ; i + + )
{
GetInfo ( i , Name , charsmax ( Name ) , dummy , 0 , IP , charsmax ( IP ) , Access ) ;
if ( equal ( IP , arg ) )
{
if ( Access & ADMIN_IMMUNITY )
{
console_print ( id , " [AMXX] %s : %L " , IP , id , " CLIENT_IMM " , Name ) ;
return PLUGIN_HANDLED ;
}
// User did not have immunity
canban = true ;
}
}
}
else
{
new Auth [ 32 ] ;
2015-02-01 18:20:55 +00:00
new Name [ MAX_NAME_LENGTH ] ;
2007-08-03 15:26:22 +00:00
new dummy [ 1 ] ;
new Access ;
for ( new i = 0 ; i < g_Size ; i + + )
{
GetInfo ( i , Name , charsmax ( Name ) , Auth , charsmax ( Auth ) , dummy , 0 , Access ) ;
if ( equal ( Auth , arg ) )
{
if ( Access & ADMIN_IMMUNITY )
{
console_print ( id , " [AMXX] %s : %L " , Auth , id , " CLIENT_IMM " , Name ) ;
return PLUGIN_HANDLED ;
}
// User did not have immunity
canban = true ;
}
}
}
if ( ! canban )
{
2007-08-03 15:29:29 +00:00
console_print ( id , " [AMXX] You may only ban recently disconnected clients. Use ^ " amx_last ^ " to view. " ) ;
2007-08-03 15:26:22 +00:00
return PLUGIN_HANDLED ;
}
}
// User has access to ban their target
2005-09-12 21:06:24 +00:00
if ( contain ( arg , " . " ) ! = - 1 )
{
server_cmd ( " addip ^ " % s ^ " ^ " % s ^ " ;wait;writeip " , minutes , arg )
console_print ( id , " [AMXX] Ip ^ " % s ^ " added to ban list " , arg )
} else {
2017-05-27 14:28:15 +00:00
if ( ! isCommandArgSafe ( arg ) )
{
console_print ( id , " %l " , " CL_NOT_FOUND " ) ;
return PLUGIN_HANDLED ;
}
server_cmd ( " banid ^ " % s ^ " %s;wait;writeid " , minutes , arg )
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] Authid ^ " % s ^ " added to ban list " , arg )
}
2013-08-05 16:18:58 +00:00
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_ADDBAN_1 " , " ADMIN_ADDBAN_2 " , name , arg ) ;
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
2013-08-16 16:49:55 +00:00
TrieSetString ( g_tempBans , arg , authid )
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " ban ^ " % s ^ " (minutes ^ " % s ^ " ) (reason ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , arg , minutes , reason )
return PLUGIN_HANDLED
2004-02-07 09:55:53 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdBan ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 3 ) )
return PLUGIN_HANDLED
new target [ 32 ] , minutes [ 8 ] , reason [ 64 ]
2013-08-05 16:18:58 +00:00
read_argv ( 1 , target , charsmax ( target ) )
read_argv ( 2 , minutes , charsmax ( minutes ) )
read_argv ( 3 , reason , charsmax ( reason ) )
2005-09-12 21:06:24 +00:00
2007-07-25 18:10:08 +00:00
new player = cmd_target ( id , target , CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS | CMDTARGET_ALLOW_SELF )
2005-09-12 21:06:24 +00:00
if ( ! player )
return PLUGIN_HANDLED
2013-08-16 16:49:55 +00:00
new nNum = str_to_num ( minutes )
2017-05-27 19:47:24 +00:00
new const tempBanMaxTime = get_pcvar_num ( p_amx_tempban_maxtime ) ;
2013-08-16 16:49:55 +00:00
if ( nNum < 0 ) // since negative values result in permanent bans
{
nNum = 0 ;
minutes = " 0 " ;
}
2017-05-27 19:47:24 +00:00
if ( ! ( get_user_flags ( id ) & ( ADMIN_BAN | ADMIN_RCON ) ) & & ( nNum < = 0 | | nNum > tempBanMaxTime ) )
2013-08-16 16:49:55 +00:00
{
2017-05-27 19:47:24 +00:00
console_print ( id , " %L " , id , " ADMIN_MUST_TEMPBAN " , tempBanMaxTime ) ;
2013-08-16 16:49:55 +00:00
return PLUGIN_HANDLED
}
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name2 [ MAX_NAME_LENGTH ] , authid2 [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
new userid2 = get_user_userid ( player )
2013-08-05 16:18:58 +00:00
get_user_authid ( player , authid2 , charsmax ( authid2 ) )
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( player , name2 , charsmax ( name2 ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Ban: ^ " % s < % d > < % s > < > ^ " ban and kick ^ " % s < % d > < % s > < > ^ " (minutes ^ " % s ^ " ) (reason ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , name2 , userid2 , authid2 , minutes , reason )
2013-08-16 16:49:55 +00:00
TrieSetString ( g_tempBans , authid2 , authid ) ; // store all bans in case a permanent ban would override a temporary one.
2005-09-12 21:06:24 +00:00
2013-08-16 16:49:55 +00:00
new temp [ 64 ] , banned [ 16 ]
2005-09-12 21:06:24 +00:00
if ( nNum )
2013-08-05 16:18:58 +00:00
formatex ( temp , charsmax ( temp ) , " %L " , player , " FOR_MIN " , minutes )
2005-09-12 21:06:24 +00:00
else
2013-08-05 16:18:58 +00:00
formatex ( temp , charsmax ( temp ) , " %L " , player , " PERM " )
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
formatex ( banned , charsmax ( banned ) , " %L " , player , " BANNED " )
2005-09-12 21:06:24 +00:00
if ( reason [ 0 ] )
2010-04-27 07:21:49 +00:00
server_cmd ( " kick #%d ^ " % s ( % s % s ) ^ " ;wait;banid %s %s;wait;writeid " , userid2 , reason , banned , temp , minutes , authid2 )
2005-09-12 21:06:24 +00:00
else
2010-04-27 07:21:49 +00:00
server_cmd ( " kick #%d ^ " % s % s ^ " ;wait;banid %s %s;wait;writeid " , userid2 , banned , temp , minutes , authid2 )
2005-09-12 21:06:24 +00:00
2007-05-24 17:11:11 +00:00
// Display the message to all clients
new msg [ 256 ] ;
new len ;
2015-02-01 18:20:55 +00:00
new players [ MAX_PLAYERS ] , pnum , plr
2013-08-05 16:18:58 +00:00
get_players ( players , pnum , " ch " )
for ( new i ; i < pnum ; i + + )
2005-09-12 21:06:24 +00:00
{
2013-08-05 16:18:58 +00:00
plr = players [ i ]
len = formatex ( msg , charsmax ( msg ) , " %L " , plr , " BAN " ) ;
len + = formatex ( msg [ len ] , charsmax ( msg ) - len , " %s " , name2 ) ;
if ( nNum )
2005-09-12 21:06:24 +00:00
{
2013-08-05 16:18:58 +00:00
len + = formatex ( msg [ len ] , charsmax ( msg ) - len , " %L " , plr , " FOR_MIN " , minutes ) ;
2005-09-12 21:06:24 +00:00
}
2013-08-05 16:18:58 +00:00
else
{
len + = formatex ( msg [ len ] , charsmax ( msg ) - len , " %L " , plr , " PERM " ) ;
}
if ( strlen ( reason ) > 0 )
{
formatex ( msg [ len ] , charsmax ( msg ) - len , " (%L: %s) " , plr , " REASON " , reason ) ;
}
show_activity_id ( plr , id , name , msg ) ;
2005-09-12 21:06:24 +00:00
}
2007-05-24 17:11:11 +00:00
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] %L " , id , " CLIENT_BANNED " , name2 )
return PLUGIN_HANDLED
2004-09-19 23:58:15 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdBanIP ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 3 ) )
return PLUGIN_HANDLED
new target [ 32 ] , minutes [ 8 ] , reason [ 64 ]
2013-08-05 16:18:58 +00:00
read_argv ( 1 , target , charsmax ( target ) )
read_argv ( 2 , minutes , charsmax ( minutes ) )
read_argv ( 3 , reason , charsmax ( reason ) )
2005-09-12 21:06:24 +00:00
2007-07-25 18:10:08 +00:00
new player = cmd_target ( id , target , CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS | CMDTARGET_ALLOW_SELF )
2005-09-12 21:06:24 +00:00
if ( ! player )
2013-08-16 16:49:55 +00:00
return PLUGIN_HANDLED
new nNum = str_to_num ( minutes )
2017-05-27 19:47:24 +00:00
new const tempBanMaxTime = get_pcvar_num ( p_amx_tempban_maxtime ) ;
2013-08-16 16:49:55 +00:00
if ( nNum < 0 ) // since negative values result in permanent bans
2007-05-24 17:11:11 +00:00
{
2013-08-16 16:49:55 +00:00
nNum = 0 ;
minutes = " 0 " ;
}
2017-05-27 19:47:24 +00:00
if ( ! ( get_user_flags ( id ) & ( ADMIN_BAN | ADMIN_RCON ) ) & & ( nNum < = 0 | | nNum > tempBanMaxTime ) )
2013-08-16 16:49:55 +00:00
{
2017-05-27 19:47:24 +00:00
console_print ( id , " %L " , id , " ADMIN_MUST_TEMPBAN " , tempBanMaxTime ) ;
2005-09-12 21:06:24 +00:00
return PLUGIN_HANDLED
2007-05-24 17:11:11 +00:00
}
2005-09-12 21:06:24 +00:00
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name2 [ MAX_NAME_LENGTH ] , authid2 [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
new userid2 = get_user_userid ( player )
2013-08-05 16:18:58 +00:00
get_user_authid ( player , authid2 , charsmax ( authid2 ) )
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( player , name2 , charsmax ( name2 ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Ban: ^ " % s < % d > < % s > < > ^ " ban and kick ^ " % s < % d > < % s > < > ^ " (minutes ^ " % s ^ " ) (reason ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , name2 , userid2 , authid2 , minutes , reason )
2013-08-16 16:49:55 +00:00
TrieSetString ( g_tempBans , authid2 , authid ) ;
new temp [ 64 ] , banned [ 16 ]
2005-09-12 21:06:24 +00:00
if ( nNum )
2013-08-05 16:18:58 +00:00
formatex ( temp , charsmax ( temp ) , " %L " , player , " FOR_MIN " , minutes )
2005-09-12 21:06:24 +00:00
else
2013-08-05 16:18:58 +00:00
formatex ( temp , charsmax ( temp ) , " %L " , player , " PERM " )
2005-09-12 21:06:24 +00:00
format ( banned , 15 , " %L " , player , " BANNED " )
new address [ 32 ]
2013-08-05 16:18:58 +00:00
get_user_ip ( player , address , charsmax ( address ) , 1 )
2005-09-12 21:06:24 +00:00
if ( reason [ 0 ] )
server_cmd ( " kick #%d ^ " % s ( % s % s ) ^ " ;wait;addip ^ " % s ^ " ^ " % s ^ " ;wait;writeip " , userid2 , reason , banned , temp , minutes , address )
else
server_cmd ( " kick #%d ^ " % s % s ^ " ;wait;addip ^ " % s ^ " ^ " % s ^ " ;wait;writeip " , userid2 , banned , temp , minutes , address )
2007-05-24 17:11:11 +00:00
// Display the message to all clients
new msg [ 256 ] ;
new len ;
2015-02-01 18:20:55 +00:00
new players [ MAX_PLAYERS ] , pnum , plr
2013-08-05 16:18:58 +00:00
get_players ( players , pnum , " ch " )
for ( new i ; i < pnum ; i + + )
2005-09-12 21:06:24 +00:00
{
2013-08-05 16:18:58 +00:00
plr = players [ i ]
len = formatex ( msg , charsmax ( msg ) , " %L " , plr , " BAN " ) ;
len + = formatex ( msg [ len ] , charsmax ( msg ) - len , " %s " , name2 ) ;
if ( nNum )
2005-09-12 21:06:24 +00:00
{
2013-08-05 16:18:58 +00:00
formatex ( msg [ len ] , charsmax ( msg ) - len , " %L " , plr , " FOR_MIN " , minutes ) ;
}
else
{
formatex ( msg [ len ] , charsmax ( msg ) - len , " %L " , plr , " PERM " ) ;
}
if ( strlen ( reason ) > 0 )
{
formatex ( msg [ len ] , charsmax ( msg ) - len , " (%L: %s) " , plr , " REASON " , reason ) ;
2005-09-12 21:06:24 +00:00
}
2013-08-05 16:18:58 +00:00
show_activity_id ( plr , id , name , msg ) ;
2005-09-12 21:06:24 +00:00
}
2007-05-24 17:11:11 +00:00
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] %L " , id , " CLIENT_BANNED " , name2 )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdSlay ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new arg [ 32 ]
2013-08-05 16:18:58 +00:00
read_argv ( 1 , arg , charsmax ( arg ) )
2005-09-12 21:06:24 +00:00
2007-07-25 18:10:08 +00:00
new player = cmd_target ( id , arg , CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF | CMDTARGET_ONLY_ALIVE )
2005-09-12 21:06:24 +00:00
if ( ! player )
return PLUGIN_HANDLED
user_kill ( player )
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name2 [ MAX_NAME_LENGTH ] , authid2 [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
get_user_authid ( player , authid2 , charsmax ( authid2 ) )
get_user_name ( player , name2 , charsmax ( name2 ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " slay ^ " % s < % d > < % s > < > ^ " " , name , get_user_userid ( id ) , authid , name2 , get_user_userid ( player ) , authid2 )
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_SLAY_1 " , " ADMIN_SLAY_2 " , name , name2 ) ;
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] %L " , id , " CLIENT_SLAYED " , name2 )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdSlap ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new arg [ 32 ]
2013-08-05 16:18:58 +00:00
read_argv ( 1 , arg , charsmax ( arg ) )
2007-07-25 18:10:08 +00:00
new player = cmd_target ( id , arg , CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF | CMDTARGET_ONLY_ALIVE )
2005-09-12 21:06:24 +00:00
if ( ! player )
return PLUGIN_HANDLED
2014-07-20 10:27:02 +00:00
new spower [ 32 ] , authid [ 32 ] , name2 [ MAX_NAME_LENGTH ] , authid2 [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
read_argv ( 2 , spower , charsmax ( spower ) )
2005-09-12 21:06:24 +00:00
2013-06-25 09:45:00 +00:00
new damage = clamp ( str_to_num ( spower ) , 0 )
2005-09-12 21:06:24 +00:00
user_slap ( player , damage )
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
get_user_authid ( player , authid2 , charsmax ( authid2 ) )
get_user_name ( player , name2 , charsmax ( name2 ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " slap with %d damage ^ " % s < % d > < % s > < > ^ " " , name , get_user_userid ( id ) , authid , damage , name2 , get_user_userid ( player ) , authid2 )
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_SLAP_1 " , " ADMIN_SLAP_2 " , name , name2 , damage ) ;
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] %L " , id , " CLIENT_SLAPED " , name2 , damage )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public chMap ( map [ ] )
{
2015-01-23 15:52:58 +00:00
engine_changelevel ( map ) ;
2004-07-24 13:33:39 +00:00
}
2004-01-31 20:56:22 +00:00
2005-09-12 21:06:24 +00:00
public cmdMap ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new arg [ 32 ]
2013-08-05 16:18:58 +00:00
new arglen = read_argv ( 1 , arg , charsmax ( arg ) )
2005-09-12 21:06:24 +00:00
2020-05-28 23:10:38 +00:00
if ( ! is_map_valid ( arg ) | | contain ( arg , " .. " ) ! = - 1 )
2005-09-12 21:06:24 +00:00
{
console_print ( id , " [AMXX] %L " , id , " MAP_NOT_FOUND " )
return PLUGIN_HANDLED
}
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_MAP_1 " , " ADMIN_MAP_2 " , name , arg ) ;
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " changelevel ^ " % s ^ " " , name , get_user_userid ( id ) , authid , arg )
new _modName [ 10 ]
2013-08-05 16:18:58 +00:00
get_modname ( _modName , charsmax ( _modName ) )
2005-09-12 21:06:24 +00:00
if ( ! equal ( _modName , " zp " ) )
{
message_begin ( MSG_ALL , SVC_INTERMISSION )
message_end ( )
}
set_task ( 2.0 , " chMap " , 0 , arg , arglen + 1 )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2013-06-17 10:18:11 +00:00
public cmdExtendMap ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new arg [ 32 ]
read_argv ( 1 , arg , charsmax ( arg ) )
new mns = str_to_num ( arg )
if ( mns < = 0 )
return PLUGIN_HANDLED
new mapname [ 32 ]
get_mapname ( mapname , charsmax ( mapname ) )
set_pcvar_num ( timelimit , get_pcvar_num ( timelimit ) + mns )
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name [ MAX_NAME_LENGTH ]
2013-06-17 10:18:11 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
show_activity_key ( " ADMIN_EXTEND_1 " , " ADMIN_EXTEND_2 " , name , mns )
log_amx ( " ExtendMap: ^ " % s < % d > < % s > < > ^ " extended map ^ " % s ^ " for %d minutes. " , name , get_user_userid ( id ) , authid , mapname , mns )
console_print ( id , " %L " , id , " MAP_EXTENDED " , mapname , mns )
return PLUGIN_HANDLED
}
2007-04-17 19:03:25 +00:00
stock bool : onlyRcon ( const name [ ] )
2005-09-12 21:06:24 +00:00
{
2007-04-17 19:03:25 +00:00
new ptr = get_cvar_pointer ( name ) ;
if ( ptr & & get_pcvar_flags ( ptr ) & FCVAR_PROTECTED )
{
return true ;
}
return false ;
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdCvar ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new arg [ 32 ] , arg2 [ 64 ]
2013-08-05 16:18:58 +00:00
read_argv ( 1 , arg , charsmax ( arg ) )
read_argv ( 2 , arg2 , charsmax ( arg2 ) )
2005-09-12 21:06:24 +00:00
2007-03-09 03:04:40 +00:00
new pointer ;
2005-09-12 21:06:24 +00:00
if ( equal ( arg , " add " ) & & ( get_user_flags ( id ) & ADMIN_RCON ) )
{
2007-04-17 19:03:25 +00:00
if ( ( pointer = get_cvar_pointer ( arg2 ) ) ! = 0 )
2005-09-12 21:06:24 +00:00
{
2007-04-17 19:03:25 +00:00
new flags = get_pcvar_flags ( pointer ) ;
if ( ! ( flags & FCVAR_PROTECTED ) )
{
set_pcvar_flags ( pointer , flags | FCVAR_PROTECTED ) ;
}
2005-09-12 21:06:24 +00:00
}
return PLUGIN_HANDLED
}
2014-07-28 21:33:08 +00:00
trim ( arg ) ;
2007-03-09 03:04:40 +00:00
if ( ( pointer = get_cvar_pointer ( arg ) ) = = 0 )
2005-09-12 21:06:24 +00:00
{
console_print ( id , " [AMXX] %L " , id , " UNKNOWN_CVAR " , arg )
return PLUGIN_HANDLED
}
if ( onlyRcon ( arg ) & & ! ( get_user_flags ( id ) & ADMIN_RCON ) )
{
2007-04-17 19:03:25 +00:00
// Exception for the new onlyRcon rules:
// sv_password is allowed to be modified by ADMIN_PASSWORD
if ( ! ( equali ( arg , " sv_password " ) & & ( get_user_flags ( id ) & ADMIN_PASSWORD ) ) )
{
console_print ( id , " [AMXX] %L " , id , " CVAR_NO_ACC " )
return PLUGIN_HANDLED
}
2005-09-12 21:06:24 +00:00
}
if ( read_argc ( ) < 3 )
{
2013-08-05 16:18:58 +00:00
get_pcvar_string ( pointer , arg2 , charsmax ( arg2 ) )
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] %L " , id , " CVAR_IS " , arg , arg2 )
return PLUGIN_HANDLED
}
2020-06-24 20:49:19 +00:00
2020-05-28 23:10:38 +00:00
if ( equali ( arg , " servercfgfile " ) | | equali ( arg , " lservercfgfile " ) | | equali ( arg , " mapchangecfgfile " ) )
2017-01-22 13:01:08 +00:00
{
new pos = contain ( arg2 , " ; " )
if ( pos ! = - 1 )
{
arg2 [ pos ] = ' ^ 0 '
}
2020-05-28 23:10:38 +00:00
else if ( ( pos = contain ( arg2 , " ^n " ) ) ! = - 1 )
{
arg2 [ pos ] = ' ^ 0 '
}
2017-01-22 13:01:08 +00:00
}
2005-09-12 21:06:24 +00:00
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " set cvar (name ^ " % s ^ " ) (value ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , arg , arg2 )
2013-08-05 16:18:58 +00:00
set_pcvar_string ( pointer , arg2 )
2007-03-09 03:04:40 +00:00
2007-05-24 17:11:11 +00:00
// Display the message to all clients
new cvar_val [ 64 ] ;
2015-02-01 18:20:55 +00:00
new players [ MAX_PLAYERS ] , pnum , plr
2013-08-05 16:18:58 +00:00
get_players ( players , pnum , " ch " )
for ( new i ; i < pnum ; i + + )
2005-09-12 21:06:24 +00:00
{
2013-08-05 16:18:58 +00:00
plr = players [ i ]
if ( get_pcvar_flags ( pointer ) & FCVAR_PROTECTED | | equali ( arg , " rcon_password " ) )
2005-09-12 21:06:24 +00:00
{
2013-08-05 16:18:58 +00:00
formatex ( cvar_val , charsmax ( cvar_val ) , " *** %L *** " , plr , " PROTECTED " ) ;
2005-09-12 21:06:24 +00:00
}
2013-08-05 16:18:58 +00:00
else
{
copy ( cvar_val , charsmax ( cvar_val ) , arg2 ) ;
}
show_activity_id ( plr , id , name , " %L " , plr , " SET_CVAR_TO " , " " , arg , cvar_val ) ;
2005-09-12 21:06:24 +00:00
}
2007-05-24 17:11:11 +00:00
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] %L " , id , " CVAR_CHANGED " , arg , arg2 )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2014-03-20 22:41:10 +00:00
public cmdXvar ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
{
return PLUGIN_HANDLED ;
}
new cmd [ 15 ] , arg1 [ 32 ] , arg2 [ 32 ] ;
read_argv ( 0 , cmd , charsmax ( cmd ) ) ;
read_argv ( 1 , arg1 , charsmax ( arg1 ) ) ;
trim ( arg1 ) ;
if ( read_argc ( ) > 2 )
{
read_argv ( 2 , arg2 , charsmax ( arg2 ) ) ;
trim ( arg2 ) ;
if ( equali ( arg1 , " add " ) )
{
if ( get_user_flags ( id ) & ADMIN_RCON & & xvar_exists ( arg2 ) )
{
if ( ! g_tXvarsFlags )
{
g_tXvarsFlags = TrieCreate ( ) ;
}
TrieSetCell ( g_tXvarsFlags , arg2 , 1 ) ;
}
return PLUGIN_HANDLED ;
}
}
new bFloat = equali ( cmd , " amx_xvar_float " ) ;
new xvar = get_xvar_id ( arg1 ) ;
if ( xvar = = - 1 )
{
console_print ( id , " [AMXX] %L " , id , " UNKNOWN_XVAR " , arg1 )
return PLUGIN_HANDLED
}
new any : value ;
if ( ! arg2 [ 0 ] ) // get value
{
value = get_xvar_num ( xvar ) ;
if ( bFloat )
{
float_to_str ( value , arg2 , charsmax ( arg2 ) ) ;
}
else
{
num_to_str ( value , arg2 , charsmax ( arg2 ) ) ;
}
console_print ( id , " [AMXX] %L " , id , " XVAR_IS " , arg1 , arg2 ) ;
return PLUGIN_HANDLED ;
}
// set value
if ( g_tXvarsFlags & & TrieKeyExists ( g_tXvarsFlags , arg1 ) & & ~ get_user_flags ( id ) & ADMIN_RCON )
{
console_print ( id , " [AMXX] %L " , id , " XVAR_NO_ACC " ) ;
return PLUGIN_HANDLED ;
}
new endPos ;
if ( bFloat )
{
value = strtof ( arg2 , endPos ) ;
if ( ! endPos )
{
return PLUGIN_HANDLED ;
}
}
else
{
value = strtol ( arg2 , endPos ) ;
if ( ! endPos )
{
return PLUGIN_HANDLED ;
}
}
set_xvar_num ( xvar , value ) ;
// convert back value to string so admin can know value has been set correctly
if ( bFloat )
{
float_to_str ( value , arg2 , charsmax ( arg2 ) ) ;
}
else
{
num_to_str ( value , arg2 , charsmax ( arg2 ) ) ;
}
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name [ MAX_NAME_LENGTH ] ;
2014-03-20 22:41:10 +00:00
get_user_authid ( id , authid , charsmax ( authid ) ) ;
get_user_name ( id , name , charsmax ( name ) ) ;
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " set xvar (name ^ " % s ^ " ) (value ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , arg1 , arg2 ) ;
// Display the message to all clients
2015-02-01 18:20:55 +00:00
new players [ MAX_PLAYERS ] , pnum , plr ;
2014-03-20 22:41:10 +00:00
get_players ( players , pnum , " ch " ) ;
for ( new i ; i < pnum ; i + + )
{
plr = players [ i ] ;
show_activity_id ( plr , id , name , " %L " , plr , " SET_XVAR_TO " , " " , arg1 , arg2 ) ;
}
console_print ( id , " [AMXX] %L " , id , " XVAR_CHANGED " , arg1 , arg2 ) ;
return PLUGIN_HANDLED ;
}
2005-09-12 21:06:24 +00:00
public cmdPlugins ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 1 ) )
return PLUGIN_HANDLED
2007-03-09 03:04:40 +00:00
if ( id = = 0 ) // If server executes redirect this to "amxx plugins" for more in depth output
{
server_cmd ( " amxx plugins " ) ;
2007-09-03 16:39:32 +00:00
server_exec ( ) ;
2007-03-09 03:04:40 +00:00
return PLUGIN_HANDLED ;
}
2005-09-12 21:06:24 +00:00
2014-07-20 10:27:02 +00:00
new name [ MAX_NAME_LENGTH ] , version [ 32 ] , author [ 32 ] , filename [ 32 ] , status [ 32 ]
2005-09-12 21:06:24 +00:00
new lName [ 32 ] , lVersion [ 32 ] , lAuthor [ 32 ] , lFile [ 32 ] , lStatus [ 32 ]
2013-08-05 16:18:58 +00:00
format ( lName , charsmax ( lName ) , " %L " , id , " NAME " )
format ( lVersion , charsmax ( lVersion ) , " %L " , id , " VERSION " )
format ( lAuthor , charsmax ( lAuthor ) , " %L " , id , " AUTHOR " )
format ( lFile , charsmax ( lFile ) , " %L " , id , " FILE " )
format ( lStatus , charsmax ( lStatus ) , " %L " , id , " STATUS " )
2005-09-12 21:06:24 +00:00
2007-03-09 03:04:40 +00:00
new StartPLID = 0 ;
new EndPLID ;
new Temp [ 96 ]
2005-09-12 21:06:24 +00:00
new num = get_pluginsnum ( )
2007-03-09 03:04:40 +00:00
if ( read_argc ( ) > 1 )
{
2013-08-05 16:18:58 +00:00
read_argv ( 1 , Temp , charsmax ( Temp ) ) ;
2007-03-09 03:04:40 +00:00
StartPLID = str_to_num ( Temp ) - 1 ; // zero-based
}
EndPLID = min ( StartPLID + 10 , num ) ;
2005-09-12 21:06:24 +00:00
new running = 0
2007-03-09 03:04:40 +00:00
console_print ( id , " ----- %L ----- " , id , " LOADED_PLUGINS " )
2007-10-26 01:41:45 +00:00
console_print ( id , " %-18.17s %-11.10s %-17.16s %-16.15s %-9.8s " , lName , lVersion , lAuthor , lFile , lStatus )
2005-09-12 21:06:24 +00:00
2007-03-09 03:04:40 +00:00
new i = StartPLID ;
while ( i < EndPLID )
2005-09-12 21:06:24 +00:00
{
2013-08-05 16:18:58 +00:00
get_plugin ( i + + , filename , charsmax ( filename ) , name , charsmax ( name ) , version , charsmax ( version ) , author , charsmax ( author ) , status , charsmax ( status ) )
2007-10-26 01:41:45 +00:00
console_print ( id , " %-18.17s %-11.10s %-17.16s %-16.15s %-9.8s " , name , version , author , filename , status )
2005-09-12 21:06:24 +00:00
2007-01-26 06:12:25 +00:00
if ( status [ 0 ] = = 'd' | | status [ 0 ] = = 'r' ) // "debug" or "running"
2005-09-12 21:06:24 +00:00
running + +
}
2007-03-09 03:04:40 +00:00
console_print ( id , " %L " , id , " PLUGINS_RUN " , EndPLID - StartPLID , running )
console_print ( id , " ----- %L ----- " , id , " HELP_ENTRIES " , StartPLID + 1 , EndPLID , num ) ;
if ( EndPLID < num )
{
2017-09-01 13:18:23 +00:00
formatex ( Temp , charsmax ( Temp ) , " ----- %L ----- " , id , " HELP_USE_MORE " , " amx_help " , EndPLID + 1 ) ;
2013-08-05 16:18:58 +00:00
replace_all ( Temp , charsmax ( Temp ) , " amx_help " , " amx_plugins " ) ;
2007-03-09 03:04:40 +00:00
console_print ( id , " %s " , Temp ) ;
}
else
{
2017-09-01 13:18:23 +00:00
formatex ( Temp , charsmax ( Temp ) , " ----- %L ----- " , id , " HELP_USE_BEGIN " , " amx_help " ) ;
2013-08-05 16:18:58 +00:00
replace_all ( Temp , charsmax ( Temp ) , " amx_help " , " amx_plugins " ) ;
2007-03-09 03:04:40 +00:00
console_print ( id , " %s " , Temp ) ;
}
2005-09-12 21:06:24 +00:00
return PLUGIN_HANDLED
2004-03-07 00:57:03 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdModules ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 1 ) )
return PLUGIN_HANDLED
new name [ 32 ] , version [ 32 ] , author [ 32 ] , status , sStatus [ 16 ]
2007-08-03 05:27:36 +00:00
new lName [ 32 ] , lVersion [ 32 ] , lAuthor [ 32 ] , lStatus [ 32 ] ;
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
format ( lName , charsmax ( lName ) , " %L " , id , " NAME " )
format ( lVersion , charsmax ( lVersion ) , " %L " , id , " VERSION " )
format ( lAuthor , charsmax ( lAuthor ) , " %L " , id , " AUTHOR " )
2007-08-03 05:27:36 +00:00
format ( lStatus , charsmax ( lStatus ) , " %L " , id , " STATUS " )
2005-09-12 21:06:24 +00:00
new num = get_modulesnum ( )
console_print ( id , " %L: " , id , " LOADED_MODULES " )
2007-10-26 01:41:45 +00:00
console_print ( id , " %-23.22s %-11.10s %-20.19s %-11.10s " , lName , lVersion , lAuthor , lStatus )
2005-09-12 21:06:24 +00:00
for ( new i = 0 ; i < num ; i + + )
{
2013-08-05 16:18:58 +00:00
get_module ( i , name , charsmax ( name ) , author , charsmax ( author ) , version , charsmax ( v ersion ) , status )
2005-09-12 21:06:24 +00:00
switch ( status )
{
2013-08-05 16:18:58 +00:00
case module_loaded : copy ( sStatus , charsmax ( sStatus ) , " running " )
2007-08-03 05:27:36 +00:00
default :
{
2013-08-05 16:18:58 +00:00
copy ( sStatus , charsmax ( sStatus ) , " bad load " ) ;
2007-08-03 05:27:36 +00:00
copy ( name , charsmax ( name ) , " unknown " ) ;
copy ( author , charsmax ( author ) , " unknown " ) ;
copy ( version , charsmax ( version ) , " unknown " ) ;
}
2005-09-12 21:06:24 +00:00
}
2007-10-26 01:41:45 +00:00
console_print ( id , " %-23.22s %-11.10s %-20.19s %-11.10s " , name , version , author , sStatus )
2005-09-12 21:06:24 +00:00
}
console_print ( id , " %L " , id , " NUM_MODULES " , num )
return PLUGIN_HANDLED
2004-03-07 00:57:03 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdCfg ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new arg [ 128 ]
2013-08-05 16:18:58 +00:00
read_argv ( 1 , arg , charsmax ( arg ) )
2005-09-12 21:06:24 +00:00
if ( ! file_exists ( arg ) )
{
console_print ( id , " [AMXX] %L " , id , " FILE_NOT_FOUND " , arg )
return PLUGIN_HANDLED
}
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " execute cfg (file ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , arg )
console_print ( id , " [AMXX] Executing file ^ " % s ^ " " , arg )
2017-01-22 03:36:57 +00:00
server_cmd ( " exec ^ " % s ^ " " , arg )
2005-09-12 21:06:24 +00:00
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_CONF_1 " , " ADMIN_CONF_2 " , name , arg ) ;
2005-09-12 21:06:24 +00:00
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdLBack ( )
{
2005-11-28 16:22:12 +00:00
if ( ! g_PauseAllowed )
return PLUGIN_CONTINUE
new paused [ 25 ]
2005-09-12 21:06:24 +00:00
2005-11-28 16:22:12 +00:00
format ( paused , 24 , " %L " , g_pauseCon , g_Paused ? " UNPAUSED " : " PAUSED " )
2013-08-05 16:18:58 +00:00
set_pcvar_float ( pausable , g_pausAble )
2005-09-12 21:06:24 +00:00
console_print ( g_pauseCon , " [AMXX] Server %s " , paused )
2005-11-28 16:22:12 +00:00
g_PauseAllowed = false
2005-09-12 21:06:24 +00:00
if ( g_Paused )
g_Paused = false
else
g_Paused = true
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdPause ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 1 ) )
return PLUGIN_HANDLED
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name [ MAX_NAME_LENGTH ] , slayer = id
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
2007-03-09 03:04:40 +00:00
if ( pausable ! = 0 )
{
g_pausAble = get_pcvar_float ( pausable )
}
2005-09-12 21:06:24 +00:00
if ( ! slayer )
slayer = find_player ( " h " )
if ( ! slayer )
{
console_print ( id , " [AMXX] %L " , id , " UNABLE_PAUSE " )
return PLUGIN_HANDLED
}
2013-08-05 16:18:58 +00:00
set_pcvar_float ( pausable , 1.0 )
2005-11-28 16:22:12 +00:00
g_PauseAllowed = true
2005-09-12 21:06:24 +00:00
client_cmd ( slayer , " pause;pauseAck " )
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " %s server " , name , get_user_userid ( id ) , authid , g_Paused ? " unpause " : " pause " )
2005-10-08 01:35:11 +00:00
console_print ( id , " [AMXX] %L " , id , g_Paused ? " UNPAUSING " : " PAUSING " )
2005-09-12 21:06:24 +00:00
2007-05-24 17:11:11 +00:00
// Display the message to all clients
2015-02-01 18:20:55 +00:00
new players [ MAX_PLAYERS ] , pnum
2013-08-05 16:18:58 +00:00
get_players ( players , pnum , " ch " )
for ( new i ; i < pnum ; i + + )
2005-09-12 21:06:24 +00:00
{
2013-08-05 16:18:58 +00:00
show_activity_id ( players [ i ] , id , name , " %L server " , i , g_Paused ? " UNPAUSE " : " PAUSE " ) ;
2005-09-12 21:06:24 +00:00
}
2007-05-24 17:11:11 +00:00
2005-09-12 21:06:24 +00:00
g_pauseCon = id
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2006-05-11 08:55:29 +00:00
public cmdShowRcon ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new password [ 64 ]
2015-03-04 14:22:24 +00:00
get_pcvar_string ( rcon_password , password , charsmax ( password ) )
2006-05-11 08:55:29 +00:00
if ( ! password [ 0 ] )
{
cmdRcon ( id , level , cid )
2015-03-04 14:22:24 +00:00
}
else
{
2006-05-11 08:55:29 +00:00
new args [ 128 ]
2013-08-05 16:18:58 +00:00
read_args ( args , charsmax ( args ) )
2006-05-11 08:55:29 +00:00
client_cmd ( id , " rcon_password %s " , password )
client_cmd ( id , " rcon %s " , args )
}
return PLUGIN_HANDLED
}
2005-09-12 21:06:24 +00:00
public cmdRcon ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
2014-07-20 10:27:02 +00:00
new arg [ 128 ] , authid [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
read_args ( arg , charsmax ( arg ) )
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " server console (cmdline ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , arg )
console_print ( id , " [AMXX] %L " , id , " COM_SENT_SERVER " , arg )
server_cmd ( " %s " , arg )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdWho ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 1 ) )
return PLUGIN_HANDLED
2015-02-01 18:20:55 +00:00
new players [ MAX_PLAYERS ] , inum , cl_on_server [ 64 ] , authid [ 32 ] , name [ MAX_NAME_LENGTH ] , flags , sflags [ 32 ] , plr
2005-09-12 21:06:24 +00:00
new lImm [ 16 ] , lRes [ 16 ] , lAccess [ 16 ] , lYes [ 16 ] , lNo [ 16 ]
2013-08-05 16:18:58 +00:00
formatex ( lImm , charsmax ( lImm ) , " %L " , id , " IMMU " )
formatex ( lRes , charsmax ( lRes ) , " %L " , id , " RESERV " )
formatex ( lAccess , charsmax ( lAccess ) , " %L " , id , " ACCESS " )
formatex ( lYes , charsmax ( lYes ) , " %L " , id , " YES " )
formatex ( lNo , charsmax ( lNo ) , " %L " , id , " NO " )
2005-09-12 21:06:24 +00:00
get_players ( players , inum )
2013-08-05 16:18:58 +00:00
format ( cl_on_server , charsmax ( cl_on_server ) , " %L " , id , " CLIENTS_ON_SERVER " )
2005-09-12 21:06:24 +00:00
console_print ( id , " ^n%s:^n # %-16.15s %-20s %-8s %-4.3s %-4.3s %s " , cl_on_server , " nick " , " authid " , " userid " , lImm , lRes , lAccess )
for ( new a = 0 ; a < inum ; + + a )
{
2013-08-05 16:18:58 +00:00
plr = players [ a ]
get_user_authid ( plr , authid , charsmax ( authid ) )
get_user_name ( plr , name , charsmax ( name ) )
flags = get_user_flags ( plr )
get_flags ( flags , sflags , charsmax ( sflags ) )
console_print ( id , " %2d %-16.15s %-20s %-8d %-6.5s %-6.5s %s " , plr , name , authid ,
get_user_userid ( plr ) , ( flags & ADMIN_IMMUNITY ) ? lYes : lNo , ( flags & ADMIN_RESERVATION ) ? lYes : lNo , sflags )
2005-09-12 21:06:24 +00:00
}
console_print ( id , " %L " , id , " TOTAL_NUM " , inum )
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " ask for players list " , name , get_user_userid ( id ) , authid )
return PLUGIN_HANDLED
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
hasTag ( name [ ] , tags [ 4 ] [ 32 ] , tagsNum )
{
for ( new a = 0 ; a < tagsNum ; + + a )
if ( contain ( name , tags [ a ] ) ! = - 1 )
return a
return - 1
2004-01-31 20:56:22 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdLeave ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 2 ) )
return PLUGIN_HANDLED
new argnum = read_argc ( )
new ltags [ 4 ] [ 32 ]
new ltagsnum = 0
for ( new a = 1 ; a < 5 ; + + a )
{
if ( a < argnum )
2013-08-05 16:18:58 +00:00
read_argv ( a , ltags [ ltagsnum + + ] , charsmax ( ltags [ ] ) )
2005-09-12 21:06:24 +00:00
else
ltags [ ltagsnum + + ] [ 0 ] = 0
}
2014-07-20 10:27:02 +00:00
new nick [ MAX_NAME_LENGTH ] , ires , pnum = MaxClients , count = 0 , lReason [ 128 ]
2005-09-12 21:06:24 +00:00
2014-07-20 15:31:43 +00:00
for ( new b = 1 ; b < = pnum ; + + b )
2005-09-12 21:06:24 +00:00
{
if ( ! is_user_connected ( b ) & & ! is_user_connecting ( b ) ) continue
2013-08-05 16:18:58 +00:00
get_user_name ( b , nick , charsmax ( nick ) )
2005-09-12 21:06:24 +00:00
ires = hasTag ( nick , ltags , ltagsnum )
if ( ires ! = - 1 )
{
console_print ( id , " [AMXX] %L " , id , " SKIP_MATCH " , nick , ltags [ ires ] )
continue
}
if ( get_user_flags ( b ) & ADMIN_IMMUNITY )
{
console_print ( id , " [AMXX] %L " , id , " SKIP_IMM " , nick )
continue
}
console_print ( id , " [AMXX] %L " , id , " KICK_PL " , nick )
if ( is_user_bot ( b ) )
server_cmd ( " kick #%d " , get_user_userid ( b ) )
else
{
2013-08-05 16:18:58 +00:00
formatex ( lReason , charsmax ( lReason ) , " %L " , b , " YOU_DROPPED " )
2005-09-12 21:06:24 +00:00
server_cmd ( " kick #%d ^ " % s ^ " " , get_user_userid ( b ) , lReason )
}
count + +
}
console_print ( id , " [AMXX] %L " , id , " KICKED_CLIENTS " , count )
2014-07-20 10:27:02 +00:00
new authid [ 32 ] , name [ MAX_NAME_LENGTH ]
2005-09-12 21:06:24 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
2005-09-12 21:06:24 +00:00
log_amx ( " Kick: ^ " % s < % d > < % s > < > ^ " leave some group (tag1 ^ " % s ^ " ) (tag2 ^ " % s ^ " ) (tag3 ^ " % s ^ " ) (tag4 ^ " % s ^ " ) " , name , get_user_userid ( id ) , authid , ltags [ 0 ] , ltags [ 1 ] , ltags [ 2 ] , ltags [ 3 ] )
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_LEAVE_1 " , " ADMIN_LEAVE_2 " , name , ltags [ 0 ] , ltags [ 1 ] , ltags [ 2 ] , ltags [ 3 ] ) ;
2005-09-12 21:06:24 +00:00
return PLUGIN_HANDLED
2004-07-24 13:33:39 +00:00
}
2005-09-12 21:06:24 +00:00
public cmdNick ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 3 ) )
return PLUGIN_HANDLED
2004-07-24 13:33:39 +00:00
2005-09-12 21:06:24 +00:00
new arg1 [ 32 ] , arg2 [ 32 ] , authid [ 32 ] , name [ 32 ] , authid2 [ 32 ] , name2 [ 32 ]
2004-07-24 13:33:39 +00:00
2013-08-05 16:18:58 +00:00
read_argv ( 1 , arg1 , charsmax ( arg1 ) )
read_argv ( 2 , arg2 , charsmax ( arg2 ) )
2004-07-24 13:33:39 +00:00
2007-07-25 18:10:08 +00:00
new player = cmd_target ( id , arg1 , CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF )
2005-09-12 21:06:24 +00:00
if ( ! player )
return PLUGIN_HANDLED
2004-07-24 13:33:39 +00:00
2013-08-05 16:18:58 +00:00
get_user_authid ( id , authid , charsmax ( authid ) )
get_user_name ( id , name , charsmax ( name ) )
get_user_authid ( player , authid2 , charsmax ( authid2 ) )
get_user_name ( player , name2 , charsmax ( name2 ) )
2004-07-24 13:33:39 +00:00
2013-08-05 16:18:58 +00:00
set_user_info ( player , " name " , arg2 )
2004-07-24 13:33:39 +00:00
2005-09-12 21:06:24 +00:00
log_amx ( " Cmd: ^ " % s < % d > < % s > < > ^ " change nick to ^ " % s ^ " ^ " % s < % d > < % s > < > ^ " " , name , get_user_userid ( id ) , authid , arg2 , name2 , get_user_userid ( player ) , authid2 )
2004-07-24 13:33:39 +00:00
2007-05-24 17:11:11 +00:00
show_activity_key ( " ADMIN_NICK_1 " , " ADMIN_NICK_2 " , name , name2 , arg2 ) ;
2005-09-12 21:06:24 +00:00
console_print ( id , " [AMXX] %L " , id , " CHANGED_NICK " , name2 , arg2 )
2004-07-24 13:33:39 +00:00
2005-09-12 21:06:24 +00:00
return PLUGIN_HANDLED
2004-09-17 00:51:20 +00:00
}
2007-04-17 19:03:25 +00:00
2007-08-03 15:26:22 +00:00
public cmdLast ( id , level , cid )
{
if ( ! cmd_access ( id , level , cid , 1 ) )
{
return PLUGIN_HANDLED ;
}
2014-07-20 10:27:02 +00:00
new name [ MAX_NAME_LENGTH ] ;
2007-08-03 15:26:22 +00:00
new authid [ 32 ] ;
new ip [ 32 ] ;
new flags [ 32 ] ;
new access ;
// This alignment is a bit weird (it should grow if the name is larger)
// but otherwise for the more common shorter name, it'll wrap in server console
// Steam client display is all skewed anyway because of the non fixed font.
console_print ( id , " %19s %20s %15s %s " , " name " , " authid " , " ip " , " access " ) ;
for ( new i = 0 ; i < g_Size ; i + + )
{
GetInfo ( i , name , charsmax ( name ) , authid , charsmax ( authid ) , ip , charsmax ( ip ) , access ) ;
get_flags ( access , flags , charsmax ( flags ) ) ;
console_print ( id , " %19s %20s %15s %s " , name , authid , ip , flags ) ;
}
console_print ( id , " %d old connections saved. " , g_Size ) ;
return PLUGIN_HANDLED ;
2007-10-26 01:41:45 +00:00
}
2015-07-10 21:39:34 +00:00
public plugin_end ( )
{
TrieDestroy ( g_tempBans ) ;
TrieDestroy ( g_tXvarsFlags ) ;
}