/*
* Оригинальный код был написан zhorzh78 (https://cs-games.club/index.php?threads/gamecms-gagmanager.8/post-3274)
* Мелкие доработки от ApXuTekToR
*/
#include <amxmodx>
#include <gamecms5>
#include <cmsstats_mysql>
#define GetBit(%1,%2) ((%1) & (1 << (%2 & 31)))
#define SetBit(%1,%2) ((%1) |= (1 << (%2 & 31)))
#define ResetBit(%1,%2) ((%1) &= ~(1 << (%2 & 31)))
new const szPluginInfo[][] = {"CMS VoiceChat Addon", "1.0.1 Beta", "GameCMS"};
new g_bitBlocked;
enum cvars {
VOICE_CHAT_MODE,
VOICE_CHAT_VALUE,
VOICE_CHAT_IMMUNITY[16]
}
new Cvar[cvars];
public plugin_init() {
register_plugin(szPluginInfo[0], szPluginInfo[1], szPluginInfo[2]);
register_cvar("cms_gag_voicechat_mode", "1" );
register_cvar("cms_gag_voicechat_value", "2" );
register_cvar("cms_gag_voicechat_immunyty", "t" );
register_dictionary("gamecms_gagmanager.txt");
}
public plugin_cfg() {
new cfgFilePath[PLATFORM_MAX_PATH];
new const fileName[64] = "/gamecms/gamecms_gagmanager.cfg";
get_localinfo("amxx_configsdir", cfgFilePath, charsmax(cfgFilePath));
add(cfgFilePath, charsmax(cfgFilePath), fileName);
if(file_exists(cfgFilePath)) {
server_cmd("exec %s", cfgFilePath);
server_exec();
InitCvars();
} else {
server_print("[%s] File '%s' not found. Plugin Stoped", szPluginInfo[0], cfgFilePath);
set_fail_state("[%s] File '%s' not found. Plugin Stoped", szPluginInfo[0], cfgFilePath);
}
}
public OnCmsStatsPutinserver(iClient, bool:exist, iPlace) {
if(!Cvar[VOICE_CHAT_VALUE])
return;
if(checkAccess(iClient, Cvar[VOICE_CHAT_IMMUNITY]))
return;
new firstPl_value;
switch(Cvar[VOICE_CHAT_MODE]) {
case 0: firstPl_value = cmsstats_get_user_value(iClient, FRAGS);
case 1: firstPl_value = cmsstats_get_user_value(iClient, CMS_LEVEL);
}
if(firstPl_value < Cvar[VOICE_CHAT_VALUE]) {
if(cmsgag_add_user_block(iClient, BLOCK_FUNC_ADD, BLOCK_STATUS_ALL, fmt("Необходимо %d фрагов", Cvar[VOICE_CHAT_VALUE]), TIME_MAP_END_EXPIRING, false))
SetBit(g_bitBlocked, iClient);
}
}
public OnCmsStatsAction(ActType, firstPl, secondPl, wpnId, hitPlace, kds[]) {
if(!Cvar[VOICE_CHAT_VALUE])
return;
if(Cvar[VOICE_CHAT_MODE] == 0) {
if(ActType != FRAGS)
return;
} else if(Cvar[VOICE_CHAT_MODE] == 1) {
if(ActType != CMS_LEVEL)
return;
}
if(checkAccess(firstPl, Cvar[VOICE_CHAT_IMMUNITY]))
return;
if(!(GetBit(g_bitBlocked, firstPl)))
return;
new firstPl_value;
switch(Cvar[VOICE_CHAT_MODE]) {
case 0: firstPl_value = cmsstats_get_user_value(firstPl, FRAGS);
case 1: firstPl_value = cmsstats_get_user_value(firstPl, CMS_LEVEL);
}
if(firstPl_value >= Cvar[VOICE_CHAT_VALUE]) {
if(cmsgag_add_user_block(firstPl, BLOCK_FUNC_REMOVE, BLOCK_STATUS_ALL, .printChat = false)) {
ResetBit(g_bitBlocked, firstPl);
client_print_color(firstPl, 0, "%s ^3Ваш чат разблокирован. Вам необходимо набрать %d %s",
LANG_PLAYER, "CMSGAG_CHAT_PREFIX",
Cvar[VOICE_CHAT_VALUE],
Cvar[VOICE_CHAT_MODE] ? "фрагов" : "уровень");
}
}
}
InitCvars() {
get_cvar_string("cms_gag_voicechat_immunyty", Cvar[VOICE_CHAT_IMMUNITY], charsmax(Cvar[VOICE_CHAT_IMMUNITY]));
Cvar[VOICE_CHAT_MODE] = get_cvar_num("cms_gag_voicechat_mode");
Cvar[VOICE_CHAT_VALUE] = get_cvar_num("cms_gag_voicechat_value");
}
checkAccess(id, const flags[]) {
return (get_user_flags(id) & read_flags(flags));
}
public client_disconnected(id) {
ResetBit(g_bitBlocked, id);
}