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

    Всего на сайте: 10
    Гостей: 5
    Пользователи: - отсутствуют
    Роботы: Google AdSense, Google AdSense, Yandex Bot, crawl Bot, Google AdSense

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 13-10-2012, 22:30 Просмотров: 6218

    HamHook:RegisterHam Функция для сцепления виртуальных функций и объектов по классу (отлов событий)

    С помощью функции RegisterHam, можно отловить огромный список событий в игровом мире. События которые происходят не только с игроком, но и оружием или какими то предметами (entiti), полный список которых превышает сотню, посмотреть же его можно в описании модуля Ham Sandwich или файле ham_const.inc

    Инфо из hamsandwich.inc:
    /**
    * Hooks the virtual table for the specified entity class.
    * An example would be: RegisterHam(Ham_TakeDamage, "player", "player_hurt");
    * Look at the Ham enum for parameter lists.
    *
    * @param function        The function to hook.
    * @param EntityClass    The entity classname to hook.
    * @param callback        The forward to call.
    * @param post            Whether or not to forward this in post.
    * @return                 Returns a handle to the forward.  Use EnableHamForward/DisableHamForward to toggle the forward on or off.
    */
    native HamHook:RegisterHam(Ham:function, const EntityClass[], const Callback[], Post=0);


    Синтаксис:
    RegisterHam(Ham:function, const EntityClass[], const Callback[], Post=0)

    • Ham:function - Функция для сцепления
    • const EntityClass[] - Класс объектов с которым происходит событие ( полный список в описании модуля)
    • const Callback[] - Вызываемая функция
    • Post=0 - Pre/Post Функция будет вызвана До/Или после события.
    Функция возвращает идентификатор созданного форварда, который можно использовать в функциях EnableHamForward/DisableHamForward

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

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

    #include <amxmodx>
    #include <amxmisc>
    #include <hamsandwich>

    #define PLUGIN "[http://amxxmodx.ru] HamHook:RegisterHam"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    public plugin_init() {
        
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        RegisterHam(Ham_Killed,"player","fwd_player_killed",0)
        
    }
    public fwd_player_killed(victim, attacker, corpse){
        
        
        new VictimName[32],AttackerName[32]
        get_user_name(victim,VictimName,31)
        get_user_name(attacker,AttackerName,31)

        //Обычный вывод в чат
        client_print(0,print_chat,"%s killed %s",AttackerName,VictimName)
    }


    Описание:
    Из всего примера больше всего нас интересует всего навсего 1 строчка:
    RegisterHam(Ham_Killed,"player","fwd_player_killed",0)

    Она означат следующее:
    Будем ловить событие(Событие убийство игрока, событие происходит с игроками, если произойдет событие вызвать функцию fwd_player_killed, и вызвать до события)

    Подробнее о событии Ham_killed

    Мини задачка для самоконтроля:
    Отловите и заблокируйте момент когда игрок ставит бомбу.
    Результаты в комментарии и прячьте в спойлер, что бы после первого правильного ответа, те кто хочет попробовать свои силы, не смогли подсмотреть случайно.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    StRiKeR.csF

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

    Admin

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

    StRiKeR.csF ;)
    --------------------

    Информация

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

Реклама