WoW API < UnitGUID

Returns the GUID of the unit specified. Works on both players and NPC.

UnitGUID("unit")

What does it all mean?

The GUID is a unique hexadecimal string for each unit in the game.

The strings always begin with '0x', which is the normal prefix for hexadecimal numbers. The '0x' prefix isn't actually part of the string, it's just to say "this is a hex string."


Format for players

  • The GUID is a simple number in the order characters are created. An older character has a lower number than a new.

It's possible that the first four to six digits are reserved and always has to be '0', which would limit the amount of characters able to be stored, but it's still a very very very high amount of available space. Reserving the first bits and always make them '0' would make it very easy to always identify a character.

Renaming and transfering to another server, or to another account gives your character a new GUID. It's possible that the GUIDs are stored globally, either per datacenter or even per region. It's also possible that there are some reserved bits in there which makes the number higher than it really is.

Restoring a character from backup is untested wether it restores the old GUID or not.


Format for non-pet NPCs

  • The first two digits seems to be 'F1' or 'F3'.
  • The next digit seems to always be '3'.
  • The next three digits are unknown. It's usually '000'.
  • The next four digits are the NPC id.
  • The last six digits are the spawn counter.

I couldn't find any logic behind why some NPCs are 'F1' and some are 'F3'. From my testing it seems that 'F1' is more common, but there are some places where I found an 'F1' mob right next to an 'F3' mob. If you take the 'NPC id' and convert it to decimal you can check wowhead and see what NPC it is. See examples below.


Format for pets

  • The first two digits seem to be 'F1'.
  • The next digit is always '4'.
  • The next seven digits are unknown.
  • The last six digits are the spawn counter.

I haven't found any pet that starts with 'F3', like non-pet NPCs. It's possible that the seven digits that at this point are unknown are split into smaller pieces. I couldn't find any structure among them, but looking at non-pet NPCs I'd imagine that the NPC id is there somewhere but I couldn't find it.

Spawn counter

Spawn counter is a unique number given all non-player mobs. It's a simple incremental number, instances and outside world are probably handled differently. The number in itself is not relevant, but combined with the rest of the string it always give this exact mob a unique identifier.


An example of a GUID

We have a GUID: "0xF530004D2B008852".

From that we know the following: This is a non-pet NPC. It can't be a player because the first two characters are 'F5', players have '00'. The third character is not '3' for NPCs and not '4' for pets.

We can extract the Unit ID by taking the sixth to tenth digit and converting it to decimal form: "4D2B", or converted to decimal form "19755". A quick visit to wowhead shows that the NPC with that id is "Mo'arg Weaponsmith", [1]. All "Mo'arg Weaponsmiths" will have that id to identify them.

The last six digits, "008852" is the spawn counter. There will never be two "Mo'arg Weaponsmith", possible even never two mobs in the outside world, with the same spawn number.

Speculations

The value returned from players is how recent the player have been created. Someone with the number 1000 would be the 1000th created character on the server, a NPC would simply count up. Each NPC that respawns adds a number higher, so 4294967295 means that there have been 4294967294 NPC before that one that have respawned. Renaming does not change the player UnitGUID value so you can track players trough renames using this, unfortunately if you transfer you're character obtains a new GUID, the last value obtainable (as creating a new character). In instances spawned NPC/mobs return the same value, unlike outside a instance. Player pets keep their value when you despawn then spawn them back, so pets appear to have their own GUID counter like character GUID (creation) counter.


Returns

GUID
Returns the unit GUID in hexdecimal.


Example

local name = UnitName("target"); local guid = UnitGUID("target"); ChatFrame1:AddMessage(name.." has the GUID: "..guid);

Result

Cyan has the GUID: 0x00000000012729FD

Decimal Result

I believe the GUID is too large to be represented as a number, as such, this is a bad idea. Smariot 19:33, 8 April 2008 (UTC)

Alternatively you can also make it output the decimal value instead of the hexdecimal by doing like this:

local name = UnitName("target"); local guid = tonumber(UnitGUID("target"),16); ChatFrame1:AddMessage(name.." has the GUID: "..guid);

The above function would then return this:

Cyan has the GUID: 19343869