DefusalGame
DefusalGame — глобальный API текущего матча Defusal. Через него можно узнать стадию раунда, оставшееся время, состояние BridgeCharge, счёт и игровые стороны.
Все свойства самого DefusalGame доступны только для чтения.
Откуда берётся состояние
Заголовок раздела «Откуда берётся состояние»Серверный режим Defusal управляет стадиями раунда, таймерами, сторонами, счётом и жизненным циклом BridgeCharge. В server.lua свойства читают это авторитетное состояние; клиент получает его сетевое представление для HUD и модулей.
DefusalGame ничего не запускает и не завершает: это интерфейс наблюдения. GetMatchRoundsLog() возвращает записи уже рассчитанной истории. Даже если поля DefusalRoundState допускают присваивание в Lua, изменяется только локальный объект записи, а не матч.
Состояние текущего раунда
Заголовок раздела «Состояние текущего раунда»local secondsLeft = Time.TickToSeconds( DefusalGame.StageRemainingTicks)
print("Round: " .. tostring(DefusalGame.RoundId))print("Stage: " .. tostring(DefusalGame.Stage))print("Seconds left: " .. tostring(secondsLeft))DefusalGame доступен в клиентском скрипте и Reflex server.lua. Исключение — IsVictory, которое существует только на клиенте, поскольку зависит от команды локального игрока.
Свойства
Заголовок раздела «Свойства»BridgeCharge
Заголовок раздела «BridgeCharge»| Свойство | Тип | Доступ | Описание |
|---|---|---|---|
BridgeChargeExplosionRemainingTicks |
int |
get |
Оставшиеся тики до взрыва установленного заряда. |
IsBridgeChargeDefused |
bool |
get |
Заряд обезврежен в текущем раунде. |
IsBridgeChargeExploded |
bool |
get |
Заряд взорвался в текущем раунде. |
IsBridgeChargePlanted |
bool |
get |
Заряд установлен. |
Значение в секундах можно получить через Time.TickToSeconds():
local seconds = Time.TickToSeconds( DefusalGame.BridgeChargeExplosionRemainingTicks)Матч и раунд
Заголовок раздела «Матч и раунд»| Свойство | Тип | Доступ | Описание |
|---|---|---|---|
IsGameEnded |
bool |
get |
Матч завершён. |
IsOvertime |
bool |
get |
Матч находится в дополнительных раундах. |
IsRoundBeforeSwap |
bool |
get |
После текущего раунда команды поменяются сторонами. |
IsRoundTimeOver |
bool |
get |
Время раунда закончилось до установки BridgeCharge. |
IsTeamSwapping |
bool |
get |
Сейчас выполняется смена сторон. |
IsVictory |
bool |
get |
Победа команды локального игрока. Только client. |
IsWarmupTimerActive |
bool |
get |
В разминке активен таймер ожидания или запуска. |
RoundId |
int |
get |
Номер текущего раунда. До начала игровых раундов может быть 0. |
RoundWinnerTeam |
Team |
get |
Победившая команда, если она уже определена. |
Stage |
EDefusalRoundStage |
get |
Текущая стадия раунда. |
StageRemainingTicks |
int |
get |
Оставшиеся тики текущей стадии. |
WarmupRemainingTicks |
int |
get |
Оставшиеся тики таймера разминки. |
Игровые стороны
Заголовок раздела «Игровые стороны»| Свойство | Тип | Доступ | Описание |
|---|---|---|---|
BridgerFrontTeam |
Team |
get |
Атакующая сторона. |
BridgerFrontTeamTexture |
Texture |
get |
Иконка атакующей стороны. |
KillScriptCompanyTeam |
Team |
get |
Обороняющаяся сторона. |
KillScriptCompanyTeamTexture |
Texture |
get |
Иконка обороняющейся стороны. |
GetMatchRoundsLog
Заголовок раздела «GetMatchRoundsLog»DefusalGame:GetMatchRoundsLog(): Array<DefusalRoundState>Возвращает историю состояний раундов в виде Array. Как и у остальных API-массивов, индексация начинается с 1.
local rounds = DefusalGame:GetMatchRoundsLog()
for i = 1, rounds.Length do local round = rounds[i] print( "Round " .. tostring(round.RoundId) .. ": " .. tostring(round.Stage) )endDefusalRoundState
Заголовок раздела «DefusalRoundState»Запись одного раунда из истории матча.
| Поле | Тип | Доступ | Описание |
|---|---|---|---|
IsBridgeChargeDefused |
bool |
get/set |
BridgeCharge была обезврежена. |
IsBridgeChargeExploded |
bool |
get/set |
BridgeCharge взорвалась. |
IsBridgeChargePlanted |
bool |
get/set |
BridgeCharge была установлена. |
IsRoundTimeOver |
bool |
get/set |
Раунд завершился по времени до установки заряда. |
IsTeamSwapping |
bool |
get/set |
Запись относится к смене сторон. |
RoundId |
int |
get/set |
Номер раунда. |
RoundWinnerTeam |
Team |
get/set |
Победившая команда. |
Stage |
EDefusalRoundStage |
get/set |
Стадия раунда. |
Присваивание этим полям принимается Lua API. Рассматривайте объект как запись данных: изменение полученного значения не является командой серверу и не изменяет результат матча.
EDefusalRoundStage
Заголовок раздела «EDefusalRoundStage»| Значение | Код | Описание |
|---|---|---|
None |
0 |
Активной стадии нет. |
Buy |
1 |
Стадия закупки. |
Fight |
2 |
Основная стадия боя. |
End |
3 |
Завершение раунда. |
При выводе значение enum содержит и имя, и код, например Fight: 2. Сравнивайте его с числовым кодом:
local FIGHT_STAGE = 2
if DefusalGame.Stage == FIGHT_STAGE then -- Раунд находится в боевой стадииendКонтекст server.lua
Заголовок раздела «Контекст server.lua»В Reflex server доступны все перечисленные свойства, кроме IsVictory. Попытка прочитать DefusalGame.IsVictory там завершает текущий Lua-вызов ошибкой доступа — не проверяйте его обычным сравнением с nil.