I have a server script in this NPC and its suppose to look at the closest player, the problem is when I rotate the NPC and the player jumps it tilts it's head sideways to the right but tracks the player correctly when just walking around
local function observePlayer()
local cFrame0 = neck.C0
while true do
local player = findClosestPlayer()
if player then
local look = dummy.UpperTorso.CFrame.LookVector
local facingDirection = (player.HumanoidRootPart.Position - dummy.Head.Position).Unit
local dot = look:Dot(facingDirection)
local angle = math.deg(math.acos(dot))
local isNotAbove = dummy.PrimaryPart.CFrame:ToObjectSpace(player.PrimaryPart.CFrame).Y < 2
-- can be used to detect if dummy is above
local isInFront = dummy.PrimaryPart.CFrame:ToObjectSpace(player.PrimaryPart.CFrame).Z < 0
if isInFront and angle <= 60 then
local unit = -(dummy.PrimaryPart.CFrame.p - player.PrimaryPart.Position).unit
neck.C0 = cFrame0 * CFrame.new(Vector3.new(0,0,0), unit) * CFrame.Angles(math.rad(dummy.PrimaryPart.Orientation.X), -math.rad(dummy.PrimaryPart.Orientation.Y), 0)
end
end
wait()
end
end
