Is this a bad practice or is this fine? What if I were to have 800 to 1000 stages and the same pattern would persist?
local Players = game:GetService("Players")
local BadgeService = game:GetService("BadgeService")
Players.PlayerAdded:Connect(function(Player)
local leaderstats = Player:WaitForChild("leaderstats")
local Stage = leaderstats:WaitForChild("Stage")
Stage.Changed:Connect(function(newValue)
if newValue >= 25 and not BadgeService:UserHasBadge(Player.UserId, 0) then
BadgeService:AwardBadge(Player.UserId, 0)
end
if newValue >= 50 and not BadgeService:UserHasBadge(Player.UserId, 0) then
BadgeService:AwardBadge(Player.UserId, 0)
end
if newValue >= 75 and not BadgeService:UserHasBadge(Player.UserId, 0) then
BadgeService:AwardBadge(Player.UserId, 0)
end
if newValue >= 100 and not BadgeService:UserHasBadge(Player.UserId, 0) then
BadgeService:AwardBadge(Player.UserId, 0)
end
end)
end)
for _, v in pairs(module:GetChildren()) do
if v.StageReq <= newvalue and not BadgeService:UserHasBadge(plr.UserId, module.BadgeID then
BadgeService:AwardBadge(plr.UserId, module.BadgeId)
end
end)
You don’t really need to use modules for this as its just a badge script which should only be used by 1 script to detect when to award a badge.
-- # Services
local Players = game:GetService('Players');
local BadgeService = game:GetService('BadgeService');
-- # Badges
local Badges = { -- # [Stage Number] = BadgeId
[25] = 0000;
[50] = 0000;
[75] = 0000;
[100] = 0000;
};
-- # Functions
local StageChanged = function(player: Player, Stage)
for _stage, badge in ipairs(Badges) do
if Stage.Value >= _stage then
if not BadgeService:UserHasBadgeAsync(player.UserId, badge) then
BadgeService:AwardBadge(player.UserId, badge);
end;
end;
end;
end;
local PlayerAdded = function(player: Player) -- # Give a badge if you made a badge after the player was already at that stage and didn't get it.
local leaderstats = player:WaitForChild('leaderstats');
local Stage = leaderstats:WaitForChild('Stage');
for _stage, badge in ipairs(Badges) do
if Stage.Value >= _stage then
if not BadgeService:UserHasBadgeAsync(player.UserId, badge) then
BadgeService:AwardBadge(player.UserId, badge);
end;
end;
end;
Stage:GetPropertyChangedSignal('Value'):Connect(function()
StageChanged(player, Stage);
end);
end;
-- # Connections
for _, v in ipairs(Players:GetPlayers()) do
PlayerAdded(v);
end;
Players.PlayerAdded:Connect(PlayerAdded);