local bs = game:GetService("BadgeService")
local badges = {["tenMinuteBadge"] = {}, ["thirtyMinuteBadge"] = {}, ["oneHourBadge"] = {}, ["twoHoursBadge"] = {}}
local function onPlayerJoin(player)
local leaderstats = Instance.new('Folder')
leaderstats.Name = 'leaderstats'
leaderstats.Parent = player
local time_ = Instance.new('IntValue')
time_.Name = 'Time'
time_.Value = 0
time_.Parent = leaderstats
local joins = Instance.new('IntValue')
joins.Name = 'Joins'
joins.Value = 1
joins.Parent = leaderstats
--------------------------------The area of issue-------------------------------------
--Time Badges
time_.Changed:Connect(function(newVal)
if newVal % 60 == 0 then --Checks if the amount of seconds corresponds to a value in minutes with 0 seconds remaining.
if newVal >= 600 then
if not table.find(badges["tenMinuteBadge"], player) then
if bs:UserHasBadgeAsync(player.UserId, 2124923890) then
table.insert(badges["tenMinuteBadge"], player)
else
bs:AwardBadge(player.UserId, 2124923890)
end
end
end
--30 Minutes
if newVal >= 1800 then
if not table.find(badges["thirtyMinuteBadge"], player) then
if bs:UserHasBadgeAsync(player.UserId, 2124923891) then
table.insert(badges["thirtyMinuteBadge"], player)
else
bs:AwardBadge(player.UserId, 2124923891)
end
end
end
--1 Hour
if newVal >= 3600 then
if not table.find(badges["oneHourBadge"], player) then
if bs:UserHasBadgeAsync(player.UserId, 2124923892) then
table.insert(badges["oneHourBadge"], player)
else
bs:AwardBadge(player.UserId, 2124923892)
end
end
end
--2 Hours
if newVal >= 7200 then
if not table.find(badges["twoHoursBadge"], player) then
if bs:UserHasBadgeAsync(player.UserId, 2124923893) then
table.insert(badges["twoHoursBadge"], player)
else
bs:AwardBadge(player.UserId, 2124923893)
end
end
end
end
end)
end
local function onPlayerRemoving(player)
if table.find(badges["tenMinuteBadge"], player) then
table.remove(badges["tenMinuteBadge"], table.find(badges["tenMinuteBadge"], player))
end
if table.find(badges["thirtyMinuteBadge"], player) then
table.remove(badges["thirtyMinuteBadge"], table.find(badges["thirtyMinuteBadge"], player))
end
if table.find(badges["oneHourBadge"], player) then
table.remove(badges["oneHourBadge"], table.find(badges["oneHourBadge"], player))
end
if table.find(badges["twoHoursBadge"], player) then
table.remove(badges["twoHoursBadge"], table.find(badges["twoHoursBadge"], player))
end
end
game.Players.PlayerAdded:Connect(onPlayerJoin)
game.Players.PlayerRemoving:Connect(onPlayerRemoving)
To improve on that idea with arrays.
local bs = game:GetService("BadgeService")
local badges = {["tenMinuteBadge"] = {}, ["thirtyMinuteBadge"] = {}, ["oneHourBadge"] = {}, ["twoHoursBadge"] = {}}
local function onPlayerJoin(player)
local leaderstats = Instance.new('Folder')
leaderstats.Name = 'leaderstats'
leaderstats.Parent = player
local time_ = Instance.new('IntValue')
time_.Name = 'Time'
time_.Value = 0
time_.Parent = leaderstats
local joins = Instance.new('IntValue')
joins.Name = 'Joins'
joins.Value = 1
joins.Parent = leaderstats
--------------------------------The area of issue-------------------------------------
--Time Badges
time_.Changed:Connect(function(newVal)
if newVal % 60 == 0 then --Checks if the amount of seconds corresponds to a value in minutes with 0 seconds remaining.
if newVal >= 600 then
if not badges["tenMinuteBadge"][player] then
if bs:UserHasBadgeAsync(player.UserId, 2124923890) then
badges["tenMinuteBadge"][player] = true
else
bs:AwardBadge(player.UserId, 2124923890)
end
end
end
--30 Minutes
if newVal >= 1800 then
if not badges["thirtyMinuteBadge"][player] then
if bs:UserHasBadgeAsync(player.UserId, 2124923891) then
badges["thirtyMinuteBadge"][player] = true
else
bs:AwardBadge(player.UserId, 2124923891)
end
end
end
--1 Hour
if newVal >= 3600 then
if not badges["oneHourBadge"][player] then
if bs:UserHasBadgeAsync(player.UserId, 2124923892) then
badges["oneHourBadge"][player] = true
else
bs:AwardBadge(player.UserId, 2124923892)
end
end
end
--2 Hours
if newVal >= 7200 then
if not badges["twoHoursBadge"][player] then
if bs:UserHasBadgeAsync(player.UserId, 2124923893) then
badges["twoHoursBadge"][player] = true
else
bs:AwardBadge(player.UserId, 2124923893)
end
end
end
end
end)
end
local function onPlayerRemoving(player)
badges["tenMinuteBadge"][player] = nil
badges["thirtyMinuteBadge"][player] = nil
badges["oneHourBadge"][player] = nil
badges["twoHoursBadge"][player] = nil
end
game.Players.PlayerAdded:Connect(onPlayerJoin)
game.Players.PlayerRemoving:Connect(onPlayerRemoving)
Dictionaries are likely more performant for this use-case.