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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 19-01-2012, 17:36 Просмотров: 5665

    read_data Функция получает значение аргументов для клиентских сообщений

    Заголовок звучит немного запутанно, но дочитав до конца вы все поймете. Я могу ошибаться в своих суждениях и если у кого то есть аргументированные данные по теме, пишите - с удовольствием дополню статью или даже перепишу, но давайте к сути вопроса.

    Инфо из amxmodx.inc:
    /* Gets value from client messages.
    * When you are asking for string the array and length is needed (read_data(2,name,len)).
    * Integer is returned by function (new me = read_data(3)).
    * Float is set in second parameter (read_data(3,value)). */
    native read_data(value, any:... );


    На сколько я понял, речь идет о сообщениях для клиента, таких как старт раунда или его конец, победа одной из команд и тому подобных, в том числе сообщение о уроне или смерти, логично предположить вопрос о полном списке этих событий и сразу же на него отвечу - полный список событий/сообщений (events).

    Синтаксис:
    read_data ( value, [ ... ] )

    • value - Номер аргумента
    • [ ... ] - если аргумент не простое число... ( далее поймете)


    Тип функции:
    Native

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

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "[amxmodx.inc] read_data"
    #define VERSION "1.0"
    #define AUTHOR "Admin"


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

        //регистрация события смерти
        register_event( "DeathMsg", "EventDeath", "a")
        
    }
    //Какие аргументы получает функция
    // ("receiver", "index_of_killer", "index_of_victim", "headshot", "weapon_name")
    public EventDeath(){
        
        new iKiller = read_data(1)
        new szKName[32]
        get_user_name(iKiller,szKName,31)
        
        new iVictim = read_data(2)
        new szVName[32]
        get_user_name(iVictim,szVName,31)
        
        new iHeadShot = read_data(3)
        
        static sWeapon[255];
        read_data(4, sWeapon, sizeof(sWeapon)-1)
        
        client_print(0,print_chat,"Killer:%s,Victim:%s,HS:%s,Weapon:%s",szKName,szVName,iHeadShot ? "Yes":"No",sWeapon)
        
    }


    Описание:
    В примере выше, зарегистрировано событие смерти, из полного списка событий ( ссылку давал выше) мы можем узнать какие аргументы нам дает данное событие, а именно:
    Name:      DeathMsg
    Structure:  
    byte      KillerID
    byte      VictimID
    byte      IsHeadshot
    string      TruncatedWeaponName

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

    Получение строки:
    new string[32] 
    read_data(argument, string, 31)


    Получение дробного числа:
    new Float:fVal 
    read_data(argument, fVal)


    Получение простого числа:
    read_data(argument)


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

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

    Я в каком-то коде видел аргумент
    read_data(5)

    Что он обозначает?
    Admin

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

    Текст выше прочитать не получилось?

    read_data Функция получает значение аргументов для клиентских сообщений

    read_data(5) - функция получает значение пятого аргумента.
    --------------------
    TpaBka

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

    Admin, это я понял :) Что обозначает этот 5 аргумент?
    read_data(1) - "index_of_killer"
    read_data(2) - "index_of_victim"
    read_data(3) - "headshot"
    read_data(4) - "weapon_name"
    read_data(5) - "receiver" - Что это? Что даёт? Я именно это не понял.
    Admin

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

    тебе сюда:
    http://wiki.amxmodx.org/Half-Life_1_Game_Events
    --------------------
    TpaBka

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

    Что то ничего не нашёл про пятый аргумент...
    LordNAO

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

    я тоже не совсем понял, что значит эти значения read_data(5)
    Вот образец вырезки плагина

    Но откуда там взялись read_data(3) и read_data(5) не могу понять
    Admin

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

    LordNAO, надо посмотреть что отдает событие ( какие аргументы)
    так вот read_data(1) .. read_data(5) их считывают.
    то есть
    function (data1,data2,data3,data4,data5)

    просто в заголовке функции это не указано явно, а функция это считывает.

    --------------------
    LordNAO

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

    Вот вырезка параметров DeathMsg из сайта https://wiki.alliedmods.net/Half-Life_1_Game_Events#DeathMsg
    Name:
    DeathMsg
    Structure:
    byte KillerID
    byte VictimID
    byte IsHeadshot
    string TruncatedWeaponName

    Тут всего 3 параметра и от куда взялся пятый я так и не нашел.
    Дополнительно пользовался и этой статьей http://amxxmodx.ru/core/amxmodxinc/78-register_event-funkciya-registraciotlova-i
    grovyh-sobytiy.html.
    Admin

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

    LordNAO,
    параметра 4 на сколько я вижу:
    1) byte KillerID
    2) byte VictimID
    3) byte IsHeadshot
    4) string TruncatedWeaponName
    А где ты нашел пятый я сам не понимаю.
    Комментарии с основным текстом не путай.
    --------------------
    LordNAO

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

    Admin,
    извиняюсь, я не посчитал string TruncatedWeaponName.
    Дело в том, что в этом плагине, где я его нашел, нет никакого другого события (оно там одно - смерть) и соответственно read_data(5) является лишним условием?
    Вот что меня интересует - автор, который писал этот код ошибся?

    Расшифровка кода будет такой:

    // если убийство было в голову и непонятно что, то...
    if ( (read_data(3) == 1) && (read_data(5) == 0) )
    {
        // убийце насчитается столько-то здоровья
        nHp_add = get_pcvar_num (health_hs_add)
    }

    и если вообще убрать этот аргумент, то изменений в работе плагина не произойдет?

    Информация

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

Реклама