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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 14-03-2012, 12:53 Просмотров: 5326

    Как отловить событие победы контров, террористов и ничья(RoundDraw)

    Так как Counter-Srtike игра где противостоят две команды, то исход может быть в разных трех случаях, а именно:
    1. Победа Контр Террористов
    2. Победа террористов
    3. Ничья
    Разумеется есть простой и надежный способ отловить данные события.
    Для этого необходимо знать как пользоваться функцией register_event, затем догадаться или подсмотреть, что необходимо отлавливать событие:
    SendAudio

    Plays the specified audio. An example of AudioCode could be "2%!MRAD_rounddraw".
    Name:  SendAudio
    Structure:  byte      SenderID
    string      AudioCode
    short      Pitch

    И найти необходимые для отлова звуки в соответствующей папке
    %/cstrike/sound/radio/


    Теперь давайте попробуем соединить все это воедино:
    register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")

    Что же тут такого страшного понаписано, в обще это все есть в описании функции, но я все же поясню:
    • SendAudio - Что отлавливаем ( событие проигрывания звука радио)
    • t_win - Функция которая будет вызывать при данном событии
    • a - Флаг А - говорит что событие глобальное
    • 2&%!MRAD_terwin - Какой звук радио отлавливаем ( смотри синтаксис функции и описание события)


    Теперь как это выглядит все в месте для всех трех вариантов событий:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "[register_event] SendAudio who win"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        // Событие победы терроров
        register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")

        //Событие победы контров    
        register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin")

        //Событие - ничья     
        register_event("SendAudio", "draw", "a", "2&%!MRAD_rounddraw")
    }
    //Исполняемая функция при победе конров
    public ct_win(){
        client_print(0,print_chat,"CT WIN")
    }
    //Исполняемая функция при победе Терроров
    public t_win(){
        client_print(0,print_chat,"T WIN")
    }
    //Исполняемая функция при ничьей
    public draw(){
        client_print(0,print_chat,"DRAW")
    }


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

    Написав так:
    public t_win(id){

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

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

    Спасибо.Интересная статья
    артист

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

    #include <amxmodx>

    public plugin_init()
    {
        register_event("SendAudio", "functions_a", "a")
        register_event("SendAudio", "functions_b", "b")
        register_event("SendAudio", "functions_c", "c")
        register_event("SendAudio", "functions_d", "d")
        register_event("SendAudio", "functions_e", "e")
    }
    public functions_a(id, audio[], Float:pitch)
    {
        client_print(0, print_chat, "A id = %i sound = %s pitch = %f", id, audio, pitch)
    }
    public functions_b(id, audio[], Float:pitch)
    {
        client_print(0, print_chat, "B id = %i sound = %s pitch = %f", id, audio, pitch)
    }
    public functions_c(id, audio[], Float:pitch)
    {
        client_print(0, print_chat, "C id = %i sound = %s pitch = %f", id, audio, pitch)
    }
    public functions_d(id, audio[], Float:pitch)
    {
        client_print(0, print_chat, "D id = %i sound = %s pitch = %f", id, audio, pitch)
    }
    public functions_e(id, audio[], Float:pitch)
    {
        client_print(0, print_chat, "E id = %i sound = %s pitch = %f", id, audio, pitch)
    }


    Почему-то:
    игроков 2х2
    При старте

    B id = 1 sound = SendAudio pitch = 8.000061
    B id = 3 sound = SendAudio pitch = 8.000061
    B id = 2 sound = SendAudio pitch = 8.000061
    B id = 4 sound = SendAudio pitch = 8.000061

    Победа
    A id = 0 sound = SendAudio pitch = 8.000061
    Admin

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

    1) Не понял что ты пытался сделать.
    2) Где условия отлова?
    3) Что за id в функции, от куда берется и что это?
    4) В чем вопрос?

    --------------------
    артист

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

    3 - https://wiki.alliedmods.net/Half-Life_1_Game_Events#SendAudio
    1,4 - Хотел узнать какие звуки воспроизводятся.
    2 - Поэтому условий нет.

    Почему-то не работает...

    Если так же зарегистрировать CurWeapon

    #include <amxmodx>

    public plugin_init()
    {
        register_event("CurWeapon", "functions", "be")
    }
    public functions(active, wpn, clip)
    {
        client_print(0, print_chat, "active = %i wpn = %i clip = %i", active, wpn, clip)
        client_print(0, print_chat, "active = %i wpn = %i clip = %i", read_data(1), read_data(2), read_data(3))
    }


    Вот и ответ wink
    Переключение оружия с ножа на пистолет:
    active = 1 wpn = 0 clip = 1124073472
    active = 1 wpn = 17 clip = 20
    active = 1 wpn = 0 clip = 1124073472
    active = 0 wpn = 29 clip = -1


    Обратно:
    active = 1 wpn = 0 clip = 1124073472
    active = 0 wpn = 17 clip = 20
    active = 1 wpn = 0 clip = 1124073472
    active = 1 wpn = 29 clip


    Выстрел:
    active = 1 wpn = 17 clip = 8
    active = 1 wpn = 0 clip = 1124073472
    active = 1 wpn = 17 clip = 7
    active = 1 wpn = 0 clip = 1124073472
    active = 1 wpn = 17 clip = 6
    active = 1 wpn = 0 clip = 1124073472
    active = 1 wpn = 17 c


    При смене оружия функция вызывается 2 раза.
    В первом сообщении на какое переключился, второе с какого...

    register_event передаёт в функцию только ид...
    Qvi-re

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

    А событие Target has been saved?
    Что-то нигде не могу найти wassat

    Все понял теперь.
    Space240

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

    А если мне нужно любое из этих событий? То есть мне без разницы какая из 3х ситуаций произошла, функция будет выполняться одна и та же для всех трех случаев.
    Space240

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

    Space240,
    Кажись, понял.

    register_event("SendAudio", "SomeFunction", "a", "2&%!MRAD_terwin, 2&%!MRAD_ctwin, 2&%!MRAD_rounddraw")

    Так?

    Информация

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

Реклама