local Players = game:GetService("Players") local player = Players.LocalPlayer local function giveTool(character) local humanoid = character:WaitForChild("Humanoid") local hrp = character:WaitForChild("HumanoidRootPart") -- Create Tool local tool = Instance.new("Tool") tool.Name = "hellfire's fling tool" tool.RequiresHandle = true tool.ToolTip = "script by hellfire, can fling unanchored parts and players." tool.Parent = player:WaitForChild("Backpack") -- Handle local handle = Instance.new("Part") handle.Name = "Handle" handle.Size = Vector3.new(2, 2, 2) handle.BrickColor = BrickColor.Red() handle.CanCollide = false handle.Parent = tool tool.Equipped:Connect(function() local mouse = player:GetMouse() local spinForce local lockForce local spinning = false local savedCFrame local originalProperties = {} local function cleanup() if not spinning then return end spinning = false if spinForce then spinForce:Destroy() spinForce = nil end if lockForce then lockForce:Destroy() lockForce = nil end -- Restore physics for part, props in pairs(originalProperties) do if part and part.Parent then part.CustomPhysicalProperties = props end end originalProperties = {} hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero if savedCFrame then hrp.CFrame = savedCFrame end humanoid:ChangeState(Enum.HumanoidStateType.GettingUp) end mouse.Button1Down:Connect(function() if spinning then return end local target = mouse.Target if not target or not target:IsA("BasePart") or target.Anchored then return end spinning = true savedCFrame = hrp.CFrame local hoverHeight = 0.75 -- Increase density massively for _, part in pairs(character:GetDescendants()) do if part:IsA("BasePart") then originalProperties[part] = part.CustomPhysicalProperties part.CustomPhysicalProperties = PhysicalProperties.new( 999999, 1, 0.5, 1, 1 ) end end -- Lock force lockForce = Instance.new("BodyPosition") lockForce.MaxForce = Vector3.new(1e9, 1e9, 1e9) lockForce.P = 1e7 lockForce.D = 5000 lockForce.Parent = hrp -- Spin force spinForce = Instance.new("BodyAngularVelocity") spinForce.AngularVelocity = Vector3.new(0, 900, 0) spinForce.MaxTorque = Vector3.new(1e9, 1e9, 1e9) spinForce.P = 1e7 spinForce.Parent = hrp task.spawn(function() local maxFlingVelocity = 120 while spinning do task.wait() if not target or not target.Parent then cleanup() break end local targetCharacter = target:FindFirstAncestorOfClass("Model") local targetHRP = targetCharacter and targetCharacter:FindFirstChild("HumanoidRootPart") if targetHRP then -- Movement prediction local velocity = targetHRP.AssemblyLinearVelocity local predictionTime = 0.15 local predictedPosition = targetHRP.Position + (velocity * predictionTime) lockForce.Position = predictedPosition + Vector3.new(0, hoverHeight, 0) -- Detect successful fling if velocity.Magnitude > maxFlingVelocity then cleanup() break end else -- Normal part follow lockForce.Position = target.Position + Vector3.new(0, hoverHeight, 0) local destroyHeight = workspace.FallenPartsDestroyHeight local minSafeHeight = destroyHeight + 50 -- 5 studs above kill floor if hrp.Position.Y < minSafeHeight then hrp.CFrame = CFrame.new( hrp.Position.X, minSafeHeight, hrp.Position.Z ) end end end end) -- Safety timeout (never get stuck) task.delay(2, function() if spinning then cleanup() end end) end) tool.Unequipped:Connect(cleanup) end) end -- First spawn if player.Character then giveTool(player.Character) end -- Respawns player.CharacterAdded:Connect(giveTool)