Nametag Handler attempting to index nil with holder error

Hey! I have a nametag handler and it seems to be giving me this error. I have tried searching and figuring it out on my yet, it doesn’t work.

https://gyazo.com/5846506efdc0be9a7c7ba32d6c860b93

Code:
print("[Stage 2/nil] Loading server "..script.Name);local startTick = tick()
local NameTagBind = game.ReplicatedStorage.Remotes.Binds.NameTag
local RankModule = require(game.ReplicatedStorage.GlobalModules.GroupRanks)
local function giveBaseTag(Player)
	local newTag = script.TagTemplate:Clone()
	newTag.Parent = Player.Character.Head
	newTag.Name = "Tag"
	newTag.Holder.Username.Text = Player:GetRoleInGroup(RankModule.Main[1]).." "..Player.Name
	newTag.Holder.AddRank.Visible = false
	
	if Player:GetRankInGroup(11359577) >= 8 then
		newTag.Holder.AddRank.TextColor3 = Color3.fromRGB(166, 12, 226)
		newTag.Holder.AddRank.Text = "OFFICER"
		newTag.Holder.AddRank.Visible = true
	elseif Player:GetRankInGroup(RankModule.Main[254]) >= RankModule.Main[254] then
		newTag.Holder.AddRank.TextColor3 = Color3.fromRGB(243, 204, 9)
		newTag.Holder.AddRank.Text = "HICOM"
		newTag.Holder.AddRank.Visible = true
	end
	if Player:GetRankInGroup(RankModule.Main[13]) == 13 then
		newTag.Holder.AddRank.TextColor3 = Color3.fromRGB(0, 170, 255)
		newTag.Holder.AddRank.Text = "DEVELOPER"
		newTag.Holder.Username.Text = "[X] Developer "..Player.Name
		newTag.Holder.AddRank.Visible = true
	end
	Player.Character.Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
	return newTag
end

NameTagBind.Event:Connect(function(Request,serverPackage)
	if Request == "setNametag" then
		local tag
		if serverPackage[2].Character and serverPackage[2].Character.Head:FindFirstChild("Tag") then
			serverPackage[2].Character.Head.Tag:Destroy()
		end
		if serverPackage[1] == "RoyalGuards" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Visible = true
			tag.Holder.Division.Text = "Royal Guards "..serverPackage[2]:GetRoleInGroup(RankModule.RG[1])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(255, 217, 25)
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Paladins" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Visible = true
			tag.Holder.Division.Text = "Paladins "..serverPackage[2]:GetRoleInGroup(RankModule.P[1])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(135, 96, 209)
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "MilitaryEnforcers" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Visible = true
			tag.Holder.Division.Text = "Military Enforcers "..serverPackage[2]:GetRoleInGroup(RankModule.ME[1])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(255, 0, 0)
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Mercenary" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Visible = true
			tag.Holder.Division.Text = "Mercenary "..serverPackage[2]:GetRoleInGroup(RankModule.M[1])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(175, 117, 0)
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Citizens" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Text = "Citizens"
			tag.Holder.Division.TextColor3 = serverPackage[2].TeamColor.Color
			tag.Holder.Username.Text = serverPackage[2].Name
			tag.Holder.Username.TextColor3 = --[[serverPackage[2].TeamColor.Color]]Color3.fromRGB(255, 255, 255)
			tag.Holder.Division.Visible = true
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Rebels" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Text = "Rebels"
			tag.Holder.Division.TextColor3 = serverPackage[2].TeamColor.Color
			tag.Holder.Username.Text = serverPackage[2].Name
			tag.Holder.Username.TextColor3 = --[[serverPackage[2].TeamColor.Color]]Color3.fromRGB(97, 0, 0)
			tag.Holder.Division.Visible = true
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Peacekeeper Corps" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Username.Text = ""
			tag.Holder.Division.Text = "Peacekeepers Corps "serverPackage[2]:GetRoleInGroup(RankModule.PKC[1])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(20,20,20)
			tag.Holder.Division.Visible = true
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Demolisher" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Username.Text = serverPackage[2].Name
			tag.Holder.Username.TextColor3 = --[[serverPackage[2].TeamColor.Color]]Color3.fromRGB(57, 115, 0)
			tag.Holder.Division.Text = "Demolisher"
			tag.Holder.Division.TextColor3 = BrickColor.new("Forest green").Color
			tag.Holder.Division.Visible = true
			tag.Holder.AddRank.Visible = false
		end
		local Humanoid = serverPackage[2].Character:WaitForChild("Humanoid")
		local HealthBar = tag.Holder.HealthBar -- Error
		local function updateBar()
			local bool,result = pcall(function()
				if not HealthBar or not HealthBar.Bar or not Humanoid then return end
				if Humanoid.Health ~= Humanoid.MaxHealth then
					HealthBar.Visible = true
					HealthBar.Bar:TweenSize(UDim2.new(Humanoid.Health/Humanoid.MaxHealth,0,1,0),"Out","Sine",0.2,true)
				else
					HealthBar.Visible = false
				end
			end)
		end
		Humanoid:GetPropertyChangedSignal("Health"):Connect(function()
			updateBar()
		end)
		updateBar()
	end
end)
print("[Stage 2/nil] Loaded server "..script.Name.." ("..tick()-startTick..")")

