GUID

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.
__TOC__
==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===
* GUIDs for Battle Pets, also referred to sometimes as petID. (Not to be confused with speciesID)
 BattlePet-0-[ID]
Prints the currently active companion pet.
/dump C_PetJournal.GetSummonedPetGUID()
> "BattlePet-0-00000338F951"
===BNetAccount===
* GUIDs for Battle.net accounts are returned from () or ()
 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 ()
王飞鱼#5889
===Cast===
* GUIDs for spell casts are obtained from spell cast events or as a return value from ()
 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 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 Divine Hymn and Spinning Crane Kick. 	Cast-13-4170-1643-17-64844-0004B03416
16 	Represents a single tick from spells such as Flurry and 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 () 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 () 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 () 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===
* GUIDs for Garrison followers are e.g. returned from ()
local followers = C_Garrison.GetFollowers()
print(followers[1].name, followers[1].followerID)
> "Calia Menethil", "0x0000000004CBDB61"
===Item===
* GUIDs for items are returned from , ItemMixin:GetItemGUID and . (Not to be confused with ItemIDs)
 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===
* GUIDs for Units are returned from ()
 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 ()
 Vignette-0-[serverID]-[instanceID]-[zoneUID]-0-[spawnUID]
"Vignette-0-970-1116-7-0-0017CAE465" -- for rare mob Sulfurious
==Patch changes==
* 
* 
* 
* 
* 
==References==
* 
*