Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Players = game:GetService("Players")
- local RunServince = game:GetService("RunService")
- local UserInputService = game:GetService("UserInputService")
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- local AnimationModule = require(ReplicatedStorage:WaitForChild("Animations"))
- local Unbinds = require(script:WaitForChild("Unbinds"))
- local ZoomDistance = require(script:WaitForChild("ZoomDistance"))
- local Data = {}
- Data.LocalPlayer = Players.LocalPlayer
- Data.Character = Data.LocalPlayer.Character or Data.LocalPlayer.CharacterAdded:Wait()
- Data.Humanoid = Data.Character:WaitForChild("Humanoid") :: Humanoid
- Data.Animator = Data.Humanoid:WaitForChild("Animator") :: Animator
- Data.AnimationTracks = AnimationModule.GetAnimations(Data.Animator) :: AnimationModule.AnimPack
- Data.MovementTracks = nil
- Data.Humanoid.JumpHeight = 0
- Data.Humanoid.JumpPower = 0
- Data.TrackData = {
- [Data.AnimationTracks.Crouch.Moving] = 8
- }
- Data.CurrentMovingSpeed = 0
- Data.BaseSpeed = 12
- Data.SpeedModifiers = {}
- Data.States = {}
- Data.States.Crouching = {}
- Data.States.Crouching.Enter = function()
- Data.SpeedModifiers.Crouch = -6
- if Data.MovementTracks then
- local OldTracks = Data.MovementTracks
- for i, v in OldTracks do
- v:Stop()
- end
- Data.MovementTracks = nil
- end
- Data.MovementTracks = Data.AnimationTracks.Crouch
- end
- Data.States.Crouching.Exit = function()
- Data.SpeedModifiers.Crouch = nil
- local CrouchTracks = Data.MovementTracks
- Data.MovementTracks = nil
- for i, v in CrouchTracks do
- v:Stop()
- end
- end
- Data.States.Sprinting = {}
- Data.States.Sprinting.Enter = function()
- Data.SpeedModifiers.Sprint = 8
- end
- Data.States.Sprinting.Exit = function()
- Data.SpeedModifiers.Sprint = nil
- end
- local function GetSpeedModifier()
- local sum = 0
- for i, v in Data.SpeedModifiers do
- sum += v
- end
- return sum
- end
- Data.Humanoid.Running:Connect(function(Speed)
- Data.CurrentMovingSpeed = Speed
- end)
- RunServince.RenderStepped:Connect(function()
- local SpeedModifier = GetSpeedModifier()
- local CurrentSpeed = Data.BaseSpeed + SpeedModifier
- Data.Humanoid.WalkSpeed = CurrentSpeed
- if Data.MovementTracks then
- if Data.Humanoid.MoveDirection.Magnitude > 0 then
- if not Data.MovementTracks.Moving.IsPlaying then
- Data.MovementTracks.Moving:Play()
- end
- if Data.MovementTracks.Idle.IsPlaying then
- Data.MovementTracks.Idle:Stop()
- end
- Data.MovementTracks.Moving:AdjustSpeed(Data.CurrentMovingSpeed / Data.TrackData[Data.MovementTracks.Moving])
- else
- if Data.MovementTracks.Moving.IsPlaying then
- Data.MovementTracks.Moving:Stop()
- end
- if not Data.MovementTracks.Idle.IsPlaying then
- Data.MovementTracks.Idle:Play()
- end
- end
- end
- end)
- local function ExitAllStates()
- for i, v in Data.States do
- v[Data.Character] = nil
- v.Exit()
- end
- end
- local function ToggleCrouch()
- if Data.States.Crouching[Data.Character] then
- Data.States.Crouching[Data.Character] = nil
- Data.States.Crouching.Exit()
- else
- Data.States.Crouching[Data.Character] = true
- Data.States.Crouching.Enter()
- end
- end
- local Inputs = {
- -- Crouch
- [Enum.KeyCode.LeftControl] = ToggleCrouch,
- [Enum.KeyCode.ButtonL1] = ToggleCrouch,
- -- Sprint
- [Enum.KeyCode.LeftShift] = Data.States.Sprinting.Enter,
- [Enum.KeyCode.ButtonL1] = Data.States.Sprinting.Enter,
- }
- local ReleaseInput = {
- -- Sprint
- [Enum.KeyCode.LeftShift] = Data.States.Sprinting.Exit,
- [Enum.KeyCode.ButtonL1] = Data.States.Sprinting.Exit,
- }
- UserInputService.InputBegan:Connect(function(Input, Gme)
- if Gme then return end
- local Action = Inputs[Input.KeyCode]
- if not Action then return end
- Action()
- end)
- UserInputService.InputEnded:Connect(function(Input, Gme)
- if Gme then return end
- local Action = ReleaseInput[Input.KeyCode]
- if not Action then return end
- Action()
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement