local _, addon = ... local MogAPI = C_TransmogCollection; local PlayerHasTransmog = MogAPI.PlayerHasTransmogItemModifiedAppearance; local IsAppearanceFavorite = MogAPI.GetIsAppearanceFavorite; local GetSourceInfo = MogAPI.GetSourceInfo; local CreateItemTransmogInfo = ItemUtil.CreateItemTransmogInfo; local GetItemInfoInstant = GetItemInfoInstant; local strsplit = strsplit; local LocalizedData = addon.LocalizedData; local DataProvider = {}; addon.TransmogDataProvider = DataProvider; local ValidSlotForSecondaryAppearance = { [16] = true, [17] = true, }; do local version, build, date, tocversion = GetBuildInfo(); if tocversion and tocversion > 90005 then --Use New API ValidSlotForSecondaryAppearance[3] = true; function DataProvider:GetIllusionName(illusionID) return MogAPI.GetIllusionStrings(illusionID) end function DataProvider:GetIllusionInfo(illusionID) local illusionInfo = MogAPI.GetIllusionInfo(illusionID); if illusionInfo then return illusionInfo.visualID, self:GetIllusionName(illusionID), illusionInfo.icon, illusionInfo.isCollected; end end function DataProvider:GetIllusionSourceText(illusionID) local name, hyperlink, sourceText = MogAPI.GetIllusionStrings(illusionID); return sourceText end else function DataProvider:GetIllusionName(illusionID) local _, name= MogAPI.GetIllusionSourceInfo(illusionID); return name; end function DataProvider:GetIllusionInfo(illusionID) local visualID, name, hyperlink, icon = MogAPI.GetIllusionSourceInfo(illusionID); return visualID, name, icon, false end function DataProvider:GetIllusionSourceText(illusionID) if not self.illusionSources then self.illusionSources = {}; local illusionList = MogAPI.GetIllusions(); for i, illusionInfo in pairs(illusionList) do self.illusionSources[illusionInfo.sourceID] = illusionInfo.sourceText; end end return self.illusionSources[illusionID] end end end function DataProvider:GetVisualIDBySourceID(sourceID) if sourceID and sourceID > 0 then local info = MogAPI.GetAppearanceInfoBySource(sourceID); if info then return info.appearanceID else return 0 end else return 0 end end function DataProvider:IsSourceFavorite(sourceID) return IsAppearanceFavorite( self:GetVisualIDBySourceID(sourceID) ) end function DataProvider:FindKnownSource(sourceID) if not sourceID then return end; local isKnown; if PlayerHasTransmog(sourceID) then return sourceID, true else if not self.sourceIDxKnownSourceID then self.sourceIDxKnownSourceID = {}; end local knownID = self.sourceIDxKnownSourceID[sourceID]; if knownID then return knownID, PlayerHasTransmog(knownID); end local sourceInfo = GetSourceInfo(sourceID); if sourceInfo then local visualID = sourceInfo.visualID; local sources = MogAPI.GetAllAppearanceSources(visualID); for i = 1, #sources do if sourceID ~= sources[i] then if PlayerHasTransmog(sources[i]) then isKnown = true; self.sourceIDxKnownSourceID[sourceID] = sources[i]; sourceID = sources[i]; break end end end end end return sourceID, isKnown end function DataProvider:FindKnwonSourceByVisualID(visualID) local isKnown, sourceID; local sources = MogAPI.GetAllAppearanceSources(visualID); for i = 1, #sources do if not sourceID then sourceID = sources[i]; end if PlayerHasTransmog(sources[i]) then sourceID = sources[i]; isKnown = true; break end end return sourceID, isKnown end function DataProvider:GetSourceIDFromTransmogInfo(transmogInfo) if transmogInfo then if transmogInfo.illusionID and transmogInfo.illusionID > 0 then return transmogInfo.appearanceID, transmogInfo.illusionID else return transmogInfo.appearanceID, transmogInfo.secondaryAppearanceID end end end function DataProvider:CanHaveSecondaryAppearanceForSlotID(slotID) return ValidSlotForSecondaryAppearance[slotID]; end function DataProvider:GetSourceName(sourceID) local sourceInfo = GetSourceInfo(sourceID); if not sourceInfo then return end; return sourceInfo.name end DataProvider.isBow = {}; function DataProvider:IsSourceBow(sourceID) --Cache this cuz it might be frequently used if self.isBow[sourceID] == nil then local sourceInfo = GetSourceInfo(sourceID); if sourceInfo then local _, _, _, itemEquipLoc = GetItemInfoInstant(sourceInfo.itemID); self.isBow[sourceID] = itemEquipLoc == "INVTYPE_RANGED"; end end return self.isBow[sourceID] end --Convert TransmogInfoList into string and vice versa --Format: transmogInfo.appearanceID:secondaryAppearanceID:illusionID (slot delimiter ",") --Example: 123456:0:123 local TransmogSlotOrder = { INVSLOT_HEAD, --1 INVSLOT_SHOULDER, --3 INVSLOT_BACK, --15 INVSLOT_CHEST, --5 INVSLOT_BODY, --4 INVSLOT_TABARD, --19 INVSLOT_WRIST, --9 INVSLOT_HAND, --10 INVSLOT_WAIST, --6 INVSLOT_LEGS, --7 INVSLOT_FEET, --8 INVSLOT_MAINHAND, --16 INVSLOT_OFFHAND, --17 }; function DataProvider:ConvertTransmogListToString(itemTransmogInfoList) if not (itemTransmogInfoList and type(itemTransmogInfoList) == "table") then return end local transmogString; local slotString; local transmogInfo; local primaryID, secondaryID, illusionID; for i, slotID in ipairs(TransmogSlotOrder) do transmogInfo = itemTransmogInfoList[slotID]; if transmogInfo then primaryID = transmogInfo.appearanceID or 0; if transmogInfo.secondaryAppearanceID and transmogInfo.secondaryAppearanceID ~= 0 then secondaryID = transmogInfo.secondaryAppearanceID; else secondaryID = nil; end if transmogInfo.illusionID and transmogInfo.illusionID ~= 0 then illusionID = transmogInfo.illusionID; else illusionID = nil; end if secondaryID then if illusionID then slotString = primaryID..":"..secondaryID..":"..illusionID; else slotString = primaryID..":"..secondaryID; end elseif illusionID then slotString = primaryID..":0:"..illusionID; else slotString = primaryID; end else slotString = 0; end if transmogString then transmogString = transmogString..","..slotString; else transmogString = slotString; end end return transmogString end local function FormatAppearanceID(id) if id then return tonumber(id) or 0; else return 0 end end function DataProvider:ConvertTransmogStringToList(itemTransmogString) local slotStrings = {strsplit(",", itemTransmogString)}; local slotString; local primaryID, secondaryID, illusionID; local itemTransmogInfoList = {}; for i, slotID in ipairs(TransmogSlotOrder) do slotString = slotStrings[i]; if slotString then primaryID, secondaryID, illusionID = strsplit(":", slotString); primaryID = FormatAppearanceID(primaryID); secondaryID = FormatAppearanceID(secondaryID); illusionID = FormatAppearanceID(illusionID); else primaryID, secondaryID, illusionID = 0, 0, 0; end itemTransmogInfoList[slotID] = CreateItemTransmogInfo(primaryID, secondaryID, illusionID); end return itemTransmogInfoList end ---- Read BetterWardrobe Extra Saved Outfits ---- local function IsBWDatabaseValid() return (BetterWardrobe_ListData and BetterWardrobe_ListData.OutfitDB and BetterWardrobe_ListData.OutfitDB.char) and (BetterWardrobe_SavedSetData and BetterWardrobe_SavedSetData.global and BetterWardrobe_SavedSetData.global.sets) end local function GetBWNumOutfits(profileKey, setType) if setType then if setType == "SavedExtra" then return BetterWardrobe_ListData.OutfitDB.char[profileKey] and BetterWardrobe_ListData.OutfitDB.char[profileKey].outfits and #BetterWardrobe_ListData.OutfitDB.char[profileKey].outfits or 0 elseif setType == "SavedBlizzard" then return BetterWardrobe_SavedSetData.global.sets[profileKey] and #BetterWardrobe_SavedSetData.global.sets[profileKey] or 0 end else return GetBWNumOutfits(profileKey, "SavedExtra") + GetBWNumOutfits(profileKey, "SavedBlizzard") end end function DataProvider:IsBWDatabaseValid() return IsBWDatabaseValid() end function DataProvider:GetBWCharacters(includeNoOutfitChar) if not IsBWDatabaseValid() then return {} end; local profileData = {}; local profileKeys = {}; local total = 0; local playerName, realmName, numOutfits; local match = string.match; if includeNoOutfitChar then for profileKey in pairs(BetterWardrobe_SavedSetData.profileKeys) do total = total + 1; playerName, realmName = match(profileKey, "(.+) %- (.+)"); numOutfits = GetBWNumOutfits(profileKey); profileData[total] = {profileKey, playerName or profileKey, realmName, numOutfits}; end else for profileKey in pairs(BetterWardrobe_SavedSetData.profileKeys) do numOutfits = GetBWNumOutfits(profileKey); if numOutfits > 0 then total = total + 1; playerName, realmName = match(profileKey, "(.+) %- (.+)"); profileData[total] = {profileKey, playerName or profileKey, realmName, numOutfits}; end end end local function SortByRealmThenName(a, b) --character name first, then realm name if a[2] and b[2] and a[3] and b[3] then if a[2] == b[2] then --same name return a[3] < b[3] else return a[2] < b[2] end else return a[1] < b[1] end end table.sort(profileData, SortByRealmThenName); for i = 1, total do profileKeys[i] = profileData[i][1]; end return profileKeys, total end function DataProvider:GetBWCharacterData(profileKey, key) if not IsBWDatabaseValid() then return end; if key then if key == "name" then local playerName, realmName = string.match(profileKey, "(.+) %- (.+)"); return playerName or profileKey elseif key == "outfits" then local outfitStrings = {}; local outfits = BetterWardrobe_SavedSetData.global.sets[profileKey]; local total = 0; if outfits then for i, outfit in ipairs(outfits) do if outfit.sources then total = total + 1; outfitStrings[total] = { n = outfit.name or ("Unnamed Outfit "..total), s = self:ConvertBWOutfitToString(outfit.sources), }; end end end outfits = BetterWardrobe_ListData.OutfitDB.char[profileKey] and BetterWardrobe_ListData.OutfitDB.char[profileKey].outfits; if outfits then for i, outfit in ipairs(outfits) do total = total + 1; outfitStrings[total] = { n = outfit.name or ("Unnamed Outfit "..total), s = self:ConvertBWOutfitToString(outfit), }; end end return outfitStrings end else local data = {}; local playerName, realmName = string.match(profileKey, "(.+) %- (.+)"); data.name = playerName; data.numOutfits = GetBWNumOutfits(profileKey); return data end end function DataProvider:GetBWCharacterOutfitNames(profileKey) if not IsBWDatabaseValid() then return end; local data = BetterWardrobe_ListData.OutfitDB.char[profileKey]; local outfitNames = {}; local total = 0; if data and data.outfits then for k, v in ipairs(data.outfits) do total = total + 1; outfitNames[total] = v.name; end end return outfitNames end function DataProvider:ConvertBWOutfitToString(outfit) --BetterWardrobe\Data\Database.lua --addon.GetSavedList() if not (outfit and type(outfit) == "table") then return end local transmogString; local slotString; local primaryID; for i, slotID in ipairs(TransmogSlotOrder) do primaryID = outfit[slotID] or 0; slotString = primaryID; if slotID == 3 then if outfit.offShoulder and outfit.offShoulder~= 0 then slotString = primaryID..":"..outfit.offShoulder; end elseif slotID == 16 then if outfit.mainHandEnchant and outfit.mainHandEnchant ~= 0 then slotString = primaryID..":0:"..outfit.mainHandEnchant; end elseif slotID == 17 then if outfit.offHandEnchant and outfit.offHandEnchant ~= 0 then slotString = primaryID..":0:"..outfit.offHandEnchant; end end if transmogString then transmogString = transmogString..","..slotString; else transmogString = slotString; end end return transmogString end --Debug --[[ function GetTransmogStringByOutfitID(outfitID) local itemTransmogInfoList = C_TransmogCollection.GetOutfitItemTransmogInfoList(outfitID); return DataProvider:ConvertTransmogListToString(itemTransmogInfoList); end --]] local SOURCE_TEXTS = {}; local ITEM_SOURCE_TEXT_IDS = {}; do local _, argus = GetAchievementInfo(12078); --Argus Weapon Transmogs: Arsenal: Weapons of the Lightforged argus = argus or "Commander of Argus"; argus = "|cFFFFD100"..(TRANSMOG_SOURCE_5 or "Achievement") .."|r "..argus; SOURCE_TEXTS[1] = argus; local _, _, promotionShadowlands = C_MountJournal.GetMountInfoExtraByID(1289); --EnsorcelledEverwyrm Promotion: Shadowlands Heroic Edition SOURCE_TEXTS[2] = promotionShadowlands; SOURCE_TEXTS[3] = Narci.L["Heritage Armor"] or "Heritage Armor"; SOURCE_TEXTS[4] = Narci.L["Secret Finding"] or "Secret Finding"; SOURCE_TEXTS[5] = DUNGEON_FLOOR_HELHEIMRAID1 or "Trial of Valor"; local HeritageArmorItemIDs = { 165931, 165932, 165933, 165934, 165935, 165936, 165937, 16598, --Dwarf 161008, 161009, 161010, 161011, 161012, 161013, 161014, 161015, --Dark Iron 156668, 156669, 156670, 156671, 156672, 156673, 156674, 156684, --Highmountain 156699, 156700, 156701, 156702, 156703, 156704, 156705, 156706, --Lightforged 161050, 161051, 161052, 161054, 161055, 161056, 161057, 161058, --Mag'har Orc (Blackrock Recolor) 161059, 161060, 161061, 161062, 161063, 161064, 161065, 161066, --Mag'har Orc (Frostwolf Recolor) 160992, 160993, 160994, 160999, 161000, 161001, 161002, 161003, --Mag'har Orc (Warsong Recolor) 156690, 156691, 156692, 156693, 156694, 156695, 156696, 156697, 157758, 158917, --Void Elf 156675, 156676, 156677, 156678, 156679, 156680, 156681, 156685, --Nightborne 166348, 166349, 166351, 166352, 166353, 166354, 166355, 166356, 166357, --Blood Elf 164993, 164994, 164995, 164996, 164997, 164998, 164999, 165000, --Zandalari 165002, 165003, 165004, 165005, 165006, 165007, 165008, 165009, --Kul'tiran 168282, 168283, 168284, 168285, 168286, 168287, 168288, 168289, 168290, --Gnome 168291, 168292, 168293, 168294, 168295, 168296, 168297, 168298, 170063, --Tauren 173968, 173966, 173970, 173971, 173967, 173969, 174354, 174355, --Vulpera 173961, 173962, 173963, 173964, 173958, 173972, --Mechagnome 174000, 174001, 174002, 174003, 174004, 174005, 174006, 173999, 173998, --Worgen }; local Ensemble_TheChosenDead = { 142423, 142421, 142422, 142434, 142420, 142433, --Mail 142427, 142425, 142431, 142435, 142426, 142424, --Plate 142419, 142430, 142432, 142417, 142418, 142416, --Leather 142415, 142411, 142410, 142413, 142429, 142414, --Cloth 143355, 143345, 143334, 143354, 143346, 143347, 143356, 143339, 143349, 143342, 143344, 143335, 143353, 143368, 143340, 143337, 143348, 143341, 143343, 143367, 143336, 143352, 143366, 143351, 143360, 143358, 143350, 143361, 143364, 143359, 143338, 143369, 143365, 143363, 143362, 143357, }; local LightforgedWeapons = { 152332, 152333, 152334, 152335, 152336, 152337, 152338, 152339, 152340, 152341, 152342, 152343, }; local ShadowlandsPromotion = { 172075, 172076, 172077, 172078, 172079, 172080, 172081, 172082, 172083, }; local function DesignateSourceTextID(itemIDTable, sourceTextID) for _, id in ipairs(itemIDTable) do ITEM_SOURCE_TEXT_IDS[id] = sourceTextID; end end DesignateSourceTextID(LightforgedWeapons, 1); DesignateSourceTextID(ShadowlandsPromotion, 2); DesignateSourceTextID(HeritageArmorItemIDs, 3); DesignateSourceTextID(Ensemble_TheChosenDead, 5); ITEM_SOURCE_TEXT_IDS[162690] = 4; --Waist of Time end function DataProvider:GetSpecialItemSourceText(sourceID, itemID, modID) local legionArtifactName = self:GetArtifactAppearanceSetName(sourceID); if legionArtifactName then return legionArtifactName end if itemID and ITEM_SOURCE_TEXT_IDS[itemID] then return SOURCE_TEXTS[ ITEM_SOURCE_TEXT_IDS[itemID] ] end end local ArtifactSourceIDXArtifactSetID = { [69077] = 3, [69078] = 3, [69079] = 3, [69080] = 3, [70215] = 4, [70216] = 4, [70217] = 4, [70218] = 4, [70219] = 5, [70220] = 6, [70221] = 6, [70222] = 6, [70223] = 6, [70224] = 7, [70225] = 7, [70226] = 7, [70227] = 7, [72790] = 8, [72810] = 8, [72791] = 8, [72811] = 8, [72792] = 8, [72812] = 8, [72793] = 8, [72813] = 8, [72794] = 9, [72814] = 9, [72795] = 9, [72815] = 9, [72796] = 9, [72816] = 9, [72797] = 9, [72817] = 9, [72798] = 10, [72818] = 10, [72799] = 10, [72819] = 10, [72800] = 10, [72820] = 10, [72801] = 10, [72821] = 10, [72802] = 11, [72822] = 11, [72803] = 11, [72823] = 11, [72804] = 11, [72824] = 11, [72805] = 11, [72825] = 11, [72806] = 12, [72826] = 12, [72807] = 12, [72827] = 12, [72808] = 12, [72828] = 12, [72809] = 12, [72829] = 12, [73398] = 13, [73399] = 13, [73400] = 13, [73401] = 13, [73402] = 14, [73403] = 14, [73404] = 14, [73405] = 14, [73409] = 15, [73410] = 15, [73411] = 15, [73412] = 15, [73415] = 16, [73416] = 16, [73417] = 16, [73418] = 16, [73419] = 17, [73420] = 17, [73421] = 17, [73422] = 17, [73888] = 20, [73908] = 20, [73502] = 21, [73522] = 21, [73503] = 21, [73523] = 21, [73504] = 21, [73524] = 21, [73505] = 21, [73525] = 21, [73506] = 22, [73526] = 22, [73507] = 22, [73527] = 22, [73508] = 22, [73528] = 22, [73509] = 22, [73529] = 22, [73510] = 23, [73530] = 23, [73511] = 23, [73531] = 23, [73512] = 23, [73532] = 23, [73513] = 23, [73533] = 23, [73514] = 24, [73534] = 24, [73515] = 24, [73535] = 24, [73516] = 24, [73536] = 24, [73517] = 24, [73537] = 24, [73518] = 25, [73538] = 25, [73519] = 25, [73539] = 25, [73520] = 25, [73540] = 25, [73521] = 25, [73541] = 25, [76520] = 32, [76523] = 33, [76521] = 39, [76522] = 39, [76984] = 33, [76534] = 40, [77278] = 40, [75200] = 41, [73695] = 42, [73675] = 42, [76536] = 43, [76537] = 43, [76535] = 44, [73717] = 44, [76533] = 45, [76173] = 46, [77409] = 46, [76530] = 47, [76335] = 48, [73655] = 48, [76529] = 50, [76527] = 51, [77351] = 51, [76526] = 52, [73865] = 53, [73866] = 53, [73867] = 53, [73868] = 53, [73869] = 54, [73870] = 54, [73871] = 54, [73872] = 54, [73873] = 55, [73874] = 55, [73875] = 55, [73876] = 55, [73877] = 56, [73878] = 56, [73879] = 56, [73880] = 56, [73881] = 57, [73882] = 57, [73883] = 57, [73884] = 57, [73887] = 20, [73907] = 20, [73886] = 20, [73906] = 20, [73885] = 20, [73905] = 20, [73889] = 61, [73909] = 61, [73890] = 61, [73910] = 61, [73891] = 61, [73911] = 61, [73892] = 61, [73912] = 61, [73893] = 58, [73913] = 58, [73894] = 58, [73914] = 58, [73895] = 58, [73915] = 58, [73896] = 58, [73916] = 58, [73897] = 59, [73917] = 59, [73898] = 59, [73918] = 59, [73899] = 59, [73919] = 59, [73900] = 59, [73920] = 59, [73901] = 60, [73921] = 60, [73902] = 60, [73922] = 60, [73903] = 60, [73923] = 60, [73904] = 60, [73924] = 60, [74460] = 64, [74461] = 64, [74462] = 64, [74463] = 64, [74464] = 65, [74465] = 65, [74466] = 65, [74467] = 65, [74468] = 66, [74469] = 66, [74470] = 66, [74471] = 66, [74472] = 67, [74473] = 67, [74474] = 67, [74475] = 67, [74476] = 68, [74477] = 68, [74478] = 68, [74479] = 68, [74595] = 49, [74596] = 49, [74597] = 49, [74598] = 49, [74599] = 69, [74600] = 69, [74601] = 69, [74602] = 69, [74603] = 70, [74604] = 70, [74605] = 70, [74606] = 70, [74607] = 71, [74608] = 71, [74609] = 71, [74610] = 71, [74611] = 72, [74612] = 72, [74613] = 72, [74614] = 72, [75201] = 41, [75202] = 41, [75203] = 41, [75204] = 73, [75205] = 73, [75206] = 73, [75207] = 73, [75208] = 74, [75209] = 74, [75210] = 74, [75211] = 74, [75212] = 75, [75213] = 75, [75214] = 75, [75215] = 75, [75216] = 76, [75217] = 76, [75218] = 76, [75220] = 76, [73696] = 42, [73676] = 42, [73697] = 42, [73677] = 42, [73698] = 42, [73678] = 42, [73699] = 77, [73679] = 77, [73700] = 77, [73680] = 77, [73703] = 78, [73683] = 78, [73707] = 79, [73687] = 79, [73701] = 77, [73681] = 77, [73702] = 77, [73682] = 77, [73704] = 78, [73684] = 78, [73705] = 78, [73685] = 78, [73706] = 78, [73686] = 78, [73708] = 79, [73688] = 79, [73709] = 79, [73689] = 79, [73710] = 79, [73690] = 79, [75221] = 81, [76174] = 46, [77410] = 46, [76175] = 46, [77411] = 46, [76176] = 46, [77412] = 46, [76177] = 82, [77413] = 82, [76178] = 82, [77414] = 82, [76179] = 82, [77415] = 82, [76180] = 82, [77416] = 82, [76181] = 83, [77417] = 83, [76182] = 83, [77418] = 83, [76183] = 83, [77419] = 83, [76184] = 83, [77420] = 83, [76185] = 84, [77421] = 84, [76186] = 84, [77422] = 84, [76187] = 84, [77423] = 84, [76188] = 84, [77424] = 84, [76189] = 85, [77425] = 85, [76190] = 85, [77426] = 85, [76191] = 85, [77427] = 85, [76192] = 85, [77428] = 85, [76335] = 48, [73655] = 48, [76335] = 48, [73655] = 48, [76335] = 48, [73655] = 48, [76336] = 48, [76339] = 48, [76337] = 48, [76340] = 48, [76338] = 48, [76341] = 48, [96471] = 86, [97334] = 86, [96475] = 87, [97338] = 87, [96478] = 88, [97341] = 88, [96487] = 89, [97350] = 89, [96470] = 86, [97333] = 86, [96472] = 86, [97335] = 86, [96473] = 86, [97336] = 86, [96474] = 87, [97337] = 87, [96476] = 87, [97339] = 87, [96477] = 87, [97340] = 87, [96479] = 88, [97342] = 88, [96480] = 88, [97343] = 88, [96481] = 88, [97344] = 88, [96486] = 89, [97349] = 89, [96488] = 89, [97351] = 89, [96489] = 89, [97352] = 89, [77022] = 91, [77234] = 91, [76525] = 116, [76528] = 129, [73770] = 138, [77121] = 138, [73672] = 147, [76531] = 147, [76532] = 152, [76538] = 178, [76539] = 188, [76540] = 193, [77771] = 193, [76543] = 44, [80554] = 44, [76546] = 170, [80557] = 170, [76550] = 172, [80561] = 172, [76554] = 171, [80565] = 171, [76558] = 173, [80569] = 173, [76544] = 44, [80555] = 44, [76545] = 44, [80556] = 44, [76547] = 170, [80558] = 170, [76548] = 170, [80559] = 170, [76549] = 170, [80560] = 170, [76551] = 172, [80562] = 172, [76552] = 172, [80563] = 172, [76553] = 172, [80564] = 172, [76555] = 171, [80566] = 171, [76556] = 171, [80567] = 171, [76557] = 171, [80568] = 171, [76559] = 173, [80570] = 173, [76560] = 173, [80571] = 173, [76561] = 173, [80572] = 173, [76823] = 179, [76827] = 180, [76831] = 181, [76835] = 182, [76820] = 178, [76821] = 178, [76822] = 178, [76836] = 182, [76837] = 182, [76838] = 182, [76832] = 181, [76833] = 181, [76834] = 181, [76828] = 180, [76829] = 180, [76830] = 180, [76824] = 179, [76825] = 179, [76826] = 179, [76930] = 129, [76932] = 130, [76936] = 132, [76940] = 131, [76944] = 133, [76931] = 129, [75222] = 129, [76933] = 130, [76934] = 130, [76935] = 130, [76937] = 132, [76938] = 132, [76939] = 132, [76941] = 131, [76942] = 131, [76943] = 131, [76945] = 133, [76946] = 133, [76947] = 133, [76950] = 32, [76951] = 32, [76952] = 32, [76953] = 92, [76957] = 93, [76961] = 94, [76954] = 92, [76955] = 92, [76956] = 92, [76958] = 93, [76959] = 93, [76960] = 93, [76962] = 94, [76963] = 94, [76964] = 94, [76968] = 96, [77179] = 96, [76972] = 99, [77183] = 99, [76976] = 97, [77187] = 97, [76980] = 98, [77191] = 98, [76965] = 39, [77176] = 39, [76966] = 39, [77177] = 39, [76967] = 39, [77178] = 39, [76969] = 96, [77180] = 96, [76970] = 96, [77181] = 96, [76971] = 96, [77182] = 96, [76973] = 99, [77184] = 99, [76974] = 99, [77185] = 99, [76975] = 99, [77186] = 99, [76977] = 97, [77188] = 97, [76978] = 97, [77189] = 97, [76979] = 97, [77190] = 97, [76981] = 98, [77192] = 98, [76982] = 98, [77193] = 98, [76983] = 98, [77194] = 98, [76985] = 33, [76986] = 33, [76987] = 102, [76991] = 100, [76995] = 101, [76999] = 103, [76988] = 102, [76989] = 102, [76990] = 102, [76992] = 100, [76993] = 100, [76994] = 100, [76996] = 101, [76997] = 101, [76998] = 101, [77000] = 103, [77001] = 103, [77002] = 103, [77006] = 108, [77010] = 109, [77014] = 111, [77018] = 110, [77003] = 81, [77004] = 81, [77005] = 81, [77007] = 108, [77008] = 108, [77009] = 108, [77011] = 109, [77012] = 109, [77013] = 109, [77015] = 111, [77016] = 111, [77017] = 111, [77019] = 110, [77020] = 110, [77021] = 110, [76524] = 91, [73667] = 91, [76524] = 91, [73667] = 91, [76524] = 91, [73667] = 91, [77023] = 91, [77235] = 91, [76524] = 91, [73667] = 91, [77024] = 91, [77236] = 91, [96451] = 112, [97354] = 112, [96458] = 115, [97361] = 115, [96454] = 113, [97357] = 113, [96462] = 114, [97365] = 114, [96450] = 112, [97353] = 112, [96452] = 112, [97355] = 112, [96453] = 112, [97356] = 112, [96459] = 115, [97362] = 115, [96460] = 115, [97363] = 115, [96461] = 115, [97364] = 115, [96455] = 113, [97358] = 113, [96456] = 113, [97359] = 113, [96457] = 113, [97360] = 113, [96463] = 114, [97366] = 114, [96464] = 114, [97367] = 114, [96465] = 114, [97368] = 114, [77028] = 117, [77032] = 118, [77036] = 119, [77040] = 120, [77025] = 116, [77026] = 116, [77027] = 116, [77029] = 117, [77030] = 117, [77031] = 117, [77033] = 118, [77034] = 118, [77035] = 118, [77037] = 119, [77038] = 119, [77039] = 119, [77041] = 120, [77042] = 120, [77043] = 120, [77045] = 52, [77046] = 52, [77047] = 52, [77048] = 121, [77052] = 122, [77056] = 123, [77060] = 124, [77049] = 121, [77050] = 121, [77051] = 121, [77057] = 123, [77058] = 123, [77059] = 123, [77053] = 122, [77054] = 122, [77055] = 122, [77061] = 124, [77062] = 124, [77063] = 124, [77067] = 125, [77355] = 125, [77071] = 127, [77359] = 127, [77075] = 126, [77363] = 126, [77079] = 128, [77367] = 128, [77064] = 51, [77352] = 51, [77065] = 51, [77353] = 51, [77066] = 51, [77354] = 51, [77068] = 125, [77356] = 125, [77069] = 125, [77357] = 125, [77070] = 125, [77358] = 125, [77072] = 127, [77360] = 127, [77073] = 127, [77361] = 127, [77074] = 127, [77362] = 127, [77076] = 126, [77364] = 126, [77077] = 126, [77365] = 126, [77078] = 126, [77366] = 126, [77080] = 128, [77368] = 128, [77081] = 128, [77369] = 128, [77082] = 128, [77370] = 128, [77086] = 134, [77090] = 137, [77094] = 135, [77098] = 136, [77083] = 50, [77084] = 50, [77085] = 50, [77087] = 134, [77088] = 134, [77089] = 134, [77091] = 137, [77092] = 137, [77093] = 137, [77095] = 135, [77096] = 135, [77097] = 135, [77099] = 136, [77100] = 136, [77101] = 136, [77105] = 139, [77125] = 139, [77109] = 140, [77129] = 140, [77113] = 141, [77133] = 141, [77117] = 142, [77137] = 142, [77102] = 138, [77122] = 138, [77103] = 138, [77123] = 138, [77104] = 138, [77124] = 138, [77106] = 139, [77126] = 139, [77107] = 139, [77127] = 139, [77108] = 139, [77128] = 139, [77110] = 140, [77130] = 140, [77111] = 140, [77131] = 140, [77112] = 140, [77132] = 140, [77114] = 141, [77134] = 141, [77115] = 141, [77135] = 141, [77116] = 141, [77136] = 141, [77118] = 142, [77138] = 142, [77119] = 142, [77139] = 142, [77120] = 142, [77140] = 142, [77238] = 143, [77250] = 145, [77246] = 146, [77242] = 144, [77145] = 47, [77146] = 47, [77237] = 47, [77251] = 145, [77252] = 145, [77253] = 145, [77239] = 143, [77155] = 90, [77214] = 90, [77156] = 90, [77215] = 90, [77157] = 90, [77216] = 90, [77158] = 90, [77217] = 90, [77159] = 104, [77218] = 104, [77160] = 104, [77219] = 104, [77161] = 104, [77220] = 104, [77162] = 104, [77221] = 104, [77163] = 106, [77222] = 106, [77164] = 106, [77223] = 106, [77165] = 106, [77224] = 106, [77166] = 106, [77225] = 106, [77167] = 105, [77226] = 105, [77168] = 105, [77227] = 105, [77169] = 105, [77228] = 105, [77170] = 105, [77229] = 105, [77171] = 107, [77230] = 107, [77172] = 107, [77231] = 107, [77173] = 107, [77232] = 107, [77174] = 107, [77233] = 107, [77308] = 95, [77309] = 95, [77310] = 95, [77311] = 95, [77240] = 143, [77241] = 143, [77243] = 144, [77244] = 144, [77245] = 144, [77247] = 146, [77248] = 146, [77249] = 146, [73711] = 80, [73691] = 80, [73712] = 80, [73692] = 80, [73713] = 80, [73693] = 80, [73714] = 80, [73694] = 80, [77729] = 193, [77772] = 193, [77730] = 193, [77773] = 193, [77731] = 193, [77774] = 193, [77732] = 194, [77775] = 194, [77733] = 194, [77776] = 194, [77734] = 194, [77777] = 194, [77735] = 194, [77778] = 194, [77736] = 195, [77779] = 195, [77737] = 195, [77780] = 195, [77738] = 195, [77781] = 195, [77739] = 195, [77782] = 195, [77740] = 196, [77783] = 196, [77741] = 196, [77784] = 196, [77742] = 196, [77785] = 196, [77743] = 196, [77786] = 196, [77744] = 197, [77787] = 197, [77745] = 197, [77788] = 197, [77746] = 197, [77789] = 197, [77747] = 197, [77790] = 197, [77653] = 40, [77279] = 40, [77654] = 40, [77280] = 40, [77655] = 40, [77281] = 40, [77656] = 166, [78644] = 166, [77657] = 166, [78645] = 166, [77658] = 166, [78646] = 166, [77659] = 166, [78647] = 166, [77660] = 167, [78648] = 167, [77661] = 167, [78649] = 167, [77662] = 167, [78650] = 167, [77663] = 167, [78651] = 167, [77664] = 168, [78652] = 168, [77665] = 168, [78653] = 168, [77666] = 168, [78654] = 168, [77667] = 168, [78655] = 168, [77668] = 169, [78656] = 169, [77669] = 169, [78657] = 169, [77670] = 169, [78658] = 169, [77671] = 169, [78659] = 169, [73716] = 161, [77751] = 161, [77429] = 161, [77752] = 161, [77430] = 161, [77753] = 161, [77431] = 161, [77754] = 161, [77432] = 162, [77755] = 162, [77434] = 162, [77756] = 162, [77435] = 162, [77757] = 162, [77436] = 162, [77758] = 162, [77437] = 164, [77759] = 164, [77438] = 164, [77760] = 164, [77439] = 164, [77761] = 164, [77440] = 164, [77762] = 164, [77313] = 147, [77283] = 147, [77314] = 147, [77284] = 147, [77315] = 147, [77285] = 147, [77316] = 148, [77286] = 148, [77317] = 148, [77287] = 148, [77318] = 148, [77288] = 148, [77319] = 148, [77289] = 148, [77320] = 149, [77290] = 149, [77321] = 149, [77291] = 149, [77322] = 149, [77292] = 149, [77323] = 149, [77293] = 149, [77324] = 150, [77294] = 150, [77325] = 150, [77295] = 150, [77326] = 150, [77296] = 150, [77327] = 150, [77297] = 150, [77328] = 151, [77298] = 151, [77329] = 151, [77299] = 151, [77330] = 151, [77300] = 151, [77331] = 151, [77301] = 151, [78421] = 5, [78422] = 5, [78423] = 5, [77371] = 152, [77372] = 152, [77373] = 152, [77374] = 153, [77375] = 153, [77376] = 153, [77377] = 153, [77386] = 156, [77387] = 156, [77388] = 156, [77389] = 156, [77382] = 154, [77383] = 154, [77384] = 154, [77385] = 154, [77378] = 155, [77379] = 155, [77380] = 155, [77381] = 155, [77390] = 45, [77391] = 45, [77392] = 45, [77393] = 157, [77394] = 157, [77395] = 157, [77396] = 157, [77397] = 158, [77398] = 158, [77399] = 158, [77400] = 158, [77401] = 159, [77402] = 159, [77403] = 159, [77404] = 159, [77405] = 160, [77406] = 160, [77407] = 160, [77408] = 160, [77441] = 163, [77763] = 163, [77442] = 163, [77764] = 163, [77443] = 163, [77765] = 163, [77444] = 163, [77766] = 163, [77445] = 165, [77767] = 165, [77446] = 165, [77768] = 165, [77447] = 165, [77769] = 165, [77448] = 165, [77770] = 165, [77672] = 43, [77691] = 43, [77673] = 43, [77692] = 43, [77674] = 43, [77693] = 43, [77675] = 174, [77694] = 174, [77676] = 174, [77695] = 174, [77677] = 174, [77696] = 174, [77678] = 174, [77697] = 174, [77679] = 175, [77698] = 175, [77680] = 175, [77699] = 175, [77681] = 175, [77700] = 175, [77682] = 175, [77701] = 175, [77683] = 176, [77702] = 176, [77684] = 176, [77703] = 176, [77685] = 176, [77704] = 176, [77686] = 176, [77705] = 176, [77687] = 177, [77706] = 177, [77688] = 177, [77707] = 177, [77689] = 177, [77708] = 177, [77690] = 177, [77709] = 177, [77710] = 188, [77711] = 188, [77712] = 188, [77713] = 189, [77714] = 189, [77715] = 189, [77716] = 189, [77717] = 190, [77718] = 190, [77719] = 190, [77720] = 190, [77721] = 191, [77722] = 191, [77723] = 191, [77724] = 191, [77725] = 192, [77726] = 192, [77727] = 192, [77728] = 192, [77887] = 183, [78890] = 183, [77888] = 183, [80363] = 183, [77889] = 183, [80364] = 183, [77890] = 183, [80365] = 183, [77891] = 184, [80366] = 184, [77892] = 184, [80367] = 184, [77893] = 184, [80368] = 184, [77894] = 184, [80369] = 184, [77895] = 185, [80370] = 185, [77896] = 185, [80371] = 185, [77897] = 185, [80372] = 185, [77898] = 185, [80373] = 185, [77899] = 186, [80374] = 186, [77900] = 186, [80375] = 186, [77901] = 186, [80376] = 186, [77902] = 186, [80377] = 186, [77903] = 187, [80378] = 187, [77904] = 187, [80379] = 187, [77905] = 187, [80380] = 187, [77906] = 187, [80381] = 187, [96466] = 203, [97369] = 203, [96467] = 203, [97370] = 203, [96468] = 203, [97371] = 203, [96469] = 203, [97372] = 203, [80545] = 212, [80546] = 212, [80547] = 212, [80548] = 212, [80603] = 229, [80599] = 229, [80604] = 229, [80600] = 229, [80605] = 229, [80601] = 229, [80606] = 229, [80602] = 229, [80632] = 217, [80636] = 217, [80633] = 217, [80637] = 217, [80634] = 217, [80638] = 217, [80635] = 217, [80639] = 217, [80776] = 245, [80772] = 245, [80777] = 245, [80773] = 245, [80778] = 245, [80774] = 245, [80779] = 245, [80775] = 245, [80696] = 230, [80697] = 230, [80698] = 230, [80699] = 230, [80612] = 214, [80616] = 214, [80613] = 214, [80617] = 214, [80614] = 214, [80618] = 214, [80615] = 214, [80619] = 214, [80644] = 220, [80645] = 220, [80646] = 220, [80647] = 220, [80550] = 238, [80573] = 238, [80551] = 238, [80574] = 238, [80552] = 238, [80575] = 238, [80553] = 238, [80576] = 238, [80724] = 235, [80728] = 235, [80725] = 235, [80729] = 235, [80726] = 235, [80730] = 235, [80727] = 235, [80731] = 235, [80668] = 224, [80669] = 224, [80670] = 224, [80671] = 224, [80732] = 236, [80736] = 236, [80733] = 236, [80737] = 236, [80734] = 236, [80738] = 236, [80735] = 236, [80739] = 236, [80660] = 223, [80664] = 223, [80661] = 223, [80665] = 223, [80662] = 223, [80666] = 223, [80663] = 223, [80667] = 223, [80740] = 237, [80744] = 237, [80741] = 237, [80745] = 237, [80742] = 237, [80746] = 237, [80743] = 237, [80747] = 237, [80716] = 234, [80720] = 234, [80717] = 234, [80721] = 234, [80718] = 234, [80722] = 234, [80719] = 234, [80723] = 234, [80764] = 243, [80765] = 243, [80766] = 243, [80767] = 243, [80704] = 232, [80705] = 232, [80706] = 232, [80707] = 232, [80760] = 242, [80761] = 242, [80762] = 242, [80763] = 242, [80648] = 221, [80649] = 221, [80650] = 221, [80651] = 221, [80608] = 213, [80609] = 213, [80610] = 213, [80611] = 213, [80748] = 239, [80752] = 239, [80749] = 239, [80753] = 239, [80750] = 239, [80754] = 239, [80751] = 239, [80755] = 239, [80640] = 218, [80641] = 218, [80642] = 218, [80643] = 218, [80676] = 226, [80677] = 226, [80678] = 226, [80679] = 226, [80386] = 241, [80382] = 241, [80387] = 241, [80383] = 241, [80388] = 241, [80384] = 241, [80389] = 241, [80385] = 241, [80680] = 227, [80684] = 227, [80681] = 227, [80685] = 227, [80682] = 227, [80686] = 227, [80683] = 227, [80687] = 227, [80620] = 215, [80621] = 215, [80622] = 215, [80623] = 215, [80708] = 233, [80712] = 233, [80709] = 233, [80713] = 233, [80710] = 233, [80714] = 233, [80711] = 233, [80715] = 233, [80700] = 231, [80701] = 231, [80702] = 231, [80703] = 231, [80672] = 225, [80673] = 225, [80674] = 225, [80675] = 225, [80768] = 244, [80780] = 244, [80769] = 244, [80781] = 244, [80770] = 244, [80782] = 244, [80771] = 244, [80783] = 244, [80652] = 200, [80653] = 200, [80654] = 200, [80655] = 200, [80756] = 240, [80757] = 240, [80758] = 240, [80759] = 240, [80656] = 222, [80657] = 222, [80658] = 222, [80659] = 222, [80688] = 228, [80689] = 228, [80690] = 228, [80691] = 228, [80624] = 216, [80628] = 216, [80625] = 216, [80629] = 216, [80626] = 216, [80630] = 216, [80627] = 216, [80631] = 216, [96482] = 219, [97345] = 219, [96483] = 219, [97346] = 219, [96484] = 219, [97347] = 219, [96485] = 219, [97348] = 219, }; function DataProvider:GetArtifactAppearanceSetName(sourceID) if sourceID and ArtifactSourceIDXArtifactSetID[sourceID] then return LocalizedData.ArtifactSetNames[ ArtifactSourceIDXArtifactSetID[sourceID] ] end end function DataProvider:IsLegionArtifactBySourceID(sourceID) return sourceID and ArtifactSourceIDXArtifactSetID[sourceID] end