Wowpedia

We have moved to Warcraft Wiki. Click here for information and the new URL.

READ MORE

Wowpedia
Register
Advertisement

GUIDs uniquely identify almost everything the player character can interact with in World of Warcraft -- including players, pets, vehicle, and interactive world objects (think Midsummer bonfires). GUIDs are represented in WoW as a long string of hex numbers separated by hyphens.

Details[]

GUIDs are intended to provide a unique way to identify units; the following general rules apply:

  • A monster has a single GUID from spawn until death (or despawn). When it respawns it gets a new GUID.
  • Pets get a new GUID each time they are summoned.
  • Monster and pet GUIDs can be recycled after server (or instance) restart.
  • Players keep their GUID forever, and are unique even in cross-server battlegrounds.
  • However, units that "transform" into other units may not switch GUID immediately.

Types[]

BattlePet[]

BattlePet-0-[ID]

Prints the currently active companion pet.

/dump C_PetJournal.GetSummonedPetGUID()
> "BattlePet-0-00000338F951"

BNetAccount[]

BNetAccount-0-[accountID]
local playerAccountGUID = string.format("BNetAccount-0-%012X", (BNGetNumFriends() + 1));
local isBattleNetGUID = C_AccountInfo.IsGUIDBattleNetAccountType(playerAccountGUID);
local isLocalPlayerGUID = C_AccountInfo.IsGUIDRelatedToLocalAccount(playerAccountGUID);
print(playerAccountGUID, isBattleNetGUID, isLocalPlayerGUID);

> "BNetAccount-0-000000000016", true, true

The accountID portion of the GUID is, at least for friend accounts, a hexadecimal form of the Battle.net account ID as used by C_BattleNet.GetAccountInfoByID()

Cast[]

  • GUIDs for spell casts are obtained from spell cast events or as a return value from UnitCastingInfo()
Cast-[type]-[serverID]-[instanceID]-[zoneUID]-[spellID]-[castUID]

The type parameter has the following known variants.

Type Description Example
2 Represents a spell cast that only exists locally on the client, typically for casts that have failed due to requirements not being met. Cast-2-0-0-0-116-000000017D
3 Represents a spell cast for an active ability, such as Spell frost frostbolt02 [Frostbolt]. Most spell casts will be of this type. Cast-3-4170-0-8-84714-000CB03025
4 Represents a spell cast for a passive effect. These appear to be fairly rare, but may be seen on initial login. Cast-4-4170-0-11-197886-0000302E85
13 Represents a single tick from spells such as Spell holy divinehymn [Divine Hymn] and Ability monk cranekick new [Spinning Crane Kick]. Cast-13-4170-1643-17-64844-0004B03416
16 Represents a single tick from spells such as Ability warlock burningembersblue [Flurry] and Monk ability fistoffury [Fists of Fury]. Cast-16-2083-0-20-228354-0000307226

For local spell casts, the server, instance, and zone ID components will always be zero, and the cast UID will be a locally-incrementing integer.

For all other known spell cast types, the cast UID component is similar to Creature and Vehicle GUIDs; the lowest 23 bits represent the timestamp of the cast measured in seconds since the UNIX epoch as returned by GetServerTime() modulo 2^23, and the higher bits appear to be an incrementing number for spell casts that occur within the same second.

ClientActor[]

ClientActors are NPCs which are only simulated by the game client instead of the server.

ClientActor-x-yy-zzzz
/dump UnitName("target"), UnitGUID("target")
> "Unleashed Hatred", "ClientActor-3-5-1340"

Creature[]

  • Types: "Creature", "Pet", "GameObject", "Vehicle"
[unitType]-0-[serverID]-[instanceID]-[zoneUID]-[ID]-[spawnUID]
/dump UnitName("target"), UnitGUID("target")
> "Hogger", "Creature-0-1465-0-2105-448-000043F59F"
local npcID = select(6, strsplit("-", UnitGUID("target")))
print(npcID, tonumber(npcID))
> "448", 448

GameObject GUIDs can be obtained by querying the "npc" unit token when interacting with an object such as a Mailbox, or from the GetLootSourceInfo() API when looting resources gathered from herbalism or mining nodes.

Spawn UIDs[]

