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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Diablo Дата: 27-04-2015, 18:07 Просмотров: 1988

    grenade_throw Функция вызывается в момент броска гранаты

    Функция grenade_throw вызывается в момент броска гранаты игроком. Функция передает три параметра:

    1. Индекс игрока, бросивший гранату.
    2. Индекс той самой гранаты.
    3. Тип той самой гранаты.


    Инфо из csx.inc
    forward grenade_throw(index,greindex,wId);


    Синтаксис:
    public grenade_throw(iPlayer, iGrenade, iGrenadeType)


    • iPlayer - индекс игрока, бросивший гранату.
    • iGrenade - индекс гранаты.
    • iGrenadeType - тип гранаты.


    Пример:
    #include <amxmodx>
    #include <csx>

    #define PLUGIN "Test function grenade_throw for amxxmodx.ru"
    #define VERSION "1.0"
    #define AUTHOR "Diablo"

    public plugin_init()
        register_plugin(PLUGIN, VERSION, AUTHOR);

    public grenade_throw(iPlayer, iGrenade, iGrenadeType)
    {
        if (!is_user_connected(iPlayer))
            return 0;
        
        if (iGrenadeType == CSW_HEGRENADE)
            client_print(iPlayer, print_center, "You throwed he_grenade");
        
        return 1;
    }
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    grenade_throw Функция вызывается в момент броска гранаты
    igas

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

    не верно описаны аргументы форварда, ниже приведен пример
    /*
        * index - индекс игрока
        * greindex - индекс брошенной гранаты (всегда меняется)
        * wId - индекс гранаты:
        * #define CSW_HEGRENADE       4
        * #define CSW_SMOKEGRENADE    9
        * #define CSW_FLASHBANG       25
    */

    public grenade_throw(pId, greId, wId)
    {
        if(!is_user_connected(pId))
            return PLUGIN_CONTINUE

        static szGrenadeName[20], szName[32]

        get_user_name(pId, szName, charsmax(szName))
        get_weaponname(wId, szGrenadeName, charsmax(szGrenadeName))
        replace(szGrenadeName, charsmax(szGrenadeName), "weapon_", "")
        
        // Server print
        server_print("# %s threw a grenade: %s", szName, szGrenadeName)
        server_print("# greId: %d | wId: %d", greId, wId)
        
        // Player print
        client_print(0, print_chat, "# %s threw a grenade: %s", szName, szGrenadeName)
        client_print(0, print_chat, "# greId: %d | wId: %d", greId, wId)
        
        
    /*     Console print (debug)
        # Rjava threw a grenade: hegrenade
        # greId: 168 | wId: 4
        
        # Rjava threw a grenade: flashbang
        # greId: 166 | wId: 25
        
        # Rjava threw a grenade: smokegrenade
        # greId: 166 | wId: 9
        
        # Rjava threw a grenade: flashbang
        # greId: 167 | wId: 25
    */
        return PLUGIN_HANDLED
    }


    Admin

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

    igas, я чего то не догоняю, а в чем разница твоего примера и статьи?

    И не стыковка:
    Внимание! У Вас нет прав для просмотра скрытого текста.


    # Rjava threw a grenade: flashbang
    # greId: 166 | wId: 25

    # Rjava threw a grenade: smokegrenade
    # greId: 166 | wId: 9
    --------------------
    Diablo

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

    igas, с чего бы ради индексу гранаты постоянно меняться?
    igas

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

    вы скомпилируйте мой пример и посмотрите логи winked
    he может быть 166, в следующий бросок 171, в третий 167 и т.д, как выше товарищ Admin написал, флеш имеет 166, дым 166, следующий бросок флеш уже 167
    /*     Console print (debug)
        # Rjava threw a grenade: hegrenade
        # greId: 168 | wId: 4
        
        # Rjava threw a grenade: flashbang
        # greId: 166 | wId: 25
        
        # Rjava threw a grenade: smokegrenade
        # greId: 166 | wId: 9
        
        # Rjava threw a grenade: flashbang
        # greId: 167 | wId: 25
    */
    1й флеш 166, второй уже 167, идет беспорядочность
    Admin

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

    Сдается мне что id гранаты в данном случае - айди объекта в игровом мире, и если айди освобождается, его заменяет новый созданный объект (предположение)

    А то что он поменяется не имеет ни какого смысла, а нужен он что бы работать непосредственно с объектом гранаты когда она уже не принадлежит игроку, а становится "самостоятельным" объектом в мире.

    И если уж на то пошло, то если будет 32 игрока на сервере и они будут по очереди кидать гранаты разных типов, то все три аргумента будут почти всегда меняться.

    З.ы. зачем мне компилировать плагин? что бы увидеть тоже самое что уже дважды написано?
    --------------------
    Leonidddd

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

    Самое забавное то, что этот форвард работает в кс 1.6, хотя он настроен под dod.
    Можно глянуть gamedll, чтобы точно сказать, почему индекс энтити гранаты не поменялся.
    артист

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

    Потому, что предыдущий объект был удалён...
    Если 2 игрока будут кидать по очереди, тогда у первого будет например 125, у второго 126.

    Информация

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

Реклама