How can I fix this name-tag glitch?

Hey developers, I’m wondering why my name is is broken, whenever a player’s avatar is too tall it breaks their face. I obviously don’t want that in my cafe, any ideas why it could have happened, I’ll list someone’s picture of the bug.

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(0, 255, 0);
   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(4382793);
   TextColor3 = Color3.new(1, 1, 1);
   TextScaled = true;
   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 

Picture:

1 Like

i’d guess some sort of weird zfighting or offset issues.
why do you create a custom head in the first place?

I didn’t make it a old dev of mine did. I want to impove it but I don’t know what he did.

i’m assuming that’s to hide the default nametag? because you can do that with Humanoid.DisplayDistanceType

the whole script is kinda over the place, but using that property along with removing the whole part about a custom head should solve the issue

It’s to do with the offsetting, Rthtro can be a pain to predict but you should be able to keep it at a certain level above any character

1 Like