Not a member of gistpad yet?
Sign Up,
it unlocks many cool features!
- 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)
RAW Gist Data
Copied
