- Ошибка
-
Не работает блокировка чат и микрафон
- ОС
- Windows
- Amx Mod X
-
AMX Mod X 1.9.0.5271 (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: Jun 24 2020 13:53:37
Built from: https://github.com/alliedmodders/amxmodx/commit/5eea3e5b
Build ID: 5271:5eea3e5b
Core mode: JIT+ASM32
- Билд
-
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.13.0.788-dev
Build date: 07:37:36 Jul 12 2023 (3378)
Build from: https://github.com/dreamstalker/rehlds/commit/f955b07
- ReGamedll
-
ReGameDLL version: 5.21.0.540-dev
Build date: 17:32:55 Oct 25 2021
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/b9cccc6
- Версия Metamod
-
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 15:47:38 Aug 24 2018
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/0cf2f70
- Список метамодулей
-
[ 1] Revoice fail load revoice_mm.dll v0.1.0.34 ini Start Never
[ 2] SafeNameAndChat RUN - safenameandchat.dll v1.2 Beta 3 ini ANY ANY
[ 3] Reunion RUN - reunion_mm.dll v0.1.0.92c ini Start Never
[ 4] AMX Mod X RUN - amxmodx_mm.dll v1.9.0.5271 ini Start ANY
[ 5] ReSemiclip RUN - resemiclip_mm.dll v2.3.9 ini Chlvl ANY
[ 6] WHBlocker RUN - whblocker_mm.dll v1.5.697 ini Chlvl ANY
[ 7] AuthEmu RUN - authemu_amxx.dll v5.2.12.425-dev pl4 ANY Never
[ 8] ReAPI RUN - reapi_amxx.dll v5.22.0.254-dev pl4 ANY Never
[ 9] ReAimDetector RUN - reaimdetector_amxx.dll v0.2.2 pl4 ANY Never
[10] MySQL RUN - mysql_amxx.dll v1.9.0.5271 pl4 ANY ANY
[11] Engine RUN - engine_amxx.dll v1.9.0.5271 pl4 ANY ANY
[12] FakeMeta RUN - fakemeta_amxx.dll v1.9.0.5271 pl4 ANY ANY
[13] Ham Sandwich RUN - hamsandwich_amxx.dll v1.9.0.5271 pl4 ANY ANY
[14] CStrike RUN - cstrike_amxx.dll v1.9.0.5271 pl4 ANY ANY
[15] CSX RUN - csx_amxx.dll v1.9.0.5271 pl4 ANY ANY
[16] GeoIP RUN - geoip_amxx.dll v1.9.0.5271 pl4 ANY ANY
[17] Next Client API RUN - nextclientapi_amxx.dll v1.4.0 pl4 ANY ANY
[18] Fun RUN - fun_amxx.dll v1.9.0.5271 pl4 ANY ANY
[19] SQLite RUN - sqlite_amxx.dll v1.9.0.5271 pl4 ANY ANY
- Список плагинов
-
name version author file status
[ 1] AuthEmu API 1.0 Dev-MS Team authemu.amxx running
[ 2] Stop the Bastards 1.7.0 F@nt0M stop_the_bastar running
[ 3] [190] AC Spectator ESP 20.06.06 SKAJIbnEJIb & Ko ac_esp.amxx running
[ 4] Amx Change Name 1.0 neygomon amx_change_name running
[ 5] Block All Adverts 1.3 neygomon block_all_adver running
[ 6] block ip 0.2 legenda amx_blockip.amx running
[ 7] Admin Life 1.0 M1R0n+ admin_life_1.0. running
[ 8] Admin Base 1.9.0.5271 AMXX Dev Team admin.amxx running
[ 9] Admin Commands 1.9.0.5271 AMXX Dev Team admincmd.amxx running
[ 10] Admin Help 1.9.0.5271 AMXX Dev Team adminhelp.amxx running
[ 11] Slots Reservation 1.9.0.5271 AMXX Dev Team adminslots.amxx running
[ 12] Multi-Lingual System 1.9.0.5271 AMXX Dev Team multilingual.am running
[ 13] Menus Front-End 1.5 neugomon menufront_end.a running
[ 14] Commands Menu 1.9.0.5271 AMXX Dev Team cmdmenu.amxx running
[ 15] Players Menu 1.9.0.5271 AMXX Dev Team plmenu.amxx running
[ 16] Teleport Menu 1.9.0.5271 AMXX Dev Team telemenu.amxx running
[ 17] Maps Menu 1.9.0.5271 AMXX Dev Team mapsmenu.amxx running
[ 18] Scrolling Message 1.9.0.5271 AMXX Dev Team scrollmsg.amxx running
[ 19] Info. Messages 1.9.0.5271 AMXX Dev Team imessage.amxx running
[ 20] Admin Votes 1.9.0.5271 AMXX Dev Team adminvote.amxx running
[ 21] Lite MapChooser 2.6 neygomon mapchooser_ru.a running
[ 22] Map Spawns Editor 1.0.16 iG_os map_spawns_edit running
[ 23] Stats Configuration 1.9.0.5271 AMXX Dev Team statscfg.amxx running
[ 24] Restrict Weapons 1.9.0.5271 AMXX Dev Team restmenu.amxx running
[ 25] CS Misc. Stats 1.9.0.5271 AMXX Dev Team miscstats.amxx running
[ 26] CS Stats Logging 1.9.0.5271 AMXX Dev Team stats_logging.a running
[ 27] Items Restrict 1.1 s1lent items_restrict. running
[ 28] ReAimDetector API 0.2.2 ReHLDS Team reaimdetector.a running
[ 29] Fake Ping 1.1 MeRcyLeZZ/gyxoBk FakePing.amxx running
[ 30] [190] Parachute RBS 20.08.22BE SKAJIbnEJIb & KR parachute_rbs.a running
[ 31] Advanced Ultimate Weap 0.1.0b steelzzz auw.amxx running
[ 32] unknown unknown unknown chat_manager.am running
[ 33] Chat Manager: Custom P 1.0 ImmortalAmxx cm_custom_prefi running
[ 34] Chat Manager: Prefixes 1.0 ImmortalAmxx cm_prefixes.amx running
[ 35] CSStatsX SQL 0.7.4+2fix serfreeman1337 csstatsx_sql.am running
[ 36] Informer 1.0 ImmortalAmxx immortal_inform running
[ 37] unknown unknown unknown immortal_ultima running
[ 38] Vip System 1.0 ImmortalAmxx vip.amxx debug
[ 39] Player Revive 30.01.2023 Oli player_revive.a running
[ 40] [ReAPI] Silly C4 2.0 F@ntoM & Cheap_S reapi_sillyc4.a running
[ 41] Damager 2.0 Prayer damager.amxx running
[ 42] [ReAPI] Healthnade 0.0.11f DEV-CS.RU Commun reapi_healthnad running
[ 43] Autoresponder/Advertis 0.5 MaximusBrood advert.amxx running
[ 44] Reset Score 0.2 Silenttt / CepeH RESET_SCORE_V0. running
[ 45] c4 timer 1.1 cheap_suit c4timer.amxx running
[ 46] Advanced Tracers 0.1 [email protected] advanced_tracer running
[ 47] [182] DemoRecorder RBS 20.06.06 SKAJIbnEJIb demorecorder_rb running
[ 48] lite screen fade 1.0 AcE re_lite_screen_ running
[ 49] [190] Cvar On Map 20.06.06 SKAJIbnEJIb cvar_on_map.amx running
[ 50] SpecList 1.2a FatalisDK speclist_rus.am running
[ 51] Top Round Damage 1.0.4 ReAP Dager* *.* -G- damage_round_on running
[ 52] Injector X 1.0 Deadly|Darkness dd_injectorX.am running
[ 53] Walkguard 1.0.0 mx?! walkguard.amxx running
[ 54] CSO Kill Sounds 1.0.7 Radius (based on cso_kill_sounds running
[ 55] Molotov Cocktail API 2.35 CHEL74 + mx?! molotov_cocktai running
[ 56] Molotov Cocktail Spawn 1.8 mx?! molotov_cocktai running
[ 57] [ReAPI] Death Match Ch 1.0.0 ImmortalAmxx reapi_dm_chestF running
[ 58] Custom Player Models A 0.2.7 F@nt0M & BlackSi custom_player_m running
[ 59] Custom Player Models C 0.2.3 BlackSignature custom_player_m running
[ 60] Custom Player Models T 0.2.1 BlackSignature custom_player_m running
[ 61] ChatAdditions: Core v1.9.4 Sergey Shorokhov ChatAdditions_C debug
[ 62] ChatAdditions: SQLite v1.9.4 Sergey Shorokhov CA_Storage_SQLi debug
[ 63] CA: Anti Flood v1.9.4 Nordic Warrior CA_AntiFlood.am debug
[ 64] CA: Mute v1.9.4 Sergey Shorokhov CA_Mute.amxx debug
[ 65] CA Addon: Death mute v1.9.4 Sergey Shorokhov CA_Addon_DeathM debug
[ 66] CA Addon: Rank restric v1.9.4 steelzzz CA_Addon_RankRe debug
[ 67] CA: VoteGAG 1.0.1-alph Sergey Shorokhov CA_Addon_VoteGa debug
[ 68] CA Addon: Request UnGA v1.9.4 steelzzz CA_Addon_Reques debug
[ 69] CA: Gag v1.9.4 Sergey Shorokhov CA_Gag.amxx debug
[ 70] Advanced Experience Sy 0.5.9 [REA serfreeman1337/s aes_main.amxx running
[ 71] AES: CStrike Addon 0.5.9 [REA serfreeman1337/s aes_exp_cstrike running
[ 72] AES: Admin Tools 0.5.9 [REA serfreeman1337/s aes_exp_editor. running
[ 73] AES: Bonus System 0.5.9 Vega serfreeman1337/s aes_bonus_syste running
[ 74] AES: Bonus CSTRIKE 0.5.9.1 [R serfreeman1337/s aes_bonus_cstri running
[ 75] AES: StatsX 0.5.9 [REA serfreeman1337/s aes_statsx_cstr running
- Автор плагина
- ChatAdditions: Core v1.9.4 Sergey Shorokhov ChatAdditions_CORE.amxx
- Версия плагина
- v1.9.4
- Исходный код
-
#include <amxmodx>
#include <amxmisc>
#include <reapi>
#include <grip>
#include <ChatAdditions>
#pragma ctrlchar '\'
#pragma tabsize 2
#pragma dynamic (8192 + 4096)
enum logType_s {
_Default,
_LogToDir,
_LogToDirSilent
}
new logType_s: ca_log_type,
logLevel_s: ca_log_level = logLevel_Debug,
g_logsPath[PLATFORM_MAX_PATH],
bool: ca_update_notify,
ca_log_autodelete_time
new const LOG_FOLDER[] = "ChatAdditions"
new g_fwdClientSay,
g_fwdClientVoice,
g_fwdClientChangeName,
g_retVal
// FROM https://github.com/s1lentq/ReGameDLL_CS/blob/master/regamedll/game_shared/voice_gamemgr.cpp
// Set to 1 for each player if the player wants to use voice in this mod.
// (If it's zero, then the server reports that the game rules are saying the player can't hear anyone).
new bool: g_PlayerModEnable[MAX_PLAYERS + 1]
// Tells which players don't want to hear each other.
// These are indexed as clients and each bit represents a client (so player entity is bit + 1).
new g_BanMasks[MAX_PLAYERS + 1]
new const g_versionLink[] = "https://api.github.com/repos/"
+ "ChatAdditions/ChatAdditions_AMXX"
+ "/releases/latest"
public stock const PluginName[] = "ChatAdditions: Core"
public stock const PluginVersion[] = CA_VERSION
public stock const PluginAuthor[] = "Sergey Shorokhov"
public stock const PluginURL[] = "https://github.com/ChatAdditions/"
public stock const PluginDescription[] = "A core plugin for control different types of chat."
public plugin_precache() {
register_plugin(PluginName, PluginVersion, PluginAuthor)
create_cvar("ChatAdditions_version", PluginVersion, (FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED))
GetLogsFilePath(g_logsPath, .dir = LOG_FOLDER)
Create_CVars()
AutoExecConfig(true, "ChatAdditions_core", "ChatAdditions")
}
public plugin_init() {
register_clcmd("say", "ClCmd_Say", ADMIN_ALL)
register_clcmd("say_team", "ClCmd_Say", ADMIN_ALL)
RegisterHookChain(RG_CSGameRules_CanPlayerHearPlayer, "CSGameRules_CanPlayerHearPlayer", .post = false)
RegisterHookChain(RG_CBasePlayer_SetClientUserInfoName, "CBasePlayer_SetClientUserInfoName", .post = false)
register_clcmd("VModEnable", "ClCmd_VModEnable", ADMIN_ALL, .FlagManager = false)
register_clcmd("vban", "ClCmd_vban", ADMIN_ALL, .FlagManager = false)
g_fwdClientSay = CreateMultiForward("CA_Client_Say", ET_STOP, FP_CELL, FP_CELL, FP_STRING)
g_fwdClientVoice = CreateMultiForward("CA_Client_Voice", ET_STOP, FP_CELL, FP_CELL)
g_fwdClientChangeName = CreateMultiForward("CA_Client_ChangeName", ET_STOP, FP_CELL, FP_STRING)
CheckAutoDelete()
CA_Log(logLevel_Debug, "Chat Additions: Core initialized!")
set_task_ex(6.274, "_OnConfigsExecuted")
}
public plugin_end() {
DestroyForward(g_fwdClientSay)
DestroyForward(g_fwdClientVoice)
DestroyForward(g_fwdClientChangeName)
}
public _OnConfigsExecuted() {
CheckUpdate()
}
CheckAutoDelete() {
if(ca_log_autodelete_time > 0) {
if(dir_exists(g_logsPath)) {
new logFile[PLATFORM_MAX_PATH]
new dirHandle
new subDirectory[PLATFORM_MAX_PATH]
new deleteTime
deleteTime = get_systime() - (ca_log_autodelete_time * 60 * 60 * 24)
dirHandle = open_dir(g_logsPath, logFile, charsmax(logFile))
if(dirHandle) {
while(next_file(dirHandle, logFile, charsmax(logFile))) {
if(logFile[0] == '.')
continue
if(containi(logFile, ".log") == -1) {
formatex(subDirectory, charsmax(subDirectory), "%s/%s", g_logsPath, logFile)
ReadFolder(deleteTime, subDirectory)
continue
}
}
close_dir(dirHandle)
}
}
}
}
ReadFolder(deleteTime, logPath[]) {
new logFile[PLATFORM_MAX_PATH]
new dirHandle = open_dir(logPath, logFile, charsmax(logFile))
new fileTime
if(dirHandle) {
do
{
if(logFile[0] == '.') {
continue
}
if(containi(logFile, ".log") != -1) {
fileTime = 0
format(logFile, charsmax(logFile), "%s/%s", logPath, logFile)
fileTime = GetFileTime(logFile, FileTime_Created)
if(fileTime < deleteTime) {
unlink(logFile)
}
}
} while(next_file(dirHandle, logFile, charsmax(logFile)))
}
close_dir(dirHandle)
}
Create_CVars() {
bind_pcvar_num(create_cvar("ca_log_type", "1",
.description = fmt("Log file type\n \
0 = log to common amxx log file (logs/L*.log)\n \
1 = log to plugins folder (logs/%s/[plugin name]/L*.log)\n \
2 = silent log to plugins folder (logs/%s/[plugin name]/L*.log)", LOG_FOLDER, LOG_FOLDER),
.has_min = true, .min_val = 0.0,
.has_max = true, .max_val = float(_LogToDirSilent)
),
ca_log_type
)
bind_pcvar_num(create_cvar("ca_log_level", "1",
.description = "Log level\n 0 = disable logs\n 1 = add info messages logs\n 2 = add warinigs info\n 3 = add debug messages",
.has_min = true, .min_val = 0.0,
.has_max = true, .max_val = float(logLevel_Debug)
),
ca_log_level
)
bind_pcvar_num(create_cvar("ca_update_notify", "1",
.description = "Enable update check?\n 0 = disable update checks",
.has_min = true, .min_val = 0.0,
.has_max = true, .max_val = 1.0
),
ca_update_notify
)
bind_pcvar_num(create_cvar("ca_log_autodelete_time", "7",
.description = "The time in days after which the log files should be deleted.\n \
0 - The logs won't be deleted.\n \
> 0 - The logs will be deleted at the time inserted.",
.has_min = true, .min_val = 0.0
),
ca_log_autodelete_time
)
}
public plugin_natives() {
register_library("ChatAdditions_Core")
set_module_filter("ModuleFilter")
set_native_filter("NativeFilter")
register_native("CA_Log", "native_CA_Log")
register_native("CA_PlayerHasBlockedPlayer", "native_CA_PlayerHasBlockedPlayer")
}
public ModuleFilter(const library[], LibType: type) {
return strcmp("grip", library) == 0 ? PLUGIN_HANDLED : PLUGIN_CONTINUE
}
public NativeFilter(const nativeName[], index, trap) {
return strncmp(nativeName, "grip_", 5) == 0 ? PLUGIN_HANDLED : PLUGIN_CONTINUE
}
public ClCmd_Say(const id) {
static message[CA_MAX_MESSAGE_SIZE]
read_argv(0, message, charsmax(message))
new isTeamMessage = (message[3] == '_')
read_args(message, charsmax(message))
remove_quotes(message)
ExecuteForward(g_fwdClientSay, g_retVal, id, isTeamMessage, message)
return (g_retVal == CA_SUPERCEDE) ? PLUGIN_HANDLED : PLUGIN_CONTINUE
}
public CSGameRules_CanPlayerHearPlayer(const listener, const sender) {
if(listener == sender /* || !g_PlayerModEnable[listener] */) {
return HC_CONTINUE
}
ExecuteForward(g_fwdClientVoice, g_retVal, listener, sender)
if(g_retVal == CA_SUPERCEDE) {
SetHookChainReturn(ATYPE_BOOL, false)
return HC_BREAK
}
return HC_CONTINUE
}
public CBasePlayer_SetClientUserInfoName(const id, const infobuffer[], newName[]) {
ExecuteForward(g_fwdClientChangeName, g_retVal, id, newName)
if(g_retVal == CA_SUPERCEDE) {
SetHookChainReturn(ATYPE_BOOL, false)
return HC_SUPERCEDE
}
return HC_CONTINUE
}
public ClCmd_VModEnable(const id) {
if(read_argc() < 2) {
return
}
new arg[32]; read_argv(1, arg, charsmax(arg))
g_PlayerModEnable[id] = bool: (strtol(arg) != 0)
}
public ClCmd_vban(const id) {
if(read_argc() < 2) {
return
}
new arg[32]; read_argv(1, arg, charsmax(arg))
g_BanMasks[id] = strtol(arg, .base = 16)
}
public bool: native_CA_Log(const plugin_id, const argc) {
enum { arg_level = 1, arg_msg, arg_format }
new logLevel_s: level = logLevel_s: get_param(arg_level)
if(ca_log_level < level) {
return false
}
new msg[2048]
vdformat(msg, charsmax(msg), arg_msg, arg_format)
new logsFile[PLATFORM_MAX_PATH]
if(ca_log_type > _Default)
{
new pluginName[32]
get_plugin(plugin_id, pluginName, charsmax(pluginName))
replace(pluginName, charsmax(pluginName), ".amxx", "")
new logsPath[PLATFORM_MAX_PATH]
formatex(logsPath, charsmax(logsPath), "%s/%s", g_logsPath, pluginName)
if(!dir_exists(logsPath)) {
mkdir(logsPath)
}
new year, month, day
date(year, month, day)
formatex(logsFile, charsmax(logsFile), "%s/%s__%i-%02i-%02i.log", logsPath, pluginName, year, month, day)
}
switch(ca_log_type) {
case _LogToDir: log_to_file(logsFile, msg)
case _Default: log_amx(msg)
case _LogToDirSilent: log_to_file_ex(logsFile, msg)
}
return true
}
public bool: native_CA_PlayerHasBlockedPlayer(const plugin_id, const argc) {
enum { arg_receiver = 1, arg_sender }
new receiver = get_param(arg_receiver)
new sender = get_param(arg_sender)
if(CVoiceGameMgr__PlayerHasBlockedPlayer(receiver, sender)) {
return true
}
return false
}
static GetLogsFilePath(buffer[], len = PLATFORM_MAX_PATH, const dir[] = "ChatAdditions") {
get_localinfo("amxx_logs", buffer, len)
strcat(buffer, fmt("/%s", dir), len)
if(!dir_exists(buffer) && mkdir(buffer) == -1) {
set_fail_state("[Core API] Can't create folder! (%s)", buffer)
}
}
static bool: CVoiceGameMgr__PlayerHasBlockedPlayer(const receiver, const sender) {
#define CanPlayerHearPlayer(%0,%1) ( ~g_BanMasks[%0] & ( 1 << (%1 - 1) ) )
if(receiver <= 0 || receiver > MaxClients || sender <= 0 || sender > MaxClients) {
return false
}
return bool: !CanPlayerHearPlayer(receiver, sender)
}
static CheckUpdate() {
if(!ca_update_notify)
return
if(strcmp(CA_VERSION, "CA_VERSION") == 0 || contain(CA_VERSION, ".") == -1) // ignore custom builds
return
if(is_module_loaded("grip") == -1) {
CA_Log(logLevel_Warning, "The `GRip` module is not loaded! The new version cannot be verified.")
CA_Log(logLevel_Warning, "Please install GRip: `https://github.com/In-line/grip` or disable update checks (`ca_update_notify `0`).")
return
}
RequestNewVersion(g_versionLink)
}
static RequestNewVersion(const link[]) {
new GripRequestOptions: options = grip_create_default_options()
new GripBody: body = grip_body_from_string("")
grip_request(
link,
body,
GripRequestTypeGet,
"@RequestHandler",
options
)
grip_destroy_body(body)
grip_destroy_options(options)
}
@RequestHandler() {
new response[8192]
grip_get_response_body_string(response, charsmax(response))
if(contain(response, "tag_name") == -1) {
CA_Log(logLevel_Warning, " > Wrong response! (don't contain `tag_name`). res=`%s`", response)
return
}
static errorBuffer[1024]
new GripJSONValue: json = grip_json_parse_string(response, errorBuffer, charsmax(errorBuffer))
if(json == Invalid_GripJSONValue) {
CA_Log(logLevel_Warning, " > Can't parse response JSON! (error=`%s`)", errorBuffer)
goto END
}
new tag_name[32]
grip_json_object_get_string(json, "tag_name", tag_name, charsmax(tag_name))
if(CmpVersions(CA_VERSION, tag_name) >= 0)
goto END
new html_url[256]
grip_json_object_get_string(json, "html_url", html_url, charsmax(html_url))
NotifyUpdate(tag_name, html_url)
END:
grip_destroy_json_value(json)
}
static NotifyUpdate(const newVersion[], const URL[]) {
CA_Log(logLevel_Info, "\n\t ChatAdditions (%s) has update! New version `%s`.\n\
Download link: `%s`", CA_VERSION, newVersion, URL
)
}
static stock CmpVersions(const a[], const b[]) {
new segmentsA[32][32]
new segmentsB[32][32]
new countA = explode_string(
a[!isdigit(a[0]) ? 1 : 0],
".",
segmentsA, sizeof segmentsA, charsmax(segmentsA[])
)
new countB = explode_string(
b[!isdigit(b[0]) ? 1 : 0],
".",
segmentsB, sizeof segmentsB, charsmax(segmentsB[])
)
for(new i, l = min(countA, countB); i < l; i++) {
new diff = strtol(segmentsA[i]) - strtol(segmentsB[i])
if(diff)
return diff
}
return countA - countB
}
stock log_to_file_ex(const filePath[], message[]) {
new file
new bool:firstTime = true
new date[32]
format_time(date, charsmax(date), "%m/%d/%Y - %H:%M:%S")
static modName[15], amxVersion[15]
if(!modName[0]) {
get_modname(modName, charsmax(modName))
}
if(!amxVersion[0]) {
get_amxx_verstring(amxVersion, charsmax(amxVersion))
}
if((file = fopen(filePath, "r"))) {
firstTime = false
fclose(file)
}
if(!(file = fopen(filePath, "at"))) {
log_error(AMX_ERR_GENERAL, "Can't open \"%s\" file for writing.", filePath)
return PLUGIN_CONTINUE
}
if(firstTime) {
fprintf(file, "L %s: Log file started (file \"%s\") (game \"%s\") (amx \"%s\")\n", date, filePath, modName, amxVersion)
}
fprintf(file, "L %s: %s\n", date, message)
fclose(file)
return PLUGIN_HANDLED
}
почему не блокировало чат+микро? Где моих ошибка. Картинка есть на тест
В этой теме было размещено решение! Перейти к решению.
Download all Attachments
-
569.2 KB Просмотры: 42
-
160.9 KB Просмотры: 44