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

Webman

Nevermind
Сообщения
803
Реакции
330
Озадачился одной проблемой вечером...

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

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

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Возможные варианты ответа уже указаны в шапке темы)
То ли порядок не верен, то ли я чего-то не понял.
round_start >> player_spawn >> round_freeze_end
Вроде ж так всегда было
 

Webman

Nevermind
Сообщения
803
Реакции
330
Возможные варианты ответа уже указаны в шапке темы)
То ли порядок не верен, то ли я чего-то не понял.
round_start >> player_spawn >> round_freeze_end
Вроде ж так всегда было
Я для себя открытие сделал только что. Оказывается round_start вызывается после спавна игроков.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Я для себя открытие сделал только что. Оказывается round_start вызывается после спавна игроков.
Спорить не буду, ибо никогда не задавался этим.
Тогда так, больше ивентов для отлова раунда я не видел.
player_spawn >> round_start >> round_freeze_end
 

Webman

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

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

или вообще bool
 

inklesspen

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

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

или вообще bool
Можно без лишней переменной

C-подобный:
#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()
{
  
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Оказывается round_start вызывается после спавна игроков
Именно. После спавна всех игроков, отчего вызывается событие начала раунда, как готовность к игре.
События перед самым началом раунда (т.е. его подготовки) нет в CS:S, но есть в CS:GO - round_prestart.
 

Webman

Nevermind
Сообщения
803
Реакции
330
Именно. После спавна всех игроков, отчего вызывается событие начала раунда, как готовность к игре.
События перед самым началом раунда (т.е. его подготовки) нет в CS:S, но есть в CS:GO - round_prestart.
Мне для CS:S надо :(
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Вариантов много. От самых простых до "безумных") Обычно в конце раунда просто запускают таймер с mp_round_restart_delay - 0.1, что наверняка совпадает с нужной "точкой" работы.
 
Сверху Снизу