--[[ Head/Waist Follow Mouse/Camera Script with Camera Tilt Effect + Death & FirstPerson Handling ]] wait() --[Pre-Funcs]: local Ang = CFrame.Angles local aSin = math.asin local aTan = math.atan --[Constants]: local Cam = workspace.CurrentCamera local Plr = game.Players.LocalPlayer local Mouse = Plr:GetMouse() local function GetCharacter() return Plr.Character or Plr.CharacterAdded:Wait() end local function Setup() local Body = GetCharacter() local Head = Body:WaitForChild("Head") local Hum = Body:WaitForChild("Humanoid") local Core = Body:WaitForChild("HumanoidRootPart") local IsR6 = Hum.RigType.Value == 0 local Trso = IsR6 and Body:WaitForChild("Torso") or Body:WaitForChild("UpperTorso") local Neck = IsR6 and Trso:WaitForChild("Neck") or Head:WaitForChild("Neck") local Waist = not IsR6 and Trso:WaitForChild("Waist") return { Body = Body, Head = Head, Hum = Hum, Core = Core, IsR6 = IsR6, Trso = Trso, Neck = Neck, Waist = Waist, NeckOrgnC0 = Neck.C0, WaistOrgnC0 = (not IsR6 and Waist and Waist.C0) or nil } end local characterData = Setup() --[Settings]: local MseGuide = false local TurnCharacterToMouse = false local HeadHorFactor = 0.5 local HeadVertFactor = 0.5 local BodyHorFactor = 0.5 local BodyVertFactor = 0.5 local UpdateSpeed = 0.5 local cameraShakeEnabled = false local cameraTiltAmount = 8 local currentTilt = 0 --[Toggle Character Turning to Mouse]: if TurnCharacterToMouse then MseGuide = true HeadHorFactor = 0 BodyHorFactor = 0 end --[Input Handling]: game:GetService("UserInputService").InputBegan:Connect(function(input, gpe) if gpe then return end if input.KeyCode == Enum.KeyCode.T then cameraShakeEnabled = not cameraShakeEnabled end end) --[Render Loop]: game:GetService("RunService").RenderStepped:Connect(function() local data = characterData local Hum = data.Hum local Head = data.Head local Trso = data.Trso local Neck = data.Neck local Waist = data.Waist local NeckOrgnC0 = data.NeckOrgnC0 local WaistOrgnC0 = data.WaistOrgnC0 local Core = data.Core -- تحديث تلقائي في حال موت اللاعب if Hum.Health <= 0 then return end -- التحقق من منظور الكاميرا (شخص أول) local isFirstPerson = (Cam.Focus.Position - Cam.CFrame.Position).Magnitude < 1 if not isFirstPerson then -- رأس وخصر يتبعان الماوس local CamCF = Cam.CFrame if Head and Trso and Neck then local TrsoLV = Trso.CFrame.LookVector local HdPos = Head.Position local Dist, Diff if not MseGuide then Dist = (HdPos - CamCF.Position).Magnitude Diff = HdPos.Y - CamCF.Position.Y if not data.IsR6 and Waist then Neck.C0 = Neck.C0:Lerp(NeckOrgnC0 * Ang((aSin(Diff/Dist) * HeadVertFactor), -((HdPos - CamCF.Position).Unit:Cross(TrsoLV)).Y * HeadHorFactor, 0), UpdateSpeed/2) Waist.C0 = Waist.C0:Lerp(WaistOrgnC0 * Ang((aSin(Diff/Dist) * BodyVertFactor), -((HdPos - CamCF.Position).Unit:Cross(TrsoLV)).Y * BodyHorFactor, 0), UpdateSpeed/2) else Neck.C0 = Neck.C0:Lerp(NeckOrgnC0 * Ang(-(aSin(Diff/Dist) * HeadVertFactor), 0, -((HdPos - CamCF.Position).Unit:Cross(TrsoLV)).Y * HeadHorFactor), UpdateSpeed/2) end else local Point = Mouse.Hit.Position Dist = (HdPos - Point).Magnitude Diff = HdPos.Y - Point.Y if not data.IsR6 and Waist then Neck.C0 = Neck.C0:Lerp(NeckOrgnC0 * Ang(-(aTan(Diff/Dist) * HeadVertFactor), ((HdPos - Point).Unit:Cross(TrsoLV)).Y * HeadHorFactor, 0), UpdateSpeed/2) Waist.C0 = Waist.C0:Lerp(WaistOrgnC0 * Ang(-(aTan(Diff/Dist) * BodyVertFactor), ((HdPos - Point).Unit:Cross(TrsoLV)).Y * BodyHorFactor, 0), UpdateSpeed/2) else Neck.C0 = Neck.C0:Lerp(NeckOrgnC0 * Ang((aTan(Diff/Dist) * HeadVertFactor), 0, ((HdPos - Point).Unit:Cross(TrsoLV)).Y * HeadHorFactor), UpdateSpeed/2) end end end -- تدوير الجسم بالكامل if TurnCharacterToMouse then Hum.AutoRotate = false local lookPos = Vector3.new(Mouse.Hit.Position.X, Core.Position.Y, Mouse.Hit.Position.Z) Core.CFrame = Core.CFrame:Lerp(CFrame.new(Core.Position, lookPos), UpdateSpeed/2) else Hum.AutoRotate = true end end -- اهتزاز الكاميرا if cameraShakeEnabled and Cam.CameraSubject:IsDescendantOf(data.Body) then local headLook = Head.CFrame.LookVector local camLook = Cam.CFrame.LookVector local tiltInfluence = (headLook - camLook).X local targetTilt = math.clamp(tiltInfluence * cameraTiltAmount, -cameraTiltAmount, cameraTiltAmount) currentTilt = currentTilt + (targetTilt - currentTilt) * 0.3 else currentTilt = currentTilt * 0.9 end Cam.CFrame = Cam.CFrame * CFrame.Angles(0, 0, math.rad(currentTilt)) end)