Attempt Nil with Destroy Issue

I am making a Auto Add Stats Thing with Auto NameTag Refresh System, but I don’t know why it doesn’t work and result in a “Attempt Nil with Destroy.” Here is the script:

local Character = script.Parent
local LastestNameTag = Character:FindFirstChild("Head"):FindFirstChild("Nametag")
local Gametime = game.Players:GetPlayerFromCharacter(Character).leaderstats.Gametime.Value
local NameTag = script:FindFirstChild("Nametag")

local NameTagClone = NameTag:Clone()

while true do
	wait(5)
	if Character.IsAFK.Value == false then
		game.Players:GetPlayerFromCharacter(Character).leaderstats.Gametime.Value = game.Players:GetPlayerFromCharacter(Character).leaderstats.Gametime.Value + 1
		wait(10)
		LastestNameTag:Destroy()
		wait(1)
		local NameTagClone = NameTag:Clone()
		NameTagClone.name.Text = Character.Name
		NameTagClone.rank.Text = game.Players:GetPlayerFromCharacter(Character):GetRoleInGroup(12876177)
		NameTagClone.gametime.Text = "Gametime: "..Gametime.." Minute(s)"
		NameTagClone.Parent = Character:FindFirstChild("Head")
		NameTagClone.Adornee = Character:FindFirstChild("Head")
	else
		print("AFK Mode is on.")	
	end
end

The script is in Starter Character Script!

It means that it can’'t find the nametag/it doesn’t exist. What you can do is check.

if LastestNameTag then
   LastestNameTag:Destroy()
end

Or if the nametag is supposed to be there,

local LastestNameTag = Character:WaitForChild("Head"):WaitForChild("Nametag")
2 Likes

Let me try now, hope it work out.

Is this a local script inside StarterCharacterScripts folder?

This is a Script aka Server Script not Local Script

image

local Character = script.Parent
local LastestNameTag = Character:WaitForChild("Head"):WaitForChild("Nametag")
local Gametime = game.Players:GetPlayerFromCharacter(Character).leaderstats.Gametime.Value
local NameTag = script:FindFirstChild("Nametag")

local NameTagClone = NameTag:Clone()

while true do
	wait(10)
	if Character.IsAFK.Value == false then
		game.Players:GetPlayerFromCharacter(Character).leaderstats.Gametime.Value = game.Players:GetPlayerFromCharacter(Character).leaderstats.Gametime.Value + 1
		wait(10)
		LastestNameTag:Destroy()
		print("Successfully destroy nametag.")
		wait(1)
		local NameTagClone = NameTag:Clone()
		NameTagClone.Parent = Character:FindFirstChild("Head")
		NameTagClone.Adornee = Character:FindFirstChild("Head")
		NameTagClone.name.Text = Character.Name
		NameTagClone.rank.Text = game.Players:GetPlayerFromCharacter(Character):GetRoleInGroup(12876177)
		NameTagClone.gametime.Text = "Gametime: "..Gametime.." Minute(s)"
	else
		print("AFK Mode is on.")	
	end
end

Do a simple check for Destroy and it does destroy but the thing is it doesn’t make a new nametag

It worked at last but didn’t refresh my Gametime value

local Players = game:GetService("Players")
local Character = script.Parent
local Player = Players:GetPlayerFromCharacter(Character)
local Head = Character:WaitForChild("Head")
local IsAFK = Character:WaitForChild("IsAFK")
local LastestNameTag
if Head:FindFirstChild("Nametag") then
	LastestNameTag = Head:FindFirstChild("Nametag")
end
local Gametime = Player:WaitForChild("leaderstats"):WaitForChild("Gametime")
local NameTag = script:WaitForChild("Nametag")
local NameTagClone = NameTag:Clone()

IsAFK.Changed:Connect(function(value)
	if not value then
		print("Is not AFK.")
		Gametime.Value += 1
		task.wait(10)
		if LastestNameTag then
			LastestNameTag:Destroy()
		end
		local NameTagClone = NameTag:Clone()
		NameTagClone.name.Text = Character.Name
		if Player:IsInGroup(12876177) then
			NameTagClone.rank.Text = Player:GetRoleInGroup(12876177)
		else
			NameTagClone.rank.Text = "" --not in group
		end
		NameTagClone.gametime.Text = "Gametime: "..Gametime.Value.." Minute(s)"
		NameTagClone.Parent = Head
		NameTagClone.Adornee = Head
	elseif value then
		print("Is AFK.")
	end
end
local Players = game:GetService("Players")
local Character = script.Parent
local Player = Players:GetPlayerFromCharacter(Character)
local Head = Character:WaitForChild("Head")
local IsAFK = Character:WaitForChild("IsAFK")
local LastestNameTag
if Head:FindFirstChild("Nametag") then
	LastestNameTag = Head:FindFirstChild("Nametag")
end
local Gametime = Player:WaitForChild("leaderstats"):WaitForChild("Gametime")
local NameTag = script:WaitForChild("Nametag")
local NameTagClone = NameTag:Clone()

IsAFK.Changed:Connect(function(value)
	if not value then
		print("Is not AFK.")
		Gametime.Value += 1
		task.wait(10)
		if LastestNameTag then
			LastestNameTag:Destroy()
		end
		local NameTagClone = NameTag:Clone()
		NameTagClone.name.Text = Character.Name
		if Player:IsInGroup(12876177) then
			NameTagClone.rank.Text = Player:GetRoleInGroup(12876177)
		else
			NameTagClone.rank.Text = "" --not in group
		end
		NameTagClone.Parent = Head
		NameTagClone.Adornee = Head
		Gametime.Changed:Connect(function(gametime)
			NameTagClone.gametime.Text = "Gametime: "..gametime.." Minute(s)"
		end)
	elseif value then
		print("Is AFK.")
	end
end

This is if you want the gametime to update periodically (every 10 seconds currently) as that is how long you’ve added a task.wait() command for.

1 Like

I mean every 10 second it will add gametime for player and refresh. But, if player AFK it won’t

I fixed it at last with some of your script.

local Players = game:GetService("Players")
local Character = script.Parent
local Player = Players:GetPlayerFromCharacter(Character)
local Head = Character:WaitForChild("Head")
local NameTag = Head:WaitForChild("Nametag")
local gametimetag = NameTag:WaitForChild("gametime")
local Gametime = Player:WaitForChild("leaderstats"):WaitForChild("Gametime")

while true do
	wait(10)
	if Character.IsAFK.Value == false then
		game.Players:GetPlayerFromCharacter(Character).leaderstats.Gametime.Value = game.Players:GetPlayerFromCharacter(Character).leaderstats.Gametime.Value + 1
		
		Gametime.Changed:Connect(function(gametime)
			gametimetag.Text = "Gametime: "..Gametime.Value.." Minute(s)"
			print("Successfully refresh nametag.")
		end)
	end
end
elseif value then
	print("Is AFK.")
end

Yeah, in your original script you had made it so that if the player was/is AFK then only this print command is executed (I didn’t want to change any of the original intended mechanics).

1 Like