ItemLink
- For the data previously at "ItemLink", see ItemLink/Archive.
Item hyperlinks are used to encode information for item tooltips and to pass item information between clients.
Structure
Hyperlink
|cffxxxxxx|Hitem:payload|h[text]|h|r
Payload
itemID : enchantID : gemID1 : gemID2 : gemID3 : gemID4 : suffixID : uniqueID : linkLevel : specializationID : modifiersMask : itemContext : numBonusIDs[:bonusID1:...] : numModifiers[:modifierType1:modifierValue1:...] : relic1NumBonusIDs[:relicBonusID1:...] : relic2NumBonusIDs[...] : relic3NumBonusIDs[...] : crafterGUID : extraEnchantID
Item ID
Item ID used for e.g. GetItemInfo()
Enchant ID
See list of EnchantIds and SpellItemEnchantment.db2
- ItemLinks can be altered to have any enchantID and still be valid for use in SendChatMessage() and tooltips.
- Temporary enchants like [Windfury Weapon] and [Rough Sharpening Stone] do not appear in the ItemLink, even though they are listed in
SpellItemEnchantment.db2
Example: Item enchanted with [Minor Stamina].
"|cff0070dd|Hitem:80921:4721:::::::36:103::1:::::::|h[Saboteur's Stabilizing Bracers]|h|r"
Gem IDs
Gems are listed by itemID for each socket. gemID4
is unused.
Example: [Helm of Elemental Binding] socketed with [Perfect Brilliant Bloodstone] for only the 2nd gem slot.
"|cff0070dd|Hitem:87451:::41438:::::53:257:::1:6658:2:9:35:28:1035:::::|h[Helm of Elemental Binding]|h|r" 4: 41438 -- gemID2
Suffix ID
Item suffix in Classic are given to items that get randomized stat ratings e.g. "of the Bear" and refer to (multiple) enchantIDs.
- Positive IDs (obtained pre-2.0) are listed in SuffixId and ItemRandomProperties.db2
- Negative IDs (obtained post-2.0) are listed in ItemRandomSuffix and ItemRandomSuffix.db2.
Example: Suffix with a positive ID from Classic Era.
"|cff1eff00|Hitem:9849::::::776:661453184:33:::::::::|h[Conjurer's Hood of the Owl]|h|r"
Example: Suffix with a negative ID from Burning Crusade Classic.
"|cff1eff00|Hitem:6267::::::-9:1379794946:33:::::::::|h[Disciple's Pants of the Owl]|h|r"
Unique ID
Data pertaining to a specific instance of the item. No longer used.
Link Level
Level of the character supplying the link. This is used to render scaling heirloom item tooltips at the proper level.
Specialization ID
Class SpecializationID of the character supplying the link. This is used to display the appropriate primary stat and set bonuses on gear.
Modifiers Mask
No longer used.
Item Context
Contains information about the Item Source. For example the starter gear:
"|cffffffff|Hitem:51::::::::1:1452::75:::::::|h[Neophyte's Boots]|h|r" 12: 75 -- New Character
|
|
Bonus IDs
- See also: Raidbots bonus IDs data
BonusIDs can adjust item levels, modify stats, change item quality, add item titles, append words to item names, add sockets, adjust appearance, adjust required equip level, and possibly many more. They can be looked up in ItemBonus.db2.ParentItemBonusListID
Example: Timewarped Warforged [Gauntlets of Vindication]. If say you want to find all possible Warforged Bonus IDs, look up the ItemNameDescription IDs for "warforged" and filter for IDs 11428|13220.
"|cff0070dd|Hitem:127232::::::::50:72::22:2:615:656:1:9:40:::::|h[Gauntlets of Vindication]|h|r" 13: 2 -- numBonusIDs 14: 615 -- bonusID1: Timewarped 15: 656 -- bonusID2: Warforged
Example: Level 86 / Item level 140 [Heart of Azeroth].
"|cffe6cc80|Hitem:158075::::::::53:257::11:4:4932:4933:6316:1554::::::|h[Heart of Azeroth]|h|r" 13: 4 -- numBonusIDs 14: 4932 -- bonusID1: No Bonus 15: 4933 -- bonusID2: No Bonus 16: 6316 -- bonusID3: Increase iLevel 17: 1554 -- bonusID4: Increase iLevel
Item Modifiers
Item modifiers contain extra item information in key-value pairs.
Value | Key | Info | Description |
---|---|---|---|
0 | TransmogrifyItemModifiedAppearanceIDSpecAll | TRANSMOG_APPEARANCE_ALL_SPECS | |
1 | TransmogrifyItemModifiedAppearanceIDSpec_0 | TRANSMOG_APPEARANCE_SPEC_1 | |
2 | IncrementLevelObsolete | UPGRADE_ID | |
3 | BattlePetSpecies | BATTLE_PET_SPECIES_ID | BattlePetSpeciesID |
4 | BattlePetBreed | BATTLE_PET_BREED_DATA | |
5 | BattlePetLevel | BATTLE_PET_LEVEL | |
6 | BattlePetCreaturedisplayid | BATTLE_PET_DISPLAY_ID | |
7 | TransmogrifyOverrideEnchantVisualIDSpecAll | ENCHANT_ILLUSION_ALL_SPECS | |
8 | ArtifactAppearanceID | ARTIFACT_APPEARANCE_ID | ArtifactAppearanceID |
9 | TimewalkerLevel | TIMEWALKER_LEVEL | |
10 | TransmogrifyOverrideEnchantVisualIDSpec_0 | ENCHANT_ILLUSION_SPEC_1 | |
11 | TransmogrifyItemModifiedAppearanceIDSpec_1 | TRANSMOG_APPEARANCE_SPEC_2 | |
12 | TransmogrifyOverrideEnchantVisualIDSpec_1 | ENCHANT_ILLUSION_SPEC_2 | |
13 | TransmogrifyItemModifiedAppearanceIDSpec_2 | TRANSMOG_APPEARANCE_SPEC_3 | |
14 | TransmogrifyOverrideEnchantVisualIDSpec_2 | ENCHANT_ILLUSION_SPEC_3 | |
15 | TransmogrifyItemModifiedAppearanceIDSpec_3 | TRANSMOG_APPEARANCE_SPEC_4 | |
16 | TransmogrifyOverrideEnchantVisualIDSpec_3 | ENCHANT_ILLUSION_SPEC_4 | |
17 | KeystoneMapChallengeModeID | CHALLENGE_MAP_CHALLENGE_MODE_ID | MapChallengeMode.db2 |
18 | KeystonePowerLevel | CHALLENGE_KEYSTONE_LEVEL | |
19 | KeystoneAffix0 | CHALLENGE_KEYSTONE_AFFIX_ID_1 | KeystoneAffix.db2 |
20 | KeystoneAffix01 | CHALLENGE_KEYSTONE_AFFIX_ID_2 | |
21 | KeystoneAffix02 | CHALLENGE_KEYSTONE_AFFIX_ID_3 | |
22 | KeystoneAffix03 | CHALLENGE_KEYSTONE_AFFIX_ID_4 | |
23 | LegionArtifactKnowledgeObsolete | ARTIFACT_KNOWLEDGE_LEVEL | |
24 | ArtifactTier | ARTIFACT_TIER | |
25 | TransmogrifyItemModifiedAppearanceIDSpec_4 | TRANSMOG_APPEARANCE_SPEC_5 | |
26 | PvPRating | PVP_RATING | |
27 | TransmogrifyOverrideEnchantVisualIDSpec_4 | ENCHANT_ILLUSION_SPEC_5 | |
28 | ContentTuningID | CONTENT_TUNING_ID | ContentTuning.db2 |
29 | ChangeModifiedCraftingStat_1 | CHANGE_MODIFIED_CRAFTING_STAT_1 | |
30 | ChangeModifiedCraftingStat_2 | CHANGE_MODIFIED_CRAFTING_STAT_2 | |
31 | TransmogrifySecondaryItemModifiedAppearanceIDSpecAll | TRANSMOG_SECONDARY_APPEARANCE_ALL_SPECS | |
32 | TransmogrifySecondaryItemModifiedAppearanceIDSpec_0 | TRANSMOG_SECONDARY_APPEARANCE_SPEC_1 | |
33 | TransmogrifySecondaryItemModifiedAppearanceIDSpec_1 | TRANSMOG_SECONDARY_APPEARANCE_SPEC_2 | |
34 | TransmogrifySecondaryItemModifiedAppearanceIDSpec_2 | TRANSMOG_SECONDARY_APPEARANCE_SPEC_3 | |
35 | TransmogrifySecondaryItemModifiedAppearanceIDSpec_3 | TRANSMOG_SECONDARY_APPEARANCE_SPEC_4 | |
36 | TransmogrifySecondaryItemModifiedAppearanceIDSpec_4 | TRANSMOG_SECONDARY_APPEARANCE_SPEC_5 | |
37 | SoulbindConduitRank | SOULBIND_CONDUIT_RANK | |
38 | CraftingQualityID | ITEM_MODIFIER_CRAFTING_QUALITY_ID | |
39 | CraftingSkillLineAbilityID | ITEM_MODIFIER_CRAFTING_SKILL_LINE_ABILITY_ID | |
40 | CraftingDataID | ITEM_MODIFIER_CRAFTING_DATA_ID | |
41 | CraftingSkillReagents | ITEM_MODIFIER_CRAFTING_SKILL_REAGENTS | |
42 | CraftingSkillWatermark | ITEM_MODIFIER_CRAFTING_SKILL_WATERMARK | |
43 | CraftingReagentSlot_0 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_0 | |
44 | CraftingReagentSlot_1 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_1 | |
45 | CraftingReagentSlot_2 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_2 | |
46 | CraftingReagentSlot_3 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_3 | |
47 | CraftingReagentSlot_4 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_4 | |
48 | CraftingReagentSlot_5 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_5 | |
49 | CraftingReagentSlot_6 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_6 | |
50 | CraftingReagentSlot_7 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_7 | |
51 | CraftingReagentSlot_8 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_8 | |
52 | CraftingReagentSlot_9 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_9 | |
53 | CraftingReagentSlot_10 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_10 | |
54 | CraftingReagentSlot_11 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_11 | |
55 | CraftingReagentSlot_12 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_12 | |
56 | CraftingReagentSlot_13 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_13 | |
57 | CraftingReagentSlot_14 | ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_14 |
Example: [Missing Diplomat's Pauldrons] from Heroic Deadmines.
"|cff0070dd|Hitem:63470::::::::53:257::2:1:4198:2:28:1199:9:35:::::|h[Missing Diplomat's Pauldrons]|h|r" 15: 2 -- numModifiers 16: 28 -- modifierType1: CONTENT_TUNING_ID 17: 1199 -- modifierValue1 18: 9 -- modifierType2: TIMEWALKER_LEVEL 19: 35 -- modifierValue2
Example: [Mythic Keystone] when seen in CHAT_MSG_LOOT. See also keystoneLink.
"|cffa335ee|Hitem:180653::::::::60:250::::6:17:381:18:13:19:9:20:7:21:124:22:121:::::|h[Mythic Keystone]|h|r" 14: 6 -- numModifiers 15: 17 -- modifierType1: CHALLENGE_MAP_CHALLENGE_MODE_ID 16: 381 -- modifierValue1: Spires of Ascension 17: 18 -- modifierType2: CHALLENGE_KEYSTONE_LEVEL 18: 13 -- modifierValue2 19: 19 -- modifierType3: CHALLENGE_KEYSTONE_AFFIX_ID_1 20: 9 -- modifierValue3: Tyrannical 21: 20 -- modifierType4: CHALLENGE_KEYSTONE_AFFIX_ID_2 22: 7 -- modifierValue4: Bolstering 23: 21 -- modifierType5: CHALLENGE_KEYSTONE_AFFIX_ID_3 24: 124 -- modifierValue5: Storming 25: 22 -- modifierType6: CHALLENGE_KEYSTONE_AFFIX_ID_4 26: 121 -- modifierValue6: Prideful
Relic Bonus IDs
Example: [T'uure, Beacon of the Naaru] with Artifact Relics as Gems.
"|cffe6cc80|Hitem:128825::140844:140839:152044::::53:257::9:2:739:1522:2:8:749:24:1:3:3520:1472:3337:3:3520:1472:3337:3:3610:1472:3528::|h[T'uure, Beacon of the Naaru]|h|r"
0: item
1: 128825 -- itemID
2: -- enchantID
3: 140844 -- gemID1: Archaic Nathrezim Keepsake
4: 140839 -- gemID2: Parasitic Spore
5: 152044 -- gemID3: Spark of Everburning Light
6: -- gemID4
7: -- suffixID
8: -- uniqueID
9: 53 -- linkLevel
10: 257 -- specializationID: Holy
11: -- modifiersMask
12: 9 -- itemContext: Scenario: Normal
13: 2 -- numBonusIDs
14: 739 -- bonusID1
15: 1522 -- bonusID2
16: 2 -- numModifiers
17: 8 -- modifierType1: ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID
18: 749 -- modifierValue1: ArtifactAppearanceID
19: 24 -- modifierType2: ITEM_MODIFIER_ARTIFACT_TIER
20: 1 -- modifierValue2
21: 3 -- relic1NumBonusIDs
22: 3520 -- relic1BonusID1: Raid Finder
23: 1472 -- relic1BonusID2: Increase iLevel
24: 3337 -- relic1BonusID3: Titanforged
25: 3 -- relic2NumBonusIDs
26: 3520 -- relic2BonusID1
27: 1472 -- relic2BonusID2
28: 3337 -- relic2BonusID3
29: 3 -- relic3NumBonusIDs
30: 3610 -- relic3BonusID1
31: 1472 -- relic3BonusID2
32: 3528 -- relic3BonusID3
33: -- crafterGUID
34: -- extraEnchantID
Crafter GUID
Unit GUID of the player who crafted the item. For example a [Lesser Magic Wand].
"|cff1eff00|Hitem:11287::::::::36:103::::1:28:1418::::Player-3299-0050F7FB:|h[Lesser Magic Wand]|h|r"
Extra Enchant IDs
For example an item with the Nitro Boosts engineering tinker.
"|cff1eff00|Hitem:173341::::::::53:257::11:1:6707:2:9:51:28:1318:::::4223|h[Cord of Uncertain Devotion]|h|r"
Examples
- The first number is the ItemID for a [Hearthstone]. The next 7 values are empty, which tells the client it has no enchants, gems and extra stats. The 9th number means that the link originated from a level 54 character. The 10th number 257 (SpecializationID) specifies the character to be a Holy Priest.
/run SendChatMessage("\124cffffffff\124Hitem:6948::::::::54:257:::::::::\124h[Hearthstone]\124h\124r")
- The first number is the ItemID for a [Brutality Blade]. The second number (EnchantId) denotes that it is enchanted with +3 agility.
/run SendChatMessage("\124cffa335ee\124Hitem:18832:2564:::::::::::::::::\124h[Brutality Blade]\124h\124r")
Inspecting links
You can inspect a hyperlink from the in-game chat window.
/dump "[Red Winter Hat]" > "|cff1eff00|Hitem:21524::::::::53:257::::::::|h[Red Winter Hat]|h|r"
From an addon, when clicking a hyperlink in-game.
hooksecurefunc("SetItemRef", function(link, text)
print(text:gsub("|", "||"))
for k, v in pairs({strsplit(":", link)}) do
if #v > 0 then
print(k-1, v)
end
end
end)
"|cff1eff00|Hitem:21524::::::::53:257::::::::|h[Red Winter Hat]|h|r"
0, "item"
1, "21524"
9, "53"
10, "257
Parsing links
This example parses an item link to a table. Also refer to how AdiBags parses it.
local simpleTypes = {
itemID = 1,
enchantID = 2,
suffixID = 7,
uniqueID = 8,
linkLevel = 9,
specializationID = 10,
modifiersMask = 11,
itemContext = 12,
}
local function ParseItemLink(link)
local _, linkOptions = LinkUtil.ExtractLink(link)
local item = {strsplit(":", linkOptions)}
local t = {}
for k, v in pairs(simpleTypes) do
t[k] = tonumber(item[v])
end
for i = 1, 4 do
local gem = tonumber(item[i+2])
if gem then
t.gems = t.gems or {}
t.gems[i] = gem
end
end
local idx = 13
local numBonusIDs = tonumber(item[idx])
if numBonusIDs then
t.bonusIDs = {}
for i = 1, numBonusIDs do
t.bonusIDs[i] = tonumber(item[idx+i])
end
end
idx = idx + (numBonusIDs or 0) + 1
local numModifiers = tonumber(item[idx])
if numModifiers then
t.modifiers = {}
for i = 1, numModifiers do
local offset = i*2
t.modifiers[i] = {
tonumber(item[idx+offset-1]),
tonumber(item[idx+offset])
}
end
idx = idx + numModifiers*2 + 1
else
idx = idx + 1
end
for i = 1, 3 do
local relicNumBonusIDs = tonumber(item[idx])
if relicNumBonusIDs then
t.relicBonusIDs = t.relicBonusIDs or {}
t.relicBonusIDs[i] = {}
for j = 1, relicNumBonusIDs do
t.relicBonusIDs[i][j] = tonumber(item[idx+j])
end
end
idx = idx + (relicNumBonusIDs or 0) + 1
end
local crafterGUID = item[idx]
if #crafterGUID > 0 then
t.crafterGUID = crafterGUID
end
idx = idx + 1
t.extraEnchantID = tonumber(item[idx])
return t
end
-- link: "|cffe6cc80|Hitem:128868::150340:143693:143686::::70:257::9:2:738:1522:2:8:728:24:1:3:3584:1478:3528:3:1824:1472:3528:3:3473:1472:1674::|h[Light's Wrath]|h|r"
-- linkOptions: "128868::150340:143693:143686::::70:257::9:2:738:1522:2:8:728:24:1:3:3584:1478:3528:3:1824:1472:3528:3:3473:1472:1674::"
function example()
local link = GetInventoryItemLink("player", INVSLOT_MAINHAND)
return ParseItemLink(link)
end
Patch changes
Patch 9.2.5 (2022-05-31): Added Enum.ItemCreationContext
, Enum.ItemModification
Patch 9.1.0 (2021-06-29): Added crafterGUID
, extraEnchantID
Patch 7.0.3 (2016-07-19): Added relicBonusIDs
. Lone 0's in item strings have been removed so something like ":0:0:0"
has become ":::"
Patch 6.2.0 (2015-06-23): Added specializationID
, upgradeTypeID
and modifiersMask
Patch 6.0.2 (2014-10-14): Added itemContext
and bonusIDs
Patch 5.1.0 (2012-11-27): Added upgradeValues
Patch 3.0.2 (2008-10-14): Added linkLevel
Patch 2.0.1 (2006-12-05): Added gemID