Probably multiple things but this question is very vague. Also open your output.
One thing it could be is that there could be a form of yielding before the event was assigned. If the player joins before the PlayerAdded was assigned, the function which is connected to the event won't be called with that player as an argument.
I suggest iterating for the current players in the server after assigning PlayerAdded.
Sample:
local PlayerAdded = function()
print('wow potato')
end
game.Players.PlayerAdded:Connect(PlayerAdded)
for _,a in pairs(game.Players:GetPlayers())do
PlayerAdded(a)
end
Another thing I could think of is that the function in CharacterAdded could've ran too fast and errored while the character is still loading.
For this problem, I suggest waiting for the children using WaitForChild. Note: If you use WaitForChild with one argument would show a warn message, to get around this, insert a second argument of value math.huge.
Sample:
character:WaitForChild('Head',math.huge):WaitForChild('face',10):Destroy()
2 comments
i can confirm that the character loaded in as i added a line to make it print if the head and decal was found so i can confirm that. My problem is that i cant destroy or change the decal id
Open your output, are there any errors?