local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local screenGui = Instance.new("ScreenGui") screenGui.Parent = PlayerGui local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 300, 0, 400) mainFrame.Position = UDim2.new(0, 50, 0, 50) mainFrame.BackgroundColor3 = Color3.fromRGB(50, 50, 50) mainFrame.Parent = screenGui mainFrame.Active = true mainFrame.Draggable = true local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 50) title.BackgroundTransparency = 1 title.Text = "Tornado Player" title.TextColor3 = Color3.fromRGB(255, 255, 255) title.Font = Enum.Font.SourceSansBold title.TextSize = 30 title.Parent = mainFrame local scrollingFrame = Instance.new("ScrollingFrame") scrollingFrame.Size = UDim2.new(1, 0, 1, -50) scrollingFrame.Position = UDim2.new(0, 0, 0, 50) scrollingFrame.CanvasSize = UDim2.new(0, 0, 2, 0) scrollingFrame.ScrollBarThickness = 8 scrollingFrame.BackgroundTransparency = 0.2 scrollingFrame.BackgroundColor3 = Color3.fromRGB(30,30,30) scrollingFrame.Parent = mainFrame local UIListLayout = Instance.new("UIListLayout") UIListLayout.Parent = scrollingFrame UIListLayout.Padding = UDim.new(0,5) local activePlayer = nil local tornadoPlate = nil local spinning = false local spinConnection = nil local function createPlate(targetPlayer) if tornadoPlate then tornadoPlate:Destroy() tornadoPlate = nil end local plate = Instance.new("Part") plate.Size = Vector3.new(10, 1, 10) plate.Anchored = true plate.Transparency = 1 plate.CanCollide = true plate.Parent = workspace tornadoPlate = plate return plate end local function startSpinning(targetPlayer) if not targetPlayer.Character or not targetPlayer.Character:FindFirstChild("HumanoidRootPart") then return end local root = targetPlayer.Character.HumanoidRootPart local angle = 0 spinning = true spinConnection = game:GetService("RunService").Heartbeat:Connect(function(dt) if tornadoPlate and root and root.Parent then tornadoPlate.CFrame = root.CFrame * CFrame.new(0,5,0) angle += dt * 2 local radius = 6 local offset = Vector3.new(math.cos(angle) * radius, 0, math.sin(angle) * radius) if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(tornadoPlate.Position + offset) * CFrame.Angles(0, math.rad(-math.deg(angle) + 90), 0) end end end) end local function stopSpinning() spinning = false if spinConnection then spinConnection:Disconnect() spinConnection = nil end if tornadoPlate then tornadoPlate:Destroy() tornadoPlate = nil end end local function createPlayerButton(player) local button = Instance.new("TextButton") button.Size = UDim2.new(1, -10, 0, 50) button.BackgroundColor3 = Color3.fromRGB(80, 80, 80) button.TextColor3 = Color3.fromRGB(255, 255, 255) button.Text = player.DisplayName button.Font = Enum.Font.SourceSans button.TextSize = 24 button.Parent = scrollingFrame button.MouseButton1Click:Connect(function() if activePlayer == player then button.BackgroundColor3 = Color3.fromRGB(80, 80, 80) activePlayer = nil stopSpinning() else for _, otherButton in ipairs(scrollingFrame:GetChildren()) do if otherButton:IsA("TextButton") then otherButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80) end end activePlayer = player button.BackgroundColor3 = Color3.fromRGB(0,0,0) stopSpinning() createPlate(player) startSpinning(player) end end) end for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then createPlayerButton(player) end end Players.PlayerAdded:Connect(function(player) if player ~= LocalPlayer then createPlayerButton(player) end end) Players.PlayerRemoving:Connect(function(player) for _, button in ipairs(scrollingFrame:GetChildren()) do if button:IsA("TextButton") and button.Text == player.DisplayName then button:Destroy() end end if activePlayer == player then stopSpinning() activePlayer = nil end end)