local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local Player = Players.LocalPlayer local Camera = workspace.CurrentCamera local TOOL_NAME = "FlingMaster" local function giveTool() -- prevent duplicates if Player.Backpack:FindFirstChild(TOOL_NAME) or (Player.Character and Player.Character:FindFirstChild(TOOL_NAME)) then return end local tool = Instance.new("Tool") tool.Name = TOOL_NAME tool.RequiresHandle = false tool.CanBeDropped = false tool.Parent = Player.Backpack end giveTool() Player.CharacterAdded:Connect(function() task.wait(1) -- wait for backpack to load giveTool() end) local function isHoldingTool() local character = Player.Character if not character then return false end local tool = character:FindFirstChildOfClass("Tool") return tool and tool.Name == TOOL_NAME end local function getClosestToMouse() local mousePos = Player:GetMouse().Hit.Position local closestPlayer local closestDistance = math.huge for _, target in pairs(Players:GetPlayers()) do if target ~= Player and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then local targetPos = target.Character.HumanoidRootPart.Position local dist = (mousePos - targetPos).Magnitude if dist < closestDistance then closestDistance = dist closestPlayer = target end end end return closestPlayer end local SkidFling = function(TargetPlayer) local Character = Player.Character local Humanoid = Character and Character:FindFirstChildOfClass("Humanoid") local RootPart = Humanoid and Humanoid.RootPart local TCharacter = TargetPlayer.Character local THumanoid local TRootPart local THead local Accessory local Handle if TCharacter:FindFirstChildOfClass("Humanoid") then THumanoid = TCharacter:FindFirstChildOfClass("Humanoid") end if THumanoid and THumanoid.RootPart then TRootPart = THumanoid.RootPart end if TCharacter:FindFirstChild("Head") then THead = TCharacter.Head end if TCharacter:FindFirstChildOfClass("Accessory") then Accessory = TCharacter:FindFirstChildOfClass("Accessory") end if Accessory and Accessory:FindFirstChild("Handle") then Handle = Accessory.Handle end if Character and Humanoid and RootPart then if RootPart.Velocity.Magnitude < 50 then getgenv().OldPos = RootPart.CFrame end if THumanoid and THumanoid.Sit then return end local freezeCameraCFrame = Camera.CFrame local cameraConnection cameraConnection = RunService.RenderStepped:Connect(function() Camera.CFrame = freezeCameraCFrame end) if THead then workspace.CurrentCamera.CameraSubject = THead elseif not THead and Handle then workspace.CurrentCamera.CameraSubject = Handle elseif THumanoid and TRootPart then workspace.CurrentCamera.CameraSubject = THumanoid end if not TCharacter:FindFirstChildWhichIsA("BasePart") then cameraConnection:Disconnect() return end local FPos = function(BasePart, Pos, Ang) RootPart.CFrame = CFrame.new(BasePart.Position) * Pos * Ang Character:SetPrimaryPartCFrame(CFrame.new(BasePart.Position) * Pos * Ang) RootPart.Velocity = Vector3.new(9e7, 9e7 * 10, 9e7) RootPart.RotVelocity = Vector3.new(9e8, 9e8, 9e8) end local SFBasePart = function(BasePart) local TimeToWait = 2 local Time = tick() local Angle = 0 repeat if RootPart and THumanoid then if BasePart.Velocity.Magnitude < 50 then Angle = Angle + 100 FPos(BasePart, CFrame.new(0, 1.5, 0) + THumanoid.MoveDirection * BasePart.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(Angle),0 ,0)) task.wait() FPos(BasePart, CFrame.new(0, -1.5, 0) + THumanoid.MoveDirection * BasePart.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait() FPos(BasePart, CFrame.new(2.25, 1.5, -2.25) + THumanoid.MoveDirection * BasePart.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait() FPos(BasePart, CFrame.new(-2.25, -1.5, 2.25) + THumanoid.MoveDirection * BasePart.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait() FPos(BasePart, CFrame.new(0, 1.5, 0) + THumanoid.MoveDirection,CFrame.Angles(math.rad(Angle), 0, 0)) task.wait() FPos(BasePart, CFrame.new(0, -1.5, 0) + THumanoid.MoveDirection,CFrame.Angles(math.rad(Angle), 0, 0)) task.wait() else FPos(BasePart, CFrame.new(0, 1.5, THumanoid.WalkSpeed), CFrame.Angles(math.rad(90), 0, 0)) task.wait() FPos(BasePart, CFrame.new(0, -1.5, -THumanoid.WalkSpeed), CFrame.Angles(0, 0, 0)) task.wait() end else break end until BasePart.Velocity.Magnitude > 500 or BasePart.Parent ~= TargetPlayer.Character or TargetPlayer.Parent ~= Players or not TargetPlayer.Character == TCharacter or THumanoid.Sit or Humanoid.Health <= 0 or tick() > Time + TimeToWait end workspace.FallenPartsDestroyHeight = 0/0 local BV = Instance.new("BodyVelocity") BV.Name = "EpixVel" BV.Parent = RootPart BV.Velocity = Vector3.new(9e8, 9e8, 9e8) BV.MaxForce = Vector3.new(1/0, 1/0, 1/0) Humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, false) if TRootPart and THead then if (TRootPart.CFrame.p - THead.CFrame.p).Magnitude > 5 then SFBasePart(THead) else SFBasePart(TRootPart) end elseif TRootPart and not THead then SFBasePart(TRootPart) elseif not TRootPart and THead then SFBasePart(THead) elseif not TRootPart and not THead and Accessory and Handle then SFBasePart(Handle) else cameraConnection:Disconnect() return end BV:Destroy() Humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, true) -- Restore normal camera control cameraConnection:Disconnect() workspace.CurrentCamera.CameraSubject = Humanoid repeat RootPart.CFrame = getgenv().OldPos * CFrame.new(0, .5, 0) Character:SetPrimaryPartCFrame(getgenv().OldPos * CFrame.new(0, .5, 0)) Humanoid:ChangeState("GettingUp") for _, x in pairs(Character:GetChildren()) do if x:IsA("BasePart") then x.Velocity, x.RotVelocity = Vector3.new(), Vector3.new() end end task.wait() until (RootPart.Position - getgenv().OldPos.p).Magnitude < 25 else return end end RunService.RenderStepped:Connect(function() if UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) and isHoldingTool() then local target = getClosestToMouse() if target then SkidFling(target) end end end)