Mute on vote (CSGO)

Yura7181

Участник
Сообщения
678
Реакции
594
Всем привет!

Хотел бы узнать можно ли переделать этот плагин так, чтобы он не просто давал мут, а выключал совсем голосовую связь ( sv_voiceenable 0 ) и плюс чат на время голосования и после голосования включал обратно? Именно отключение голосовой связи (и чата), мут не нужен т.к. снимая мут этот плагин конфликтует с другим. При любом голосовании конечно.

Сам плагин:

PHP:
#pragma semicolon 1

// ====[ INCLUDES ]============================================================
#include <sourcemod>
#include <csgo_colors>
#include <basecomm>
#include <sdktools_voice>

// ====[ DEFINES ]=============================================================
#define PLUGIN_VERSION "2.2.0"

// ====[ HANDLES | CVARS ]=====================================================
new Handle:cvarEnabled;
new Handle:cvarImmunity;

// ====[ VARIABLES ]===========================================================
new g_iEnabled;
new bool:g_bImmunity;
new bool:g_bVoteInProgress;
new bool:g_bMuted[MAXPLAYERS + 1];
new bool:g_bGagged[MAXPLAYERS + 1];

// ====[ PLUGIN ]==============================================================
public Plugin:myinfo =
{
    name = "Mute On Vote",
    author = "ReFlexPoison",
    description = "Mute, gag, or silence players after a vote is started",
    version = PLUGIN_VERSION,
    url = "http://forums.alliedmods.net/showthread.php?t=184334"
}

// ====[ FUNCTIONS ]===========================================================
public OnPluginStart()
{
    CreateConVar("sm_muteonvote_version", PLUGIN_VERSION, "Mute On Vote Version", FCVAR_REPLICATED | FCVAR_PLUGIN | FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY);

    cvarEnabled = CreateConVar("sm_muteonvote_enabled", "1", "Enable Mute On Vote\n0 = Disabled\n1 = Mute\n2 = Gag\n3 = Silence", FCVAR_NONE, true, 0.0, true, 3.0);
    g_iEnabled = GetConVarInt(cvarEnabled);
    cvarImmunity = CreateConVar("sm_muteonvote_immunity", "1", "Enable admin immunity\n0 = Disabled\n1 = Enabled", FCVAR_NONE, true, 0.0, true, 1.0);
    g_bImmunity = GetConVarBool(cvarImmunity);
 
    AutoExecConfig(true, "muteonvote");

    HookConVarChange(cvarEnabled, CVarChanged);
    HookConVarChange(cvarImmunity, CVarChanged);

    LoadTranslations("muteonvote.phrases");

    CreateTimer(1.0, Timer_Mute, _, TIMER_REPEAT);
}

public CVarChanged(Handle:hConvar, const String:strOldVal[], const String:strNewVal[])
{
    if(hConvar == cvarEnabled)
    {
        g_iEnabled = GetConVarInt(cvarEnabled);
        for(new i = 1; i <= MaxClients; i++) if(IsValidClient(i))
        {
            UnmutePlayer(i);
            UngagPlayer(i);
        }
    }
    if(hConvar == cvarImmunity)
        g_bImmunity = GetConVarBool(cvarImmunity);
}

// ====[ TIMERS ]==============================================================
public Action:Timer_Mute(Handle:hTimer)
{
    if(g_iEnabled <= 0)
        return Plugin_Continue;

    if(IsVoteInProgress() && !g_bVoteInProgress)
    {
        switch(g_iEnabled)
        {
            case 1:
            {
                CGOPrintToChatAll("\x0E[SM] %t", "muteall");
                LogMessage("%t", "muteall");
            }
            case 2:
            {
                CGOPrintToChatAll("\x0E[SM] %t", "gagall");
                LogMessage("%t", "gagall");
            }
            case 3:
            {
                CGOPrintToChatAll("\x0E[SM] %t", "silenceall");
                LogMessage("%t", "silenceall");
            }
        }
        for(new i = 1; i <= MaxClients; i++) if(IsValidClient(i))
        {
            if(g_bImmunity && IsAdmin(i))
                CGOPrintToChat(i, "\x0E[SM] %t", "immunity");
            else switch(g_iEnabled)
            {
                case 1: MutePlayer(i);
                case 2: GagPlayer(i);
                case 3:
                {
                    MutePlayer(i);
                    GagPlayer(i);
                }
            }
            g_bVoteInProgress = true;
        }
    }
    else if(!IsVoteInProgress() && g_bVoteInProgress)
    {
        CGOPrintToChatAll("\x0E[SM] %t", "restore");
        LogMessage("%t", "restore_server");
        for(new i = 1; i <= MaxClients; i++) if(IsValidClient(i))
        {
            UnmutePlayer(i);
            UngagPlayer(i);
        }
        g_bVoteInProgress = false;
    }
    return Plugin_Continue;
}

// ====[ STOCKS ]==============================================================
stock bool:IsValidClient(iClient, bool:bReplay = true)
{
    if(iClient <= 0 || iClient > MaxClients)
        return false;
    if(!IsClientInGame(iClient))
        return false;
    if(bReplay && (IsClientSourceTV(iClient) || IsClientReplay(iClient)))
        return false;
    return true;
}

stock bool:IsAdmin(iClient)
{
    if(CheckCommandAccess(iClient, "muteonvote_flag", ADMFLAG_GENERIC))
        return true;
    return false;
}

stock MutePlayer(iClient)
{
    g_bMuted[iClient] = false;
    if (!BaseComm_IsClientMuted(iClient))
    {
        g_bMuted[iClient] = true;
        SetClientListeningFlags(iClient, VOICE_MUTED);
    }
}

stock UnmutePlayer(iClient)
{
    if(g_bMuted[iClient])
    {
        SetClientListeningFlags(iClient, VOICE_NORMAL);
        g_bMuted[iClient] = false;
    }
}

stock GagPlayer(iClient)
{
    g_bGagged[iClient] = true;
}

stock UngagPlayer(iClient)
{
    g_bGagged[iClient] = false;
}

stock ClearTimer(&Handle:hTimer)
{
    if(hTimer != INVALID_HANDLE)
    {
        KillTimer(hTimer);
        hTimer = INVALID_HANDLE;
    }
}
// ==================================================================
public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[])
{
    if (client && g_bGagged[client])
    {
        return Plugin_Stop;
    }
 
    return Plugin_Continue;
}

Могу с удовольствием заплатить, но бюджет у меня маленький и только пай пал :)
Спасибо.
 
Последнее редактирование:
Сверху Снизу