Advertisement
RuizuKun_Dev

Neck.lua

Jan 6th, 2022
1,759
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.86 KB | None | 0 0
  1. -- Put this under StarterPlayerScripts
  2.  
  3. local Players = game:GetService("Players")
  4. local localPlayer = Players.LocalPlayer
  5. local character: Model
  6. local humanoid: Humanoid
  7. local rootpart: Part
  8. local neck: Motor6D
  9.  
  10. local RunService = game:GetService("RunService")
  11.  
  12. local currentCamera: Camera = workspace.CurrentCamera
  13.  
  14. local connections = {}
  15.  
  16. function connections.add(name: string, connection: RBXScriptConnection)
  17.     connections[name] = connection
  18. end
  19.  
  20. function connections.remove(name: string)
  21.     connections[name]:Disconnect()
  22.     connections[name] = nil
  23. end
  24.  
  25. local playerUtil = {}
  26.  
  27. function playerUtil.handleLocalCharacter(callbacks)
  28.     character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
  29.  
  30.     local function characteradded(addedCharacter: Model)
  31.         character = addedCharacter
  32.         humanoid = character:WaitForChild("Humanoid")
  33.         rootpart = humanoid.RootPart
  34.  
  35.         for _, callback in ipairs(callbacks.CharacterAdded) do
  36.             callback(character)
  37.         end
  38.  
  39.         connections.add(
  40.             "Died",
  41.             humanoid.Died:Connect(function()
  42.                 for _, callback in ipairs(callbacks.Died) do
  43.                     callback(humanoid)
  44.                 end
  45.             end)
  46.         )
  47.     end
  48.  
  49.     task.spawn(characteradded, character)
  50.     localPlayer.CharacterAdded:Connect(characteradded)
  51. end
  52.  
  53. task.spawn(playerUtil.handleLocalCharacter, {
  54.     CharacterAdded = {
  55.         function()
  56.             neck = character:FindFirstChild("Neck", true)
  57.         end,
  58.  
  59.         function()
  60.             connections.add(
  61.                 "Neck",
  62.                 RunService.RenderStepped:Connect(function()
  63.                     if neck then
  64.                         local cameraDirection = rootpart.CFrame:ToObjectSpace(currentCamera.CFrame).LookVector
  65.  
  66.                         neck.C0 = CFrame.new(0, neck.C0.Y, 0)
  67.                             * CFrame.Angles(0, -cameraDirection.X, 0)
  68.                             * CFrame.Angles(cameraDirection.Y, 0, 0)
  69.                     end
  70.                 end)
  71.             )
  72.         end,
  73.     },
  74.     Died = {
  75.         function()
  76.             connections.remove("Died")
  77.             connections.remove("Neck")
  78.         end,
  79.     },
  80. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement