local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local function isRagdolled(value) return value == true or value == 1 end local function resetTransparency(character) for _, part in ipairs(character:GetDescendants()) do if part:IsA("BasePart") or part:IsA("Decal") then part.LocalTransparencyModifier = 0 end end end local renderConnection local inputConnection local ragdolledConnection local yaw, pitch = 0, -0.15 local distance = 12 local minDistance, maxDistance = 5, 20 local camera = workspace.CurrentCamera local function onInputChanged(input) if input.UserInputType == Enum.UserInputType.MouseMovement then yaw -= input.Delta.X * 0.003 pitch = math.clamp(pitch - input.Delta.Y * 0.003, -1.2, 1.2) elseif input.UserInputType == Enum.UserInputType.MouseWheel then distance = math.clamp(distance - input.Position.Z * 2, minDistance, maxDistance) end end local function updateCamera(value) local ragdollActive = isRagdolled(value) local character = player.Character if not character then return end local humanoid = character:FindFirstChildOfClass("Humanoid") local head = character:FindFirstChild("Head") if renderConnection then renderConnection:Disconnect() renderConnection = nil end if inputConnection then inputConnection:Disconnect() inputConnection = nil end if ragdollActive then player.CameraMode = Enum.CameraMode.Classic camera.CameraType = Enum.CameraType.Scriptable UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter inputConnection = UserInputService.InputChanged:Connect(onInputChanged) renderConnection = RunService.RenderStepped:Connect(function() resetTransparency(character) if head and head.Parent then local rot = CFrame.Angles(0, yaw, 0) * CFrame.Angles(pitch, 0, 0) local camPos = head.Position + rot:VectorToWorldSpace(Vector3.new(0, 0, distance)) camera.CFrame = CFrame.new(camPos, head.Position) end end) else camera.CameraType = Enum.CameraType.Custom if humanoid then camera.CameraSubject = humanoid end UserInputService.MouseBehavior = Enum.MouseBehavior.Default end end local function hookRagdolled(character) if ragdolledConnection then ragdolledConnection:Disconnect() ragdolledConnection = nil end local stats = player:WaitForChild("stats") local ragdolled = stats:WaitForChild("ragdolled") local humanoid = character:WaitForChild("Humanoid", 5) if humanoid then humanoid.Died:Connect(function() ragdolled.Value = true end) end ragdolledConnection = ragdolled.Changed:Connect(updateCamera) updateCamera(ragdolled.Value) end player.CharacterAdded:Connect(function(character) task.wait(0.1) hookRagdolled(character) end) if player.Character then hookRagdolled(player.Character) end