Run it
Copy the script and paste it into your executor.
-- LocalScript in StarterPlayerScripts
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = :()
player = Players.LocalPlayer
character = player.Character player.CharacterAdded:()
humanoid = character:()
rolling =
holdingRollKey =
rollDuration =
rollDistance =
rollAnimationId =
rollAnimation = .()
rollAnimation.AnimationId = rollAnimationId
animator = humanoid:() humanoid:()
rollAnimTrack = animator:(rollAnimation)
rollAnimTrack.Looped =
()
rolling =
rollAnimTrack:()
()
direction = character.PrimaryPart.CFrame.LookVector
startPosition = character.PrimaryPart.Position
targetPosition = startPosition + (direction * rollDistance)
rollStartTime = ()
connection
connection = RunService.RenderStepped:(()
elapsedTime = () - rollStartTime
elapsedTime > rollDuration
connection:()
holdingRollKey
()
()
rayOrigin = character.PrimaryPart.Position
rayDirection = direction * rollDistance * (elapsedTime / rollDuration)
raycastParams = RaycastParams.()
raycastParams.FilterDescendantsInstances = {character}
raycastParams.FilterType = .RaycastFilterType.Blacklist
raycastResult = :(rayOrigin, rayDirection, raycastParams)
raycastResult raycastResult.Instance.CanCollide
()
connection:()
progress = elapsedTime / rollDuration
newPosition = startPosition:(targetPosition, progress)
character:(.(newPosition, newPosition + direction))
)
()
rolling
rolling =
rollAnimTrack:()
()
UserInputService.InputBegan:((input, gameProcessed)
gameProcessed
input.KeyCode == .KeyCode.R
holdingRollKey =
()
)
UserInputService.InputEnded:((input, gameProcessed)
input.KeyCode == .KeyCode.R
holdingRollKey =
)