- Ошибка
-
L 09/22/2019 - 22:16:19: Start of error session.
L 09/22/2019 - 22:16:19: Info (map "de_energy") (file "addons/amxmodx/logs/error_20190922.log")
L 09/22/2019 - 22:16:19: [ReAPI] RegisterHookChain: function (FileConsistencyProcess) is not available, ReChecker required.
L 09/22/2019 - 22:16:19: [AMXX] Displaying debug trace (plugin "ms_check.amxx", version "2.0")
L 09/22/2019 - 22:16:19: [AMXX] Run time error 10: native error (native "RegisterHookChain")
L 09/22/2019 - 22:16:19: [AMXX] [0] ms_check.sma::plugin_init (line 74)
L 09/22/2019 - 22:16:19: [ReAPI] Rechecker: isn't available
L 09/22/2019 - 22:16:19: [AMXX] Displaying debug trace (plugin "ms_check.amxx", version "2.0")
L 09/22/2019 - 22:16:19: [AMXX] Run time error 10: native error (native "RegisterQueryFile")
L 09/22/2019 - 22:16:19: [AMXX] [0] ms_check.sma::func_ReadMsHashesFile (line 262)
L 09/22/2019 - 22:16:19: [AMXX] [1] ms_check.sma::plugin_cfg (line 98)
- ОС
- Linux
- Amx Mod X
-
AMX Mod X 1.9.0.5241 (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: Jan 30 2019 07:09:07
Built from: https://github.com/alliedmodders/amxmodx/commit/2110037
Build ID: 5241:2110037
Core mode: JIT+ASM32
- Билд
-
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.6.0.675-dev
Build date: 17:01:39 Jul 30 2019 (1935)
Build from: https://github.com/dreamstalker/rehlds/commit/0c28b70
- ReGamedll
-
ReGameDLL version: 5.7.0.322-dev
Build date: 11:41:14 Jan 13 2019
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/7398bb7
- Версия 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 unlod
[ 1] Reunion RUN - reunion_mm_i386. v0.1.0.9 ini Start Never
[ 2] ReAuthCheck RUN - reauthcheck_mm_i v0.1.6 ini Start Never
[ 3] VoiceTranscoder RUN - VoiceTranscoder. v2017RC3 ini ANY ANY
[ 4] SafeNameAndChat RUN - SafeNameAndChat. v1.1 ini ANY ANY
[ 5] AMX Mod X RUN - amxmodx_mm_i386. v1.9.0.5 ini Start ANY
[ 6] Rechecker RUN - rechecker_mm_i38 v2.5 ini Chlvl ANY
[ 7] ReSemiclip RUN - resemiclip_mm_i3 v2.3.9 ini Chlvl ANY
[ 8] WHBlocker RUN - whblocker_mm_i38 v1.5.696 ini Chlvl ANY
[ 9] ReSRDetector RUN - resrdetector_mm_ v0.1.0 ini Chlvl ANY
[10] MySQL RUN - mysql_amxx_i386. v1.9.0.5 pl5 ANY ANY
[11] Fun RUN - fun_amxx_i386.so v1.9.0.5 pl5 ANY ANY
[12] Engine RUN - engine_amxx_i386 v1.9.0.5 pl5 ANY ANY
[13] FakeMeta RUN - fakemeta_amxx_i3 v1.9.0.5 pl5 ANY ANY
[14] ReAPI RUN - reapi_amxx_i386. v5.6.0.1 pl5 ANY Never
[15] CStrike RUN - cstrike_amxx_i38 v1.9.0.5 pl5 ANY ANY
[16] ReAimDetector RUN - reaimdetector_am v0.2.2 pl5 ANY Never
[17] Ham Sandwich RUN - hamsandwich_amxx v1.9.0.5 pl5 ANY ANY
[18] CSDM2 RUN - csdm_amxx_i386.s v2.1.3c- pl5 ANY ANY
[19] CSX RUN - csx_amxx_i386.so v1.9.0.5 pl5 ANY ANY
19 plugins, 19 running
- Список плагинов
-
[ 1] admin_loader 0.3.7 kanagava admin_loader.am running
[ 2] Admin ESP 0.3 Kost & miRror | admin_esp_mini. running
[ 3] fb_forwards 0.1.7 Kanagava & Realu fb_forwards.amx running
[ 4] FreshBans 1.3.9b kanagava fresh_bans_138_ running
[ 5] ReAimDetector API 0.2.2 ReHLDS Team reaimdetector.a running
[ 6] CSDM Main 2.1.3c CSDM Team csdm_main.amxx running
[ 7] CSDM Equip 2.1.3c CSDM Team csdm_equip.amxx running
[ 8] CSDM Misc 2.1.3c CSDM Team csdm_misc.amxx running
[ 9] CSDM Spawns 2.1.3c CSDM Team csdm_spawn_pres running
[ 10] CSDM Stripper 2.1.3c KWo csdm_stripper.a running
[ 11] CSDM Protection 2.1.3c BAILOPAN csdm_protection running
[ 12] Ultimate Chats Control 5.2(c) neygomon ucc.amxx debug
[ 13] UCC Addon: VoteGAG 1.2a neygomon ucc_votegag.amx running
[ 14] AMX Vampire 0.1 F@nt0M amx_vampire1.am running
[ 15] CSStatsX SQL 0.7.4 serfreeman1337 csstatsx_sql.am running
[ 16] AES: StatsX 0.5+1 serfreeman1337 aes_statsx_cstr running
[ 17] Admin Commands 1.9.0.5241 AMXX Dev Team admincmd.amxx running
[ 18] Menus Front-End 1.5 neugomon menufront_end.a running
[ 19] Commands Menu 1.9.0.5241 AMXX Dev Team cmdmenu.amxx running
[ 20] Players Menu 1.9.0.5241 AMXX Dev Team plmenu.amxx running
[ 21] Maps Menu 1.9.0.5241 AMXX Dev Team mapsmenu.amxx running
[ 22] Admin Votes 1.9.0.5241 Wildness Team adminvote.amxx running
[ 23] DemoRecoder 1.1 neygomon amx_demorec.amx running
[ 24] Parachute No Model 1.4 Name_PNM Parachute_No_Mo running
[ 25] resetscore(ReAPI) 1.0 Phantom resetscore.amxx running
[ 26] unknown unknown unknown damager.amxx running
[ 27] Master Servers Check 2.0 Javekson ms_check.amxx debug
[ 28] Map Manager: Core 3.0.5 Mistrick map_manager_cor running
[ 29] Map Manager: Scheduler 0.1.3 Mistrick map_manager_sch running
[ 30] Map Manager: Rtv 0.1.0 Mistrick map_manager_rtv running
[ 31] Map Manager: Nominatio 0.1.2 Mistrick map_manager_nom running
[ 32] Map Manager: BlockList 0.0.3 Mistrick map_manager_blo running
[ 33] Map Manager: Online so 0.0.2 Mistrick map_manager_onl running
[ 34] Map Manager: Effects 0.0.8 Mistrick map_manager_eff running
[ 35] Map Manager: Informer 0.0.5 Mistrick map_manager_inf running
[ 36] Advert Messages 1.2 neygomon adverts.amxx running
[ 37] [ReAPI] Custom Models 1.6.1 neugomon aacustom_models running
[ 38] [reAPI] Flash Control 1.2 neugomon flash_control.a running
[ 39] Player Status 1.0 Player Status player_status.a running
[ 40] AFK Control 1.4.1 [NoR neygomon afk_control.amx running
[ 41] Show timeleft for CSDM 1.0 neygomon timer.amxx running
[ 42] Chat Manager 1.1.2-16 Mistrick chatmanagers.am running
[ 43] Advanced Experience Sy 0.5.9 Vega serfreeman1337/s aes_main.amxx running
[ 44] AES: CStrike Addon 0.5.9 Vega serfreeman1337/s aes_exp_cstrike running
[ 45] AES: Informer 0.5.9 Vega serfreeman1337/s aes_informer.am running
[ 46] AES: Admin Tools 0.5.9 Vega serfreeman1337/s aes_exp_editor. running
[ 47] Lite VoteBan 1.4 neygomon lite_voteban.am running
47 plugins, 47 running
- Автор плагина
- Javekson
- Версия плагина
- 2.0
- Исходный код
-
#include <amxmodx>
#include <reapi>
#pragma semicolon 1
#define LOGS_MS_UNKNOWN // Ведение журналов для сбора неизвестных хешей
new const HASHES_DIRECTORY[] = "/addons/rechecker"; // Путь до директории хранилище данных
new const HASHES_FILE_NAME[] = "ms_hashes.ini"; // Наименование файла хранилище данных
new const LOGS_FOLDER_NAME[] = "ms_check"; // Наименование каталога ведение журналов
new const LOGS_FILE_NAME__MS_KNOWN[] = "ms_check"; // Наименование журналов для ведение информации известных хешей
#if defined LOGS_MS_UNKNOWN
new const LOGS_FILE_NAME__MS_UNKNOWN[] = "ms_unknown"; // Наименование журналов для ведение информации неизвестных хешей
#endif
new const MS_UNKNOWN[] = "[UNKNOWN]"; // МС UNKNOWN
new const MS_STEAM[] = "[STEAM]"; // МС Steam
new const MS_RECLIENT[] = "[RECLIENT]"; // МС ReClient
const MAX_REGISTER_QUERY_FILE = 32; // Максимальное количество зарегистрированных файлов
const ELLIPSES_ARG = 4;
const NULLED = 0;
const DP_PROTOCOL = 48;
const DP_AUTH_REVEMU = 4;
const MAX_LENGTH__PATH = 64;
const MAX_LENGTH__MS_CONTENT = 256;
const MAX_LENGTH__MS_FILE = 64;
const MAX_LENGTH__MS_HASH = 32;
const MAX_LENGTH__MS_NAME = 32;
const MAX_LENGTH__AUTHID = 64;
const MAX_LENGTH__NAME = 32;
const MAX_LENGTH__IP = 16;
const MAX_LENGTH__TIME = 32;
const MAX_LENGTH__MESSAGE = 512;
enum _: MS_KNOWN_DATA
{
MS_KNOWN__FILE[MAX_LENGTH__MS_FILE],
MS_KNOWN__HASH[MAX_LENGTH__MS_HASH],
MS_KNOWN__NAME[MAX_LENGTH__MS_NAME]
}
enum _: MS_UNKNOWN_DATA
{
MS_UNKNOWN__FILE[MAX_LENGTH__MS_FILE],
MS_UNKNOWN__HASH[MAX_LENGTH__MS_HASH]
}
new g_dpProvider;
new g_dpProtocol;
new g_sLogsDir[MAX_LENGTH__PATH];
new g_sMsHashesFile[MAX_LENGTH__PATH + 32];
new g_aRegisterQueryFile[MAX_REGISTER_QUERY_FILE][MAX_LENGTH__MS_FILE];
new g_eMsKnownData[MAX_PLAYERS + 1][MAX_REGISTER_QUERY_FILE][MS_KNOWN_DATA];
new g_eMsUnknownData[MAX_PLAYERS + 1][MAX_REGISTER_QUERY_FILE][MS_UNKNOWN_DATA];
new bool: g_bMsKnown[MAX_PLAYERS + 1];
new bool: g_bReClient[MAX_PLAYERS + 1];
new Trie: g_tMsHashes;
public plugin_init()
{
register_plugin("Master Servers Check", "2.0", "Javekson");
RegisterHookChain(RC_FileConsistencyProcess, "FileConsistencyProcess", .post = true);
RegisterHookChain(RC_FileConsistencyFinal, "FileConsistencyFinal", .post = true);
}
public plugin_cfg( )
{
formatex(g_sMsHashesFile, charsmax(g_sMsHashesFile), "%s/%s", HASHES_DIRECTORY, HASHES_FILE_NAME);
get_localinfo("amxx_logs", g_sLogsDir, charsmax(g_sLogsDir));
formatex(g_sLogsDir, charsmax(g_sLogsDir), "%s/%s", g_sLogsDir, LOGS_FOLDER_NAME);
if(!dir_exists(g_sLogsDir))
{
mkdir(g_sLogsDir);
}
g_dpProvider = get_cvar_pointer("dp_r_id_provider");
g_dpProtocol = get_cvar_pointer("dp_r_protocol");
g_tMsHashes = TrieCreate();
func_ReadMsHashesFile();
}
public client_authorized(id)
{
g_bMsKnown[id] = false;
g_bReClient[id] = false;
func_ReClientCheck(id);
arrayset(g_eMsKnownData[id][0], NULLED, MAX_REGISTER_QUERY_FILE * MS_UNKNOWN_DATA);
arrayset(g_eMsUnknownData[id][0], NULLED, MAX_REGISTER_QUERY_FILE * MS_UNKNOWN_DATA);
}
public FileConsistencyProcess(const id, const sMsFile[], const sCmd[], const ResourceType: eType, const iMsHash)
{
if(iMsHash)
{
new iRegisterQueryFileSize = sizeof(g_aRegisterQueryFile);
for(new i; i < iRegisterQueryFileSize; i++ )
{
if(equal(g_aRegisterQueryFile[i], sMsFile))
{
new sMsHash[MAX_LENGTH__MS_HASH];
formatex(sMsHash, charsmax(sMsHash), "%s", func_ByteToStringLE(iMsHash));
strtolower(sMsHash);
if(TrieKeyExists(g_tMsHashes, sMsHash))
{
new sMsName[MAX_LENGTH__MS_NAME];
TrieGetString(g_tMsHashes, sMsHash, sMsName, charsmax(sMsName));
formatex(g_eMsKnownData[id][i][MS_KNOWN__FILE], sizeof(g_eMsKnownData[][][MS_KNOWN__FILE]), "%s", sMsFile);
formatex(g_eMsKnownData[id][i][MS_KNOWN__HASH], sizeof(g_eMsKnownData[][][MS_KNOWN__HASH]), "%s", sMsHash);
formatex(g_eMsKnownData[id][i][MS_KNOWN__NAME], sizeof(g_eMsKnownData[][][MS_KNOWN__NAME]), "%s", sMsName);
g_bMsKnown[id] = true;
}
#if defined LOGS_MS_UNKNOWN
else
{
formatex(g_eMsUnknownData[id][i][MS_UNKNOWN__FILE], sizeof (g_eMsUnknownData[][][MS_UNKNOWN__FILE]), "%s", sMsFile);
formatex(g_eMsUnknownData[id][i][MS_UNKNOWN__HASH], sizeof (g_eMsUnknownData[][][MS_UNKNOWN__HASH]), "%s", sMsHash);
}
#endif
break;
}
}
}
}
public FileConsistencyFinal(const id)
{
new sAuthID[MAX_LENGTH__AUTHID];
get_user_authid(id, sAuthID, charsmax(sAuthID));
new sPlayerName[MAX_LENGTH__NAME];
get_user_name(id, sPlayerName, charsmax(sPlayerName));
new sPlayerIP[MAX_LENGTH__IP];
get_user_ip(id, sPlayerIP, charsmax(sPlayerIP), .without_port = true);
if(is_user_steam(id))
{
func_Logging(g_sLogsDir, LOGS_FILE_NAME__MS_KNOWN, "^"%-24s %-32s %-24s %s^"", MS_STEAM, sAuthID, sPlayerIP, sPlayerName);
return PLUGIN_CONTINUE;
}
if(is_user_re_client(id) && !g_bMsKnown[id] /* fungun.net - реклиент, поэтому чекаем сначала его хеш, затем g_bMsKnown */)
{
func_Logging(g_sLogsDir, LOGS_FILE_NAME__MS_KNOWN, "^"%-24s %-32s %-24s %s^"", MS_RECLIENT, sAuthID, sPlayerIP, sPlayerName);
return PLUGIN_CONTINUE;
}
if(g_bMsKnown[id])
{
new iMsKnownDataSize = sizeof(g_eMsKnownData[]);
for(new i; i < iMsKnownDataSize; i++)
{
if(g_eMsKnownData[id][i][MS_KNOWN__HASH])
{
new sMsFile[MAX_LENGTH__MS_FILE];
formatex(sMsFile, charsmax(sMsFile), "%s", g_eMsKnownData[id][i][MS_KNOWN__FILE]);
new sMsHash[MAX_LENGTH__MS_HASH];
formatex(sMsHash, charsmax(sMsHash), "%s", g_eMsKnownData[id][i][MS_KNOWN__HASH]);
new sMsName[MAX_LENGTH__MS_NAME];
formatex(sMsName, charsmax(sMsName), "%s", g_eMsKnownData[id][i][MS_KNOWN__NAME]);
func_Logging(g_sLogsDir, LOGS_FILE_NAME__MS_KNOWN, "^"%-24s %-32s %-24s %-32s %-64s %s^"", sMsName, sAuthID, sPlayerIP, sPlayerName, sMsFile, sMsHash);
}
}
}
else
{
#if defined LOGS_MS_UNKNOWN
new iMsUnknownDataSize = sizeof(g_eMsUnknownData[]);
for(new i; i < iMsUnknownDataSize; i++)
{
if(g_eMsUnknownData[id][i][MS_UNKNOWN__FILE])
{
new sMsFile[MAX_LENGTH__MS_FILE];
formatex(sMsFile, charsmax(sMsFile), "%s", g_eMsUnknownData[id][i][MS_UNKNOWN__FILE]);
new sMsHash[MAX_LENGTH__MS_HASH];
formatex(sMsHash, charsmax(sMsHash), "%s", g_eMsUnknownData[id][i][MS_UNKNOWN__HASH]);
func_Logging(g_sLogsDir, LOGS_FILE_NAME__MS_UNKNOWN, "^"%-64s %-16s %-32s %-24s %s^"", sMsFile, sMsHash, sAuthID, sPlayerIP, sPlayerName);
}
}
#endif
func_Logging(g_sLogsDir, LOGS_FILE_NAME__MS_KNOWN, "^"%-24s %-32s %-24s %s^"", MS_UNKNOWN, sAuthID, sPlayerIP, sPlayerName);
}
return PLUGIN_CONTINUE;
}
public handler_MsQueryFile() {}
func_ReadMsHashesFile()
{
new iFileID = fopen(g_sMsHashesFile, "rt");
new sMsContent[MAX_LENGTH__MS_CONTENT], sMsFile[MAX_LENGTH__MS_FILE], sMsHash[MAX_LENGTH__MS_HASH], sMsName[MAX_LENGTH__MS_NAME];
while(!feof(iFileID))
{
fgets(iFileID, sMsContent, charsmax(sMsContent));
trim(sMsContent);
if(!sMsContent[0] || sMsContent[0] == ';')
{
continue;
}
parse(sMsContent, sMsFile, charsmax(sMsFile), sMsHash, charsmax(sMsHash), sMsName, charsmax(sMsName));
strtolower(sMsHash);
new iRegisterQueryFileSize = sizeof(g_aRegisterQueryFile);
for(new i; i < iRegisterQueryFileSize; i++)
{
if(g_aRegisterQueryFile[i][0])
{
if(equal(g_aRegisterQueryFile[i], sMsFile))
{
TrieSetString(g_tMsHashes, sMsHash, sMsName);
break;
}
}
else
{
RegisterQueryFile(sMsFile, "handler_MsQueryFile", RES_TYPE_HASH_ANY);
TrieSetString(g_tMsHashes, sMsHash, sMsName);
g_aRegisterQueryFile[i] = sMsFile;
break;
}
}
}
fclose(iFileID);
}
func_ReClientCheck(const id)
{
server_cmd("dp_clientinfo %d", id);
server_exec();
if(get_pcvar_num(g_dpProtocol) == DP_PROTOCOL)
{
if(get_pcvar_num(g_dpProvider) == DP_AUTH_REVEMU)
{
query_client_cvar(id, "voice_quality", "QueryClientCvar_VoiceQuality");
}
}
}
public QueryClientCvar_VoiceQuality(const id, const sCvar[], const sValue[])
{
g_bReClient[id] = bool:(!equali(sValue, "Bad CVAR request"));
}
stock bool: is_user_re_client(id)
{
return g_bReClient[id];
}
stock func_ByteToStringLE(iMsHash)
{
new sMsHash[MAX_LENGTH__MS_HASH];
formatex(sMsHash, charsmax(sMsHash), "%02X%02X%02X%02X", (iMsHash) & 0xff, (iMsHash >> 8) & 0xff, (iMsHash >> 16) & 0xff, (iMsHash >> 24) & 0xff);
return sMsHash;
}
stock func_Logging(const sLogsDir[], const sFileName[], const sMessage[], any:...)
{
new sFmtMsg[MAX_LENGTH__MESSAGE];
vformat(sFmtMsg, charsmax(sFmtMsg), sMessage, ELLIPSES_ARG);
new sFileTime[MAX_LENGTH__TIME];
get_time("%d.%m.%Y", sFileTime, charsmax(sFileTime));
new sLogFile[MAX_LENGTH__PATH + 32];
formatex(sLogFile, charsmax(sLogFile), "%s/%s_%s.log", sLogsDir, sFileName, sFileTime);
new iFileID = fopen(sLogFile, "at");
new sRecordTime[MAX_LENGTH__TIME];
get_time("%d.%m.%Y - %H:%M:%S", sRecordTime, charsmax(sRecordTime));
fprintf(iFileID, "^"%s^" %s^n", sRecordTime, sFmtMsg);
fclose(iFileID);
}
Помогите исправить ошибку. Заранее спасибо!)
В этой теме было размещено решение! Перейти к решению.
Вложения
-
10.2 KB Просмотры: 367