Перейти к содержимому

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, которое существует только на клиенте, поскольку зависит от команды локального игрока.

Свойство Тип Доступ Описание
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 Иконка обороняющейся стороны.
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)
)
end

Запись одного раунда из истории матча.

Поле Тип Доступ Описание
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. Рассматривайте объект как запись данных: изменение полученного значения не является командой серверу и не изменяет результат матча.

Значение Код Описание
None 0 Активной стадии нет.
Buy 1 Стадия закупки.
Fight 2 Основная стадия боя.
End 3 Завершение раунда.

При выводе значение enum содержит и имя, и код, например Fight: 2. Сравнивайте его с числовым кодом:

local FIGHT_STAGE = 2
if DefusalGame.Stage == FIGHT_STAGE then
-- Раунд находится в боевой стадии
end

В Reflex server доступны все перечисленные свойства, кроме IsVictory. Попытка прочитать DefusalGame.IsVictory там завершает текущий Lua-вызов ошибкой доступа — не проверяйте его обычным сравнением с nil.