I know the answer u see the problem here is that when the player is added to a game so is there character and it happens at the same time so when u say game.Players.PlayerAdded that means that the players character was added along with it so sense its already been added doing a function such as character.added would give u an error sense there were no added characters after the player was added sense they're the same thing therefore they are added at the same time. all u have to do is put the following code in the StarterPlayer.StarterCharacterScripts file in the game
local gui = script:FindFirstChild("BillboardGui")
local character = script.Parent
local charhrp = character:FindFirstChild("HumanoidRootPart")
local guiclone = gui:Clone()
guiclone.Parent = charhrp
guiclone.Adornee = charhrp
i tested out this script and it works just fine and if u didnt know any script that u add to the StarterPlayer.StarterCharacterScripts file will be inside of the characters that join the game