Please, help if anyone can.
1 Like

Can you give more information about what giveBaseTag() does? Are you sure that its even returning anything in the first place?

1 Like

I am not too sure if it is returning anything.

1 Like

if you could print what it returns? that would be great

I am not too sure if it is. Tbh I am not sure of what it means.

1 Like

it says attempt to index nil with holder because you are doing tag.Holder although tag is nil. tag is nil because you are doing tag = giveBaseTag(serverPackage[2]). this sets tag to nil because the function returns nothing. (returning, meaning return which is a keyword that can be used in functions to return something) for example this is how returning works:

-- Sorry for no indentations i wrote this in the devforum

local function idkahfldhf()
return 1+1
end

print(idkahfldhf()) -- prints "2" because the function returns 1+1 (which i'm sure you know that it equals to 2)

Ohh, I see. So how would I fix that now that I know the reasoning behind it?

1 Like

oh haha just noticed you already used return but could you do a print before it returns the newTag in the giveBaseTag function?

How would it work? Tbh I script not knowing what it does and when I get an error I try fixing it myself, then research, then devforum.

1 Like

if you are asking how return works, return just returns the value you put after it so you can put it in a variable like what you did, tag = giveBaseTag(serverPackage[2])

like i said, if you could print the newTag in the giveBaseTag function before the return it could give me an idea on why your code might not be working (and also show me what it prints of course)

Would this work?

local NameTagBind = game.ReplicatedStorage.Remotes.Binds.NameTag
local RankModule = require(game.ReplicatedStorage.GlobalModules.GroupRanks)
local function giveBaseTag(Player)
	local newTag = script.TagTemplate:Clone()
	newTag.Parent = Player.Character.Head
	newTag.Name = "Tag"
	newTag.Holder.Username.Text = Player:GetRoleInGroup(RankModule.Main[1]).." "..Player.Name
	newTag.Holder.AddRank.Visible = false
	
	if Player:GetRankInGroup(11359577) >= 8 then
		newTag.Holder.AddRank.TextColor3 = Color3.fromRGB(166, 12, 226)
		newTag.Holder.AddRank.Text = "OFFICER"
		newTag.Holder.AddRank.Visible = true
	elseif Player:GetRankInGroup(RankModule.Main[12]) >= RankModule.Main[12] then
		newTag.Holder.AddRank.TextColor3 = Color3.fromRGB(243, 204, 9)
		newTag.Holder.AddRank.Text = "HICOM"
		newTag.Holder.AddRank.Visible = true
	end
	if Player:GetRankInGroup(RankModule.Main[13]) == 13 then
		newTag.Holder.AddRank.TextColor3 = Color3.fromRGB(166, 12, 226)
		newTag.Holder.AddRank.Text = "DEVELOPER"
		newTag.Holder.Username.Text = "[X] Developer "..Player.Name
		newTag.Holder.AddRank.Visible = true
	end
	Player.Character.Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
	return newTag
end

NameTagBind.Event:Connect(function(Request,serverPackage)
	if Request == "setNametag" then
		local tag
		if serverPackage[2].Character and serverPackage[2].Character.Head:FindFirstChild("Tag") then
			serverPackage[2].Character.Head.Tag:Destroy()
		end
		if serverPackage[1] == "RoyalGuards" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Visible = true
			tag.Holder.Division.Text = "Royal Guards "..serverPackage[2]:GetRoleInGroup(RankModule.RG[12677099])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(255, 217, 25)
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Paladins" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Visible = true
			tag.Holder.Division.Text = "Paladins "..serverPackage[2]:GetRoleInGroup(RankModule.P[12652461])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(135, 96, 209)
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "MilitaryEnforcers" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Visible = true
			tag.Holder.Division.Text = "Military Enforcers "..serverPackage[2]:GetRoleInGroup(RankModule.ME[1])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(255, 0, 0)
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Mercenary" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Visible = true
			tag.Holder.Division.Text = "Mercenary "..serverPackage[2]:GetRoleInGroup(RankModule.M[1])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(175, 117, 0)
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Citizen" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Text = "Citizen"
			tag.Holder.Division.TextColor3 = serverPackage[2].TeamColor.Color
			tag.Holder.Username.Text = serverPackage[2].Name
			tag.Holder.Username.TextColor3 = --[[serverPackage[2].TeamColor.Color]]Color3.fromRGB(255,255,255)
			tag.Holder.Division.Visible = true
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Hostiles" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Division.Text = "Rebellion"
			tag.Holder.Division.TextColor3 = serverPackage[2].TeamColor.Color
			tag.Holder.Username.Text = serverPackage[2].Name
			tag.Holder.Username.TextColor3 = --[[serverPackage[2].TeamColor.Color]]Color3.fromRGB(255,255,255)
			tag.Holder.Division.Visible = true
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Peacekeeper Corps" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Username.Text = ""
			tag.Holder.Division.Text = "Peacekeepers Corps "serverPackage[2]:GetRoleInGroup(RankModule.PKC[1])
			tag.Holder.Division.TextColor3 = Color3.fromRGB(20,20,20)
			tag.Holder.Division.Visible = true
			tag.Holder.AddRank.Visible = false
		elseif serverPackage[1] == "Demolisher" then
			tag = giveBaseTag(serverPackage[2])
			tag.Holder.Username.Text = serverPackage[2].Name
			tag.Holder.Username.TextColor3 = --[[serverPackage[2].TeamColor.Color]]Color3.fromRGB(255,255,255)
			tag.Holder.Division.Text = "Demolisher"
			tag.Holder.Division.TextColor3 = BrickColor.new("Bright yellow").Color
			tag.Holder.Division.Visible = true
			tag.Holder.AddRank.Visible = false
		end
		local Humanoid = serverPackage[2].Character:WaitForChild("Humanoid")
		local HealthBar = tag.Holder.HealthBar
		local function updateBar()
			local bool,result = pcall(function()
				if not HealthBar or not HealthBar.Bar or not Humanoid then return end
				if Humanoid.Health ~= Humanoid.MaxHealth then
					HealthBar.Visible = true
					HealthBar.Bar:TweenSize(UDim2.new(Humanoid.Health/Humanoid.MaxHealth,0,1,0),"Out","Sine",0.2,true)
				else
					HealthBar.Visible = false
				end
			end)
		end
		Humanoid:GetPropertyChangedSignal("Health"):Connect(function()
			updateBar()
		end)
		updateBar()
	end
end)
print("[Stage 2/nil] Loaded server "..script.Name.." ("..tick()-startTick..")")

what did you change? cause i dont want to read all the code to know

Really confused about this. Hmm.