Getting Started
This guide covers the core concepts for creating achievements in Reckoning.
Enums Reference
All enums are accessed via Private.Enums:
lua
local Private = select(2, ...)
local Enums = Private.EnumsCadence
lua
Enums.Cadence.AllTime -- Never resets
Enums.Cadence.Weekly -- Resets on Tuesday
Enums.Cadence.OneTime -- Time-limitedDifficulty
lua
Enums.Difficulty.Normal
Enums.Difficulty.HeroicClass
lua
Enums.Class.Warrior
Enums.Class.Paladin
Enums.Class.Hunter
Enums.Class.Rogue
Enums.Class.Priest
Enums.Class.Shaman
Enums.Class.Mage
Enums.Class.Warlock
Enums.Class.DruidBattlegroundResult
lua
Enums.BattlegroundResult.Victory
Enums.BattlegroundResult.DefeatArenaBracket
lua
Enums.ArenaBracket.TwoVTwo
Enums.ArenaBracket.ThreeVThree
Enums.ArenaBracket.FiveVFiveObjectiveType
lua
Enums.ObjectiveType.Flag
Enums.ObjectiveType.Base
Enums.ObjectiveType.TowerGatherType
lua
Enums.GatherType.Mining
Enums.GatherType.Herbalism
Enums.GatherType.SkinningProfession
lua
Enums.Profession.Alchemy
Enums.Profession.Blacksmithing
Enums.Profession.Enchanting
Enums.Profession.Engineering
Enums.Profession.Herbalism
Enums.Profession.Jewelcrafting
Enums.Profession.Leatherworking
Enums.Profession.Mining
Enums.Profession.Skinning
Enums.Profession.Tailoring
Enums.Profession.Cooking
Enums.Profession.FirstAid
Enums.Profession.FishingFishPoolType
lua
Enums.FishPoolType.OpenWater
Enums.FishPoolType.SchoolStanding
lua
Enums.Standing.Hated
Enums.Standing.Hostile
Enums.Standing.Unfriendly
Enums.Standing.Neutral
Enums.Standing.Friendly
Enums.Standing.Honored
Enums.Standing.Revered
Enums.Standing.ExaltedBadgeSource
lua
Enums.BadgeSource.Boss
Enums.BadgeSource.QuestKeyType
lua
Enums.KeyType.Heroic
Enums.KeyType.AttunementEquipSlot
lua
Enums.EquipSlot.Head
Enums.EquipSlot.Neck
Enums.EquipSlot.Shoulder
Enums.EquipSlot.Back
Enums.EquipSlot.Chest
Enums.EquipSlot.Wrist
Enums.EquipSlot.Hands
Enums.EquipSlot.Waist
Enums.EquipSlot.Legs
Enums.EquipSlot.Feet
Enums.EquipSlot.Finger1
Enums.EquipSlot.Finger2
Enums.EquipSlot.Trinket1
Enums.EquipSlot.Trinket2
Enums.EquipSlot.MainHand
Enums.EquipSlot.OffHand
Enums.EquipSlot.RangedItemQuality
lua
Enums.ItemQuality.Poor
Enums.ItemQuality.Common
Enums.ItemQuality.Uncommon
Enums.ItemQuality.Rare
Enums.ItemQuality.Epic
Enums.ItemQuality.LegendaryRollType
lua
Enums.RollType.Need
Enums.RollType.Greed
Enums.RollType.DisenchantCreatureType
lua
Enums.CreatureType.Beast
Enums.CreatureType.Humanoid
Enums.CreatureType.Demon
Enums.CreatureType.Undead
Enums.CreatureType.Elemental
Enums.CreatureType.Giant
Enums.CreatureType.Mechanical
Enums.CreatureType.DragonkinRegistering Categories
Categories are defined with integer IDs. Sub-categories are optional.
lua
Private.AchievementUtils:RegisterCategories({
{
id = 1,
name = "Dungeon",
subCategories = {
{ id = 1, name = "Normal" },
{ id = 2, name = "Heroic" }
}
},
{
id = 2,
name = "PVP"
},
{
id = 3,
name = "Professions"
},
{
id = 4,
name = "Open World"
},
{
id = 5,
name = "Milestones"
}
})Achievement Structure
lua
{
id = 1, -- Integer ID (required)
name = "Achievement Name", -- Display name (required)
description = "Description", -- What player must do (required)
points = 10, -- Point value (required)
category = 1, -- Category ID (required)
subCategory = 2, -- Sub-category ID (optional)
icon = 136200, -- Icon texture ID (required)
cadence = Enums.Cadence.AllTime, -- Reset schedule (required)
startWeek = 1, -- Week when available (optional, defaults to 1)
trigger = { ... }, -- Event trigger (required)
progress = { ... }, -- Progress tracking (optional)
failCondition = { ... } -- Fail condition (optional)
}Start Week
Achievements can be gated to specific weeks of the server timeline. If startWeek is not specified, the achievement is available from week 1.
lua
{
id = 100,
name = "Sunwell Plateau Clear",
description = "Clear Sunwell Plateau",
points = 50,
category = 1,
icon = 136200,
cadence = Enums.Cadence.AllTime,
startWeek = 45, -- Available from week 45 onwards
trigger = {
event = "DUNGEON_CLEARED",
conditions = {
instance = "Sunwell Plateau"
}
}
}Examples
Simple Boss Kill
lua
Private.AchievementUtils:RegisterAchievements({
{
id = 1,
name = "Shadow Labs",
description = "Defeat Murmur in Shadow Labyrinth",
points = 5,
category = 1,
subCategory = 1,
icon = 136200,
cadence = Enums.Cadence.AllTime,
trigger = {
event = "DUNGEON_BOSS_KILLED",
conditions = {
bossName = "Murmur"
}
}
}
})Timed Boss Kill
The payload contains duration as a number (seconds). Use a condition function to check it:
lua
Private.AchievementUtils:RegisterAchievements({
{
id = 2,
name = "Strikes at Midnight",
description = "Defeat Attumen the Huntsman in 70 seconds",
points = 20,
category = 1,
icon = 132160,
cadence = Enums.Cadence.AllTime,
trigger = {
event = "DUNGEON_BOSS_KILLED",
conditions = {
bossName = "Attumen the Huntsman",
duration = function(d) return d <= 70 end
}
}
}
})Heroic with Mechanic Avoidance
lua
Private.AchievementUtils:RegisterAchievements({
{
id = 3,
name = "Big Boom",
description = "Kill Murmur without being hit by Sonic Boom",
points = 20,
category = 1,
subCategory = 2,
icon = 136200,
cadence = Enums.Cadence.AllTime,
trigger = {
event = "DUNGEON_BOSS_KILLED",
conditions = {
bossName = "Murmur",
difficulty = Enums.Difficulty.Heroic
}
},
failCondition = {
event = "DUNGEON_MECHANIC_FAILED",
conditions = {
mechanicName = "Sonic Boom"
}
}
}
})Count-Based Progress
lua
Private.AchievementUtils:RegisterAchievements({
{
id = 4,
name = "5000 Honorable Kills",
description = "Earn 5000 Honorable Kills",
points = 50,
category = 2,
icon = 132485,
cadence = Enums.Cadence.AllTime,
trigger = {
event = "PVP_KILL"
},
progress = {
type = "count",
required = 5000
}
}
})Weekly Achievement
lua
Private.AchievementUtils:RegisterAchievements({
{
id = 5,
name = "Weekly Warrior",
description = "Complete 25 Heroic Dungeons this week",
points = 50,
category = 1,
subCategory = 2,
icon = 136168,
cadence = Enums.Cadence.Weekly,
trigger = {
event = "DUNGEON_CLEARED",
conditions = {
difficulty = Enums.Difficulty.Heroic
}
},
progress = {
type = "count",
required = 25
}
}
})Criteria-Based (Multiple Conditions)
lua
Private.AchievementUtils:RegisterAchievements({
{
id = 6,
name = "That Takes Class",
description = "Get a Killing Blow on each class",
points = 20,
category = 2,
icon = 132485,
cadence = Enums.Cadence.AllTime,
trigger = {
event = "PVP_KILLING_BLOW",
criteriaSet = {
{ victimClass = Enums.Class.Warrior },
{ victimClass = Enums.Class.Paladin },
{ victimClass = Enums.Class.Hunter },
{ victimClass = Enums.Class.Rogue },
{ victimClass = Enums.Class.Priest },
{ victimClass = Enums.Class.Shaman },
{ victimClass = Enums.Class.Mage },
{ victimClass = Enums.Class.Warlock },
{ victimClass = Enums.Class.Druid }
}
}
}
})