Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Variables--
- local UIS = game:GetService("UserInputService")
- local CAS = game:GetService("ContextActionService")
- local SP = game:GetService("StarterPlayer")
- local plr = game.Players.LocalPlayer
- local Freeze = "freezeMovement"
- local Character
- local Humanoid
- --Debounces--
- local Roll_Delay = 3
- local RollReady = true
- local SprintEnabled = script.Parent:WaitForChild("Sprint"):WaitForChild("SprintEnabled")
- --Anims--
- local Anims = {"rbxassetid://3500677723", --[["rbxassetid://2827609895"]]}
- --Functions--
- local function Roll(Key, IsTyping)
- --Character Checks
- if not Character or not Humanoid or not Character:IsDescendantOf(game.Workspace) or Humanoid:GetState() == Enum.HumanoidStateType.Dead then
- return
- else
- if RollReady == true and not IsTyping and Key.KeyCode == Enum.KeyCode.R and SprintEnabled.Value == false and Humanoid.Jump == false and Humanoid:GetState() ~= Enum.HumanoidStateType.Freefall then
- RollReady = false
- --Make and Choose animation
- local RollAnimation = Instance.new("Animation", Character)
- local AnimChoice = math.random(1, #Anims)
- RollAnimation.AnimationId = Anims[AnimChoice]
- RollAnimation.Name = "Roll Animation"
- --Save Original JP & WS
- local OriginalJP = Humanoid.JumpPower
- local OriginalWS = Humanoid.WalkSpeed
- --Find Target Position
- local TargetRoll = Character.HumanoidRootPart.Position + Character.HumanoidRootPart.CFrame.LookVector * 20
- --Load Animation and check if it loaded
- local LoadedAnimation
- local success, malfunction = pcall(function()
- LoadedAnimation = Humanoid:LoadAnimation(RollAnimation)
- end)
- --Check if Animation Loaded then proceed w/ the roll action
- if success then
- --Change WS & JP
- Humanoid.JumpPower = 0
- Humanoid.WalkSpeed = 30
- --Play Animation
- LoadedAnimation.Priority = Enum.AnimationPriority.Movement
- LoadedAnimation:Play()
- --Disable User Inputs using BuildThomas method
- CAS:UnbindAction(
- Freeze,
- function() return Enum.ContextActionResult.Sink end,
- false,
- unpack(Enum.PlayerActions:GetEnumItems())
- )
- Character:FindFirstChild("HumanoidRootPart").Size = Character:FindFirstChild("HumanoidRootPart").Size + Vector3.new(0, -1.25, 0)
- Character.Head.CanCollide = false
- Character.UpperTorso.CanCollide = false
- --Move Humanoid Until Animation Finishes
- repeat
- Humanoid:MoveTo(TargetRoll)
- wait()
- until LoadedAnimation.IsPlaying == false
- --Reset WS & JP, whilst destroying the animation
- Character:FindFirstChild("HumanoidRootPart").Size = Character:FindFirstChild("HumanoidRootPart").Size + Vector3.new(0, 1.25, 0)
- Character.Head.CanCollide = true
- Character.UpperTorso.CanCollide = true
- Humanoid.WalkSpeed = OriginalWS
- Humanoid.JumpPower = OriginalJP
- RollAnimation:Destroy()
- --Enable User Inputs using BuildThomas method
- CAS:UnbindAction(Freeze)
- --Wait Roll Delay
- wait(Roll_Delay)
- RollReady = true
- else
- --Warn the server, wait roll delay and make it ready again
- warn("Animation Issue: "..malfunction.." Try Again In a few seconds")
- wait(Roll_Delay)
- RollReady = true
- end
- end
- end
- end
- --Misc--
- local function CharacterAdded(NewCharacter)
- if NewCharacter and NewCharacter:WaitForChild("Humanoid") and NewCharacter.Humanoid.Health > 0 then
- wait(1)
- Character = NewCharacter
- Humanoid = Character.Humanoid
- end
- end
- if plr:FindFirstChild("Character") then
- local Feedback = CharacterAdded(plr.Character)
- if not Feedback then
- warn("No Humanoid Found!")
- end
- end
- local Feedback = plr.CharacterAdded:connect(CharacterAdded)
- if not Feedback then
- warn("CharacterAdded EVENT failed...")
- end
- --Events--
- UIS.InputBegan:Connect(Roll)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement