Скриптер
Проверенный
Пользователь
- Сообщения
- 3,582
- Реакции
- 1,570
- Помог
- 137 раз(а)
- Ошибка
-
L 02/21/2019 - 14:23:12: String formatted incorrectly - parameter 3 (total 2)
L 02/21/2019 - 14:23:12: [AMXX] Displaying debug trace (plugin "cmdchecker.amxx", version "0.3.6")
L 02/21/2019 - 14:23:12: [AMXX] Run time error 25: parameter error
L 02/21/2019 - 14:23:12: [AMXX] [0] cmdchecker.sma::send_next_cmd (line 503)
L 02/21/2019 - 14:23:12: [AMXX] [1] cmdchecker.sma::client_command (line 446)
- ОС
- Linux
- Amx Mod X
-
AMX Mod X 1.9.0.5234 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Nov 3 2018 14:55:29
Built from: https://github.com/alliedmodders/amxmodx/commit/9eb1f42
Build ID: 5234:9eb1f42
Core mode: JIT+ASM32
- Билд
-
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.4.0.668-dev
Build date: 09:47:42 Sep 29 2018 (1631)
Build from: https://github.com/dreamstalker/rehlds/commit/89be216
- ReGamedll
-
ReGameDLL version: 5.7.0.318-dev
Build date: 21:07:26 Oct 30 2018
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/932001b
- Версия Metamod
-
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 17:47:54 Aug 24 2018
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/0cf2f70
- Список метамодулей
-
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] Reunion RUN - reunion_mm_i386.so v0.1.0.133 ini Start Never
[ 2] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5234 ini Start ANY
[ 3] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 4] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 5] Revoice RUN - revoice_mm_i386.so v0.1.0.32 ini Start Never
[ 6] MySQL RUN - mysql_amxx_i386.so v1.9.0.5234 pl2 ANY ANY
[ 7] SQLite RUN - sqlite_amxx_i386.so v1.9.0.5234 pl2 ANY ANY
[ 8] Fun RUN - fun_amxx_i386.so v1.9.0.5234 pl2 ANY ANY
[ 9] Engine RUN - engine_amxx_i386.so v1.9.0.5234 pl2 ANY ANY
[10] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5234 pl2 ANY ANY
[11] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5234 pl2 ANY ANY
[12] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5234 pl2 ANY ANY
[13] hackdetector RUN - hackdetector_amxx_i386.so v0.15.328.lite pl2 ANY ANY
[14] ReAPI RUN - reapi_amxx_i386.so v5.6.0.160-dev pl2 ANY Never
[15] GeoIP RUN - geoip_amxx_i386.so v1.9.0.5234 pl2 ANY ANY
[16] whois RUN - whois_amxx_i386.so v0.2.270 pl2 ANY ANY
[17] CURL AMXX RUN - curl_amxx_i386.so v1.0.4 pl2 ANY ANY
17 plugins, 17 running
- Список плагинов
-
Currently loaded plugins:
name version author file status
[ 1] fb_forwards 0.1.4 Kanagava & Realu fb_forwards.amx running
[ 2] WebHS 0.1 kanagava fb_web_online.a running
[ 3] FreshBans 1.4.0b kanagava fresh_bans_140_ running
[ 4] SF Warn Menu 0.1.4g serfreeman1337 sf_admin_warns. running
[ 5] CSStatsX SQL 0.7.4+1 serfreeman1337 csstatsx_sql.am running
[ 6] Rank Menu 1.1 h1k3 rankmenu.amxx running
[ 7] AES: StatsX 0.5 Vega serfreeman1337 statsx_cstrike. running
[ 8] Admin Load 3.10.0 F@nt0M adminload.amxx running
[ 9] Admin Commands 1.9.0.5234 AMXX Dev Team admincmd.amxx running
[ 10] Admin Help 1.9.0.5234 AMXX Dev Team adminhelp.amxx running
[ 11] Menus Front-End 1.9.0.5232 AMXX Dev Team menufront.amxx running
[ 12] Commands Menu 1.9.0.5234 AMXX Dev Team cmdmenu.amxx running
[ 13] Players Menu 1.9.0.5234 AMXX Dev Team plmenu.amxx running
[ 14] Teleport Menu 1.9.0.5234 AMXX Dev Team telemenu.amxx running
[ 15] Maps Menu 1.9.0.5234 AMXX Dev Team mapsmenu.amxx running
[ 16] Admin Chat 1.9.0.5234 AMXX Dev Team adminchat.amxx running
[ 17] Anti Flood 1.9.0.5234 AMXX Dev Team antiflood.amxx running
[ 18] Admin Votes 1.9.0.5234 AMXX Dev Team adminvote.amxx running
[ 19] Pause Plugins 1.9.0.5234 AMXX Dev Team pausecfg.amxx running
[ 20] Stats Configuration 1.9.0.5234 AMXX Dev Team statscfg.amxx running
[ 21] AdminMenu 1.1 Nordic Warrior adminmenu.amxx running
[ 22] Admin menu central 0.1 Nordic Warrior adminmenu_centr running
[ 23] Advanced Lottery 0.5 Nordic Warrior advanced_lotter running
[ 24] [ReAPI] Advanced Team 0.1.0 Vaqtincha AdvancedTeamCho running
[ 25] Advert Messages 1.22 neygomon adverts.amxx running
[ 26] AFK Protection 2.3.2 rapara13/Nordic afk.amxx debug
[ 27] AimInfo 2.1 xPaw/Nordic Warr aim_info.amxx running
[ 28] Ball 1.2.1 xPaw/Nordic Warr ball.amxx running
[ 29] BhopHack Detector 0.1 Mistrick bhophack_detect running
[ 30] Bypass Guard 24.01.2019 mx?! bypass_guard_ip running
[ 31] CameraChanger Lite 0.1 Nordic Warrior camera_changer. running
[ 32] Advanced Client Checke 0.3.6 Mistrick cmdchecker.amxx debug
[ 33] Connect Exec 1.0 AleX connect_exec.am running
[ 34] Chat Manager 4.3.1 OciXCrom crx_chatmanager running
[ 35] CM: Toggle Chat 4.1 OciXCrom crx_chatmanager running
[ 36] OciXCrom's Rank System 3.2 OciXCrom crx_ranksystem. running
[ 37] Knife Models 2.5.7 OciXCrom crx_knife_model running
[ 38] [ReAPI] Custom Models 1.6.1 neugomon custom_models.a running
[ 39] Demo Recorder 2.4.0 F@nt0M demo_recorder.a running
[ 40] Fix for sky 0.3 NordicWarrior fix_maps.amxx running
[ 41] Gag System 1.1 TheRedShoko @ AM gag_system.amxx running
[ 42] GameName Changer 1.0 neugomon gamename.amxx running
[ 43] High Ping Kicker 1.0 OLO/shadow/Nordi high_ping_kicke running
[ 44] iFLY 1.0 arttty7 iFLY.amxx debug
[ 45] iHOOK 1.0 arttty7 iHOOK.amxx running
[ 46] Invisible Spectator 1.0 ReHLDS Team invisible_spect running
[ 47] key listener 0.7 cheap_suit keylistener.amx running
[ 48] Kill Distance 0.4 Nightscream/Nord kill_distance.a running
[ 49] Knife Duel Arena 1.32 bionext knife_duel_aren debug
[ 50] unknown unknown unknown knife_duel_aren running
[ 51] Language Menu 1.0 F@nt0M langmenu.amxx running
[ 52] Light Menu 0.2 Nordic Warrior light_menu.amxx running
[ 53] Mind Games 1.1 fifayer/Nordic W MindGames.amxx running
[ 54] Money System Best t3rkecorejz MoneySystem.amx running
[ 55] Mute Menu 12.02.2019 w0w/Nordic Warri mute_menu.amxx running
[ 56] MG Grab 2.0 Nickron new_grab.amxx running
[ 57] KillStreakAnnouncer 0.3 Nordic Warrior nkillstreak.amx running
[ 58] Knife Menu 1.2 Nordic Warrior nknifemenu.amxx running
[ 59] Knife shop 0.1 Nordic Warrior nknifeshop.amxx running
[ 60] Online Helper 1.0.1 Nordic Warrior online_helper.a running
[ 61] Paint Marker 1.1 w0w paint_marker.am running
[ 62] [ReAPI] Parachute 1.1 ReHLDS Team parachute.amxx running
[ 63] Pingwinowa bombka 0.1 diablix pingwin.amxx running
[ 64] Random Skies 1.1 rmk by N.W. randomskies.amx running
[ 65] ReChecker Logging 1.0 custom rc_logging.amxx running
[ 66] Reset Score 1.0 Nordic Warrior reset_score.amx running
[ 67] Spectator Bots 2.1 SISA spectator_bots. running
[ 68] SteamID Limiter 0.4 Mistrick steamid_limiter running
[ 69] Money Transfer 1.2 x3/Nordic Warrio tm.amxx debug
[ 70] Train Killer 1.1 Pastout!/Nordic trainkiller.amx running
[ 71] VipMenu 1.0 Nordic Warrior vipmenu.amxx running
[ 72] Yet Another Voteban 1.8 AndrewZ/voed yet_another_vot running
[ 73] Map Manager: Core 3.0.1 Mistrick map_manager_cor running
[ 74] Map Manager: Scheduler 0.1.0 Mistrick map_manager_sch running
[ 75] Map Manager: Rtv 0.0.4 Mistrick map_manager_rtv running
[ 76] Map Manager: Nominatio 0.0.8 Mistrick map_manager_nom running
[ 77] Map Manager: Effects 0.0.8 Mistrick map_manager_eff running
[ 78] Map Manager: Informer 0.0.5 Mistrick map_manager_inf running
[ 79] Map Manager: Advanced 0.0.4 Mistrick map_manager_adv running
79 plugins, 79 running
- Автор плагина
- Mistrick
- Версия плагина
- 0.3.6
- Исходный код
-
#include <amxmodx>
#define PLUGIN "Advanced Client Checker"
#define VERSION "0.3.6"
#define AUTHOR "Mistrick"
#pragma semicolon 1
///******** Settings ********///
// #define KICK_BAD_CLIENT // кик за блокировку подтверждения
// #define KICK_FOR_BLOCK_CVAR_ANSWER // кик за блок ответа на запрос квара
// #define COMMAND_LOGGER // функция логирования написанных в консоль команд игроком
#define INPUT_DELAY 3.0 // задержка проверки после коннекта
#define RECHECK_DELAY 300.0 // через сколько начать повторную проверку
#define MAX_CMDS_FOR_LOOP 1000 // сколько команд проверять за цикл
#define LOOP_DELAY 5.0 // задержка между циклами
#define FIRST_ANSWER_MAX_TIME 5.0 // время на ответ от команды подтверждения
#define FIRST_CMD_RECHECKS 5
#define MAX_CMD_WARNINGS 5
#define CVAR_ANSWER_TIME 5.0 // время на ответ от квара
#define CVAR_ANSWER_RECHECKS 5 // число перепроверок на запрос квара
new const g_szLogFolder[] = "ACC"; // папка в amxmodx/logs/ куда будут идти логи
///**************************///
enum ( +=100 ) {
TASK_FIRST_CMD = 100,
TASK_CMD_CHECK,
TASK_CVAR_ANSWER,
TASK_CVAR_CHECK
};
enum CvarFlags ( <<= 1 ) {
CVAR_EXIST = 1,
CVAR_NOT_EXIST,
CVAR_EQUAL,
CVAR_NOT_EQUAL,
CVAR_ABOVE,
CVAR_BELOW
}
enum PunishType {
PUNISH_BAD_CLIENT,
PUNISH_BLOCK_CVAR_ANSWER,
PUNISH_WRONG_CMD,
PUNISH_WRONG_CVAR,
PUNISH_BAD_CMD
};
enum _:CommandStruct {
_CmdPunishLevel,
_Cmd[64]
};
enum _:CvarStruct {
_CvarPunishLevel,
CvarFlags:_CvarFlags,
_Cvar[64],
_CvarValue[32],
Float:_CvarValueAbove,
Float:_CvarValueBelow
};
enum BadCmdFlags ( <<= 1 ) {
BADCMD_ANY = 1,
BADCMD_PREFIX,
BADCMD_SUFFIX
};
enum _:BadCmdStruct {
_BadCmdPunishLevel,
BadCmdFlags:_BadCmdFlags,
_BadCmd[64]
};
enum _:PunishStruct {
_PunishLevel,
_PunishCmd[128]
};
#define CMD_LEN 8
#define INVALID_INDEX -1
new const FILE_CMD_CFG[] = "cmds.cfg";
new const FILE_CVAR_CFG[] = "cvars.cfg";
new const FILE_BAD_CMD_CFG[] = "bad_cmds.cfg";
new const FILE_PUNISH_CFG[] = "punish.cfg";
new const FILE_SLOWHACK_ANSWER_CFG[] = "slowhackanswer.cfg";
new player_ip[33][16];
new player_authid[33][32];
new bool:is_player_steam[33];
new bool:client_answered[33];
new client_answer_check[33];
new client_cmd_warnings[33];
new current_cmd_state[33];
new current_cmd[33][64];
new bool:first_check[33];
new rnd_str[33][CMD_LEN];
new Array:g_aCmdList;
new g_iCmdListSize;
new Array:g_aBadCmdList;
new g_iBadCmdListSize;
new current_bad_cmd[33];
new current_cvar_state[33];
new client_cvar_warnings[33];
new Array:g_aCvarList;
new g_iCvarListSize;
new Array:g_aPunishList;
new Trie:g_tSlowhackAnswer;
new g_iSlowhackAnswerSize;
#if defined COMMAND_LOGGER
new const FILE_CMD_LOG[] = "cmdlog.cfg";
new Trie:g_tCmdLog;
new g_szCmdLogPath[260];
#endif // COMMAND_LOGGER
new g_szLogFile[PLATFORM_MAX_PATH];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_concmd("acc_add_cmd", "command_add_cmd", ADMIN_RCON);
register_concmd("acc_add_cvar", "command_add_cvar", ADMIN_RCON);
register_concmd("acc_add_bad_cmd", "command_add_bad_cmd", ADMIN_RCON);
register_concmd("acc_add_punish", "command_add_punish", ADMIN_RCON);
register_concmd("acc_add_slowhack_answer", "command_add_slowhack_answer", ADMIN_RCON);
g_aCmdList = ArrayCreate(CommandStruct, 1);
g_aCvarList = ArrayCreate(CvarStruct, 1);
g_aBadCmdList = ArrayCreate(BadCmdStruct, 1);
g_aPunishList = ArrayCreate(PunishStruct, 1);
g_tSlowhackAnswer = TrieCreate();
#if defined COMMAND_LOGGER
register_concmd("acc_add_cmd_log", "command_add_cmd_log", ADMIN_RCON);
g_tCmdLog = TrieCreate();
#endif // COMMAND_LOGGER
new szBuff[PLATFORM_MAX_PATH], szLogsDir[PLATFORM_MAX_PATH];
get_localinfo("amxx_logs", szLogsDir, charsmax(szLogsDir));
formatex(szBuff, charsmax(szBuff), "%s/%s", szLogsDir, g_szLogFolder);
if(!dir_exists(szBuff))
mkdir(szBuff);
add(szBuff, charsmax(szBuff), "/ACC%d%m%Y.log");
get_time(szBuff, g_szLogFile, charsmax(g_szLogFile));
}
public plugin_cfg()
{
new file_dir[256]; get_localinfo("amxx_configsdir", file_dir, charsmax(file_dir));
server_cmd("exec %s/cmdchecker/%s", file_dir, FILE_CMD_CFG);
server_cmd("exec %s/cmdchecker/%s", file_dir, FILE_CVAR_CFG);
server_cmd("exec %s/cmdchecker/%s", file_dir, FILE_BAD_CMD_CFG);
server_cmd("exec %s/cmdchecker/%s", file_dir, FILE_PUNISH_CFG);
server_cmd("exec %s/cmdchecker/%s", file_dir, FILE_SLOWHACK_ANSWER_CFG);
#if defined COMMAND_LOGGER
formatex(g_szCmdLogPath, charsmax(g_szCmdLogPath), "%s/cmdchecker/%s", file_dir, FILE_CMD_LOG);
server_cmd("exec %s", g_szCmdLogPath);
#endif // COMMAND_LOGGER
}
public plugin_end()
{
ArrayDestroy(g_aCmdList);
ArrayDestroy(g_aCvarList);
ArrayDestroy(g_aPunishList);
#if defined COMMAND_LOGGER
TrieDestroy(g_tSlowhackAnswer);
#endif // COMMAND_LOGGER
}
public command_add_cmd(id, level, cid)
{
if(~get_user_flags(id) & level) {
return PLUGIN_HANDLED;
}
if(read_argc() != 3) {
return PLUGIN_HANDLED;
}
new cmd_info[CommandStruct], args[16];
read_argv(1, args, charsmax(args));
cmd_info[_CmdPunishLevel] = str_to_num(args);
read_argv(2, cmd_info[_Cmd], charsmax(cmd_info[_Cmd]));
trim(cmd_info[_Cmd]);
ArrayPushArray(g_aCmdList, cmd_info);
g_iCmdListSize++;
return PLUGIN_HANDLED;
}
public command_add_cvar(id, level, cid)
{
if(~get_user_flags(id) & level) {
return PLUGIN_HANDLED;
}
new args_num = read_argc() - 1;
if(args_num < 3) {
return PLUGIN_HANDLED;
}
new cvar_info[CvarStruct], args[16];
read_argv(1, args, charsmax(args));
cvar_info[_CvarPunishLevel] = str_to_num(args);
// find this cvar in array
// if exists update cvar flags
read_argv(2, cvar_info[_Cvar], charsmax(cvar_info[_Cvar]));
trim(cvar_info[_Cvar]);
strtolower(cvar_info[_Cvar]);
read_argv(3, args, charsmax(args));
if(args_num == 3) {
if(equal(args, "exist")) {
cvar_info[_CvarFlags] |= CVAR_EXIST;
} else if(equal(args, "!exist")) {
cvar_info[_CvarFlags] |= CVAR_NOT_EXIST;
}
} else if(args_num == 4) {
if(equal(args, "equal") || equal(args, "==") || equal(args, ">=") || equal(args, "<=")) {
cvar_info[_CvarFlags] |= CVAR_EQUAL;
read_argv(4, cvar_info[_CvarValue], charsmax(cvar_info[_CvarValue]));
} else if(equal(args, "!equal") || equal(args, "!=")) {
cvar_info[_CvarFlags] |= CVAR_NOT_EQUAL;
read_argv(4, cvar_info[_CvarValue], charsmax(cvar_info[_CvarValue]));
}
if(equal(args, ">") || equal(args, ">=")) {
cvar_info[_CvarFlags] |= CVAR_ABOVE;
read_argv(4, args, charsmax(args));
cvar_info[_CvarValueAbove] = _:str_to_float(args);
} else if(equal(args, "<") || equal(args, "<=")) {
cvar_info[_CvarFlags] |= CVAR_BELOW;
read_argv(4, args, charsmax(args));
cvar_info[_CvarValueBelow] = _:str_to_float(args);
}
}
if(cvar_info[_CvarFlags]) {
ArrayPushArray(g_aCvarList, cvar_info);
g_iCvarListSize++;
}
return PLUGIN_HANDLED;
}
public command_add_bad_cmd(id, level, cid)
{
if(~get_user_flags(id) & level) {
return PLUGIN_HANDLED;
}
if(read_argc() < 3) {
return PLUGIN_HANDLED;
}
new bad_cmd_info[BadCmdStruct], args[16];
read_argv(1, args, charsmax(args));
bad_cmd_info[_BadCmdPunishLevel] = str_to_num(args);
new command[64], len;
len = read_argv(2, command, charsmax(command));
if(command[0] == '*' && command[len - 1] == '*') {
bad_cmd_info[_BadCmdFlags] = _:BADCMD_ANY;
command[len - 1] = 0;
copy(bad_cmd_info[_BadCmd], charsmax(bad_cmd_info[_BadCmd]), command[1]);
} else if(command[0] != '*' && command[len - 1] != '*') {
bad_cmd_info[_BadCmdFlags] = _:BADCMD_ANY;
copy(bad_cmd_info[_BadCmd], charsmax(bad_cmd_info[_BadCmd]), command);
} else if(command[0] == '*') {
bad_cmd_info[_BadCmdFlags] = _:BADCMD_SUFFIX;
copy(bad_cmd_info[_BadCmd], charsmax(bad_cmd_info[_BadCmd]), command[1]);
} else if(command[len - 1] == '*') {
bad_cmd_info[_BadCmdFlags] = _:BADCMD_PREFIX;
command[len - 1] = 0;
copy(bad_cmd_info[_BadCmd], charsmax(bad_cmd_info[_BadCmd]), command);
}
ArrayPushArray(g_aBadCmdList, bad_cmd_info);
g_iBadCmdListSize++;
return PLUGIN_HANDLED;
}
public command_add_punish(id, level, cid)
{
if(~get_user_flags(id) & level) {
return PLUGIN_HANDLED;
}
if(read_argc() != 3) {
return PLUGIN_HANDLED;
}
new punish_info[PunishStruct], args[16];
read_argv(1, args, charsmax(args));
punish_info[_PunishLevel] = str_to_num(args);
read_argv(2, punish_info[_PunishCmd], charsmax(punish_info[_PunishCmd]));
ArrayPushArray(g_aPunishList, punish_info);
return PLUGIN_HANDLED;
}
public command_add_slowhack_answer(id, level, cid)
{
if(~get_user_flags(id) & level) {
return PLUGIN_HANDLED;
}
new args[64]; read_args(args, charsmax(args));
remove_quotes(args); trim(args);
TrieSetCell(g_tSlowhackAnswer, args, 1);
g_iSlowhackAnswerSize++;
return PLUGIN_HANDLED;
}
#if defined COMMAND_LOGGER
public command_add_cmd_log(id, level, cid)
{
if(~get_user_flags(id) & level) {
return PLUGIN_HANDLED;
}
new args[64]; read_args(args, charsmax(args));
remove_quotes(args); trim(args);
TrieSetCell(g_tCmdLog, args, 1);
return PLUGIN_HANDLED;
}
#endif // COMMAND_LOGGER
public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
is_player_steam[id] = is_user_steam(id);
if(g_iCmdListSize) {
client_answer_check[id] = 0;
set_task(INPUT_DELAY + random_float(0.5, 1.5), "init_cmd_check", id + TASK_CMD_CHECK);
}
if(g_iCvarListSize) {
set_task(INPUT_DELAY + random_float(1.5, 3.5), "init_cvar_check", id + TASK_CVAR_CHECK);
}
get_user_authid(id, player_authid[id], charsmax(player_authid[]));
get_user_ip(id, player_ip[id], charsmax(player_ip[]), 1);
}
public client_disconnected(id)
{
remove_task(id + TASK_CMD_CHECK);
remove_task(id + TASK_FIRST_CMD);
remove_task(id + TASK_CVAR_ANSWER);
remove_task(id + TASK_CVAR_CHECK);
}
public init_cmd_check(id)
{
id -= TASK_CMD_CHECK;
first_check[id] = true;
current_cmd_state[id] = -1;
client_answered[id] = true;
client_cmd_warnings[id] = 0;
generate_string(rnd_str[id], charsmax(rnd_str[]));
client_cmd(id, rnd_str[id]);
set_task(FIRST_ANSWER_MAX_TIME, "check_first_cmd", id + TASK_FIRST_CMD);
}
public check_first_cmd(id)
{
// client without answer
id -= TASK_FIRST_CMD;
if(++client_answer_check[id] >= FIRST_CMD_RECHECKS) {
punishment(id, PUNISH_BAD_CLIENT);
} else {
init_cmd_check(id + TASK_CMD_CHECK);
}
}
public client_command(id)
{
new cmd[64]; read_argv(0, cmd, charsmax(cmd));
if(current_cmd_state[id] >= 0 && equal(cmd, current_cmd[id])) {
client_answered[id] = true;
return PLUGIN_HANDLED;
}
if(g_iSlowhackAnswerSize && !client_answered[id] && TrieKeyExists(g_tSlowhackAnswer, cmd)) {
// slowhack answer
client_answered[id] = true;
return PLUGIN_HANDLED;
}
if(equal(rnd_str[id], cmd)) {
if(first_check[id]) {
first_check[id] = false;
remove_task(id + TASK_FIRST_CMD);
}
// send next cmd
generate_string(rnd_str[id], charsmax(rnd_str[]));
if(client_answered[id]) {
client_answered[id] = false;
if(++current_cmd_state[id] >= g_iCmdListSize) {
set_task(RECHECK_DELAY + random_float(0.0, 30.0), "init_cmd_check", id + TASK_CMD_CHECK);
return PLUGIN_HANDLED;
}
// add delay if too match cmds
// 50-100 cmds for one cycle
if(current_cmd_state[id] && !(current_cmd_state[id] % MAX_CMDS_FOR_LOOP)) {
set_task(LOOP_DELAY, "send_next_cmd", id);
return PLUGIN_HANDLED;
}
} else {
if(++client_cmd_warnings[id] >= MAX_CMD_WARNINGS) {
punishment(id, PUNISH_WRONG_CMD);
return PLUGIN_HANDLED;
}
}
send_next_cmd(id);
return PLUGIN_HANDLED;
}
if(g_iBadCmdListSize) {
new bad_cmd_info[BadCmdStruct];
new result;
new cmd_len = strlen(cmd), bad_cmd_len;
for(new i; i < g_iBadCmdListSize; i++) {
ArrayGetArray(g_aBadCmdList, i, bad_cmd_info);
result = containi(cmd, bad_cmd_info[_BadCmd]);
if(result == -1) {
continue;
}
current_bad_cmd[id] = i;
bad_cmd_len = strlen(bad_cmd_info[_BadCmd]);
// log_to_file(g_szLogFile,"[ACC] found bad cmd: %s, pattern: %s. STEAM: %s", cmd, bad_cmd_info[_BadCmd], player_authid[id]);
// punishment(id, PUNISH_BAD_CMD);
if(!result && cmd_len > bad_cmd_len && bad_cmd_info[_BadCmdFlags] & BADCMD_PREFIX) {
log_player(id, "found prefix bad cmd: ^"%s^", pattern: ^"%s^"", cmd, bad_cmd_info[_BadCmd]);
punishment(id, PUNISH_BAD_CMD);
return PLUGIN_HANDLED;
} else if(cmd_len - result == bad_cmd_len && cmd_len > bad_cmd_len && bad_cmd_info[_BadCmdFlags] & BADCMD_SUFFIX) {
log_player(id, "found suffix bad cmd: ^"%s^", pattern: ^"%s^"", cmd, bad_cmd_info[_BadCmd]);
punishment(id, PUNISH_BAD_CMD);
return PLUGIN_HANDLED;
} else if(bad_cmd_info[_BadCmdFlags] & BADCMD_ANY) {
log_player(id, "found bad cmd: ^"%s^", pattern: ^"%s^"", cmd, bad_cmd_info[_BadCmd]);
punishment(id, PUNISH_BAD_CMD);
return PLUGIN_HANDLED;
}
}
}
#if defined COMMAND_LOGGER
if(!TrieKeyExists(g_tCmdLog, cmd)) {
add_new_cmd(id, cmd);
}
#endif // COMMAND_LOGGER
return PLUGIN_CONTINUE;
}
public send_next_cmd(id)
{
new cmd_info[CommandStruct]; ArrayGetArray(g_aCmdList, current_cmd_state[id], cmd_info);
copy(current_cmd[id], charsmax(current_cmd[]), cmd_info[_Cmd]);
if(is_player_steam[id])
send_director_cmd(id, current_cmd[id]);
else
client_cmd(id, current_cmd[id]);
client_cmd(id, rnd_str[id]);
}
public init_cvar_check(id)
{
id -= TASK_CVAR_CHECK;
current_cvar_state[id] = 0;
client_cvar_warnings[id] = 0;
send_next_cvar(id);
}
public send_next_cvar(id)
{
new cvar_info[CvarStruct]; ArrayGetArray(g_aCvarList, current_cvar_state[id], cvar_info);
query_client_cvar(id, cvar_info[_Cvar], "cvar_callback", 1, _:cvar_info[_CvarFlags]);
set_task(CVAR_ANSWER_TIME, "cvar_answer", id + TASK_CVAR_ANSWER);
}
public cvar_answer(id)
{
id -= TASK_CVAR_ANSWER;
if(++client_cvar_warnings[id] >= CVAR_ANSWER_RECHECKS) {
punishment(id, PUNISH_BLOCK_CVAR_ANSWER);
} else {
send_next_cvar(id);
}
}
public cvar_callback(id, cvar[], value[], params[])
{
remove_task(id + TASK_CVAR_ANSWER);
new CvarFlags:flags = CvarFlags:params[0];
if(flags & (CVAR_EXIST|CVAR_NOT_EXIST)) {
new eq = equal(value, "Bad CVAR request");
if(!eq && flags & CVAR_EXIST) {
// punish for exist cvar
log_player(id, "found bad cvar: ^"%s^"", cvar);
punishment(id, PUNISH_WRONG_CVAR);
return PLUGIN_HANDLED;
}
if(eq && flags & CVAR_NOT_EXIST) {
// punish for not exist cvar
log_player(id, "where is your cvar: ^"%s^"", cvar);
punishment(id, PUNISH_WRONG_CVAR);
return PLUGIN_HANDLED;
}
}
if(current_cvar_state[id] >= ArraySize(g_aCvarList)) {
log_to_file(g_szLogFile, "[ACC] Undefined behavior. Cvar: ^"%s^", value: ^"%s^", flags: %d", cvar, value, flags);
return PLUGIN_HANDLED;
}
new cvar_info[CvarStruct]; ArrayGetArray(g_aCvarList, current_cvar_state[id], cvar_info);
if(flags & (CVAR_EQUAL|CVAR_NOT_EQUAL)) {
if((equali(value, cvar_info[_CvarValue]) || str_to_float(value) == str_to_float(cvar_info[_CvarValue])) && flags & CVAR_EQUAL) {
log_player(id, "found equal cvar value: ^"%s^" %s == %s", cvar, value, cvar_info[_CvarValue]);
punishment(id, PUNISH_WRONG_CVAR);
return PLUGIN_HANDLED;
} else if(flags & CVAR_NOT_EQUAL) {
log_player(id, "found not equal cvar value: ^"%s^" %s != %s", cvar, value, cvar_info[_CvarValue]);
punishment(id, PUNISH_WRONG_CVAR);
return PLUGIN_HANDLED;
}
}
if(flags & CVAR_ABOVE && str_to_float(value) > cvar_info[_CvarValueAbove]) {
log_player(id, "found cvar value: ^"%s^" %s > %.1f", cvar, value, cvar_info[_CvarValueAbove]);
punishment(id, PUNISH_WRONG_CVAR);
return PLUGIN_HANDLED;
}
if(flags & CVAR_BELOW && str_to_float(value) < cvar_info[_CvarValueBelow]) {
log_player(id, "found cvar value: ^"%s^" %s < %.1f", cvar, value, cvar_info[_CvarValueBelow]);
punishment(id, PUNISH_WRONG_CVAR);
return PLUGIN_HANDLED;
}
if(++current_cvar_state[id] >= g_iCvarListSize) {
set_task(RECHECK_DELAY, "init_cvar_check", id + TASK_CVAR_CHECK);
return PLUGIN_HANDLED;
}
send_next_cvar(id);
return PLUGIN_HANDLED;
}
#if defined COMMAND_LOGGER
add_new_cmd(id, cmd[])
{
TrieSetCell(g_tCmdLog, cmd, 1);
new name[32], text[256];
get_user_name(id, name, charsmax(name));
formatex(text, charsmax(text), "// cmd: ^"%s^", player: %s, steamid: %s, ip: %s^nacc_add_cmd_log ^"%s^"", cmd, name, player_authid[id], player_ip[id], cmd);
write_file(g_szCmdLogPath, text);
}
#endif // COMMAND_LOGGER
punishment(id, PunishType:type)
{
// ban, kick, etc...
new punish_index, reason[32];
switch(type) {
case PUNISH_BAD_CLIENT: {
// bad client, protector
log_player(id, "found bad client or protector");
#if defined KICK_BAD_CLIENT
server_cmd("kick #%d Bad Client", get_user_userid(id));
#endif
return;
}
case PUNISH_BLOCK_CVAR_ANSWER: {
new cvar_info[CvarStruct]; ArrayGetArray(g_aCvarList, current_cvar_state[id], cvar_info);
log_player(id, "cvar without answer: %s", cvar_info[_Cvar]);
#if defined KICK_FOR_BLOCK_CVAR_ANSWER
server_cmd("kick #%d Block Cvar", get_user_userid(id));
#endif
return;
}
case PUNISH_WRONG_CMD: {
log_player(id, "found wrong cmd: ^"%s^"", current_cmd[id]);
new cmd_info[CommandStruct]; ArrayGetArray(g_aCmdList, current_cmd_state[id], cmd_info);
punish_index = get_punish_index(cmd_info[_CmdPunishLevel]);
if(punish_index == INVALID_INDEX) {
log_to_file(g_szLogFile, "[ACC] Can't find ^"%d^" punish level for ^"%s^".", cmd_info[_CmdPunishLevel], cmd_info[_Cmd]);
return;
}
copy(reason, charsmax(reason), cmd_info[_Cmd]);
}
case PUNISH_WRONG_CVAR: {
new cvar_info[CvarStruct]; ArrayGetArray(g_aCvarList, current_cvar_state[id], cvar_info);
punish_index = get_punish_index(cvar_info[_CvarPunishLevel]);
if(punish_index == INVALID_INDEX) {
log_to_file(g_szLogFile, "[ACC] Can't find ^"%d^" punish level for ^"%s^".", cvar_info[_CvarPunishLevel], cvar_info[_Cvar]);
return;
}
copy(reason, charsmax(reason), cvar_info[_Cvar]);
}
case PUNISH_BAD_CMD: {
new bad_cmd_info[BadCmdStruct]; ArrayGetArray(g_aBadCmdList, current_bad_cmd[id], bad_cmd_info);
punish_index = get_punish_index(bad_cmd_info[_BadCmdPunishLevel]);
if(punish_index == INVALID_INDEX) {
log_to_file(g_szLogFile, "[ACC] Can't find ^"%d^" punish level for ^"%s^".", bad_cmd_info[_BadCmdPunishLevel], bad_cmd_info[_BadCmd]);
return;
}
copy(reason, charsmax(reason), bad_cmd_info[_BadCmd]);
}
}
new punish_info[PunishStruct]; ArrayGetArray(g_aPunishList, punish_index, punish_info);
new userid[16]; num_to_str(get_user_userid(id), userid, charsmax(userid));
replace(punish_info[_PunishCmd], charsmax(punish_info[_PunishCmd]), "%userid%", userid);
replace(punish_info[_PunishCmd], charsmax(punish_info[_PunishCmd]), "%reason%", reason);
server_cmd("%s", punish_info[_PunishCmd]);
}
log_player(id, message[], any:...)
{
new buffer[256]; vformat(buffer, charsmax(buffer), message, 3);
new name[32]; get_user_name(id, name, charsmax(name));
log_to_file(g_szLogFile, "[ACC] %s. Player: ^"%s^"<%s><%s>", buffer, name, player_authid[id], player_ip[id]);
}
generate_string(str[], len)
{
for(new i; i < len; i++) {
switch(random(2)) {
case 0: str[i] = random_num('A', 'Z');
case 1: str[i] = random_num('a', 'z');
}
}
str[len] = 0;
}
get_punish_index(level)
{
new size = ArraySize(g_aPunishList);
for(new i, punish_info[PunishStruct]; i < size; i++) {
ArrayGetArray(g_aPunishList, i, punish_info);
if(level == punish_info[_PunishLevel]) {
return i;
}
}
return INVALID_INDEX;
}
stock send_director_cmd(id , text[])
{
message_begin( MSG_ONE, SVC_DIRECTOR, _, id );
write_byte( strlen(text) + 2 );
write_byte( 10 );
write_string( text );
message_end();
}
stock bool:is_user_steam(id)
{
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider"))) {
server_cmd("dp_clientinfo %d", id); server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false;
}
return false;
}
Тут я писал, что данная проблема появилась после включения функции логирования команд, однако, сейчас отключив её, проблема осталась.
В этой теме было размещено решение! Перейти к решению.