Custom character shows on server but not on client

I’m not too sure for certain if this is a scripting issue but I’ll go with it.

So I’m making a Five Nights at Freddy’s game that has a Custom Night in it where you can select who is enabled and how difficult they are. I have that part all done for now, but there’s something up with the importing of characters from ReplicatedStorage.

Essentially, the client sends a table with each characters name and their difficulty. The server then goes through the table and if they character has a difficulty higher than 1, clones a template from ReplicatedStorage and puts it into a workspace folder.

The problem is, when the character gets put into the workspace.NPCs folder, all their custom components just disappear. They’re still there, toggling to server view shows all the parts are visible and in the explorer, but on the client they are nonexistant. The explorer shows they are gone. The problem is that there is a dummy of the character that HASN’T been imported but is exactly the same, and that Is visible to the client. So it’s not that the meshes don’t load, as they show up for the dummy.

Even weirder is that, beforehand, when I hadn’t built my custom night UI, the script was that the player joins, a character is imported for them to surviva against. But now, this new system just messes it up and I don’t know why as it is pretty much the same script. I disabled all scripts in the character and they don’t change it.

Client script (part that sends to server):

local function getCharInfo()
	local ntbl = {}
	local characters = script.Parent.Characters:GetChildren()
	for _, char in pairs(characters) do
		if char:IsA('Frame') and char:FindFirstChild('CurrentDifficulty') ~= nil then
			ntbl[#ntbl + 1] = {char.Name, char.CurrentDifficulty.Value}
	return ntbl

	script.Parent.Visible = false

Client script (part that clones all characters to workspace):

local events = game.ReplicatedStorage.Events
local nightSetupEvent = events.BeginNight

nightSetupEvent.OnServerEvent:Connect(function(plr, setup)
	-- Scan the table for all characters
	for _, char in pairs(setup) do
		if char[2] ~= 0 then -- 0 = not enabled
			print(char[1] .. ' is enabled this night')
			character = game.ReplicatedStorage.NPC:FindFirstChild(char[1])
			if character then
				print('found char')
				npc = character:Clone()
				npc.Parent = workspace.NPCs
				if npc:FindFirstChild('PlayerToChase') ~= nil then
					npc.PlayerToChase.Value = plr.Name
					npc.HumanoidRootPart.CFrame = workspace.Endoskeleton1Spawn.CFrame +, 2, 0)

Here is the layout of the “Endoskeleton1”, which is my current testing character:
Disabling all of the scripts inside did nothing. No scripts destroy or change anything to do with the parts inside the character. The only part that shows up is the Hitbox part, meaning all my enemies are floating transparent boxes.

This issue occurs in the live client too, so it’s something with my game.

I have looked this up and did find a similar issue but that issue was a chance thing and this happens 100% of the time.

If I need to attach a place file, let me know and I’ll do that.
If any other info is required I will do my best to find it too, just let me know as well.

Sorry for such a long post, hope you can help me out here.

Maybe you can try to remove the makejoints() function and see what happens? If that doesn’t work try confirming the client has seen (as in it appears in the workspace) the model before running the rest of the script. You can do this by using a remotefunction (a function to pause the current script until it yields) sent to the client that waits until there is a model in the workspace called ‘endoskeleton1’.

Removing MakeJoints() didn’t do anything, but when I saw your yielding part I decided to see if it was StreamingEnabled that caused the bug, and it was! I do want to use Streaming though, so would maybe Anchoring the character, wait for it to fully load then Unanchor work? Thanks for helping me identify that it was Streaming :slight_smile: