WoW:API UnitGUID: Difference between revisions

1,293 bytes added ,  15 August 2023
m
Move page script moved page API UnitGUID to WoW:API UnitGUID without leaving a redirect
(3.3 PTR changes?)
m (Move page script moved page API UnitGUID to WoW:API UnitGUID without leaving a redirect)
 
(10 intermediate revisions by 10 users not shown)
Line 29: Line 29:


A GUID can be thought of as being composed of multiple pieces of data. Consider "'''0xAABCCCDDDDEEEEEE'''", where:
A GUID can be thought of as being composed of multiple pieces of data. Consider "'''0xAABCCCDDDDEEEEEE'''", where:
:; AA : unknown.
:; AA
:; B : unit type, mask with 0x7 to get: 0 for players, 1 for world objects, 3 for NPCs, 4 for pets, 5 for vehicles.
:: unknown; Possible battlegroup identifier when used for players.
:; CCC : If the unit is a pet, CCCDDDD forms a unique ID for the pet based on creation order; if a world object, CCCDDDD is the object ID; otherwise unknown.
:; B
:; DDDD : If the unit is an NPC, this is the hexadecimal representation of the NPC id.
:: unit type, mask with 0x7 to get: 0 for players, 1 for world objects, 3 for NPCs, 4 for permanent pets (including Water Elemental), 5 for vehicles. Temporary pets (Treants, Spirit Wolves, Mirror Images, and Ghouls) are considered NPCs (3), even if talents or glyphs prevent them from expiring.
:; EEEEEEE : If the unit is a player, this is a unique identifier based on creation order. Otherwise, this is a spawn counter based on spawn order.
:NOTE: According to my personal analysis, I found that the number stands for players should be 8 instead of 0. I don't know if this is a newly update.
:NOTE: On the server Alexstraza I have seen the 1st 3 numbers be 040, meaning you must mask with 0x7 and 0=player, not 8.
:CORRECTION: If you have masked with 0x7 then the result CANNOT be 8. Masking 8 with 0x7 gives 0. It seems reasonable to conclude that the original poster is correct.
:; CCC
:: If the unit is a pet, CCCDDDD forms a unique ID for the pet based on creation order; if a world object, CCCDDDD is the object ID; otherwise unknown.
:; DDDD
:: If the unit is an NPC, this is the hexadecimal representation of the NPC id.
:; EEEEEE
:: If the unit is a player, this is a unique identifier based on creation order. Otherwise, this is a spawn counter based on spawn order.<br />(For players it can be 7 digits long, so that its DEEEEEE)
 


=== Example: Determining unit type ===
=== Example: Determining unit type ===
Line 47: Line 56:
First of all, let's find out what kind of unit it is. Take the first three digits in the GUID, ie "F53" (or 0xF53 to show it's an hex value) and apply an AND mask of 0x007 to get 0x003. This GUID is for a normal NPC, neither a pet nor a player.
First of all, let's find out what kind of unit it is. Take the first three digits in the GUID, ie "F53" (or 0xF53 to show it's an hex value) and apply an AND mask of 0x007 to get 0x003. This GUID is for a normal NPC, neither a pet nor a player.


We can also 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", [http://www.wowhead.com/?npc=19755]. All "Mo'arg Weaponsmiths" will have that id to identify them.
We can also extract the Unit ID by taking the seventh 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", [http://www.wowhead.com/?npc=19755]. 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. This spawn counter, combined with the rest makes it possible to always refer to exactly this "Mo'arg Weaponsmith", and not the one next to it.
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. This spawn counter, combined with the rest makes it possible to always refer to exactly this "Mo'arg Weaponsmith", and not the one next to it.
A simple in game script command can be used to get the NPC ID from your target: ''Target NPC ID: 19755''
/run print("Target NPC ID:", tonumber((UnitGUID("target")):sub(-12, -9), 16))
More informative script: ''NPC ID("Mo'arg Weaponsmith") = 0x4D2B = 19755''
/run local a=strsub(UnitGUID("target"),7,10); print("NPC ID(\""..UnitName("target").."\") = 0x"..a.." = "..tonumber(a,16))


=== Cross-server and GUID "uniqueness" ===
=== Cross-server and GUID "uniqueness" ===
Line 58: Line 72:
NPC GUID collisions have also been observed. It is unknown why or when in specific they occur, but differing mob types have had a NPC ID number which corresponded to an entirely different NPC. This is considered a very rare phenomenon.
NPC GUID collisions have also been observed. It is unknown why or when in specific they occur, but differing mob types have had a NPC ID number which corresponded to an entirely different NPC. This is considered a very rare phenomenon.


== 3.3 PTR changes to NPC ID portion ==
== {{C-inline}} 4.0 changes to NPC ID ==
 
Along with the Live [http://www.wowwiki.com/Patch_4.0.1 4.0.1 patch (build 13164)], the NPC portion has moved 2 digits to the left, to <font color="#F6ADC6">CC</font><font color="#ADFF2F">DD</font> instead of <font color="#ADFF2F">DDDD</font>.  
It may be the case that all of CCCDDDD is the ID of NPCs, not just DDDD.
*Before: (9th to 12th digit)
 
0xF13000<font color="#ADFF2F">73AB</font>06AE87,"King Varian Wrynn"
  SPELL_CAST_START,0xF1308F32001790BE,"Geißelfürst Tyrannus"
*After: (7th to 10th digit)
0xF130<font color="#ADFF2F">73AB</font>00001BB4,"King Varian Wrynn"


NPC 0x3200 (12800 decimal) is a lowly creature in Feralas.
The NPC portion of this is 0x73AB in hex, and a NPC ID of 29611 in decimal.


Or maybe there's simply something New And Exciting going on that we don't know about yet. NPC IDs currently only number in the 36000s, certainly still enough for a 16-bit number. So where 0x8f3200 is coming from is anyone's guess right now.
Water Elemental is now a permanent pet and as such has an id of 4 instead of 3.
Anonymous user