Advertisement
Guest User

Directional walking

a guest
Nov 19th, 2023
3,428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.97 KB | Source Code | 0 0
  1. local RunService = game:GetService('RunService')
  2.  
  3. local Player = game.Players.LocalPlayer
  4. local Character = Player.Character
  5. local Humanoid = Character:WaitForChild('Humanoid')
  6. local HumanoidRootPart = Character:WaitForChild('HumanoidRootPart')
  7. local Torso = Character:WaitForChild('Torso')
  8.  
  9. local RootJointOriginalC0 = HumanoidRootPart.RootJoint.C0
  10. local NeckOriginalC0 = Torso.Neck.C0
  11. local RightHipOriginalC0 = Torso['Right Hip'].C0
  12. local LeftHipOriginalC0 = Torso['Left Hip'].C0
  13.  
  14. local Motor6DUpdate = game.ReplicatedStorage.Motor6DUpdate
  15.  
  16. local PlayersTable = {
  17.    
  18. }
  19.  
  20. --Settings
  21.  
  22. local RangeOfMotion = 45
  23. local RangeOfMotionTorso = 90 - RangeOfMotion
  24. local RangeOfMotion2 = RangeOfMotion/140
  25. local LerpSpeed = 0.005
  26.  
  27. --ResultsVariables
  28.  
  29. local RightHipResult = CFrame.new()
  30. local LeftHipResult = CFrame.new()
  31. local RootJointResult = CFrame.new()
  32. local NeckResult = CFrame.new()
  33.  
  34.  
  35. --Main code
  36. RangeOfMotion = math.rad( RangeOfMotion )
  37. RangeOfMotionTorso = math.rad( RangeOfMotionTorso )
  38.  
  39. RunService.RenderStepped:Connect(function( dt )
  40.    
  41.     local DirectionOfMovement = HumanoidRootPart.CFrame:VectorToObjectSpace(HumanoidRootPart.AssemblyLinearVelocity)
  42.     DirectionOfMovement = Vector3.new( DirectionOfMovement.X / Humanoid.WalkSpeed, 0, DirectionOfMovement.Z / Humanoid.WalkSpeed )
  43.    
  44.     local XResult = (DirectionOfMovement.X * (RangeOfMotion - ( math.abs(DirectionOfMovement.Z) * (RangeOfMotion / 2) ) ) )
  45.     local XResult2 = (DirectionOfMovement.X * (RangeOfMotion2 - ( math.abs(DirectionOfMovement.Z) * (RangeOfMotion2 / 2) ) ) )
  46.     local XResultTorso = (DirectionOfMovement.X * (RangeOfMotionTorso - ( math.abs(DirectionOfMovement.Z) * (RangeOfMotionTorso / 2) ) ) )
  47.    
  48.     if DirectionOfMovement.Z > 0.1 then
  49.         XResult *= -1
  50.         XResult2 *= -1
  51.         XResultTorso *= -1
  52.     end
  53.    
  54.     RightHipResult = RightHipOriginalC0 * CFrame.new(-XResult2, 0, -math.abs(XResult2) + math.abs( -XResult2 ) ) * CFrame.Angles(0, -XResult, 0)
  55.     LeftHipResult = LeftHipOriginalC0 * CFrame.new(-XResult2, 0, -math.abs(-XResult2) + math.abs( -XResult2 ) ) * CFrame.Angles(0, -XResult, 0)
  56.     RootJointResult = RootJointOriginalC0 * CFrame.Angles( 0, 0, -XResultTorso )
  57.     NeckResult = NeckOriginalC0 * CFrame.Angles( 0, 0, XResultTorso )
  58.    
  59.     Torso['Right Hip'].C0 = Torso['Right Hip'].C0:Lerp( RightHipResult, 1 - LerpSpeed ^ dt )
  60.     Torso['Left Hip'].C0 = Torso['Left Hip'].C0:Lerp( LeftHipResult, 1 - LerpSpeed ^ dt )
  61.     HumanoidRootPart.RootJoint.C0 = HumanoidRootPart.RootJoint.C0:Lerp( RootJointResult, 1 - LerpSpeed ^ dt )
  62.     Torso.Neck.C0 = Torso.Neck.C0:Lerp( NeckResult, 1 - LerpSpeed ^ dt )
  63.    
  64.     for _, Player in PlayersTable do
  65.        
  66.         if Player.Player == nil then
  67.             PlayersTable[Player] = nil
  68.             continue
  69.         end
  70.         if game.Players:FindFirstChild(Player.Player.Name) == nil then
  71.             PlayersTable[Player] = nil
  72.             continue
  73.         end
  74.        
  75.         Player.Torso['Right Hip'].C0 = Player.Torso['Right Hip'].C0:Lerp( Player.RightHipResult, 1 - LerpSpeed ^ dt )
  76.         Player.Torso['Left Hip'].C0 = Player.Torso['Left Hip'].C0:Lerp( Player.LeftHipResult, 1 - LerpSpeed ^ dt )
  77.         Player.HumanoidRootPart.RootJoint.C0 = Player.HumanoidRootPart.RootJoint.C0:Lerp( Player.RootJointResult, 1 - LerpSpeed ^ dt )
  78.         Player.Torso.Neck.C0 = Player.Torso.Neck.C0:Lerp( Player.NeckResult, 1 - LerpSpeed ^ dt )
  79.        
  80.     end
  81.    
  82. end)
  83.  
  84. Motor6DUpdate.OnClientEvent:Connect(function(Player, RightHipResult, LeftHipResult, RootJointResult, NeckResult)
  85.    
  86.     local Character = Player.Character
  87.     if Character == nil then return end
  88.     local HumanoidRootPart = Character:FindFirstChild('HumanoidRootPart')
  89.     local Torso = Character:FindFirstChild('Torso')
  90.     if HumanoidRootPart == nil or Torso == nil then
  91.         return
  92.     end
  93.     PlayersTable[Player] = {
  94.         Player = Player,
  95.         Character = Character,
  96.         Torso = Torso,
  97.         RightHipResult = RightHipResult,
  98.         LeftHipResult = LeftHipResult,
  99.         RootJointResult = RootJointResult,
  100.         NeckResult = NeckResult,
  101.     }
  102. end)
  103.  
  104. while true do
  105.     task.wait(0.25)
  106.     Motor6DUpdate:FireServer( RightHipResult, LeftHipResult, RootJointResult, NeckResult )
  107. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement