Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Put this under StarterPlayerScripts
- local Players = game:GetService("Players")
- local localPlayer = Players.LocalPlayer
- local character: Model
- local humanoid: Humanoid
- local rootpart: Part
- local neck: Motor6D
- local RunService = game:GetService("RunService")
- local currentCamera: Camera = workspace.CurrentCamera
- local connections = {}
- function connections.add(name: string, connection: RBXScriptConnection)
- connections[name] = connection
- end
- function connections.remove(name: string)
- connections[name]:Disconnect()
- connections[name] = nil
- end
- local playerUtil = {}
- function playerUtil.handleLocalCharacter(callbacks)
- character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
- local function characteradded(addedCharacter: Model)
- character = addedCharacter
- humanoid = character:WaitForChild("Humanoid")
- rootpart = humanoid.RootPart
- for _, callback in ipairs(callbacks.CharacterAdded) do
- callback(character)
- end
- connections.add(
- "Died",
- humanoid.Died:Connect(function()
- for _, callback in ipairs(callbacks.Died) do
- callback(humanoid)
- end
- end)
- )
- end
- task.spawn(characteradded, character)
- localPlayer.CharacterAdded:Connect(characteradded)
- end
- task.spawn(playerUtil.handleLocalCharacter, {
- CharacterAdded = {
- function()
- neck = character:FindFirstChild("Neck", true)
- end,
- function()
- connections.add(
- "Neck",
- RunService.RenderStepped:Connect(function()
- if neck then
- local cameraDirection = rootpart.CFrame:ToObjectSpace(currentCamera.CFrame).LookVector
- neck.C0 = CFrame.new(0, neck.C0.Y, 0)
- * CFrame.Angles(0, -cameraDirection.X, 0)
- * CFrame.Angles(cameraDirection.Y, 0, 0)
- end
- end)
- )
- end,
- },
- Died = {
- function()
- connections.remove("Died")
- connections.remove("Neck")
- end,
- },
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement