Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Ledge script only working in a loop. Any ways to make it cleaner?

Asked by
Jirozu 71
3 years ago
Edited 3 years ago

Explanation:

For a couple of days, I've been learning how to make a ledge grab and a wall jump system and have gotten a fairly decent understanding. But I've run into some quality-of-life things for the code that I want to tackle. So far, the script below will only work properly (e.x: find a ledge proper ledge and wall) if I put it in a loop. I wanted to see if I could make the code look better without the loop because if I remove the loop, I simply will only get the wall. Can I get a hand with this?

Code:

-- Ledge Detection
local ledge = false
local point1 = root.CFrame.p
local point2 = root.CFrame.lookVector * 5

local orientation = false
local rot = character.HumanoidRootPart.CFrame - character.HumanoidRootPart.CFrame.p

for i = 1, 25 do
    point1 = point1 + Vector3.new(0, .3, 0)
    point2 = point2 + Vector3.new(0, .3, 0)
    local ray = Ray.new(point1, point2)
    local hit, pos, normal = workspace:FindPartOnRay(ray, game.Workspace.Living)
    if pos and hit and (hit.Name ~= "Branches" or hit.Name ~= "Leaves" or hit.Name ~= "BranchPart") then
        if hit.Name ~= "NoClimb" or hit.Name ~= "No_Climb" then
            if not orientation then
                orientation = pos
            end
        end
    end
    if not hit and orientation then
        ledge = true
    end
end

-- Decision
if hit then
Remotes.Inputs:FireServer(plr, {Type = "Special", Button = "Wall"});
if not ledge then
    print("Wall")
    -- Body Pos + Body Velocity
else
    print("Ledge")
    -- Body Pos + Lerp Or Tween
    end
end

Answer this question