local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local root = humanoid.RootPart
local runService = game:GetService("RunService")
local raycastOffset = CFrame.new(0, 4, -1) * CFrame.Angles(-math.pi/2, 0, 0)
local params = RaycastParams.new()
params.FilterDescendantsInstances = {character}
params.IgnoreWater = true
local weld = Instance.new("Weld")
weld.Part1 = root
weld.Parent = root
--local cam = workspace.CurrentCamera
runService.RenderStepped:Connect(function(dt)
if weld.Enabled then
weld.Enabled = false
weld.Part0 = nil
end
local rootCF = root.CFrame
if humanoid.Jump then
root:ApplyImpulse(rootCF.ZVector * root.AssemblyMass)
return
end
local rayCF = rootCF * raycastOffset
local rayPos = rayCF.Position
local rayDir = rayCF.LookVector * 6
local result = workspace:Raycast(rayPos, rayDir, params)
if result and result.Instance then
if result.Position.Y > rootCF.Position.Y + 1.5 then return end
if result.Instance.Name == "ledge" then
weld.Enabled = true
local move = humanoid.MoveDirection:Dot(rootCF.LookVector)
weld.C0 = result.Instance.CFrame:ToObjectSpace(rootCF) * CFrame.new(0, dt*move*5, -dt*move)
weld.Part0 = result.Instance
humanoid:ChangeState(Enum.HumanoidStateType.Climbing)
end
end
end)