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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 22-02-2012, 12:49 Просмотров: 6859

    Урок 14. Работа с messagemode

    Буквально на днях на одном из лучших форумов по скриптингу был задан вопрос о том как работать с messagemode, я там пообещал что напишу об этом пару слов, вот и исполняю свое обещание, благо выдалось свободное время на работе. К делу.

    На сколько я понимаю, этот режим дает возможность вводить команды не в консоли, а в самой игре, но не в чате, то есть по сути дела это консоль. И по этому работа с этим режимом точно такая же как с консолью, только тут надо не консоль открыть для ввода команды, а включить данный режим.

    Теперь давайте разберемся на конкретном примере:
    Для начала нам нужно зарегистрировать команду для вызова самого режима messagemode.
    Что бы не нагромождать код в виде меню, сделаем простую команду say /m, обратите внимание что это команда вызывает функцию, а не сам режим сообщения. А так же нужно зарегистрировать команду которая будет выполняться через этот режим у на это amx_message.

    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)

        //Команда вызывающая "ввод сообщения"
        register_clcmd("say /m","message")
        
        //Исполняемая команда для сообщения
        register_clcmd("amx_message","CommandMessage")
    }


    Дальше необходимо разобраться как включить данный режим игроку, на самом деле все просто, в функции которую мы вызвали командой say /m,
    вызывается функция client_cmd, с помощью которой и выполняется команда messagemode amx_message на клиенте.
    public message(id){
        client_cmd(id,"messagemode amx_message")
    }


    Как вы понимаете это уже вызовет режим сообщения и можно будет что то написать, но необходимо еще и понять, что там игрок написал, тут уже совсем все просто, так как далее работа точно такая же как с обычными консольными командами.
    public CommandMessage(id){
        new Args[256]
        read_args(Args,sizeof(Args)-1)
        remove_quotes(Args)
        client_print(id,print_chat,"Messsage:%s",Args)
    }

    Данный кусочек выведет наше сообщение в чат игроку.

    Весь код с дополнительными комментариями целиком:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "[amxxmodx.ru] messagemode"
    #define VERSION "1.0"
    #define AUTHOR "Admin"


    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)

        //Команда вызывающая "ввод сообщения"
        register_clcmd("say /m","message")
        
        //Исполняемая команда для сообщения
        register_clcmd("amx_message","CommandMessage")
    }

    public message(id){
        //Вызхывается режим messagemode с командой amx_message
        //Для которой есть функция CommandMessage
        client_cmd(id,"messagemode amx_message")
    }

    //Функция вызывается в результатае messagemode amx_message
    public CommandMessage(id){

        //Получение что было написано в сообщении
        new Args[256]
        read_args(Args,sizeof(Args)-1)
        
        //Удаление кавычек
        remove_quotes(Args)

        //Вывод того что мы там написали в сообщении
        client_print(id,print_chat,"Messsage:%s",Args)

    }


    На этом думаю можно закончить, самое главное что бы вы поняли принцип работы, а не предназначение функций.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Урок 14. Работа с messagemode
    WaterBall

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

    Во избежание пустых сообщений
    *DEAD* Name :
    я бы добавил
    if(!Args[0])
        return PLUGIN_CONTINUE;


    П.С: При быстром редактировании сообщения не работает тэг [pawn]
    Pain96

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

    А как сделать чтобы можно было вводить только цифры ? Или цифры в определенном диапозоне
    Admin

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

    Выводятся символы, а какие выводить уже совсем другая задача.
    Объяви массив
    с помощью функции format создать необходимое сообщение.
    А в общем, вопрос лишен смысла.
    --------------------
    Mr_ILYAS

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

    Опять же есть одна старая проблема, которую до сих пор еще не решили. Нельзя через messagemode текст послать команду, содержащую символ ' ; ' (точку с запятой), так как он превратится в символ ' , ' (запятую).

    Информация

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

Реклама