local ReplicatedStorage = game:GetService("ReplicatedStorage") local PentagramEvent = ReplicatedStorage:WaitForChild("PentagramEvent") local PentagramModelTemplate = ReplicatedStorage:WaitForChild("PentagramModel") -- === НАСТРОЙКА ЦЕНЫ === local MANA_COST = 50 local DURATION = 15 local DAMAGE_PERCENT = 0.05 local SPAWN_SPEED = 0.1 local SPAWN_SOUND_ID = "rbxassetid://4853357922" local ENTER_SOUND_ID = "rbxassetid://4028366601" print("🔥 Скрипт Пентаграммы (с Маной) загружен") local savedAppearance = {} -- Функция окаменения (сокращена для краткости, она та же самая) local function TurnToStone(char, state) local hum = char:FindFirstChild("Humanoid") if state == true then if not savedAppearance[char] then local d = {P={}, C={}}; for _,p in pairs(char:GetDescendants()) do if p:IsA("BasePart") and p.Name~="HumanoidRootPart" then d.P[p]={C=p.Color,M=p.Material,T=p.Transparency,Tx=(p:IsA("MeshPart") and p.TextureID) or nil}; p.Material=Enum.Material.Slate; p.Color=Color3.new(0.35,0.35,0.35); p.Anchored=true; if p:IsA("MeshPart") then p.TextureID="" end; local m=p:FindFirstChildOfClass("SpecialMesh"); if m then d.P[m]={Tx=m.TextureId}; m.TextureId="" end end end for _,o in pairs(char:GetChildren()) do if o:IsA("Shirt") or o:IsA("Pants") or o:IsA("ShirtGraphic") or o:IsA("BodyColors") then table.insert(d.C,o); o.Parent=nil end end savedAppearance[char]=d end if hum then hum.WalkSpeed=0; hum.JumpPower=0 end else local d=savedAppearance[char]; if d then for o,p in pairs(d.P) do if o and o.Parent then if o:IsA("BasePart") then o.Color=p.C; o.Material=p.M; o.Transparency=p.T; o.Anchored=false; if p.Tx and o:IsA("MeshPart") then o.TextureID=p.Tx end elseif o:IsA("SpecialMesh") then o.TextureId=p.Tx end end end; for _,c in pairs(d.C) do if c then c.Parent=char end end; savedAppearance[char]=nil end if hum then hum.WalkSpeed=16; hum.JumpPower=50 end end end PentagramEvent.OnServerEvent:Connect(function(caster, targetPosition) local casterChar = caster.Character if not casterChar then return end -- [СПИСАНИЕ МАНЫ] local currentMana = casterChar:GetAttribute("Mana") or 0 if currentMana < MANA_COST then return end casterChar:SetAttribute("Mana", currentMana - MANA_COST) -- ЛОГИКА ПЕНТАГРАММЫ local rayOrigin = targetPosition + Vector3.new(0, 5, 0) local rayDirection = Vector3.new(0, -50, 0) local rp = RaycastParams.new(); rp.FilterDescendantsInstances = {casterChar} local res = workspace:Raycast(rayOrigin, rayDirection, rp) local spawnPos = res and res.Position or targetPosition local model = PentagramModelTemplate:Clone() local allParts = {} for _, part in pairs(model:GetDescendants()) do if part:IsA("BasePart") then part.Transparency=1; table.insert(allParts,part) end end model.Parent = workspace if model.PrimaryPart then model:SetPrimaryPartCFrame(CFrame.new(spawnPos)) else local z=model:FindFirstChild("Zone"); if z then z.CFrame=CFrame.new(spawnPos) end end local zonePart = model:FindFirstChild("Zone") if not zonePart then model:Destroy() return end local sound = Instance.new("Sound", model.PrimaryPart or zonePart); sound.SoundId=SPAWN_SOUND_ID; sound.Volume=2; sound:Play() task.spawn(function() for _,p in pairs(allParts) do if p.Name~="Zone" then p.Transparency=0 end task.wait(SPAWN_SPEED) end end) local trappedEnemies = {}; local lastDamageTime = {} task.spawn(function() local startTime = tick() local op = OverlapParams.new(); op.FilterDescendantsInstances = {model}; op.FilterType = Enum.RaycastFilterType.Exclude while tick() - startTime < DURATION do if not model or not model.Parent then break end local parts = workspace:GetPartsInPart(zonePart, op) local chars = {} for _,p in pairs(parts) do local c=p.Parent; local h=c:FindFirstChild("Humanoid"); if h and h.Health>0 then chars[c]=true end end if chars[casterChar] then local ff=casterChar:FindFirstChild("PentagramShield"); if not ff then ff=Instance.new("ForceField"); ff.Name="PentagramShield"; ff.Visible=false; ff.Parent=casterChar end else local ff=casterChar:FindFirstChild("PentagramShield"); if ff then ff:Destroy() end end for c,_ in pairs(chars) do if c~=casterChar then if not trappedEnemies[c] then TurnToStone(c, true); trappedEnemies[c]=true local s=Instance.new("Sound", c.HumanoidRootPart); s.SoundId=ENTER_SOUND_ID; s:Play(); game.Debris:AddItem(s,2) end local now=tick(); if not lastDamageTime[c] or now-lastDamageTime[c]>=1 then c.Humanoid:TakeDamage(c.Humanoid.MaxHealth*DAMAGE_PERCENT); lastDamageTime[c]=now end end end for c,_ in pairs(trappedEnemies) do if not chars[c] then TurnToStone(c, false); trappedEnemies[c]=nil end end task.wait(0.1) end model:Destroy() if casterChar then local ff=casterChar:FindFirstChild("PentagramShield"); if ff then ff:Destroy() end end for c,_ in pairs(trappedEnemies) do TurnToStone(c, false) end end) end)