Skip to content

Хуки раунда

Хуки, вызываемые на разных этапах жизни раунда.

fh_prestartgame HOOK SERVER

Вызывается перед выбором типа раунда.

lua
hook.Run("fh_prestartgame")

Возврат false — отменить выбор раунда.

Пример: замена Спрингтрапа на Золотого Фредди в обычном раунде. См. готовый пример →

lua
hook.Add("fh_prestartgame", "CustomLogic", function()
    if math.random(1, 100) <= 5 then
        -- Раз в 20 раундов делаем спецсобытие
        for _, ply in ipairs(player.GetAll()) do
            giveKiller(ply, "pill_wgfreddy2", true)
        end
        return false  -- отменяем стандартный выбор
    end
end)

fh_startgame HOOK SERVER

Вызывается после выбора типа раунда и выполнения базовых функций раунда (раздача ролей, заморозка, выдача Шокера).

lua
hook.Run("fh_startgame", roundType)
АргументТипОписание
roundTypeintID типа раунда

Возврат false — отменить запуск таймера, музыки и т.д.

lua
hook.Add("fh_startgame", "AnnounceRound", function(roundType)
    local name = fh.GetRoundTypeNameByNumber(roundType)
    PrintMessage(HUD_PRINTTALK, "Раунд: " .. name)
end)

fh_poststartgame HOOK SERVER

Вызывается после разморозки аниматроников. Самый частый хук для пользовательской логики.

lua
hook.Run("fh_poststartgame", roundType, animatronics)
АргументТипОписание
roundTypeintID типа раунда
animatronicstable[Player]Игроки-аниматроники в этом раунде
lua
hook.Add("fh_poststartgame", "BuffAnims", function(roundType, anims)
    for _, ply in ipairs(anims) do
        ply:SetMaxHealth(150)
        ply:SetHealth(150)
    end
end)

fh_postendgame HOOK SERVER

Вызывается после конца раунда, перед 10-секундным таймером возврата в лобби.

lua
hook.Run("fh_postendgame", killerVictory, animatronics)
АргументТипОписание
killerVictoryboolПобедили ли аниматроники?
animatronicstable[Player]Аниматроники этого раунда
lua
hook.Add("fh_postendgame", "GiveRewards", function(victory, anims)
    if victory then
        -- Аниматроники победили — даём им бонус
        for _, ply in ipairs(anims) do
            ply:AddFrags(5)
        end
    else
        -- Выжившие победили — награждаем выживших
        for _, ply in ipairs(player.GetAll()) do
            if ply:IsSurvivor() and ply:Alive() then
                ply:ChatPrint("Вы выжили!")
            end
        end
    end
end)