Gamepass rainbow nametags

Hello there! I am wondering how to make rainbow tags as a gamepass, if you have any suggestions how do I make this script to work only for the gamepass owners, please reply below!! :smiley:

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 = 'SourceSansBold';
			Text = Character.Name;
			TextColor3 = Color3.new(1, 1, 1);
			TextScaled = true;
			TextStrokeTransparency = 0.5;
		};
		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 = 'SciFi';
			FontSize = Enum.FontSize.Size12;
			Text = Player:GetRoleInGroup(ID HERE);
			TextColor3 = Color3.new(1, 1, 1);
			TextScaled = true;
			TextStrokeTransparency = 0.5;
		};
	}

	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)
	
		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); label.Nametag.NameLabel.TextColor3 = Color3.new(color.r,color.g,color.b)end) 
		end)
end
game.Players.PlayerAdded:connect(function(b)
	HandlePlayer(b)
end)
for i,v in pairs(game.Players:GetPlayers()) do
	 HandlePlayer(v) 
end
2 Likes

@SummaryManager

You could use an if statement in correlation with MarketplaceService:UserOwnsGamepassAsync().

local MS = game:GetService("MarketplaceService")
local gamepassid = 123 --Gamepass ID
game.Players.PlayerAdded:Connect(function(b)
	if MS:UserOwnsGamePassAsync(b.UserId, gamepassid ) then
		   HandlerPlayer(b)
	end
end)

Also, in this scenario, I don’t think that your for i,v in pairs loop would be necessary if you’re already listening for CharacterAdded in the HandlerPlayer function.

Hi, thanks. But can you provide that example in a code above because I’m a little confused here to put it.

1 Like
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 = 'SourceSansBold';
			Text = Character.Name;
			TextColor3 = Color3.new(1, 1, 1);
			TextScaled = true;
			TextStrokeTransparency = 0.5;
		};
		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 = 'SciFi';
			FontSize = Enum.FontSize.Size12;
			Text = Player:GetRoleInGroup(ID HERE);
			TextColor3 = Color3.new(1, 1, 1);
			TextScaled = true;
			TextStrokeTransparency = 0.5;
		};
	}

	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)
	
		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); label.Nametag.NameLabel.TextColor3 = Color3.new(color.r,color.g,color.b)end) 
		end)
end

local MS = game:GetService("MarketplaceService")
local gamepassid = 123 --Gamepass ID
game.Players.PlayerAdded:Connect(function(b)
	if MS:UserOwnsGamePassAsync(b.UserId, gamepassid ) then
		   HandlerPlayer(b)
	end
end)

6 Likes

It works, just when you move around (change your camera view) it’s a little bit glitchy. :confused:

Could you describe exactly how it’s being glitchy?

yeah sure well when you change camera’s view it starts to be white and rainbow , white … and rainbow…

Hmm. Could you send a Gif, Video, or Screenshot of it? I’m still not fully understanding what the issue is.

Try setting the BillboardGui’s LightInfluence to 0.

Hey there, I know this post is old but I found it in a search.

I’m trying to script one on my own but was wondering, where would the script go in explorer?

@SS4PPHIRE or @SummaryManager any chance you guys know?

I would recommend that you put it in ServerScriptService.

2 Likes