45 lines
1.3 KiB
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 |