Group Rank Tags Toggle

Hey there!
How can I make a Gui button that, when clicked, will toggle the player’s rank tag over their head to that of a different group, with a given id? Here’s my script so far:

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 = 'TastiesOverhead'
 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 = 'ArialBold';
   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 = 'SourceSansItalic';
   FontSize = Enum.FontSize.Size14;
   Text = Player:GetRoleInGroup(7827572);
   TextColor3 = Color3.new(1, 1, 1);
   TextScaled = false;
   TextStrokeTransparency = 1;
  };
 }

 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 == 0 or Player.UserId == 0 or Player.UserId == 0 or Player.UserId == 0 then
  Player.CharacterAdded:connect(function(char) local label = char:WaitForChild("TastiesOverhead") 
   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 

I don’t want it to change the rank tags of everyone in the server, though.

1 Like

I’m assuming you’re using a Module of some sort that allows you to create tags? If not, I believe your script is way too over complicated for its function.

Well, if you want to toggle the rank tags of someone, simply create a GUI with a button and a LocalScript, once that button is clicked you fire a RemoteEvent to inform the server of your request.

On a server script, you should toggle the “Visible” property of the Billboard GUI, which apparently is located in the player’s character.