Script not working in game but working in studio

This script for rainbow rank works in Studio but not in game, how do I fix this?

local commands = {}

   function Create(ClassName)
   	return function(Properties)
   		local Obj = Instance.new(ClassName)
   		for i,v in pairs(Properties) do
   			if type(i) == 'number' then
   				v.Parent = Obj
   			else
   				Obj[i] = v
   			end
   		end
   		return Obj
   	end
   end
   function HandleCharacter(Player, Character)
   	local Custom = Character:WaitForChild('Head'):clone()
   	Custom.Name = 'AlbOverhead'
   	Custom.Parent = Character
   	Custom.face:Destroy()
   	Character.Head.Transparency = 1
   	Create'Weld'{
   		Name = 'CustomWeld';
   		Parent = Custom;
   		Part0 = Character.Head;
   		Part1 = Custom;
   	}
   	Create'BillboardGui'{
   		Name = 'Nametag';
   		Parent = Custom;
   		Size = UDim2.new(5, 0, 0.5, 0);
   		StudsOffset = Vector3.new(0, 2, 0);
   		Create'TextLabel'{
   			Name = 'NameLabel';
   			BackgroundTransparency = 1;
   			Size = UDim2.new(1, 0, 1, 0);
   			Position = UDim2.new(0, 0, -0.8, 0);
   			Font = 'SourceSans';
   			Text = Character.Name;
   			TextColor3 = Color3.new(1, 1, 1);
   			TextScaled = true;
   			TextStrokeTransparency = 1;
   		};
   		Create'TextLabel'{
   			Name = 'RankLabel';
   			BackgroundTransparency = 1;
   			Size = UDim2.new(1, 0, 0.92, 0);
   			Position = UDim2.new(0, 0, 0.2, 0);
   			TextTransparency = .1;
   			Font = 'SourceSansLight';
   			FontSize = Enum.FontSize.Size12;
   			Text = Player:GetRoleInGroup(10004933);
   			TextColor3 = Color3.new(1, 1, 1);
   			TextScaled = true;
   			TextStrokeTransparency = 0.8;
   		};
   	}

   	Custom.BrickColor = Character.Head.BrickColor
   	Character.Head.Changed:connect(function()
   		Character.Head.Transparency = 1
   		Custom.BrickColor = Character.Head.BrickColor
   	end)
   	Character.Head.Mesh.Changed:connect(function()
   		Custom:WaitForChild('Mesh').MeshId = Character.Head:WaitForChild('Mesh').MeshId
   	end)
   end
   local rainbow = function(callback)
   	local frequency = 0.1
   	local i = 0 
   	while true do wait()
   		local red = math.sin(frequency*i + 0)*127+128 
   		local green = math.sin(frequency*i + 2*math.pi/3)*127+128 
   		local blue = math.sin(frequency*i + 4*math.pi/3)*127+128 
   		callback(Color3.new(red/255,green/255,blue/255)) i = i+1 
   	end end 
   function HandlePlayer(Player)
   	if Player.Character then
   		HandleCharacter(Player, Player.Character)
   	end
   	Player.CharacterAdded:connect(function(Character) HandleCharacter(Player, Character) end)
   	if Player.UserId == 536569813 then
   		Player.CharacterAdded:connect(function(char) local label = char:WaitForChild("AlbOverhead") 
   			coroutine.resume(coroutine.create(rainbow),function(color)label.Nametag.RankLabel.TextColor3 = Color3.new(color.r,color.g,color.b)end) 
   		end)
   	end
   end
   game.Players.PlayerAdded:connect(function(b)
   	HandlePlayer(b)
   end)
   for i,v in pairs(game.Players:GetPlayers()) do
   	HandlePlayer(v) 
   end

In-game: Screenshot by Lightshot
In Studio (working): Screenshot by Lightshot

It works now, you have to reset and it will work!