I don't see whats wrong with this the hat is in serverstorage in a folder called DonatorItems and the hat is called Coney.
wait(2)
gpid = 235360162
hats = {"Coney"}
GPS = game:GetService("GamePassService")
function respawned(char)
player = game.Players:FindFirstChild(char.Name)
if char:FindFirstChild("Head") ~= nil then
if GPS:PlayerHasPass(player, gpid) then
for i = 1,#hats do
game.ServerStorage:FindFirstChild(hats[i]):Clone().Parent = player
end
else
end
end
end
game.Workspace.ChildAdded:connect(respawned)

4 comments
Any error in output?
Nope.
OH I FIGURED IT OUT IT NEEDS TO BE CHAR NOT PLAYER TO CLONE INTO!
A quick note: GamePassService:PlayerHasPass only updates once per game, so if you buy a game pass in the middle of the game, it will still return false. You should use MarketplaceService:PlayerOwnsAsset instead. http://wiki.roblox.com/index.php?title=API:Class/MarketplaceService/PlayerOwnsAsset