Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local RunService = game:GetService('RunService')
- local Player = game.Players.LocalPlayer
- local Character = Player.Character
- local Humanoid = Character:WaitForChild('Humanoid')
- local HumanoidRootPart = Character:WaitForChild('HumanoidRootPart')
- local Torso = Character:WaitForChild('Torso')
- local RootJointOriginalC0 = HumanoidRootPart.RootJoint.C0
- local NeckOriginalC0 = Torso.Neck.C0
- local RightHipOriginalC0 = Torso['Right Hip'].C0
- local LeftHipOriginalC0 = Torso['Left Hip'].C0
- local Motor6DUpdate = game.ReplicatedStorage.Motor6DUpdate
- local PlayersTable = {
- }
- --Settings
- local RangeOfMotion = 45
- local RangeOfMotionTorso = 90 - RangeOfMotion
- local RangeOfMotion2 = RangeOfMotion/140
- local LerpSpeed = 0.005
- --ResultsVariables
- local RightHipResult = CFrame.new()
- local LeftHipResult = CFrame.new()
- local RootJointResult = CFrame.new()
- local NeckResult = CFrame.new()
- --Main code
- RangeOfMotion = math.rad( RangeOfMotion )
- RangeOfMotionTorso = math.rad( RangeOfMotionTorso )
- RunService.RenderStepped:Connect(function( dt )
- local DirectionOfMovement = HumanoidRootPart.CFrame:VectorToObjectSpace(HumanoidRootPart.AssemblyLinearVelocity)
- DirectionOfMovement = Vector3.new( DirectionOfMovement.X / Humanoid.WalkSpeed, 0, DirectionOfMovement.Z / Humanoid.WalkSpeed )
- local XResult = (DirectionOfMovement.X * (RangeOfMotion - ( math.abs(DirectionOfMovement.Z) * (RangeOfMotion / 2) ) ) )
- local XResult2 = (DirectionOfMovement.X * (RangeOfMotion2 - ( math.abs(DirectionOfMovement.Z) * (RangeOfMotion2 / 2) ) ) )
- local XResultTorso = (DirectionOfMovement.X * (RangeOfMotionTorso - ( math.abs(DirectionOfMovement.Z) * (RangeOfMotionTorso / 2) ) ) )
- if DirectionOfMovement.Z > 0.1 then
- XResult *= -1
- XResult2 *= -1
- XResultTorso *= -1
- end
- RightHipResult = RightHipOriginalC0 * CFrame.new(-XResult2, 0, -math.abs(XResult2) + math.abs( -XResult2 ) ) * CFrame.Angles(0, -XResult, 0)
- LeftHipResult = LeftHipOriginalC0 * CFrame.new(-XResult2, 0, -math.abs(-XResult2) + math.abs( -XResult2 ) ) * CFrame.Angles(0, -XResult, 0)
- RootJointResult = RootJointOriginalC0 * CFrame.Angles( 0, 0, -XResultTorso )
- NeckResult = NeckOriginalC0 * CFrame.Angles( 0, 0, XResultTorso )
- Torso['Right Hip'].C0 = Torso['Right Hip'].C0:Lerp( RightHipResult, 1 - LerpSpeed ^ dt )
- Torso['Left Hip'].C0 = Torso['Left Hip'].C0:Lerp( LeftHipResult, 1 - LerpSpeed ^ dt )
- HumanoidRootPart.RootJoint.C0 = HumanoidRootPart.RootJoint.C0:Lerp( RootJointResult, 1 - LerpSpeed ^ dt )
- Torso.Neck.C0 = Torso.Neck.C0:Lerp( NeckResult, 1 - LerpSpeed ^ dt )
- for _, Player in PlayersTable do
- if Player.Player == nil then
- PlayersTable[Player] = nil
- continue
- end
- if game.Players:FindFirstChild(Player.Player.Name) == nil then
- PlayersTable[Player] = nil
- continue
- end
- Player.Torso['Right Hip'].C0 = Player.Torso['Right Hip'].C0:Lerp( Player.RightHipResult, 1 - LerpSpeed ^ dt )
- Player.Torso['Left Hip'].C0 = Player.Torso['Left Hip'].C0:Lerp( Player.LeftHipResult, 1 - LerpSpeed ^ dt )
- Player.HumanoidRootPart.RootJoint.C0 = Player.HumanoidRootPart.RootJoint.C0:Lerp( Player.RootJointResult, 1 - LerpSpeed ^ dt )
- Player.Torso.Neck.C0 = Player.Torso.Neck.C0:Lerp( Player.NeckResult, 1 - LerpSpeed ^ dt )
- end
- end)
- Motor6DUpdate.OnClientEvent:Connect(function(Player, RightHipResult, LeftHipResult, RootJointResult, NeckResult)
- local Character = Player.Character
- if Character == nil then return end
- local HumanoidRootPart = Character:FindFirstChild('HumanoidRootPart')
- local Torso = Character:FindFirstChild('Torso')
- if HumanoidRootPart == nil or Torso == nil then
- return
- end
- PlayersTable[Player] = {
- Player = Player,
- Character = Character,
- Torso = Torso,
- RightHipResult = RightHipResult,
- LeftHipResult = LeftHipResult,
- RootJointResult = RootJointResult,
- NeckResult = NeckResult,
- }
- end)
- while true do
- task.wait(0.25)
- Motor6DUpdate:FireServer( RightHipResult, LeftHipResult, RootJointResult, NeckResult )
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement