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

    Всего на сайте: 6
    Гостей: 1
    Пользователи: NoPM_N1Ck
    Роботы: Google Bot, Yandex Bot, crawl Bot, Yandex Bot

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 27-01-2012, 00:23 Просмотров: 6202

    SetHamParamFloat Функця изменяет параметры отловленных событий (дробные значения)

    С функциями SetHamParam* жизнь становится проще, так как можно налету изменять определенные параметры, например если вы захотели в какой то момент изменить получаемый урон то нет необходимости блокировать событие, потом изменять количество здоровья и так далее, можно просто увеличить или уменьшит получаемый урон.

    Инфо из hamsandwich.inc:
    /**
    * Sets a parameter on the fly of the current hook.  This has no effect in post hooks.
    * Use this on parameters that are floats.
    *
    * @param which                Which parameter to change.  Starts at 1, and works up from the left to right.  1 is always "this".
    * @param value                The value to change it to.
    */
    native SetHamParamFloat(which, Float:value);


    Синтаксис:
    SetHamParamFloat ( which, Float:value )

    • which - Какой параметр изменить
    • Float:value - Значение параметра
    Так же обращаю ваше внимание на то,что функция будет работать только при отлове PRE события. То есть только:
    RegisterHam(Ham_TakeDamage,"player","damager",0)


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

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

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

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


    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        RegisterHam(Ham_TakeDamage,"player","damager",0)
        
    }
    public damager(victim, inflicator, attacker, Float:damage){
        if(!is_user_connected(attacker))
            return;
        
        if(victim == attacker || !victim)
            return;
        
        SetHamParamFloat(4, damage * 0.1)
        client_print(0,print_chat,"Damage: %.1f health:%d",damage * 0.1,get_user_health(victim))
        
    }


    Описание:
    В данном примере будет изменен наносимый игроком урон. А точнее он будет уменьшен до 10% от нанесенного,то есть нанесли 140, а нанесен будет 14.
    Так как функция работает только при отлове события, зарегистрируем событие получения урона Ham_TakeDamage, и назначим исполняемую функцию.

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

    Параметр урона идет 4, по этому записываем в функцию
    SetHamParamFloat(4,

    Далее какой урон будет нанесен, как мы раньше уже обговорили это будет 10% от нанесенного, записываем:
    SetHamParamFloat(4, damage * 0.1)

    То есть это нанесенный урон умноженный на 0.1. Это и будет 10% он нанесенного урона.

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

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

    Тесть получается что никак что ли не сделать чтобы только на указанного игрока это действовало? Например только на админов? smile
    Admin

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

    А подумать?
    --------------------
    StRiKeR.csF

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

    Стоп, этого не может быть!!
    Хотя что я пишу, сам так делал wink

    Maksovich,
    get_user_flags, тебе что-то говорит?
    Sn1k3rS

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

    StRiKeR.csF,
    Ну я сделал так но почему то все равно не робит
    /* Plugin generated by AMXX-Studio */

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

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


    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        RegisterHam(Ham_TakeDamage,"player","dam

    ager",0)
        
    }
    public damager(victim, inflicator, attacker, Float:damage)
    {
    if(get_user_flags(id) & ADMIN_CVAR)


    if(!is_user_connected(attacker))
    return;  
    if(victim == attacker || !victim)
    return;  
    SetHamParamFloat(4, damage * 106.1)  
    }
    Admin

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

    Экстрасенсы в отпуске...

    if(get_user_flags(id) & ADMIN_CVAR)
    Просто так воздух перегоняем?
    Используй всегда кавычки {} если путаешься делатьс ними и без них....
    --------------------
    Myp3uK159

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

    Блин я просто обожаю этот сайт и автора сайта:)
    Спасибо огромное помогло.

    Косячок был в плагине было просто SetHamParamFloat(4, 0.1)

    Добавил слово damage и все заработало.
    BiG_KiD

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

    а как изменять дробное на целое?
    SetHamParamFloat(4, damage * 106.1) 

    артист

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

    Функция возвращает дробное значение.

    Если ты про 106.1 то не обязательно ставить здесь дробное число.
    При умножении или делении дробных чисел, главное чтобы одно число было дробным.(Здесь это damage)

    float() - целое в дробное
    floatround() - дробное в целое

    Информация

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

Реклама