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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 8-01-2012, 20:36 Просмотров: 4663

    Ham_RemovePlayerItem Удаляет предмет из инвентаря игрока.

    С помощью Ham_RemovePlayerItem можно как удалить предмет из инвентаря игрока, так и отловить это событие. Можно например запретить выбрасывать оружие.

    Инфо из ham_const.inc:
        /**
         * Description:        Removes an item to the player's inventory.
         * Forward params:    function(this, idother);
         * Return type:        Integer.
         * Execute params:    ExecuteHam(Ham_RemovePlayerItem, this, idother);
         */
        Ham_RemovePlayerItem,


    Пример отлова события потери оружия:
    /* Plugin generated by AMXX-Studio */

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

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

    public plugin_init() {
        
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        //Регистрируется событие выброса оружия
        RegisterHam( Ham_RemovePlayerItem , "player" , "f_HamRemovePlayerItem")
        
    }
    //Функция которая вызывается при потери оружия
    public f_HamRemovePlayerItem(id,iditem){
        
        //Сообщение в чат о потери предмета и его айди
        //Обратите внимание что это айди Предмета
        client_print(0,print_chat,"DROP item id:%d",iditem)
        
    }


    Описание:
    При данном событии в функцию передается 2 параметра:
    1. id игрока
    2. id предмета
    Так же функция вызывается когда игрок умирает, а не только сам выбрасывает оружие или бомбу.Ах да, при установке бомбы это событие тоже вызывается.Так как фактически то игрок теряет предмет.

    Удалять же предмет из инвентаря игрока слишком муторно с помощью этой функции, так как необходимо знать айди объекта, есть более простые способы удалить все предметы у игрока. Но если все таки интересно как это делается, вот пример:
    ExecuteHamB(Ham_RemovePlayerItem,id,idItem)

    Можете попробовать сначала выкинуть оружие на сервере, посмотреть его айди и потом вставить этот айди в функцию и посмотреть на результат.
    В моих экспериментах при перезапуске одной и той же карты, айди оружия у меня не менялось (пистолета).
    А вот примерчик:
    /* Plugin generated by AMXX-Studio */

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

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


    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        register_clcmd("say /delpistol","f_delusp")
    }

    public f_delusp(id){
        
        new idItem = 91

        ExecuteHamB(Ham_RemovePlayerItem,id,idItem)
        
    }

    Построчные комментарии не стал писать, думаю сами разберетесь, замените 91 на id объекта из первого примера. ( только проверяйте на той же карте где и получали айди)
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Ham_RemovePlayerItem Удаляет предмет из инвентаря игрока.
    FellomoN

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

    А как заблокировать выброс предмета?
    Admin

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

    Нет времени переводить :)
    #define HAM_IGNORED        1   &n
    bsp;/**< Calls target function, returns normal value */
    #define HAM_HANDLED        2   &n
    bsp;/**< Tells the module you did something, still calls target function and returns normal value */
    #define HAM_OVERRIDE    3    /**< Still calls the target function, but returns whatever is set with SetHamReturn*() */
    #define HAM_SUPERCEDE    4    /**< Block the target call, and use your return value (if applicable) (Set with SetHamReturn*()) */

    Но думаю тут и так будет понятно:
    Block the target call

    Да, если ты хочешь что либо блокировать, то функцию Обязательно надо вызывать до!
    То есть в RegisterHam , аргумент Post должен быть равен нулю.
    Иначе ты попытаешь заблокировать уже свершившееся событие.
    А при Пост 0, функция вызывается как бы после того как игрок дал команду бросить оружие, но оно еще не выброшено.
    --------------------
    FellomoN

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

    Admin, можно пожалуйста пример. К примеру на блок выброса пулемета, не совсем понятно
    Admin

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

    Пример написан выше.Думай.
    --------------------
    Gagaga102

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

    Каждый раз id предмета меняеться и при активации команды сервер падает!!
    Radius

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

    В статье много неточностей. idItem - это индекс entity. Он всегда будет разный, так как entity удаляются и создаются. Также статья не дает представления об инвентаре и как с ним работать. Так что не рекомендуется к прочтению.

    Информация

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

Реклама