Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 3
    Гостей: 3
    Пользователи: - отсутствуют
    Роботы: - отсутствуют

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 17-08-2011, 15:17 Просмотров: 5220

    client_command Вызывается при выполнении любой команды игроком

    client_command - Данная функция вызывается каждый раз, когда игрок выполняет любую команду ( прыжок,присесть, стрелять, или любые другие команды сторонних плагинов)

    Инфо из amxmodx.inc:
    /* Called when client is sending command. */
    forward client_command(id);


    Синтаксис:
    public  client_command ( id )

    Имя команды и ее параметры можно получить с помощью функций: read_argv, read_ars, read_argc,узнать подробнее вы сможете в других материалах.

    Пример:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "Client command"
    #define VERSION "1.0"
    #define AUTHOR "Admin"
      
    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
    }
    public client_command(id){
        
        new Cmd[13];
        if( read_argv(0, Cmd, 12) > 11 ){
            return PLUGIN_CONTINUE
        }
        
        if( equali("drop", Cmd, 0) ){
            client_print(id,print_chat,"Drop weapons is blocked")
            
            new PlayerName[32]
            get_user_name(id,PlayerName,31)
            set_hudmessage(255, 0, 0, 0.04, 0.55, 2, 6.0, 12.0)
            show_hudmessage(id, "Player %s use command %s",PlayerName,Cmd)
            
            return PLUGIN_HANDLED
        }
        if ( equali("buy",Cmd,0)){
            client_print(id,print_chat,"You use cmd Buy (weapon market)")
            return PLUGIN_CONTINUE

        }
        return PLUGIN_CONTINUE
    }


    Описание:
    Функция выполняется сама, при любых действиях игрока, по этому нам нет необходимости регистрировать какие либо команды.
    Допустим что мы хотим отловить 2 события:
    1. Когда игрок выбрасывает оружие - drop
    2. Когда игрок открывает магазин для покупки оружия - buy


    Для начала нам необходимо узнать, какую же команды выполнил игрок, для этого мы зарегистрируем массив Cmd.
    Далее создадим условие, в котором говориться что если команда длиннее 11 символов то плагин продолжает работу и дальше, не проходя по коду дальше.
    Это условие нужно что бы отсечь кучу лишних команд и флуда, так как если вы откроете конфиг, увидите - что все стандартные команды имеют меньшую длину.

    В этом же условии вы получаем имя команды с помощью функции read_argv.
    Идем дальше, и создаем еще одно условие, в котором сравниваем необходимую нам команду с полученным значением с помощью функции equali, о которой так же в другой статье. И если они равны то выполняем код следующий дальше, а именно:
    Пишем игроку в чат что Выбрасывание оружия заблокировано, получаем его имя и выводим Hud сообщение, что игрок ( его имя) использовал команду drop,
    Где имя и команда выводятся из массивов, в которые ране был записанные данные. И возвращаем return PLUGIN_HANDLED - что означает остановку выполнения кодов дальше, что ведет к блокированию выбрасывания оружия.

    Далее аналогично мы создали еще одно условие для команды buy, и если условие верно, то просто выводим сообщение в чат.

    Если же выполнена любая другая команда, то просто ни чего не произойдет. Но вы можете поэкспериментировать и добавить строку:
    client_print(id,print_chat,"Command_name is: %s",Cmd)

    перед последним return PLUGIN_CONTINUE. И тогда в чате вы увидите Все что вы делаете. Только не удивляйтесь "флуду", так как даже не заметный глазу поворот мышкой - это уже несколько команд.

    Обратите внимание:
    Что с помощью данной функции можно поймать только команды не имеющие перед собой символов + или -, например +jump
    Для отлова таких команд нужно использовать или модуль hamsandwich или функцию client_PreThink, но там у каждого способа есть свои недостатки. Но это уже совсем другая история.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Алексей

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: --

    c помощью данной функции можно поймать только команды не имеющие перед собой + или -


    вот напишите про это пожалуйста
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  58  +

    Там целая куча разных методов, что конкретно интересует?
    --------------------
    Алексей

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: --

    Хочу отловить команды имеющие +. Попробовал через client_PreThink, команды в чат повторяются...Существует ли другой способ отлова?
    Допустим вот так:
    if( equali("+attack", Cmd, 0) ){

    понятное дело не работает.
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  58  +

    Тогда для начал надо ознакомится с этим:
    http://amxmodx.ucoz.ru/publ/3-1-0-3
    --------------------

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама