--[[ 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