RPG Boss Timers & Loot Economy
In RPG and dungeon games, measuring how long boss fights last and verifying that drop rates conform to balance specifications is essential.
Complete Dungeon Boss Example
Section titled “Complete Dungeon Boss Example”local ReplicatedStorage = game:GetService("ReplicatedStorage")local Analytics = require(ReplicatedStorage.AnalyticsModule)
local BOSS_BADGE_ID = 456789123
local function setupBossEncounter(bossModel: Model, partyPlayers: { Player }) local bossHumanoid = bossModel:WaitForChild("Humanoid") :: Humanoid local bossName = bossModel.Name
-- 1. Start duration timers for all party members local partyTimers: { [number]: () -> number } = {} for _, player in ipairs(partyPlayers) do partyTimers[player.UserId] = Analytics:StartTimer(player, "BossFight_" .. bossName) end
-- 2. Track encounter start Analytics:TrackEvent(nil, "BossFightStarted", { boss = bossName, partySize = #partyPlayers, })
-- 3. Handle Victory bossHumanoid.Died:Connect(function() for _, player in ipairs(partyPlayers) do local stopTimer = partyTimers[player.UserId] local fightDuration = if stopTimer then stopTimer() else 0
print(string.format("%s defeated %s in %.1f seconds", player.Name, bossName, fightDuration))
-- Record virtual currency loot Analytics:RecordEconomySource(player, "Gold", 350, "BossDrop", bossName)
-- Safely award completion badge with telemetry Analytics:AwardBadge(player, BOSS_BADGE_ID) end end)end