Quick actions

cmd+k|ctrl+k

Navigation

Languages

new collision test

Snippet info

Language

Lua

Visibility

public

Author

dinoturto

Created

2023-11-16T04:18:56.045563Z

Updated

2024-01-07T13:02:31.820258Z

local chr = owner.Character
local hum = chr:FindFirstChildWhichIsA("Humanoid")
chr.Parent = game:GetService("ReplicatedStorage")
script.Name = "fakeChrModel" .. owner.Name

local raycastParams = RaycastParams.new()
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
raycastParams.IgnoreWater = true
raycastParams.RespectCanCollide = true
raycastParams.FilterDescendantsInstances = {script}

local function createPart(n, s, m, c, t, p)
	local limb = Instance.new("Part")
	limb.Name = n
	limb.Size = s
	limb.Material = m
	limb.Color = c
	limb.Transparency = t
	limb.Parent = p
	limb.CanCollide = false
	limb.CanQuery = false
	limb.Anchored = true
	limb.Locked = true

	return limb
end

local previousCF = chr.HumanoidRootPart.Position

local function createChr()
	local fakeChr = Instance.new("Model")
	fakeChr.Name = "fakeChr" .. owner.Name
	fakeChr.Parent = script

	root = createPart("r", Vector3.new(2, 2, 1), Enum.Material.DiamondPlate, Color3.new(), 0, fakeChr)
	root.Position = previousCF
	cam = createPart("c", Vector3.new(1, 1, 1), Enum.Material.DiamondPlate, Color3.new(), 1, script)
end

createChr()

local vel = Vector3.new()
local floor
local gravity = 196.2
local iterations = 0
local maxIterations = 5

game:GetService("RunService").PostSimulation:Connect(function(dt)
    dt *= 60
    if script then
        if hum.Jump and floor then
            vel += Vector3.new(0, 0.3, 0)
        end
        
        local dy = Vector3.yAxis * dt * ((-gravity / 2) * dt - gravity * vel.Y)
        
        if hum.MoveDirection.Magnitude > 0 then
            root.CFrame = CFrame.lookAlong(root.Position, hum.MoveDirection)
            vel = vel:Lerp(Vector3.new(hum.MoveDirection.X, vel.Y, hum.MoveDirection.Z), 0.3)
        else
            vel = vel:Lerp(Vector3.new(0, vel.Y, 0), 0.3)
        end
        
        local rootDest = root.CFrame.Position + vel
        
        for i = -1, 1 do
            local rayFwd = workspace:Blockcast(root.CFrame, root.Size, (root.CFrame.LookVector / 2) * i, raycastParams)
            if rayFwd then
                local norm = rayFwd.Normal
                rootDest -= rootDest:Dot(norm) * norm
            end
        end
        
        for i = -1, 1, 2 do
            local raySide = workspace:Blockcast(root.CFrame, Vector3.new(1, 2, 1), root.CFrame.RightVector.Unit * i, params)
            if raySide then
                local pos, norm, dist = raySide.Position, raySide.Normal, raySide.Distance
                rootDest -= rootDest:Dot(norm) * norm
            end
        end
        
        local rayBottom = workspace:Blockcast(root.CFrame, root.Size, -Vector3.yAxis * 2 + dy, raycastParams)
        if rayBottom then
            local hit, pos = rayBottom.Instance, rayBottom.Position
            vel = Vector3.new(vel.X, 0, vel.Z)
            floor = true

            rootDest = Vector3.new(rootDest.X, pos.Y + 3, rootDest.Z)
            if hit.Velocity.Magnitude > 0 then
                root.Position += hit.Velocity / 60
            end
        else
            floor = false
            rootDest += dy
        end
        
        local rayTop = workspace:Blockcast(root.CFrame, root.Size, root.CFrame.UpVector * 1.5, raycastParams)
        if rayTop then
            vel = Vector3.new(vel.X, 0, vel.Z)
        end
        
        root.CFrame = root.CFrame:Lerp(CFrame.new(rootDest), 0.3)
        
        
        cam.CFrame = root.CFrame * CFrame.new(0, 1.5, 0)
    end
end)

local remote = Instance.new("RemoteEvent")
remote.Name = "KeybindConnection"
remote.Parent = owner.PlayerGui

NLS([[local s = workspace:FindFirstChild("fakeChrModel" .. owner.Name)
local fc = workspace:FindFirstChild("fakeChr" .. owner.Name)
local remote = script.Parent:WaitForChild("KeybindConnection")
workspace.CurrentCamera.CameraSubject = s:WaitForChild("c")

s.DescendantAdded:Connect(function(ch)
	if ch.Name == "c" then
		workspace.CurrentCamera.CameraSubject = ch
	end
end)]], owner.PlayerGui)
INFO