Character parts added twice during CharacterAdded

It appears that when a r15 user has a package equipped, during spawn, parts are added to their character only to be immediately removed and replaced again. This bug appears to only effect server scripts, and not client scripts.

This causes issues with people trying to do things to the character when they spawn, such as welding a part to the character.

Example:
RobloxStudioBeta_2018-06-14_06-48-39
This would simply fall to the ground rather than welding to the players torso. The part the weld was attached to gets removed immediately and replaced with a second one, so it’s connected to nothing.

2 Likes

This is a known issue with the current way of how packages load for characters. The solution is to add a small wait before you weld anything to the character

local function GiveBag(char, bagInfo)
    wait(.4)
      local bag = ServerStorage.Bags:FindFirstChild(bagInfo.Name):Clone()
      bag.Parent = char
      Weld(bag.PrimaryPart,char:WaitForChild("UpperTorso"))
end

I use delay(0.1,function() end)

This is not a bug – more so a side effect of how R15 characters are loaded. When creating your R15 character, Roblox inserts rbxasset://avatar/characterR15.rbxm as a baseline. Afterwards, it downloads your appearance from the site (similarly to Players:GetCharacterAppearanceAsync()) and replaces any body parts that aren’t using the default package. If your torso does not have a package applied, it will only be added once, but if the left arm has a package applied, the no-package arm will first be added and then again once replaced by the package arm.

You can wait for this to finish with Player.CharacterAppearanceLoaded. Example:

players.PlayerAdded:Connect(function(player)
    player.CharacterAdded:Connect(function(character)
        player.CharacterAppearanceLoaded:wait()

        print("Appearance final")
    end)
end)

Whenever you need to do anything with character limbs (e.g. set collision group, weld something to them, reference them in a variable), you should use CharacterAppearanceLoaded to make sure you’re using the final part.

7 Likes

Do you know if this event waits for accessories as well?

I’ve had issues in the past with accessories loading seconds after I’ve done awful, nefarious things to the character. I tried CharacterAppearanceLoaded but it didn’t seem to wait for accessories. I ended up just disabling character appearances altogether.

1 Like

I’d say it’s still a bug, something that’s intrusive and could likely be easily patched. It should at least get some documentation on the wiki, warning people about it.

It’s not – sorry. This is intentional by design.

You can post a thread in this category to request improvements to the wiki.

Years later and this post was helpful to my problem. I think this is still an issue. I tried to parent ballsocketconstraints to each character part. And no matter what I do it won’t parent. Even if I print out the parents, it says they are correct. But they simply don’t appear in workspace without that wait timer.

1 Like

This is still all intended behaviour, use CharacterAppearanceLoaded instead

1 Like