https://pastein.ru/t/x7Y

  скопируйте уникальную ссылку для отправки

Загрузка данных


-- BossManager.lua (в ServerScriptService)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Workspace = game:GetService("Workspace")

local BossTemplate = ServerStorage:WaitForChild("Boss") -- Ваша модель босса
local BossSpawnLocation = Workspace:WaitForChild("BossSpawnLocation") -- Место спавна босса (Part)

local SPAWN_TIME = 3600 -- Время до спавна в секундах (1 час)
local currentBoss = nil
local bossRespawnTimer = 0

-- События для уведомления других скриптов
local BossEvents = ReplicatedStorage:WaitForChild("BossEvents") -- RemoteEvent для синхронизации

-- Анимации пробуждения и смерти
local AWAKENING_ANIMATION_ID = "rbxassetid://+++" -- ID анимации пробуждения босса
local DEATH_ANIMATION_ID = "rbxassetid://+++" -- ID анимации смерти босса

-- Фазы босса
local BOSS_PHASE_1_HEALTH = 1000 -- Начальное здоровье для Фазы 1
local BOSS_PHASE_2_HEALTH_THRESHOLD = 300 -- Порог здоровья для Фазы 2 (например, при 300 HP переходит во вторую фазу)
local BOSS_DEATH_HEALTH_THRESHOLD = 3 -- Порог здоровья для анимации смерти (например, при 3 HP запускается анимация смерти)
local currentPhase = 1

local function playBossAnimation(bossCharacter, animationId, loop)
    local humanoid = bossCharacter:FindFirstChildOfClass("Humanoid")
    local animator = humanoid:FindFirstChildOfClass("Animator")
    if humanoid and animator and animationId and animationId ~= "" then
        local animation = animator:LoadAnimation(animationId)
        animation.Looped = loop or false
        animation:Play()
        return animation
    end
    return nil
end

local function handleBossDeath()
    if currentBoss then
        local humanoid = currentBoss:FindFirstChildOfClass("Humanoid")
        if humanoid then
            -- Запускаем анимацию смерти
            local deathAnim = playBossAnimation(currentBoss, DEATH_ANIMATION_ID, false)
            if deathAnim then
                deathAnim.Stopped:Wait() -- Ждем завершения анимации смерти
            end
            
            -- Удаляем босса
            currentBoss:Destroy()
            currentBoss = nil
            print("Босс мертв! Респавн через " .. SPAWN_TIME / 60 .. " минут.")
            bossRespawnTimer = SPAWN_TIME
            currentPhase = 1 -- Сбрасываем фазу для следующего спавна
        end
    end
end

local function spawnBoss()
    if currentBoss then
        currentBoss:Destroy()
    end

    local newBoss = BossTemplate:Clone()
    newBoss.Parent = Workspace
    newBoss.PrimaryPart.CFrame = BossSpawnLocation.CFrame

    currentBoss = newBoss
    print("Босс заспавнен!")

    local humanoid = currentBoss:FindFirstChildOfClass("Humanoid")
    if humanoid then
        humanoid.MaxHealth = BOSS_PHASE_1_HEALTH
        humanoid.Health = BOSS_PHASE_1_HEALTH

        -- Запускаем анимацию пробуждения
        local awakeningAnim = playBossAnimation(currentBoss, AWAKENING_ANIMATION_ID, false)
        if awakeningAnim then
            awakeningAnim.Stopped:Wait() -- Ждем завершения анимации пробуждения
        end

        -- Уведомляем другие скрипты о спавне и фазе
        BossEvents:FireAllClients("BossSpawned", currentBoss, currentPhase)

        humanoid.HealthChanged:Connect(function(newHealth)
            -- Переход во вторую фазу
            if currentPhase == 1 and newHealth <= BOSS_PHASE_2