Guest

Pentagram Script for Gaming Environment

Nov 22nd, 2025
148
0
Never
Not a member of gistpad yet? Sign Up, it unlocks many cool features!
Lua 30.96 KB | Gaming | 0 0
  1. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  2. local PentagramEvent = ReplicatedStorage:WaitForChild("PentagramEvent")
  3. local PentagramModelTemplate = ReplicatedStorage:WaitForChild("PentagramModel")
  4.  
  5. -- === НАСТРОЙКА ЦЕНЫ ===
  6. local MANA_COST = 50
  7.  
  8. local DURATION = 15
  9. local DAMAGE_PERCENT = 0.05
  10. local SPAWN_SPEED = 0.1
  11. local SPAWN_SOUND_ID = "rbxassetid://4853357922"
  12. local ENTER_SOUND_ID = "rbxassetid://4028366601"
  13.  
  14. print("🔥 Скрипт Пентаграммы (с Маной) загружен")
  15.  
  16. local savedAppearance = {}
  17.  
  18. -- Функция окаменения (сокращена для краткости, она та же самая)
  19. local function TurnToStone(char, state)
  20. local hum = char:FindFirstChild("Humanoid")
  21. if state == true then
  22. if not savedAppearance[char] then
  23. 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
  24. 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
  25. savedAppearance[char]=d
  26. end
  27. if hum then hum.WalkSpeed=0; hum.JumpPower=0 end
  28. else
  29. 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
  30. if hum then hum.WalkSpeed=16; hum.JumpPower=50 end
  31. end
  32. end
  33.  
  34. PentagramEvent.OnServerEvent:Connect(function(caster, targetPosition)
  35. local casterChar = caster.Character
  36. if not casterChar then return end
  37.  
  38. -- [СПИСАНИЕ МАНЫ]
  39. local currentMana = casterChar:GetAttribute("Mana") or 0
  40. if currentMana < MANA_COST then return end
  41. casterChar:SetAttribute("Mana", currentMana - MANA_COST)
  42.  
  43. -- ЛОГИКА ПЕНТАГРАММЫ
  44. local rayOrigin = targetPosition + Vector3.new(0, 5, 0)
  45. local rayDirection = Vector3.new(0, -50, 0)
  46. local rp = RaycastParams.new(); rp.FilterDescendantsInstances = {casterChar}
  47. local res = workspace:Raycast(rayOrigin, rayDirection, rp)
  48. local spawnPos = res and res.Position or targetPosition
  49.  
  50. local model = PentagramModelTemplate:Clone()
  51. local allParts = {}
  52. for _, part in pairs(model:GetDescendants()) do if part:IsA("BasePart") then part.Transparency=1; table.insert(allParts,part) end end
  53. model.Parent = workspace
  54. 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
  55.  
  56. local zonePart = model:FindFirstChild("Zone")
  57. if not zonePart then model:Destroy() return end
  58.  
  59. local sound = Instance.new("Sound", model.PrimaryPart or zonePart); sound.SoundId=SPAWN_SOUND_ID; sound.Volume=2; sound:Play()
  60.  
  61. task.spawn(function() for _,p in pairs(allParts) do if p.Name~="Zone" then p.Transparency=0 end task.wait(SPAWN_SPEED) end end)
  62.  
  63. local trappedEnemies = {}; local lastDamageTime = {}
  64.  
  65. task.spawn(function()
  66. local startTime = tick()
  67. local op = OverlapParams.new(); op.FilterDescendantsInstances = {model}; op.FilterType = Enum.RaycastFilterType.Exclude
  68.  
  69. while tick() - startTime < DURATION do
  70. if not model or not model.Parent then break end
  71. local parts = workspace:GetPartsInPart(zonePart, op)
  72. local chars = {}
  73. 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
  74.  
  75. if chars[casterChar] then
  76. local ff=casterChar:FindFirstChild("PentagramShield"); if not ff then ff=Instance.new("ForceField"); ff.Name="PentagramShield"; ff.Visible=false; ff.Parent=casterChar end
  77. else
  78. local ff=casterChar:FindFirstChild("PentagramShield"); if ff then ff:Destroy() end
  79. end
  80.  
  81. for c,_ in pairs(chars) do
  82. if c~=casterChar then
  83. if not trappedEnemies[c] then
  84. TurnToStone(c, true); trappedEnemies[c]=true
  85. local s=Instance.new("Sound", c.HumanoidRootPart); s.SoundId=ENTER_SOUND_ID; s:Play(); game.Debris:AddItem(s,2)
  86. end
  87. 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
  88. end
  89. end
  90.  
  91. for c,_ in pairs(trappedEnemies) do if not chars[c] then TurnToStone(c, false); trappedEnemies[c]=nil end end
  92. task.wait(0.1)
  93. end
  94.  
  95. model:Destroy()
  96. if casterChar then local ff=casterChar:FindFirstChild("PentagramShield"); if ff then ff:Destroy() end end
  97. for c,_ in pairs(trappedEnemies) do TurnToStone(c, false) end
  98. end)
  99. end)
RAW Gist Data Copied