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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 12-09-2011, 14:04 Просмотров: 18580

    register_event Функция регистрации,отлова игровых событий.

    Работа почти всех плагинов основывается на игровых событиях таких как убийство,старт раунда или его конец,получение урона и так далее.
    Разные модули позволяют работать с разными событиями по разному. Мы же сейчас рассмотрим функцию register_event

    Инфо из amxmodx.inc:
    /* Registers event on which a given function will be called
    * Flags:
    * "a" - global event.
    * "b" - specified.
    * "c" - send only once when repeated to other players.
    * "d" - call if is send to dead player.
    * "e" - to alive.
    * NOTE: Due to a long-standing bug that would break compatibility with old plugins,
    *       the client id should be checked for alive/dead state if you use d or e.
    * Examples for conditions:
    * "2=c4" - 2nd parameter of message must be sting "c4".
    * "3>10" - 3rd parameter must be greater then 10.
    * "3!4" - 3rd must be different from 4.
    * "2&Buy" - 2nd parameter of message must contain "Buy" substring.
    * "2!Buy" - 2nd parameter of message can't contain "Buy" substring. */
    native register_event(const event[],const function[],const flags[],const cond[]="", ... );


    Синтаксис:
    register_event ( const event[], const function[], const flags[], [ cond=[], ... ] )

    • const event[] - Какое событие отлавливаем
    • const function[] - Функция которую будем вызывать при наступлении события
    • const flags[] - Флаги:
      • a - Глобальное событие
      • b - Сообщение передано одному игроку
      • c - Передается только один раз когда повторено другим игрокам ( нашел 2 плагина где используется этот флаг, но так и не понял его значения)
      • d - Вызывается только для мертвых игроков
      • e - Вызывается только для живых игроков

    • [ cond=[], ... ] - Дополнительные условия, парочка примеров:
      • "2=c4" - Второй параметр сообщения должен быть "C4"
      • "3>10" - Третий параметр должен быть больше 10
      • "3!4" - Третий параметр не должен быть равен 4
      • "2&Buy" - Второй параметр должен содержать Buy
      • "2!Buy" - Второй параметр сообщения не может содержать Buy



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

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "Function Register Event"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        //Событие смерти игрока и добавляем условие 1>0
        //Первый параметр больше чем ноль, 1 параметр это айди убийцы и он не должен быть равен 0
        //Так как это означает что игрок убился сам или его убила "карта"
        register_event("DeathMsg", "death", "a", "1>0")
        
        //События сброса и подъема бомбы
        register_event("BombDrop", "drop_c4","be")
        register_event("BombPickup", "up_c4","be")
    }

    public death(){ // KillerID,VictimID ,IsHeadshot,TruncatedWeaponName

        new i_Killer = read_data(1)
        new i_Victim = read_data(2)
        new head = read_data(3)
        
        new k_name[32],v_name[32]
        
        get_user_name(i_Killer,k_name,31)
        get_user_name(i_Victim,v_name,31)
        
        client_print(0,print_chat,"%s Killed %s, headshot:%d (1 yes/ 0 no)",k_name,v_name,head)
    }
    public drop_c4(){
        new x = read_data(1)
        new y = read_data(2)
        new z = read_data(3)
        client_print(0,print_chat,"Drop c4")
        client_print(0,print_chat,"X %d Y %d Z %d",x,y,z)
    }
    public up_c4(){
        
        client_print(0,print_chat,"Up c4")
        
    }


    Описание:
    Как вы уже поняли, функция регистрирует События и вызывает определенную функцию.
    В примере мы рассмотрим 3 события:
    1. Событие смерти - В коде плагина уже оставлен комментарий на счет дополнительного параметра ограничения.
      У события смерти, передаются 4 параметра:
      1. KillerID - id Киллера
      2. VictimID - id Жертвы
      3. IsHeadshot - Убийство выстрелом в голову или нет ( 1/0)
      4. TruncatedWeaponName - Имя оружия

      В функции death, мы получаем эти параметры с помощью функции read_data указывая в скобках получаемый параметр.
      Далее имя и выводим сообщение игрокам.
    2. Выбрасывание бомбы и Подъем бомбы, все аналогично, сделал эти два сообщения просто для наглядности


    Так же можете посмотреть здесь:
    http://wiki.alliedmods.net/Half-Life_1_Game_Events
    Весь список с описаниями и какие параметры передаются
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    register_event Функция регистрации,отлова игровых событий.
    alics1996

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

    Можно список const event[]
    Admin

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

    alics1996
    Список всех событий можно получить набрав в консоли сервера meta game,

    Так же можете посмотреть здесь:
    http://wiki.alliedmods.net/Half-Life_1_Game_Events
    Весь список с описаниями и какие параметры передаются
    --------------------
    denis8388

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

    как я это понял!?
    это регистрация моментов и событий т.е. главная функция хода в игре, с помощью ее плагин работает в игре -
    public plugin_init ....
    ... register_event("BombPickup", "up_c4","be")
    }


    а это -
    public death()...
    public drop_c4()..
    public up_c4()..
    сюда записаны функции, то что должно происходить в игре, т.е. присваивают значение к
    register_event("DeathMsg", "death", "a", "1>0")
    register_event("BombDrop", "drop_c4","be")
    register_event("BombPickup", "up_c4","be")

    правильно я это зубрю? или что то я не так понял? подправьте
    Admin

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

    denis8388, правильнее не зубрить и спрашивать каждую мелочь, а поставить эксперимент и вникнуть что от чего зависит. Благо пример уже есть...

    главная функция хода в игре

    что?

    plugin_init функция которая вызывается всегда при старте(загрузке) сервера/плагинов.

    з.ы. тебе бы начать с азов, а то у тебя каша в голове и ты явно не понимаешь что от чего зависит.
    --------------------
    Xbass13

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

    Ура, наконец разобрался почему у меня один плагин некорректно работал. Автор прописал
    register_event("DeathMsg", "hook_death", "a", "1!2" );

    в результате чего игрок с id 2 не получал дополнительные деньги
    Den1ska

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

    Что такое MRAD?
    Radius

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

    "%!MRAD_" - это префикс аудио кодов радиосообщений. Все радиосообщения отправляемые с помощью сообщения 'SendAudio' начинаются с этого префикса.
    uyra1999

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

    Сделайте подобный урок, только чтоб ограничение было не по раундам, а в секундах.
    К примеру, можно использовать раз в 60 секунд. Использовали, и снова ждете 60 секунд.

    Информация

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

Реклама