Поиск Ищу mute + gag (без VTC!)

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
3,256
Реакции
1,436
Помог
121 раз(а)
Ищу плагин в котором есть say /mute и есть amx_gag. Либо по отдельности два этих плагина. Желательно без всяких доп. возможностей, нужно только это. Плагины с VTC не предлагать, сижу на ревойсе.
Есть варианты? :smile3:
 
Сообщения
1,419
Реакции
2,508
Помог
59 раз(а)
Можешь попробовать такой вариант Mute menu
Код:
#include <amxmodx>
#include <reapi>

#pragma semicolon 1

#define PLUGIN_VERSION "30.10.2018"

new g_iMenuPlayers[MAX_PLAYERS+1][32], g_iMenuPosition[MAX_PLAYERS+1];
new bool:g_bMute[MAX_PLAYERS+1][MAX_PLAYERS+1];

public plugin_init()
{
    register_plugin("Mute Menu", PLUGIN_VERSION, "w0w");
    register_clcmd("say /mute", "func_MuteMenu");
    register_clcmd("say_team /mute", "func_MuteMenu");

    register_menucmd(register_menuid("func_MuteMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "func_MuteMenu_Handler");

    RegisterHookChain(RG_CSGameRules_CanPlayerHearPlayer, "refwd_CanPlayerHearPlayer_Pre");
}

public client_putinserver(id)
{
    for(new i = 1; i <= MaxClients; i++)
    {
        g_bMute[id][i] = false;
        g_bMute[i][id] = false;
    }
}

public refwd_CanPlayerHearPlayer_Pre(iReceiver, iSender)
{
    if(g_bMute[iReceiver][iSender])
    {
        SetHookChainReturn(ATYPE_INTEGER, false);
        return HC_SUPERCEDE;
    }
    return HC_CONTINUE;
}

public func_MuteMenu(id, iPage)
{
    if(iPage < 0) return PLUGIN_HANDLED;

    new iPlayerCount;
    for(new i = 1; i <= MaxClients; i++)
    {
        if(!is_user_connected(i) || is_user_bot(i) || is_user_hltv(i))
            continue;

        g_iMenuPlayers[id][iPlayerCount++] = i;
    }

    new i = min(iPage * 8, iPlayerCount);
    new iStart = i - (i % 8);
    new iEnd = min(iStart + 8, iPlayerCount);
    g_iMenuPosition[id] = iPage = iStart / 8;

    new szMenu[MAX_MENU_LENGTH], iMenuItem, iKeys = (1<<9), iPagesNum = (iPlayerCount / 8 + ((iPlayerCount % 8) ? 1 : 0));

    new iLen = formatex(szMenu, charsmax(szMenu), "\yВыберите игрока \R%d/%d^n^n", iPage + 1, iPagesNum);

    for(new a = iStart, iPlayer; a < iEnd; ++a)
    {
        iPlayer = g_iMenuPlayers[id][a];

        if(iPlayer == id)
        {
            ++iMenuItem;
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d#. %n^n", iPlayer);
        }
        else
        {
            iKeys |= (1<<iMenuItem);
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%d. \w%n%s^n", ++iMenuItem,
                iPlayer, g_bMute[id][iPlayer] ? "\y заткнут" : "");
        }
    }

    if(iEnd != iPlayerCount)
    {
        formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y9. \w%s^n\y0. \w%s", "Далее", iPage ? "Назад" : "Выход");
        iKeys |= (1<<8);
    }
    else formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y0. \w%s", iPage ? "Назад" : "Выход");

    show_menu(id, iKeys, szMenu, -1, "func_MuteMenu");
    return PLUGIN_HANDLED;
}

public func_MuteMenu_Handler(id, iKey)
{
    switch(iKey)
    {
        case 8: func_MuteMenu(id, ++g_iMenuPosition[id]);
        case 9: func_MuteMenu(id, --g_iMenuPosition[id]);
        default:
        {
            new iTarget = g_iMenuPlayers[id][(g_iMenuPosition[id] * 8) + iKey];
            if(!is_user_connected(iTarget) || iTarget == id)
                return func_MuteMenu(id, g_iMenuPosition[id]);

            client_print_color(id, print_team_default, "^1Вы %s ^1игрока %n", !g_bMute[id][iTarget] ? "^3заткнули" : "^4сняли ^1кляп с", iTarget);
            g_bMute[id][iTarget] = !g_bMute[id][iTarget];
            func_MuteMenu(id, g_iMenuPosition[id]);
        }
    }
    return PLUGIN_HANDLED;
}
 
Последнее редактирование:
Сообщения
3,256
Реакции
1,436
Помог
121 раз(а)
medusa, #include <WPMGPrintChatColor>
Где взять данный инклуд? там нету.
 
Сообщения
400
Реакции
147
Помог
11 раз(а)
sbelov020,
C++:
/*
WWW         WWWW        WWW        PPPPPPPPPPPPPPP          MMMMMM             MMMMMM           GGGGGGGGGGGG
WWW         WWWW        WWW        PPPPPPPPPPPPPPPP         MMM MMM           MMM MMM         GGG           GGG
WWW         WWWW        WWW        PPP           PPP        MMM  MMM         MMM  MMM         GGG            GGG
 WWW      WWW  WWW      WWW        PPP            PPP       MMM   MMM       MMM   MMM        GGG              GGG
 WWW      WWW  WWW      WWW        PPP            PPP       MMM    MMM     MMM    MMM        GGG              GGG
 WWW      WWW  WWW      WWW        PPP           PPP        MMM     MMM   MMM     MMM       GGG
  WWW    WWW    WWW    WWW         PPPPPPPPPPPPPPPP         MMM      MMM MMM      MMM       GGG
  WWW    WWW    WWW    WWW         PPPPPPPPPPPPPPP          MMM       MMMMM       MMM      GGG
  WWW    WWW    WWW    WWW         PPP                      MMM                   MMM       GGG         GGGGGGGGGGG
   WWW  WWW      WWW  WWW          PPP                      MMM                   MMM       GGG                 GGG
   WWW  WWW      WWW  WWW          PPP                      MMM                   MMM        GGG               GGG
   WWW  WWW      WWW  WWW          PPP                      MMM                   MMM        GGG               GGG
     WWWW          WWWW            PPP                      MMM                   MMM         GGG             GGG
     WWWW          WWWW            PPP                      MMM                   MMM         GGG             GGG
     WWWW          WWWW            PPP                      MMM                   MMM           GGGGGGGGGGGGGGG

TTTTTTTTTTTTTTTTTTTTTTTTTTT
TTTTTTTTTTTTTTTTTTTTTTTTTTT
            TTT
            TTT
            TTT
            TTT                   eeeeeeeeeeee               aaaaaaaaaaaaaaaaaaa          mmm  mmmmmmmmm       mmmmmmmmm
            TTT                  eee        eee             aaa               aaa         mmm mmm     mmm     mmm     mmm
            TTT                 eee          eee                              aaa         mmmmmm       mmm   mmm       mmm
            TTT                eee            eee                             aaa         mmmmm         mmm mmm         mmm
            TTT               eeeeeeeeeeeeeeeeeeee             aaaaaaaaaaaaaaaaaa         mmmm           mm mm           mmm
            TTT                eee                            aaa             aaa         mmm             mmm             mmm
            TTT                 eee                          aaa              aaa         mmm             mmm             mmm
            TTT                  eee                        aaa               aaa         mmm             mmm             mmm
            TTT                   eee        eee             aaa              aaa         mmm             mmm             mmm
            TTT                    eeeeeeeeeeee               aaaaaaaaaaaaaaaaaaa         mmm             mmm             mmm

Print Chat Color by WPMG PRoSToTeM@.
*/

#if defined WPMGPrintChatColorIncluded
    #endinput
#endif

#define WPMGPrintChatColorIncluded

#include <cstrike>

// Максимальное количество %L в сообщении
#define MAX_LANG_ARGS    5

// Цвета сообщений
enum
{
    PRINT_COLOR_GREY,        // Серый
    PRINT_COLOR_RED,        // Красный
    PRINT_COLOR_BLUE,        // Синий
    PRINT_COLOR_PLAYERTEAM    // Цвет команды игрока которому мы отсылаем или цвет команды определённого игрока (если PRINT_COLOR_PLAYERTEAM + id)
};

// Имена команд
static const g_aszTeamNames[][] =
{
    "UNASSIGNED",
    "TERRORIST",
    "CT",
    "SPECTATOR"
};

stock PrintChatColor(pReceiver, iColor = PRINT_COLOR_PLAYERTEAM, const szMessage[], any:...)
{
    // Сообщение
    new szBuffer[256];
    
    // Количество аргументов
    new iArgs = numargs();
    
    // Отсылаем одному игроку
    if (pReceiver)
    {
        // Заменяем все LANG_PLAYER, на ID получателя
        for (new iArg = 3; iArg < iArgs; iArg++)
        {
            // Если аргумент не равен LANG_PLAYER идём дальше
            if (getarg(iArg) != LANG_PLAYER)
                continue;
            
            // Меняем численное значение аргумента
            setarg(iArg, _, pReceiver);
        }
        
        // Форматируем сообщение
        vformat(szBuffer, 255, szMessage, 4);
        
        // Заменяем !y, !t, !g на цвета
        while (replace(szBuffer, 255, "!y", "^1")) {}
        while (replace(szBuffer, 255, "!t", "^3")) {}
        while (replace(szBuffer, 255, "!g", "^4")) {}
        
        // Если цвет PLAYERTEAM
        if (iColor >= PRINT_COLOR_PLAYERTEAM)
            // Отсылаем сообщение игроку, за отправителя берём либо получателя, либо указанного игрока
            UTIL_SayText(MSG_ONE, _, pReceiver, (iColor > PRINT_COLOR_PLAYERTEAM) ? iColor - PRINT_COLOR_PLAYERTEAM : pReceiver, szBuffer);
        else
        {
            // Получаем команду получателя
            new iTeam = _:cs_get_user_team(pReceiver);
            
            // Если команда равна цвету сразу отслылаем сообщение
            if (iTeam % 3 == iColor)
                UTIL_SayText(MSG_ONE, _, pReceiver, pReceiver, szBuffer);
            else
            {
                // Меняем команду (для цвета)
                UTIL_TeamInfo(MSG_ONE, _, pReceiver, pReceiver, g_aszTeamNames[iColor]);
                // Отсылаем сообщение
                UTIL_SayText(MSG_ONE, _, pReceiver, pReceiver, szBuffer);
                // Возвращаем команду
                UTIL_TeamInfo(MSG_ONE, _, pReceiver, pReceiver, g_aszTeamNames[iTeam]);
            }
        }
    }
    // Отсылаем всем
    else
    {
        // Массив для аргументов
        new aiChangeArgs[MAX_LANG_ARGS];
        // Количество аргументов, текущий аргумент
        new iChangeArgs, iArg;
        
        // Записываем все аргументы содержащие LANG_PLAYER
        for (iArg = 3; iArg < iArgs; iArg++)
        {
            // Если аргумент не равен LANG_PLAYER идём дальше
            if (getarg(iArg) != LANG_PLAYER)
                continue;
            
            // Записываем в массив
            aiChangeArgs[iChangeArgs++] = iArg;
            
            // Если достигнут максимум выходим из цикла
            if (iChangeArgs == MAX_LANG_ARGS)
                break;
        }
        
        // Массив из игроков
        new apPlayers[32];
        // Всего игроков
        new iPlayers;
        // Последний игрок
        new pPlayer;
        
        // Получаем игроков
        get_players(apPlayers, iPlayers);
        
        // Делаем цикл из игроков
        for (new i = 0; i < iPlayers; i++)
        {
            // Сохраняем последнего игрока
            pPlayer = apPlayers[i];
            
            // Меняем аргументы LANG_PLAYER на ID игрока
            for (iArg = 0; iArg < iChangeArgs; iArg++)
                setarg(aiChangeArgs[iArg], _, pPlayer);
            
            // Форматируем сообщение
            vformat(szBuffer, 255, szMessage, 4);
            
            // Заменяем !y, !t, !g на цвета
            while (replace(szBuffer, 255, "!y", "^1")) {}
            while (replace(szBuffer, 255, "!t", "^3")) {}
            while (replace(szBuffer, 255, "!g", "^4")) {}
            
            // Если цвет PLAYERTEAM
            if (iColor >= PRINT_COLOR_PLAYERTEAM)
                // Отсылаем сообщение игроку, за отправителя берём либо получателя, либо указанного игрока
                UTIL_SayText(MSG_ONE, _, pPlayer, (iColor > PRINT_COLOR_PLAYERTEAM) ? iColor - PRINT_COLOR_PLAYERTEAM : pPlayer, szBuffer);
            else
            {
                // Получаем команду получателя
                new iTeam = _:cs_get_user_team(pPlayer);
                
                // Если команда равна цвету сразу отслылаем сообщение
                if (iTeam % 3 == iColor)
                    UTIL_SayText(MSG_ONE, _, pPlayer, pPlayer, szBuffer);
                else
                {
                    // Меняем команду (для цвета)
                    UTIL_TeamInfo(MSG_ONE, _, pPlayer, pPlayer, g_aszTeamNames[iColor]);
                    // Отсылаем сообщение
                    UTIL_SayText(MSG_ONE, _, pPlayer, pPlayer, szBuffer);
                    // Возвращаем команду
                    UTIL_TeamInfo(MSG_ONE, _, pPlayer, pPlayer, g_aszTeamNames[iTeam]);
                }
            }
        }
    }
}

// Утилита отсылки SayText
stock UTIL_SayText(iDest, const vecOrigin[3] = {0, 0, 0}, pEntity, pSender, const szMessage[], const szArg1[] = "", const szArg2[] = "")
{
    // Получаем ID сообщения SayText
    static msgSayText;
    
    if (!msgSayText)
        msgSayText = get_user_msgid("SayText");
    
    // Отсылаем SayText
    message_begin(iDest, msgSayText, vecOrigin, pEntity);
    write_byte(pSender);
    write_string(szMessage);
    if (szArg1[0])
    {
        write_string(szArg1);
        
        if (szArg2[0])
            write_string(szArg2);
    }
    message_end();
}

// Утилита отсылки TeamInfo
stock UTIL_TeamInfo(iDest, const vecOrigin[3] = {0, 0, 0}, pEntity, pPlayer, const szTeamName[])
{
    // Получаем ID сообщения TeamInfo
    static msgTeamInfo;
    
    if (!msgTeamInfo)
        msgTeamInfo = get_user_msgid("TeamInfo");
    
    // Отсылаем TeamInfo
    message_begin(iDest, msgTeamInfo, vecOrigin, pEntity);
    write_byte(pPlayer);
    write_string(szTeamName);
    message_end();
}
 
Сообщения
3,256
Реакции
1,436
Помог
121 раз(а)
Izmayl7, спасибо. а чем он лучше client_print_color?
31 Окт 2018
w0w, medusa, спасибо, то что нужно! Тему можно закрывать.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу