-- 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