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
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.
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
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).