Skip to content

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

Cadence ​

lua
Enums.Cadence.AllTime   -- Never resets
Enums.Cadence.Weekly    -- Resets on Tuesday
Enums.Cadence.OneTime   -- Time-limited

Difficulty ​

lua
Enums.Difficulty.Normal
Enums.Difficulty.Heroic

Class ​

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

BattlegroundResult ​

lua
Enums.BattlegroundResult.Victory
Enums.BattlegroundResult.Defeat

ArenaBracket ​

lua
Enums.ArenaBracket.TwoVTwo
Enums.ArenaBracket.ThreeVThree
Enums.ArenaBracket.FiveVFive

ObjectiveType ​

lua
Enums.ObjectiveType.Flag
Enums.ObjectiveType.Base
Enums.ObjectiveType.Tower

GatherType ​

lua
Enums.GatherType.Mining
Enums.GatherType.Herbalism
Enums.GatherType.Skinning

Profession ​

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

FishPoolType ​

lua
Enums.FishPoolType.OpenWater
Enums.FishPoolType.School

Standing ​

lua
Enums.Standing.Hated
Enums.Standing.Hostile
Enums.Standing.Unfriendly
Enums.Standing.Neutral
Enums.Standing.Friendly
Enums.Standing.Honored
Enums.Standing.Revered
Enums.Standing.Exalted

BadgeSource ​

lua
Enums.BadgeSource.Boss
Enums.BadgeSource.Quest

KeyType ​

lua
Enums.KeyType.Heroic
Enums.KeyType.Attunement

EquipSlot ​

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

ItemQuality ​

lua
Enums.ItemQuality.Poor
Enums.ItemQuality.Common
Enums.ItemQuality.Uncommon
Enums.ItemQuality.Rare
Enums.ItemQuality.Epic
Enums.ItemQuality.Legendary

RollType ​

lua
Enums.RollType.Need
Enums.RollType.Greed
Enums.RollType.Disenchant

CreatureType ​

lua
Enums.CreatureType.Beast
Enums.CreatureType.Humanoid
Enums.CreatureType.Demon
Enums.CreatureType.Undead
Enums.CreatureType.Elemental
Enums.CreatureType.Giant
Enums.CreatureType.Mechanical
Enums.CreatureType.Dragonkin

Registering 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 }
      }
    }
  }
})