Как хукнуть старт нового раунда

Тема в разделе "Программирование / Скриптинг", создана пользователем Webman, 9 июн 2016.

  1. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Озадачился одной проблемой вечером...

    Как хукнуть начало нового раунда?

    Порядок выполнения событий такой:
    • Старт нового раунда
    • player_spawn
    • round_freeze_end
    • round_start
    Нужно отловить самое начало раунда. Такое событие вообще есть?
     
  2. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.730
    Симпатии:
    461
    Возможные варианты ответа уже указаны в шапке темы)
    То ли порядок не верен, то ли я чего-то не понял.
    round_start >> player_spawn >> round_freeze_end
    Вроде ж так всегда было
     
  3. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Я для себя открытие сделал только что. Оказывается round_start вызывается после спавна игроков.
     
  4. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.730
    Симпатии:
    461
    Спорить не буду, ибо никогда не задавался этим.
    Тогда так, больше ивентов для отлова раунда я не видел.
    player_spawn >> round_start >> round_freeze_end
     
  5. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Предложили юзать player_spawn PRE, но мне нужно лишь один раз, до начала спавна игроков... а не каждый спавн игрока.
    --- Добавлено позже ---
    Наверное, можно как-то набыдлокодить так:

    player_spawn post: param++
    round_end: param = 0
    player_spawn pre: if (param == 0), то выполнить нужное действие в начале раунда.

    или вообще bool
     
  6. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    856
    Симпатии:
    201
    Можно без лишней переменной

    Код:
    #include <sourcemod>
    
    public OnMapStart()
    {
        HookEvent("player_spawn", EventSpawn, EventHookMode_Pre)
        HookEvent("round_end", EventEnd, EventHookMode_PostNoCopy)
    }
    
    public Action:EventSpawn(Handle event, char[] name, bool:dbc)
    {
        UnhookEvent("player_spawn", EventSpawn, EventHookMode_Pre)
        DoingAfterFirstSpawn()
        return Plugin_Continue
    }
    
    public EventEnd(Handle event, char[] name, bool:dbc)
    {
        HookEvent("player_spawn", EventSpawn, EventHookMode_Pre)
    }
    
    DoingAfterFirstSpawn()
    {
      
    }
    
     
    Webman нравится это.
  7. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.590
    Симпатии:
    1.995
    Именно. После спавна всех игроков, отчего вызывается событие начала раунда, как готовность к игре.
    События перед самым началом раунда (т.е. его подготовки) нет в CS:S, но есть в CS:GO - round_prestart.
     
    Webman нравится это.
  8. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Мне для CS:S надо :(
     
  9. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.590
    Симпатии:
    1.995
    Вариантов много. От самых простых до "безумных") Обычно в конце раунда просто запускают таймер с mp_round_restart_delay - 0.1, что наверняка совпадает с нужной "точкой" работы.
     
    Webman нравится это.