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

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

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 20-12-2011, 00:37 Просмотров: 4267

    Отлов событий "конец карты" и "конец плагина"

    Недавно мне потребовалось отыскать событие которое происходит почти в самый последний момент перед сменой карты «конец карты», но при этом что бы игроки были еще на сервере.
    Найти такой момент было принципиально важно, а так же было важно и само событие смены карты или конец работы плагина ( выключение сервера ). Разобравшись с этими двумя событиями, поделюсь полученной информацией с вами, и начнем мы с события, которое наступает раньше.

    Событие «конец карты».

    Не буду долго грузить как я отыскал это событие, сразу же покажу как это событие зарегистрировать и назначить функцию.
    register_event("30", "ChangeMap", "a")
    Данное событие глобальное и ни каких полезных аргументов мы не получим.
    По этому в исполняемой функции, если вы хотите произвести действие над игроками – используйте циклы. Если вы используете стандартный плагин nextmap, то он в этот момент меняет квар mp_chattime и не только, вот вся функция:

    public changeMap()
    {
        new string[32]
        new Float:chattime = get_cvar_float("mp_chattime")
        
        set_cvar_float("mp_chattime", chattime + 2.0)        // make sure mp_chattime is long
        new len = getNextMapName(string, 31) + 1
        set_task(chattime, "delayedChange", 0, string, len)    // change with 1.5 sec. delay
    }


    А вот пример кода, который выведет текстовое сообщение в чат:

    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "[amxmodx.inc] register event end map"
    #define VERSION "1.0"
    #define AUTHOR "Admin"


    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        register_event("30", "ChangeMap", "a")
        // Add your code here...
    }
    public ChangeMap(){
        
        client_print(0,print_chat,"End map")
        
    }


    Событие "конец плагина"

    Данное событие актуально для тех кто использует базы данных или любое другое хранение данных, так как именно в этом момент очень удобно сохранить данные, а так же необходимо закрыть открытые соединения и тому подобное. Лично я в одном из своих плагинов в этот момент передавал в базу данных информацию что плагин завершил свою работу корректно и при следующей загрузке проверял эти данные и если они не были получены – значит сервер упал. Ах да. Самое событие даже отлавливать не придется, для этого есть форвард
    plugin_end()

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

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

    Это конечно хорошо, но если админ меняет карту (changelevel) то почему-то не срабатывает данная фишка.

    Попробовал в данную функцию вставить команду на остановку записи HLTV. Она работает при смене карты (если она сама менялась или была выбрана голосованием) но если админ сам меняет карту то уже нет. belay Такая же фигня с plugin_end()
    Maksovich

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

    Сегодня снова взялся за старый плагин. Никак не могу заставить его выполнить код в ChangeMap() или в plugin_end() Я уже не знаю что делать. Если я сам вызываю функцию, то все работает если я пытаюсь вызвать ее через ChangeMap() или в plugin_end() то не работает. да даже если всю функцию скопировать в ChangeMap() или в plugin_end() то тоже не работает. Я в шоке. server_changelevel() тоже не помогает. Что такое. Что не хватает то. Если карта меняется админом то код не срабатывает.

    Информация

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

Реклама