-
-
Save Farami/cefbf360a734c7071dfe0ce49977ac32 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--[[ | |
Until Blizzard adds an easier solution, this function can be used to get the true upgraded itemLevel. | |
The Lua file is easily portable between addons. The function is placed in the global namespace. | |
Syntax: | |
GetUpgradedItemLevelFromItemLink(itemLink) | |
= (number) return value is the modified itemLevel based on the item's upgrade | |
= (nil) invalid input | |
Changelog: | |
* REV-08 (15.09.08) Patch 6.2.3: Added patterns, tables, etc for Timewarped and Timewarped Warforged items to work. (Cidrei) | |
* REV-07 (15.07.02) Patch 6.2: A new field in the item string was added "specializationID", pushing the "upgradeId" field to the 11th place. | |
* REV-06 (14.10.15) Patch 6.0.2: Updated the pattern match for "upgradeId" to work for WoD. | |
* REV-05 (14.05.24) Patch 5.4.8: Added IDs 504 to 507. | |
* REV-04 (13.09.21) Patch 5.4: Added IDs 491 to 498 to the table. | |
* REV-03 (13.05.22) Patch 5.3: Added the 465/466/467 IDs (0/4/8 lvls) to the table. | |
* REV-02 (13.xx.xx) Patch 5.2: Added the 470 ID (8 lvls) to the table. | |
--]] | |
-- Make sure we do not override a newer revision. NOTE: Make sure to ALWAYS increase the REVISION number when changing code | |
local REVISION = 8; | |
if (type(GET_UPGRADED_ITEM_LEVEL_REV) == "number") and (GET_UPGRADED_ITEM_LEVEL_REV >= REVISION) then | |
return; | |
end | |
GET_UPGRADED_ITEM_LEVEL_REV = REVISION; | |
--[[ | |
[Item links data change in 6.0, WoD] | |
itemID:enchant:gem1:gem2:gem3:gem4:suffixID:uniqueID:level:reforgeId:upgradeId | |
itemID:enchant:gem1:gem2:gem3:gem4:suffixID:uniqueID:level:upgradeId:instanceDifficultyID:numBonusIDs:bonusID1:bonusID2 | |
[ItemLinks in 6.2 -- Added: 10th param, specializationID] | |
itemID:enchant:gem1:gem2:gem3:gem4:suffixID:uniqueID:level:specializationID:upgradeId:instanceDifficultyID:numBonusIDs:bonusID1:bonusID2 | |
[ItemLinks in 6.2.x -- Added: numBonusIDs? -- The number of bonus IDs are now dynamic, the 13th parameter tells how many there are -- Total Count (???): 14 + numBonusIDs (???)] | |
itemID:enchant:gemID1:gemID2:gemID3:gemID4:suffixID:uniqueID:linkLevel:specializationID:upgradeTypeID:instanceDifficultyID:numBonusIDs:bonusID1:bonusID2:...:upgradeID | |
--]] | |
-- Extraction pattern for the complete itemLink, including all its properties | |
local ITEMLINK_PATTERN = "(item:[^|]+)"; | |
-- Matches the 11th property, upgradeId, of an itemLink. This pattern now scans from the start of the itemLink to make it future-proof with further property additions to itemLinks. | |
local ITEMLINK_PATTERN_UPGRADE = "item:"..("[^:]*:"):rep(10).."(%d+)"; | |
-- Matches the 14th property, which is used for Timewarped items. | |
local ITEMLINK_PATTERN_TIMEWARP = "item:"..("[^:]*:"):rep(13).."(%d+)"; | |
-- Matches the 15th property, which is used for Timewarped Warforged items. | |
local ITEMLINK_PATTERN_TWWF = "item:"..("[^:]*:"):rep(14).."(%d+)"; | |
-- Last property of an itemString | |
local ITEMLINK_PATTERN_UPGRADEID = "%d+$" | |
-- Table for adjustment of levels due to upgrade -- Source: http://www.wowinterface.com/forums/showthread.php?t=45388 | |
local UPGRADED_LEVEL_ADJUST = { | |
[001] = 8, -- 1/1 | |
-- Patch 5.1 -- | |
[373] = 4, -- 1/2 | |
[374] = 8, -- 2/2 | |
[375] = 4, -- 1/3 | |
[376] = 4, -- 2/3 | |
[377] = 4, -- 3/3 | |
[379] = 4, -- 1/2 | |
[380] = 4, -- 2/2 | |
-- [445] = 0, -- 0/2 | |
[446] = 4, -- 1/2 | |
[447] = 8, -- 2/2 | |
-- [451] = 0, -- 0/1 | |
[452] = 8, -- 1/1 | |
-- [453] = 0, -- 0/2 | |
[454] = 4, -- 1/2 | |
[455] = 8, -- 2/2 | |
-- [456] = 0, -- 0/1 | |
[457] = 8, -- 1/1 | |
-- [458] = 0, -- 0/4 | |
[459] = 4, -- 1/4 | |
[460] = 8, -- 2/4 | |
[461] = 12, -- 3/4 | |
[462] = 16, -- 4/4 | |
-- Patch 5.3 -- | |
-- [465] = 0, | |
[466] = 4, | |
[467] = 8, | |
-- Patch ?? -- | |
-- [468] = 0, | |
[469] = 4, | |
[470] = 8, | |
[471] = 12, | |
[472] = 16, | |
-- Patch 5.4 -- | |
-- [491] = 0, | |
[492] = 4, | |
[493] = 8, | |
-- [494] = 0, | |
[495] = 4, | |
[496] = 8, | |
[497] = 12, | |
[498] = 16, | |
-- Patch 5.4.8 -- | |
[504] = 12, -- US/EU upgrade 3/4 | |
[505] = 16, -- US/EU upgrade 4/4 | |
[506] = 20, -- Asia upgrade 5/6 | |
[507] = 24, -- Asis upgrade 6/6 | |
-- Patch 6.2.3 -- | |
[530] = 5, -- WoD upgrade 1/2 | |
[531] = 10, -- WoD upgrade 2/2 | |
}; | |
-- Table for adjustment of levels due to Timewarped. These are fixed itemLevels, not upgrade amounts. | |
local TIMEWARPED_LEVEL_ADJUST = { | |
-- Patch 6.2 -- | |
[615] = 660, -- Dungeon drops. | |
[692] = 675, -- Timewarped badge vendors. | |
}; | |
-- Table for adjustment of levels due to Timewarped Warforged. These are fixed itemLevels, not upgrade amounts. | |
local TIMEWARPED_WARFORGED_LEVEL_ADJUST = { | |
-- Patch 6.2 -- | |
[656] = 675, -- Dungeon drops. | |
}; | |
-- Analyses the itemLink and checks for upgrades that affects itemLevel -- Only itemLevel 450 and above will have this | |
function GetUpgradedItemLevelFromItemLink(itemLink) | |
-- Ensure we only have the raw itemLink, and not the full itemString | |
itemLink = itemLink:match(ITEMLINK_PATTERN); | |
local name, _, _, itemLevel = GetItemInfo(itemLink); | |
--local upgradeId = tonumber(itemLink:match(ITEMLINK_PATTERN_UPGRADE)); | |
local upgradeId = tonumber(itemLink:match(ITEMLINK_PATTERN_UPGRADEID)); | |
local tw = tonumber(itemLink:match(ITEMLINK_PATTERN_TIMEWARP)); | |
local twwf = tonumber(itemLink:match(ITEMLINK_PATTERN_TWWF)); | |
-- Return the actual itemLevel based on the itemLink properties | |
if not (itemLevel) then | |
return nil; | |
elseif (itemLevel >= 450) and (upgradeId) and (UPGRADED_LEVEL_ADJUST[upgradeId]) then | |
return itemLevel + UPGRADED_LEVEL_ADJUST[upgradeId]; | |
elseif (TIMEWARPED_WARFORGED_LEVEL_ADJUST[twwf]) then | |
return TIMEWARPED_WARFORGED_LEVEL_ADJUST[twwf]; | |
elseif (TIMEWARPED_LEVEL_ADJUST[tw]) then | |
return TIMEWARPED_LEVEL_ADJUST[tw]; | |
else | |
return itemLevel; | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment