Shoulder joints do not load immediately for Rthro rigs upon CharacterAppearanceLoaded event

This bug is very specific and pertains to the two shoulder joints present in any R15 character.

Character.RightUpperArm.RightShoulder
Character.RightUpperArm.LeftShoulder

This bug occurs when you try to access the Part0 property of either of these joints right after the CharacterAppearanceLoaded event has fired on the server. If the arm in which the joint you are trying to access Part0 in has a mesh that is not the default blocky arms then the property will return nil. Otherwise, if you have the default blocky arms then the property will return the proper value (the UpperTorso) which is the expected behaviour.

As far as I can tell this bug has a 100% replication rate.

  1. Adjust your avatar such that it is in R15 mode and make sure to equip a custom mesh on at least one of the arms.
  2. Write some code (in a server script) that will fire the CharacterAppearanceLoaded event.
  3. When the event is fired try to access the Part0 property of the shoulder joint in the arm with the custom mesh.
  4. Alternatively compare the above steps against an avatar without a custom arm mesh.

This is the code I used in a script under the ServerScriptService:

game:GetService("Players").PlayerAdded:Connect(function(player)
	player.CharacterAppearanceLoaded:Connect(function(character)
		local humanoid = character:WaitForChild("Humanoid")
		if (humanoid.RigType == Enum.HumanoidRigType.R15) then
			local rShoulder = character:WaitForChild("RightUpperArm"):WaitForChild("RightShoulder")
			local lShoulder = character:WaitForChild("LeftUpperArm"):WaitForChild("LeftShoulder")
			
			print("Right shoulder", rShoulder.Part0)
			print("Left shoulder", lShoulder.Part0)
		end
	end)
end)

Here’s a placefile with the code above if you want to quickly jump in with your R15 avatar. Remember, you need to adjust the arms to a custom mesh to get the bug.

mesh arms bug.rbxl (15.9 KB)

The bug happens in both studio testing (via play button and server emulation) and also on an uploaded game on the client.

Hope that explains it well enough. Let me know if there’s any more questions.

3 Likes