8.8 KiB
Unit Fields Reference
This document lists all available unit fields that can be accessed via GetUnitData() and GetUnitField() functions.
Overview
Unit fields provide low-level access to game data for any unit (player, target, pet, NPCs, etc.). These fields are part of the WoW 1.12 client's internal data structures.
Usage
-- Get all fields at once
local data = GetUnitData("target")
if data then
print("Health: " .. data.health)
end
-- Get a single field (more efficient)
local health = GetUnitField("target", "health")
Simple Fields
These fields return a single value (number).
Object References (UINT64 – 0x... string in lua)
These fields contain GUIDs (globally unique identifiers) for game objects:
- charm - GUID of the unit that has charmed this unit
- summon - GUID of the unit's current summon
- charmedBy - GUID of the unit that charmed this unit
- summonedBy - GUID of the unit that summoned this unit
- createdBy - GUID of the unit that created this unit
- target - GUID of the unit's current target
- persuaded - GUID of the unit being persuaded
- channelObject - GUID of the object being channeled (for channeling spells)
Health and Power (UINT32)
- health - Current health points
- power1 - Current mana (or energy/rage depending on class)
- power2 - Current rage
- power3 - Current focus (hunter pets)
- power4 - Current energy (rogues, druids in cat/bear form)
- power5 - Current happiness (hunter pets)
- maxHealth - Maximum health points
- maxPower1 - Maximum mana
- maxPower2 - Maximum rage
- maxPower3 - Maximum focus
- maxPower4 - Maximum energy
- maxPower5 - Maximum happiness
Basic Unit Info (UINT32)
- level - Unit's level
- factionTemplate - Unit's faction template ID
- flags - Unit flags (combat, dead, mounted, etc.)
- dynamicFlags - Dynamic unit flags (lootable, tapped, etc.)
- auraState - Aura state flags (reactive abilities like Revenge, Overpower)
- npcFlags - NPC flags (vendor, trainer, quest giver, etc.)
- npcEmoteState - Current emote state ID
Display and Appearance (UINT32)
- displayId - Current display model ID
- nativeDisplayId - Original/native display model ID
- mountDisplayId - Mount display model ID (if mounted)
Combat Stats (UINT32)
- baseAttackTime - Base main-hand attack time in milliseconds
- offhandAttackTime - Off-hand attack time in milliseconds
- rangedAttackTime - Ranged attack time in milliseconds
Combat Stats (FLOAT)
- boundingRadius - Unit's bounding radius for collision
- combatReach - Unit's combat reach distance
- minDamage - Minimum main-hand damage
- maxDamage - Maximum main-hand damage
- minOffhandDamage - Minimum off-hand damage
- maxOffhandDamage - Maximum off-hand damage
- minRangedDamage - Minimum ranged damage
- maxRangedDamage - Maximum ranged damage
Pet Info (UINT32)
- petNumber - Pet's number identifier
- petNameTimestamp - Timestamp of pet name
- petExperience - Pet's current experience
- petNextLevelExp - Experience needed for pet's next level
Spell/Channel Info (UINT32)
- channelSpell - Spell ID of currently channeling spell
- createdBySpell - Spell ID that created this unit (for summons)
Casting Speed (FLOAT)
- modCastSpeed - Cast speed modifier (1.0 = normal, <1.0 = faster, >1.0 = slower)
Training (UINT32)
- trainingPoints - Available training points (for pets and talents)
Base Stats (UINT32)
- stat0 - Strength
- stat1 - Agility
- stat2 - Stamina
- stat3 - Intellect
- stat4 - Spirit
- baseMana - Base mana before modifiers
- baseHealth - Base health before modifiers
Attack Power (UINT32)
- attackPower - Total melee attack power
- attackPowerMods - Attack power modifiers
- rangedAttackPower - Total ranged attack power
- rangedAttackPowerMods - Ranged attack power modifiers
Attack Power Multipliers (FLOAT)
- attackPowerMultiplier - Melee attack power multiplier
- rangedAttackPowerMultiplier - Ranged attack power multiplier
Packed Byte Fields (UINT32)
These are special fields that pack multiple values into a single 32-bit integer:
-
bytes0 - Contains race, class, gender, and power type
- Byte 0: Race
- Byte 1: Class
- Byte 2: Gender
- Byte 3: Power type
-
bytes1 - Contains stand state, pet talent points, vis flags, and anim tier
- Byte 0: Stand state
- Byte 1: Pet talent points
- Byte 2: Vis flags
- Byte 3: Anim tier
-
bytes2 - Contains sheath state, pvp flags, pet flags, and shape shift form
- Byte 0: Sheath state
- Byte 1: PvP flags
- Byte 2: Pet flags
- Byte 3: Shape shift form
Array Fields
These fields return a Lua table with numeric indices (1-based).
Visual Items (UINT32 arrays)
- virtualItemDisplay [3] - Display IDs for virtual items (weapon visuals, etc.)
- virtualItemInfo [6] - Additional virtual item information
Auras/Buffs/Debuffs (UINT32 arrays)
-
aura [48] - Array of aura (buff/debuff) spell IDs on the unit
- Index 1-48 contains spell IDs (0 = no aura in that slot)
-
auraFlags [6] - Bit flags for aura properties (positive, negative, cancelable, etc.)
- Each UINT32 contains flags for 8 auras (4 bits per aura)
-
auraLevels [48] - Aura caster levels (UINT8 per aura slot)
-
auraApplications [48] - Aura stack counts (UINT8 per aura slot)
Resistances (UINT32 arrays)
- resistances [7] - Resistance values for all schools
- Index 1: Armor (physical resistance)
- Index 2: Holy resistance
- Index 3: Fire resistance
- Index 4: Nature resistance
- Index 5: Frost resistance
- Index 6: Shadow resistance
- Index 7: Arcane resistance
Spell Power Modifiers (FLOAT arrays)
-
powerCostModifier [7] - Flat mana cost modifications per school
- Index 1-7: Physical, Holy, Fire, Nature, Frost, Shadow, Arcane
-
powerCostMultiplier [7] - Percent mana cost modifications per school
- Index 1-7: Physical, Holy, Fire, Nature, Frost, Shadow, Arcane
Examples
Health Monitoring
-- Monitor target health percentage
local health = GetUnitField("target", "health")
local maxHealth = GetUnitField("target", "maxHealth")
local healthPct = (health / maxHealth) * 100
print("Target health: " .. healthPct .. "%")
Checking Auras
-- Check if target has a specific debuff
local auras = GetUnitField("target", "aura")
local CURSE_OF_AGONY = 980
for i, spellId in ipairs(auras) do
if spellId == CURSE_OF_AGONY then
print("Target has Curse of Agony!")
break
end
end
Reading Resistances
-- Get all player resistances
local resistances = GetUnitField("player", "resistances")
print("Armor: " .. resistances[1])
print("Holy resistance: " .. resistances[2])
print("Fire resistance: " .. resistances[3])
print("Nature resistance: " .. resistances[4])
print("Frost resistance: " .. resistances[5])
print("Shadow resistance: " .. resistances[6])
print("Arcane resistance: " .. resistances[7])
Checking Combat State
-- Check if unit is in combat (flags field bit check)
local flags = GetUnitField("target", "flags")
local UNIT_FLAG_IN_COMBAT = 0x00080000
local inCombat = bit.band(flags, UNIT_FLAG_IN_COMBAT) ~= 0
print("In combat: " .. tostring(inCombat))
Monitoring Cast Speed
-- Check your current cast speed modifier
local modCastSpeed = GetUnitField("player", "modCastSpeed")
-- 1.0 = normal, 0.9 = 10% faster, 1.1 = 10% slower
print("Cast speed modifier: " .. modCastSpeed)
Attack Power Info
-- Get your attack power
local ap = GetUnitField("player", "attackPower")
local apMods = GetUnitField("player", "attackPowerMods")
local apMult = GetUnitField("player", "attackPowerMultiplier")
print("Base AP: " .. ap)
print("AP Mods: " .. apMods)
print("AP Multiplier: " .. apMult)
Pet Information
-- Check pet experience
if UnitExists("pet") then
local petXP = GetUnitField("pet", "petExperience")
local petNextXP = GetUnitField("pet", "petNextLevelExp")
local progress = (petXP / petNextXP) * 100
print("Pet XP: " .. progress .. "%")
end
Notes
- GUID fields return numbers but represent 64-bit values. Lua handles these as doubles.
- Array indices are 1-based (Lua convention), not 0-based.
- Returns
nilif the unit doesn't exist or the field cannot be read. - Some fields may require specific game state to be meaningful (e.g., pet fields only work when you have a pet).
- Unit flags and other bit fields require bitwise operations to interpret properly.
Related Functions
GetUnitData(unitToken)- Get all fields at onceGetUnitField(unitToken, fieldName)- Get a single field efficientlyGetSpellModifiers(spellId, modifierType)- Get spell modifiersGetItemStats(itemId)- Get item dataGetSpellRec(spellId)- Get spell data