
KeylessUniversal

--[[
WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
Super Ring Parts v4 - mod: anel vertical para todos os jogadores (round-robin)
Obs: Mantive estrutura, GUI, sons e retenção originais. Só mudei a lógica que calcula o alvo das parts.
]]
-- Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local SoundService = game:GetService("SoundService")
local StarterGui = game:GetService("StarterGui")
local TextChatService = game:GetService("TextChatService")
local Workspace = game:GetService("Workspace")
local LocalPlayer = Players.LocalPlayer
-- play sound helper
local function playSound(soundId)
pcall(function()
local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://" .. soundId
sound.Parent = SoundService
sound:Play()
sound.Ended:Connect(function() sound:Destroy() end)
end)
end
-- inicial
playSound("2865227271")
-- Network global (mantido)
if not getgenv().Network then
getgenv().Network = {
BaseParts = {},
Velocity = Vector3.new(14.46262424, 14.46262424, 14.46262424)
}
Network.RetainPart = function(Part)
if typeof(Part) == "Instance" and Part:IsA("BasePart") and Part:IsDescendantOf(Workspace) then
table.insert(Network.BaseParts, Part)
Part.CustomPhysicalProperties = PhysicalProperties.new(0, 0, 0, 0, 0)
Part.CanCollide = false
end
end
local function EnablePartControl()
LocalPlayer.ReplicationFocus = Workspace
RunService.Heartbeat:Connect(function()
pcall(function()
sethiddenproperty(LocalPlayer, "SimulationRadius", math.huge)
for _, Part in pairs(Network.BaseParts) do
if Part:IsDescendantOf(Workspace) then
Part.Velocity = Network.Velocity
end
end
end)
end)
end
EnablePartControl()
end
-- ForcePart helper (mantive)
local function ForcePart(v)
if v:IsA("Part") and not v.Anchored and not v.Parent:FindFirstChild("Humanoid") and not v.Parent:FindFirstChild("Head") and v.Name ~= "Handle" then
for _, x in next, v:GetChildren() do
if x:IsA("BodyAngularVelocity") or x:IsA("BodyForce") or x:IsA("BodyGyro") or x:IsA("BodyPosition") or x:IsA("BodyThrust") or x:IsA("BodyVelocity") or x:IsA("RocketPropulsion") then
x:Destroy()
end
end
if v:FindFirstChild("Attachment") then v:FindFirstChild("Attachment"):Destroy() end
if v:FindFirstChild("AlignPosition") then v:FindFirstChild("AlignPosition"):Destroy() end
if v:FindFirstChild("Torque") then v:FindFirstChild("Torque"):Destroy() end
v.CanCollide = false
local Torque = Instance.new("Torque", v)
Torque.Torque = Vector3.new(100000, 100000, 100000)
local AlignPosition = Instance.new("AlignPosition", v)
local Attachment2 = Instance.new("Attachment", v)
Torque.Attachment0 = Attachment2
AlignPosition.MaxForce = 9999999999999999
AlignPosition.MaxVelocity = math.huge
AlignPosition.Responsiveness = 200
AlignPosition.Attachment0 = Attachment2
end
end
-- GUI (mantive a aparência/estrutura do seu original)
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "SuperRingPartsGUI"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 220, 0, 190)
MainFrame.Position = UDim2.new(0.5, -110, 0.5, -95)
MainFrame.BackgroundColor3 = Color3.fromRGB(204, 0, 0)
MainFrame.BorderSizePixel = 0
MainFrame.Parent = ScreenGui
local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 20)
UICorner.Parent = MainFrame
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, 0, 0, 40)
Title.Position = UDim2.new(0, 0, 0, 0)
Title.Text = "Super Ring Parts v4"
Title.TextColor3 = Color3.fromRGB(153, 0, 0)
Title.BackgroundColor3 = Color3.fromRGB(255, 51, 51)
Title.Font = Enum.Font.Fondamento
Title.TextSize = 22
Title.Parent = MainFrame
local TitleCorner = Instance.new("UICorner")
TitleCorner.CornerRadius = UDim.new(0, 20)
TitleCorner.Parent = Title
local ToggleButton = Instance.new("TextButton")
ToggleButton.Size = UDim2.new(0.8, 0, 0, 35)
ToggleButton.Position = UDim2.new(0.1, 0, 0.3, 0)
ToggleButton.Text = "Ring Parts Off"
ToggleButton.BackgroundColor3 = Color3.fromRGB(0, 0, 255)
ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleButton.Font = Enum.Font.Fondamento
ToggleButton.TextSize = 18
ToggleButton.Parent = MainFrame
local ToggleCorner = Instance.new("UICorner")
ToggleCorner.CornerRadius = UDim.new(0, 10)
ToggleCorner.Parent = ToggleButton
local DecreaseRadius = Instance.new("TextButton")
DecreaseRadius.Size = UDim2.new(0.2, 0, 0, 35)
DecreaseRadius.Position = UDim2.new(0.1, 0, 0.6, 0)
DecreaseRadius.Text = "<"
DecreaseRadius.BackgroundColor3 = Color3.fromRGB(255, 153, 153)
DecreaseRadius.TextColor3 = Color3.fromRGB(255, 255, 255)
DecreaseRadius.Font = Enum.Font.Fondamento
DecreaseRadius.TextSize = 18
DecreaseRadius.Parent = MainFrame
local DecreaseCorner = Instance.new("UICorner")
DecreaseCorner.CornerRadius = UDim.new(0, 10)
DecreaseCorner.Parent = DecreaseRadius
local IncreaseRadius = Instance.new("TextButton")
IncreaseRadius.Size = UDim2.new(0.2, 0, 0, 35)
IncreaseRadius.Position = UDim2.new(0.7, 0, 0.6, 0)
IncreaseRadius.Text = ">"
IncreaseRadius.BackgroundColor3 = Color3.fromRGB(255, 153, 153)
IncreaseRadius.TextColor3 = Color3.fromRGB(255, 255, 255)
IncreaseRadius.Font = Enum.Font.Fondamento
IncreaseRadius.TextSize = 18
IncreaseRadius.Parent = MainFrame
local IncreaseCorner = Instance.new("UICorner")
IncreaseCorner.CornerRadius = UDim.new(0, 10)
IncreaseCorner.Parent = IncreaseRadius
local RadiusDisplay = Instance.new("TextLabel")
RadiusDisplay.Size = UDim2.new(0.4, 0, 0, 35)
RadiusDisplay.Position = UDim2.new(0.3, 0, 0.6, 0)
RadiusDisplay.Text = "Radius: 50"
RadiusDisplay.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
RadiusDisplay.TextColor3 = Color3.fromRGB(255, 255, 255)
RadiusDisplay.Font = Enum.Font.Fondamento
RadiusDisplay.TextSize = 18
RadiusDisplay.Parent = MainFrame
local RadiusCorner = Instance.new("UICorner")
RadiusCorner.CornerRadius = UDim.new(0, 10)
RadiusCorner.Parent = RadiusDisplay
local Watermark = Instance.new("TextLabel")
Watermark.Size = UDim2.new(1, 0, 0, 20)
Watermark.Position = UDim2.new(0, 0, 1, -20)
Watermark.Text = "Super Ring [V4] by lukas"
Watermark.TextColor3 = Color3.fromRGB(255, 255, 255)
Watermark.BackgroundTransparency = 1
Watermark.Font = Enum.Font.Fondamento
Watermark.TextSize = 14
Watermark.Parent = MainFrame
local MinimizeButton = Instance.new("TextButton")
MinimizeButton.Size = UDim2.new(0, 30, 0, 30)
MinimizeButton.Position = UDim2.new(1, -35, 0, 5)
MinimizeButton.Text = "-"
MinimizeButton.BackgroundColor3 = Color3.fromRGB(0, 0, 255)
MinimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
MinimizeButton.Font = Enum.Font.Fondamento
MinimizeButton.TextSize = 18
MinimizeButton.Parent = MainFrame
local MinimizeCorner = Instance.new("UICorner")
MinimizeCorner.CornerRadius = UDim.new(0, 15)
MinimizeCorner.Parent = MinimizeButton
-- Minimize funcionalidade (mantida)
local minimized = false
MinimizeButton.MouseButton1Click:Connect(function()
minimized = not minimized
if minimized then
MainFrame:TweenSize(UDim2.new(0, 220, 0, 40), "Out", "Quad", 0.3, true)
MinimizeButton.Text = "+"
ToggleButton.Visible = false
DecreaseRadius.Visible = false
IncreaseRadius.Visible = false
RadiusDisplay.Visible = false
Watermark.Visible = false
else
MainFrame:TweenSize(UDim2.new(0, 220, 0, 190), "Out", "Quad", 0.3, true)
MinimizeButton.Text = "-"
ToggleButton.Visible = true
DecreaseRadius.Visible = true
IncreaseRadius.Visible = true
RadiusDisplay.Visible = true
Watermark.Visible = true
end
playSound("12221967")
end)
-- GUI arrastar (mantive)
local dragging
local dragInput
local dragStart
local startPos
local function update(input)
local delta = input.Position - dragStart
MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
MainFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = MainFrame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
MainFrame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
update(input)
end
end)
-- PARTS retention e scan (mantive comportamento original)
local radius = 50
local height = 100
local rotationSpeed = 1
local attractionStrength = 1000
local ringPartsEnabled = false
local function RetainPart(Part)
if Part:IsA("BasePart") and not Part.Anchored and Part:IsDescendantOf(Workspace) then
if Part.Parent == LocalPlayer.Character or Part:IsDescendantOf(LocalPlayer.Character) then
return false
end
Part.CustomPhysicalProperties = PhysicalProperties.new(0, 0, 0, 0, 0)
Part.CanCollide = false
return true
end
return false
end
local parts = {}
local function addPart(part)
if RetainPart(part) then
if not table.find(parts, part) then
table.insert(parts, part)
end
end
end
local function removePart(part)
local index = table.find(parts, part)
if index then
table.remove(parts, index)
end
end
for _, part in pairs(Workspace:GetDescendants()) do
addPart(part)
end
Workspace.DescendantAdded:Connect(addPart)
Workspace.DescendantRemoving:Connect(removePart)
-- Helper: retorna lista de jogadores válidos (com HRP)
local function getValidPlayers()
local list = {}
for _, pl in ipairs(Players:GetPlayers()) do
if pl.Character and pl.Character:FindFirstChild("HumanoidRootPart") and pl.Character:FindFirstChild("Humanoid") and pl.Character.Humanoid.Health > 0 then
table.insert(list, pl)
end
end
return list
end
-- === AQUI ESTÁ A MODIFICAÇÃO PRINCIPAL ===
-- Antes: o script colocava o anel só em volta do LocalPlayer.
-- Agora: fazemos round-robin das parts entre os jogadores válidos; cada jogador recebe um anel vertical ao redor do seu HumanoidRootPart.
RunService.Heartbeat:Connect(function()
if not ringPartsEnabled then return end
local playersList = getValidPlayers()
local pcount = #playersList
if pcount == 0 then return end
local now = tick()
-- converter rotationSpeed para radianos por segundo (o original usava math.rad(rotationSpeed) em delta)
-- vou interpretar rotationSpeed como graus por heartbeat no original; aqui uso como graus por segundo para suavidade:
local omega = rotationSpeed * 2 * math.pi / 360 -- rad/s base (se quiser RPM ajuste aqui)
for i, part in ipairs(parts) do
if part and part.Parent and not part.Anchored and part:IsDescendantOf(Workspace) then
-- ignora partes do próprio personagem
if part.Parent == LocalPlayer.Character or part:IsDescendantOf(LocalPlayer.Character) then
-- ignora
else
-- atribui jogador por round-robin
local playerIndex = ((i - 1) % pcount) + 1
local pl = playersList[playerIndex]
if pl and pl.Character and pl.Character:FindFirstChild("HumanoidRootPart") then
local center = pl.Character.HumanoidRootPart.Position
-- baseAngle para espalhar as parts ao longo do anel (usa i para distribuição)
local baseAngle = ((i - 1) / math.max(1, #parts)) * 2 * math.pi
-- nova rotação ao longo do tempo
local angle = baseAngle + (now * omega)
-- Aqui aplicamos o anel em pé (vertical) conforme sua modificação anterior:
local targetPos = Vector3.new(
center.X,
center.Y + math.cos(angle) * radius,
center.Z + math.sin(angle) * radius
)
local directionToTarget = (targetPos - part.Position)
local dist = directionToTarget.Magnitude
if dist > 0.001 then
local dirUnit = directionToTarget.unit
-- força proporcional à distância, com cap
local forceVec = dirUnit * math.min(attractionStrength, dist * 40)
pcall(function()
part.Velocity = forceVec
end)
end
end
end
end
end
end)
-- === FIM DA MODIFICAÇÃO ===
-- Button functionality (mantive como original)
ToggleButton.MouseButton1Click:Connect(function()
ringPartsEnabled = not ringPartsEnabled
ToggleButton.Text = ringPartsEnabled and "Ring Parts On" or "Ring Parts Off"
ToggleButton.BackgroundColor3 = ringPartsEnabled and Color3.fromRGB(50, 205, 50) or Color3.fromRGB(160, 82, 45)
playSound("12221967")
end)
DecreaseRadius.MouseButton1Click:Connect(function()
radius = math.max(1, radius - 2)
RadiusDisplay.Text = "Radius: " .. radius
playSound("12221967")
end)
IncreaseRadius.MouseButton1Click:Connect(function()
radius = math.min(1000, radius + 2)
RadiusDisplay.Text = "Radius: " .. radius
playSound("12221967")
end)
-- thumbnail notification (best-effort; mantive)
coroutine.wrap(function()
local success, userId = pcall(function()
return Players:GetUserIdFromNameAsync("Robloxlukasgames")
end)
if success and type(userId) == "number" then
local ok, content = pcall(function()
return Players:GetUserThumbnailAsync(userId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
end)
if ok and type(content) == "string" then
pcall(function()
StarterGui:SetCore("SendNotification", {
Title = "Super ring parts V4",
Text = "enjoy",
Icon = content,
Duration = 5
})
end)
return
end
end
pcall(function()
StarterGui:SetCore("SendNotification", {
Title = "Super ring parts V4",
Text = "enjoy",
Duration = 5
})
end)
end)()
-- Chat message (compatível com novo e antigo sistema)
local function SendChatMessage(message)
pcall(function()
if TextChatService and TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then
local textChannel = TextChatService.TextChannels.RBXGeneral
if textChannel then
textChannel:SendAsync(message)
return
end
end
-- fallback
local repl = game:GetService("ReplicatedStorage")
if repl:FindFirstChild("DefaultChatSystemChatEvents") and repl.DefaultChatSystemChatEvents:FindFirstChild("SayMessageRequest") then
repl.DefaultChatSystemChatEvents.SayMessageRequest:FireServer(message, "All")
end
end)
end
-- Mensagem inicial
pcall(function() SendChatMessage("Super Ring Parts V4 By 12391283andrew - All players rings") end)
-- fim do script



Totally not sus name