AgentSkillsCN

wow-api-achievements

WoW Retail成就、统计数据与成就判定API的完整参考。涵盖C_AchievementInfo、全局成就函数(GetAchievementInfo、GetAchievementCriteriaInfo、GetStatistic、GetComparisonStatistic)、成就分类、公会成就、成就链接、追踪成就、Toast通知,以及与成就相关的各类事件。当您从事成就追踪、成就展示、统计数据、成就判定、公会成就,或成就完成度检测等工作时,此参考手册将助您事半功倍。

SKILL.md
--- frontmatter
name: wow-api-achievements
description: "Complete reference for WoW Retail Achievement, Statistics, and Achievement Criteria APIs. Covers C_AchievementInfo, global achievement functions (GetAchievementInfo, GetAchievementCriteriaInfo, GetStatistic, GetComparisonStatistic), achievement categories, guild achievements, achievement links, tracked achievements, toast notifications, and achievement-related events. Use when working with achievement tracking, achievement display, statistics, achievement criteria, guild achievements, or achievement completion detection."

Achievements API (Retail — Patch 12.0.0)

Comprehensive reference for achievements, statistics, and criteria APIs.

Source: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API Current as of: Patch 12.0.0 (Build 65655) — January 28, 2026 Scope: Retail only.


Scope

  • Achievement Functions — GetAchievementInfo, criteria, categories
  • Statistics — GetStatistic, comparison
  • Tracking — Tracked achievements
  • Guild Achievements — Guild-specific achievements

Achievement Info

Core Functions

FunctionReturnsDescription
GetAchievementInfo(achievementID)id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuild, wasEarnedByMe, earnedBy, isStatisticAchievement details
GetAchievementInfoFromCriteria(criteriaID)id, name, points, completed, ...Achievement from criteria
GetAchievementLink(achievementID)linkAchievement hyperlink
GetAchievementNumRewards(achievementID)numRewardsReward count
GetAchievementReward(achievementID, rewardIndex)text, type, ...Reward info
GetPreviousAchievement(achievementID)prevAchievementIDAchievement chain prev
GetNextAchievement(achievementID)nextAchievementIDAchievement chain next
GetTotalAchievementPoints([isGuild])pointsTotal achievement points
GetComparisonAchievementPoints()pointsCompared player's points
SetAchievementSearchString(searchText)numResultsSearch achievements
GetAchievementSearchSize()numResultsSearch result count
GetAchievementSearchProgress()progressSearch progress
GetFilteredAchievementID(index)achievementIDFiltered result at index

Achievement Criteria

FunctionReturnsDescription
GetAchievementNumCriteria(achievementID)numCriteriaNumber of criteria
GetAchievementCriteriaInfo(achievementID, criteriaIndex)criteriaString, criteriaType, completed, quantity, reqQuantity, charName, flags, assetID, quantityString, criteriaID, eligible, duration, elapsedCriteria details
GetAchievementCriteriaInfoByID(achievementID, criteriaID)criteriaString, criteriaType, completed, quantity, reqQuantity, charName, flags, assetID, quantityString, criteriaID, eligibleCriteria by ID

Achievement Categories

FunctionReturnsDescription
GetCategoryList()categoryIDsAll achievement categories
GetCategoryInfo(categoryID)title, parentCategoryID, flagsCategory info
GetCategoryNumAchievements(categoryID [, includeAll])numAchievements, numCompleted, numIncompleteCategory stats
GetAchievementCategory(achievementID)categoryIDAchievement's category

Achievement Comparison (Inspect)

FunctionReturnsDescription
GetComparisonStatistic(achievementID)valueCompared player's statistic
ClearAchievementComparisonUnit()Clear comparison
SetAchievementComparisonUnit(unit)successSet comparison target

Statistics

FunctionReturnsDescription
GetStatistic(achievementID)valueStatistic value (string)
GetStatisticsCategoryList()categoryIDsStatistic categories
GetCategoryAchievementPoints(categoryID, includeAll)points, completedPointsCategory points

Achievement Tracking

FunctionReturnsDescription
GetTrackedAchievements()... (achievementIDs)All tracked achievements
GetNumTrackedAchievements()numTrackedTracked count
AddTrackedAchievement(achievementID)Track achievement
RemoveTrackedAchievement(achievementID)Untrack achievement
IsTrackedAchievement(achievementID)isTrackedIs tracked?

Common Patterns

Check Achievement Completion

lua
local function IsAchievementDone(achievementID)
    local _, _, _, completed = GetAchievementInfo(achievementID)
    return completed
end

Display Achievement Criteria Progress

lua
local function PrintCriteriaProgress(achievementID)
    local _, name = GetAchievementInfo(achievementID)
    print("Achievement:", name)
    local numCriteria = GetAchievementNumCriteria(achievementID)
    for i = 1, numCriteria do
        local criteriaString, _, completed, quantity, reqQuantity = 
            GetAchievementCriteriaInfo(achievementID, i)
        local status = completed and "DONE" or (quantity .. "/" .. reqQuantity)
        print("  ", criteriaString, status)
    end
end

Search Achievements

lua
local function SearchAchievements(text)
    local numResults = SetAchievementSearchString(text)
    local results = {}
    for i = 1, GetAchievementSearchSize() do
        local achievementID = GetFilteredAchievementID(i)
        local _, name, points, completed = GetAchievementInfo(achievementID)
        table.insert(results, {id = achievementID, name = name, points = points, done = completed})
    end
    return results
end

Key Events

EventPayloadDescription
ACHIEVEMENT_EARNEDachievementID, alreadyEarnedAchievement completed
CRITERIA_EARNEDachievementID, criteriaStringCriteria completed
CRITERIA_UPDATECriteria progress updated
CRITERIA_COMPLETEAll criteria complete
TRACKED_ACHIEVEMENT_LIST_CHANGEDachievementID, addedTracking changed
TRACKED_ACHIEVEMENT_UPDATEachievementIDTracked achievement updated
ACHIEVEMENT_SEARCH_UPDATEDSearch results ready
INSPECT_ACHIEVEMENT_READYguidInspect achievement data ready
RECEIVED_ACHIEVEMENT_MEMBER_LISTachievementIDMember list received

Gotchas & Restrictions

  1. GetAchievementInfo returns 15 values — Destructure carefully. The completed boolean is the 4th return.
  2. Guild vs personal — Pass true as isGuild to GetCategoryNumAchievements() for guild achievements.
  3. Statistics are stringsGetStatistic() returns a formatted string, not a number. Parse with tonumber() if needed.
  4. Criteria index is 1-based — Criteria indices start at 1, up to GetAchievementNumCriteria().
  5. Achievement chains — Some achievements are chained (10/25/50 kills etc.). Use GetPreviousAchievement()/GetNextAchievement().
  6. Search is asyncSetAchievementSearchString() may not return all results immediately. Wait for ACHIEVEMENT_SEARCH_UPDATED.
  7. Tracking limit — There's a maximum number of tracked achievements.
  8. Inspect data — Achievement comparison requires SetAchievementComparisonUnit() and waiting for INSPECT_ACHIEVEMENT_READY.