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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 28-01-2012, 14:56 Просмотров: 3337

    DisableHamForward Функция прекращает работу зарегистрированного ham форварда

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

    Инфо из hamsandwich.inc:

    /**
    * Stops a ham forward from triggering.
    * Use the return value from RegisterHam as the parameter here!
    *
    * @param fwd            The forward to stop.
    */
    native DisableHamForward(HamHook:fwd);


    Синтаксис:
    DisableHamForward ( HamHook:fwd )

    • HamHook:fwd - Возвращаемое значение RegisterHam (при регистрации события)


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

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

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

    #define PLUGIN "[hamsandwich] DisableHamForward"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    new HamHook:g_fwdTakeDamage

    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        g_fwdTakeDamage = RegisterHam(Ham_TakeDamage,"player","damager",0)

        register_clcmd("say /off","f_off")
    }

    public f_off(){
        DisableHamForward(g_fwdTakeDamage)
        client_print(0,print_chat,"Forward TakeDamege is desable")
    }
    public damager(victim, inflicator, attacker, Float:damage){
        if(!is_user_connected(attacker))
            return;
        
        if(victim == attacker || !victim)
            return;
        
        client_print(0,print_chat,"Damage: %.1f health:%d",damage,get_user_health(victim))
        
    }


    Описание:
    В данном примере зарегистрировано событие нанесение урона и для наглядности некоторые данные выводятся в чат игрокам.
    так же зарегистрирована команда say /off, которая вызывает функцию f_off, внутри которой с помощью DisableHamForward мы выключаем работу форварда и сообщение в чат больше не будет показываться, так как не будет работать вызываться вся функция damager

    Обратите внимание что g_fwdTakeDamage это глобальная переменная и значение для нее мы получаем когда регистрируем форвард
    g_fwdTakeDamage = RegisterHam(Ham_TakeDamage,"player","damager",0)
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Monstr™

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

    Это что то пипо unregister_forward(fakemeta)?
    Admin

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

    А подумать?
    --------------------
    FellomoN

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

    где же статьи? =)
    Admin

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

    У меня в голове.
    --------------------
    WelcomeToHell

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

    Нигде не рассказывается про EnableHamForward, так что может кому поможет, впринципе почти всё тоже самое:


    #include <amxmodx>
    #include <hamsandwich>

    #define PLUGIN "DisableHamForward/EnableHamForward"
    #define VERSION "1.0"
    #define AUTHOR "Admin"
    new HamHook:g_fw_Spawn

    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        g_fw_Spawn = RegisterHam(Ham_Spawn,"player","fw_PlayerSpawn_Post", 1)

        register_clcmd("say /off","ham_off")
        register_clcmd("say /on","ham_on")
    }

    public ham_off() DisableHamForward(g_fw_Spawn)
    public ham_on() EnableHamForward(g_fw_Spawn)

    public fw_PlayerSpawn_Post(id)
    {
        if(!is_user_alive(id))
             return;

         client_print(id, print_chat, "Ham_Spawn is enable")
    }

    Информация

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

Реклама