Super-Nostalgia-Zone/Player/EdgeWalking.client.lua

45 lines
1.3 KiB
Lua

local RunService = game:GetService("RunService")
local char = script.Parent
local rootPart = char:WaitForChild("HumanoidRootPart")
local platform = Instance.new("Part")
platform.Name = "NoForceField"
platform.TopSurface = 0
platform.BottomSurface = 0
platform.BrickColor = BrickColor.new("Bright orange")
platform.Size = Vector3.new(5, 1, 2)
platform.Anchored = true
platform.Transparency = 1
local down = Vector3.new(0, -100, 0)
local platformOffset = Vector3.new(0, -.5, 0)
while wait() do
local start = rootPart.CFrame
local startPos = start.p
local startRay = Ray.new(startPos, start.lookVector * 5)
local hit, pos, norm = workspace:FindPartOnRay(startRay, char)
local floorCheckRay
local pass = false
if hit and hit.CanCollide and hit:IsGrounded() then
if hit:IsA("UnionOperation") or (not hit:IsA("Part") or hit.Shape.Name == "Block") then
local floorCheckRay = Ray.new(pos - (norm / 5), down)
local floor, floorPos = workspace:FindPartOnRayWithIgnoreList(floorCheckRay, {char, hit})
if floor and floor.CanCollide and startPos.Y - 2 > floorPos.Y then
floorPos = floorPos + platformOffset
platform.Parent = char
platform.CFrame = CFrame.new(Vector3.new(pos.X + norm.X, floorPos.Y, pos.Z + norm.Z),floorPos)
pass = true
end
end
end
if not pass then
platform.Parent = nil
end
end