For Creature, GameObject, and Vehicle GUIDs the spawnUID component encodes a wrapping spawn time offset of the entity in the low 23 bits of the field, measured in seconds since the UNIX epoch as returned by GetServerTime() modulo 2^23. Higher bits appear to be a unique counter for individual spawns within the same time unit.

local guid = UnitGUID("target")
local unitType, _, _, _, _, _, spawnUID = strsplit("-", guid)

if unitType == "Creature" or unitType == "Vehicle" then
    local spawnEpoch = GetServerTime() - (GetServerTime() % 2^23)
    local spawnEpochOffset = bit.band(tonumber(string.sub(spawnUID, 5), 16), 0x7fffff)
    local spawnIndex = bit.rshift(bit.band(tonumber(string.sub(spawnUID, 1, 5), 16), 0xffff8), 3)
    local spawnTime = spawnEpoch + spawnEpochOffset

    if spawnTime > GetServerTime() then
        -- This only occurs if the epoch has rolled over since a unit has spawned.
        spawnTime = spawnTime - ((2^23) - 1)
    end

    print(guid)
    print("Spawned at:", date("%Y-%m-%d %H:%M:%S", spawnTime))
    print("Spawn index:", spawnIndex)
end

> "Creature-0-4170-0-41-68662-00000F4B37"
> "Spawned at:", "2021-01-25 22:50:31"
> "Spawn index:", 0

For Pet GUIDs the spawnUID component encodes a unique identifier in the low 32 bits, similar to Player GUIDs, and a wrapping counter in the upper 8 bits representing the number of times the pet has been summoned.

local guid = UnitGUID("target")
local unitType, _, _, _, _, _, spawnUID = strsplit("-", guid)

if unitType == "Pet" then
    local petUID = string.sub(spawnUID, 3)
    local spawnIndex = tonumber(string.sub(spawnUID, 1, 2), 16)

    print(guid)
    print("Unique Pet ID:", petUID)
    print("Spawn index:", spawnIndex)
end

> "Pet-0-4234-0-6610-165189-0202F859E9"
> "Unique Pet ID:", "02F859E9"
> "Spawn index:", 2

Follower[]

local followers = C_Garrison.GetFollowers()
print(followers[1].name, followers[1].followerID)
> "Calia Menethil", "0x0000000004CBDB61"

Item[]

Item-[serverID]-0-[spawnUID]

Prints the GUID of the item in the player's head slot.

local itemLoc = ItemLocation:CreateFromEquipmentSlot(INVSLOT_HEAD)
local item = Item:CreateFromItemLocation(itemLoc)
print(item:GetItemGUID())

> "Item-1598-0-4000000A369860E1"

Player[]

Player-[serverID]-[playerUID]
/dump UnitGUID("player")
> "Player-970-0002FD64"

It should be noted that the act of transferring characters, either server to server, account to account, or even account to account while remaining on the same server will generate a new character GUID, because of how the process works (the character "ceases to exist" for a short period, and is then recreated). This act erases friend and ignore lists. Renaming a character does not trigger a new GUID, as that process is much simpler than a full character move.

Vignette[]

Vignettes are used for one-time rare mobs and treasure chests, see also C_VignetteInfo.GetVignetteInfo()

Vignette-0-[serverID]-[instanceID]-[zoneUID]-0-[spawnUID]
"Vignette-0-970-1116-7-0-0017CAE465" -- for rare mob Sulfurious

Patch changes[]

  • Warlords of Draenor Patch 6.0.2 (2014-10-14): Changed to a new format, e.g. for players: Player-[serverID]-[playerUID]
  • Mists of Pandaria Patch 5.1.0 (2012-11-27): Bits shifted. NPCID is now characters 6-9, not 7-10 (counting from 1).
  • Cataclysm Patch 4.0.1 (2010-10-12): Bits shifted. NPCID is now characters 5-8, not 7-10 (counting from 1).
  • Wrath-Logo-Small Patch 3.3.0 (2009-12-08): Bits shifted. NPCID is now characters 7-10, not 6-9 (counting from 1).
  • Bc icon Patch 2.4.0 (2008-03-25): Added, an example of the old format is "0xF130C3030000037F2"

References[]

Advertisement