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

    Всего на сайте: 12
    Гостей: 8
    Пользователи: - отсутствуют
    Роботы: Mail Ru, Yandex Bot, Mail Ru, Yandex Bot

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 16-08-2011, 16:25 Просмотров: 16619

    client_print текстовое сообщение игрокам

    client_print - Функция выводит сообщение игроку или всем игрокам одновременно.
    Обычно именно с этой функции начинается познание в скриптинге, когда кто то хочет добавить в уже существующий плагин какое то сообщение

    Инфо из amxmodx.inc:
    /* Sends message to player. Set index to 0 to send text globaly. */
    native client_print(index,type,const message[],any:...);


    Синтаксис:
    client_print ( index, type, const message[], ... )

    • index - id игрока от 1 до 32, если указать 0, то сообщение будет выведено всем игрокам
    • type - Куда выводить сообщение:
      • print_chat - Обычный чат
      • print_console - Сообщение выводится вконсоль игрока
      • print_notify - Сообщение выводится в консоль, при включенном режиме разработчика ( на клиенте)
      • print_center - Сообщение по центру экрана

    • const message[] - Само сообщение подготовленное с помощью функции format (вставляем массив с сообщением) или заключенный в кавычки текст "text", так же можно использовать такую запись как в примере ниже.
    • ... - смотри пример ниже ( массивы )


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

    #include <amxmodx>
    #include <amxmisc>
    #include <cstrike>

    #define PLUGIN "Send message to player"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_clcmd("say /chat","in_chat")
        register_clcmd("say /console","in_console")
        register_clcmd("say /notify","in_notify")
        register_clcmd("say /center","in_center")
    }
    public in_chat (id){
        new name[32]
        get_user_name(id,name,31)
        client_print(id,print_chat,"Hello %s!!!",name)
        
    }
    public in_console (id){
        new name[32]
        get_user_name(id,name,31)
        client_print(id,print_console,"Hello %s!!!",name)    
        
    }
    public in_notify (id){
        new name[32]
        get_user_name(id,name,31)
        client_print(id,print_notify,"Hello %s!!!",name)
        
    }
    public in_center (id){
        new name[32]
        get_user_name(id,name,31)
        client_print(id,print_center,"Hello %s!!!",name)
        
    }


    Описание:
    В данном примере разобраны все 4 варианта вывода сообщения, разумеется для каждого варианты мы зарегистрировали свою команду:
    1. say /chat - Выводит сообщение в общий чат с вашим именем
    2. say /console - Выводит сообщение в консоль с вашим именем
    3. say /notify - Выводит сообщение в консоль с вашим именем при включенном режиме developer ( разработчика)
    4. say /center - Выводит сообщение по центру экрана с вашим именем

    Как всегда, ни чего сложного :)
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    client_print текстовое сообщение игрокам
    gavrilyuc

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

    У меня Вопрос насчет : any:...
    Возможно ли создать свою функцию с таким параметром.
    я лично возможно что-то не так делаю или что...
    хотел бы услышать совета или-же услышать что этого нельзя, или же просто пример "божественного" кода.
    Admin

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

    gavrilyuc, свою функцию с возможностью форматирования?
    чет я не въезжаю что ты хочешь...
    --------------------
    артист

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

    Посмотри сток ColorChat
    gavrilyuc

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

    Admin,
    Есть такой как ColorChat или ещё что-то там другое...
    так вот там есть параметр " ... "
    возможно ли создать Функцию с таким параметром? если можно то как получить от туда объекты?
    вот допустим хочу создать функцию которая бы выводила всё что передал туда...
    Приведу пример на C# ( не беспокойтесь код довольно понятен)

    public void PrintF(string s,params object[] pr)
    {
    // pr - Это как раз и есть массив всех переданных параметров
        string message=string.Format(s,pr);
        Console.WriteLine(message);
    }

    Пример Туповат, но суть не в этом нужно получить массив(или как там)
    всех объектов которые я передаю функции.
    Можно пример допустим, ну не знаю, в цикле какое-то дело с ними провести...
    просто есть функция :
    client_cmd(id,print_console,"%L", TEXT, variable1, varialbe2);
    в неё передаются переменные так то из других языков понятно как оно работает. Но я не знаю как доступится к этим объектам которые я передаю в функцию.
    Я смотрел inc ColorChat так там вообще я не понял где он клеит строку, без понятия.
    Admin

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

    gavrilyuc, ничего не понял...
    что именно ты хочешь получить в итоге?
    Создать функцию можно, можно от нее получить ответ...
    --------------------
    gavrilyuc

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

    Админ,
    я хочу передавать в функцию строку, и беск число параметров(Как у client_print)
    пример кода можете показать... если можно.
    а то я смотрел на ColorChat так там не понятно где и мено используются вбитые параметры но главное что он как клеит их в строку...
    артист

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

    #include <amxmodx>

    new g_msg_say_text, g_maxplayers

    public plugin_init()
    {
        register_clcmd("say /status", "show_status")
        
        g_msg_say_text = get_user_msgid("SayText")
        g_maxplayers = get_maxplayers()
    }
    public show_status(id)
    {
        colored_print(id, "health %i armor %i weaponid %i", get_user_health(id), get_user_armor(id), get_user_weapon(id))
    }
    stock colored_print(id, message[], any:...)
    {
        new buffer[512]; vformat(buffer, 511, message, 3)

        if(id)
        {
            if(is_user_connected(id) && !is_user_bot(id))
            {
                message_begin(MSG_ONE, g_msg_say_text, _, id)
                write_byte(id)
                write_string(buffer)
                message_end()
            }
        }
        else
        {
            for(new player = 1; player <= g_maxplayers; player++)
            {
                if(is_user_connected(player) && !is_user_bot(player))
                {
                    message_begin(MSG_ONE, g_msg_say_text, _, player)
                    write_byte(player)
                    write_string(buffer)
                    message_end()
                }
            }
        }
    }


    any:... - И обозначает "бесконечные" подставные аргументы...

    Все аргументы вставляются в строку до передачи в функцию, а это так, чтоб компилятор не ругался...
    gavrilyuc

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

    артист,
    да Слава Тебе Великий и Могучий что обьяснил что аргументы вставляются до передачи в функцию.
    Админ не мог сразу обьяснить?
    Admin

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

    gavrilyuc, что то не нравится? сделай лучше. Я с удовольствием заменю данную статью на твою. более совершенную.
    --------------------
    артист

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

    А, там ещё вот что:

    any: - означает, что перед аргументом может использоваться тэг(Float: или bool: или ещё какой...).

    А ... - это и есть "неизвестное количество параметров".
    fakemeta.inc
    native engfunc(type, any:...)


    engine.inc
    native DispatchKeyValue(...)


    У функций может быть разное количество параметров, в зависимости от константы.

    Информация

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

Реклама