local ReplicatedStorage = game:GetService("ReplicatedStorage")
local AstralEvent = ReplicatedStorage:WaitForChild("AstralEvent")
print("👻 Скрипт Астрала (с Маной) загружен")
-- === НАСТРОЙКА ЦЕНЫ ===
local MANA_COST = 30 -- Должно совпадать с ModuleScript!
local activeBodies = {}
local function setGhostVisuals(char, isGhost)
local transparency = isGhost and 0.6 or 0
for _, part in pairs(char:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.Transparency = transparency
elseif part:IsA("Decal") then
part.Transparency = transparency
end
end
end
AstralEvent.OnServerEvent:Connect(function(player)
local character = player.Character
if not character then return end
local rootPart = character:FindFirstChild("HumanoidRootPart")
local humanoid = character:FindFirstChild("Humanoid")
if activeBodies[player] then
-- === ВЫХОД ИЗ АСТРАЛА (БЕСПЛАТНО) ===
local oldBody = activeBodies[player]
if oldBody and oldBody:FindFirstChild("HumanoidRootPart") then
rootPart.CFrame = oldBody.HumanoidRootPart.CFrame
end
if oldBody then oldBody:Destroy() end
activeBodies[player] = nil
setGhostVisuals(character, false)
local ff = character:FindFirstChild("AstralShield")
if ff then ff:Destroy() end
humanoid.DisplayName = player.DisplayName
else
-- === ВХОД В АСТРАЛ (ПЛАТНО) ===
-- [СПИСАНИЕ МАНЫ]
local currentMana = character:GetAttribute("Mana") or 0
if currentMana < MANA_COST then return end -- Защита
character:SetAttribute("Mana", currentMana - MANA_COST)
-- Логика входа
character.Archivable = true
local bodyClone = character:Clone()
bodyClone.Name = "Body_" .. player.Name
for _, obj in pairs(bodyClone:GetDescendants()) do
if obj:IsA("Script") or obj:IsA("LocalScript") or obj:IsA("Tool") then obj:Destroy() end
end
for _, part in pairs(bodyClone:GetDescendants()) do
if part:IsA("BasePart") then part.Anchored = true; part.CanCollide = false end
end
bodyClone.Parent = workspace
bodyClone:SetPrimaryPartCFrame(rootPart.CFrame)
activeBodies[player] = bodyClone
setGhostVisuals(character, true)
local ff = Instance.new("ForceField")
ff.Name = "AstralShield"; ff.Visible = false; ff.Parent = character
humanoid.DisplayName = "👻 Spirit"
end
end)
game.Players.PlayerRemoving:Connect(function(player)
if activeBodies[player] then activeBodies[player]:Destroy() end
end)