CMS VoiceChat Addon

Add-on CMS VoiceChat Addon 1.0.1 Beta

Нет прав для скачивания
C++:
/*
* Оригинальный код был написан 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);
}
Назад
Сверху