Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Изменение плагина Mutemenu

, Нужна помошь профессионалов :D
Статус пользователя vertex627
сообщение 25.7.2012, 12:11
Сообщение #1
Стаж: 14 лет

Сообщений: 104
Благодарностей: 4
Полезность: < 0

Всем доброго здоровица. Имеется переделаный плагин mutemenu.amxx, изменение состоит в том что теперь можно затыкать всех игроков одновременно. Но когда входит новый игрок он становится не заглушен. Помогите сделать так, если игрок заглушил всех игроков то и все входящие новые игроки автоматически были заглушены.
Скриншот


Код плагина
Код
Код
#include <amxmodx>
#include <fakemeta>

#define MAX_PLAYERS 32

new bool:g_mute[MAX_PLAYERS+1][MAX_PLAYERS+1], bool:g_muteall[MAX_PLAYERS + 1];
new g_menuposition[MAX_PLAYERS+1]
new g_menuplayers[MAX_PLAYERS+1][32]
new g_menuplayersnum[MAX_PLAYERS+1]

new cvar_alltalk
new g_maxclients

public plugin_init()
{
    register_plugin("mute menu", "1.0", "cheap_suit")

    register_clcmd("say", "clcmd_say")
    register_clcmd("say_team", "clcmd_say")

    register_forward(FM_Voice_SetClientListening, "fwd_voice_setclientlistening")
    register_menucmd(register_menuid("mute menu"), 1023, "action_mutemenu")
    
    cvar_alltalk = get_cvar_pointer("sv_alltalk")
    g_maxclients = global_get(glb_maxClients)
}

public client_putinserver(id)
    clear_list(id)
    
public client_disconnect(id)
    clear_list(id)

clear_list(id)
{
    for(new i = 0; i <= g_maxclients; ++i)
        g_mute[id][i] = false
    
    g_muteall[id] = false;
}

public clcmd_say(id)
{
    static say_args[10]
    read_args(say_args, 9)
    remove_quotes(say_args)
    
    if(say_args[0] == '/' && containi(say_args, "mute") != -1)
    {
        display_mutemenu(id, g_menuposition[id] = 0)
        return PLUGIN_HANDLED_MAIN
    }
    return PLUGIN_CONTINUE
}

public fwd_voice_setclientlistening(receiver, sender, listen)
{
    if(receiver == sender)
        return FMRES_IGNORED
        
    if(g_mute[receiver][sender])
    {
        engfunc(EngFunc_SetClientListening, receiver, sender, 0)
        return FMRES_SUPERCEDE
    }
    return FMRES_IGNORED
}

display_mutemenu(id, pos)
{
    if(pos < 0)  
        return
    
    static team[11]
    get_user_team(id, team, 10)
    
    new at = get_pcvar_num(cvar_alltalk)
    get_players(g_menuplayers[id], g_menuplayersnum[id],
    at ? "c" : "ce", at ? "" : team)

      new start = pos * 7
      if(start >= g_menuplayersnum[id])
            start = pos = g_menuposition[id]

      new end = start + 7
    if(end > g_menuplayersnum[id])
            end = g_menuplayersnum[id]
    
    static menubody[512]    
      new len = format(menubody, 511, "\rЗаткнуть игрока^n\dТолько ты его не будешь слышать^n^n")

    static name[32]
    
    new b = 0, i
    new keys = MENU_KEY_0 | MENU_KEY_8
    
      for(new a = start; a < end; ++a)
    {
            i = g_menuplayers[id][a]
            get_user_name(i, name, 31)
        
        if(i == id)
        {
            ++b
            len += format(menubody[len], 511 - len, "\d#  %s %s\w^n", name, g_mute[id][i] ? "(Заткнут)" : "")
        }
        else
        {
            keys |= (1<<b)
            len += format(menubody[len], 511 - len, "%s%d. %s %s\w^n", g_mute[id][i] ? "\y" : "\w", ++b, name, g_mute[id][i] ? "(Заткнут)" : "")
        }
    }
    
    len += format(menubody[len], 511 - len, "^n8. \yЗаткнуть всех игроков\w^n");

      if(end != g_menuplayersnum[id])
    {
        format(menubody[len], 511 - len, "^n9. %s...^n0. %s", "Вперёд", pos ? "Назад" : "Выход")
        keys |= MENU_KEY_9
      }
      else
        format(menubody[len], 511-len, "^n0. %s", pos ? "Назад" : "Выход")
    
      show_menu(id, keys, menubody, -1, "mute menu")
}


public action_mutemenu(id, key)
{
    switch(key)
    {
        case 7:
        {
            new players[32], num;
            
            get_players(players, num);
            
            for(new i; i < num; ++i)
            {
                if(players[i] == id)
                    continue;
                
                g_mute[id][players[i]] = g_mute[id][players[i]] ? false : true;
            }
            
            g_muteall[id] = g_muteall[id] ? false : true;
            
            display_mutemenu(id, g_menuposition[id])

            client_print(id, print_chat, "Вы %s всех", g_muteall[id] ? "заткнули" : "снова слышите");
            
            return PLUGIN_HANDLED;
        }
        
        case 8: display_mutemenu(id, ++g_menuposition[id])
        case 9: display_mutemenu(id, --g_menuposition[id])
            
        default:
        {
            new player = g_menuplayers[id][g_menuposition[id] * 7 + key]
            
            g_mute[id][player] = g_mute[id][player] ? false : true
            display_mutemenu(id, g_menuposition[id])
            
            static name[32]
            get_user_name(player, name, 31)
            client_print(id, print_chat, "Вы %s игрока: %s", g_mute[id][player] ? "заткнули" : "снова слышите", name)
            }
      }
    return PLUGIN_HANDLED
}


Отредактировал: vertex627, - 25.7.2012, 12:23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
eckoecko
сообщение 2.6.2013, 20:23
Сообщение #2
Стаж: 14 лет

Сообщений: 1705
Благодарностей: 266
Полезность: 0

Норм.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 2.6.2013, 21:28
Сообщение #3
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

Код:
public client_putinserver(id)
{
clear_list(id)

new players[32], num;

get_players(players, num);

for(new i; i < num; ++i)
{
if(players[i] == id)
continue;

g_mute[i][id] = g_muteall[i] ? true : false;
}
}


ЗЫ не обратил внимание на дату первого поста, eckoecko получил проценты за некропостинг и флуд.
ЗЫЫ Но может кому и пригодится, отпишитесь если работает, себе тоже поставлю.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: