From 6404b39d5f050fc8b52a0f79f0e42f61fad7c89e Mon Sep 17 00:00:00 2001 From: Repooc Date: Thu, 24 Nov 2016 18:12:01 -0500 Subject: [PATCH] Attempt to update Armory Inspect to be in line with KnightFrame now... inspect "should" work... notice artifact gem textures not totally working just yet --- ElvUI_SLE/modules/Armory/Constants.lua | 32 +- .../modules/Armory/InspectArmory/InspectArmory.lua | 468 +++++++++++--------- 2 files changed, 267 insertions(+), 233 deletions(-) diff --git a/ElvUI_SLE/modules/Armory/Constants.lua b/ElvUI_SLE/modules/Armory/Constants.lua index eaebc94..437eb46 100644 --- a/ElvUI_SLE/modules/Armory/Constants.lua +++ b/ElvUI_SLE/modules/Armory/Constants.lua @@ -76,33 +76,33 @@ Info.Armory_Constants = { IRON = { .76, .76, .76 }, LIFE = { .07, .74, 0 }, SHADOW = { .7, .48, .88 }, - STORM = { .67, .84, 1 } + WIND = { .67, .84, 1 } }, - + ArtifactType = { -- Warriors [128910] = { 'IRON', 'BLOOD', 'SHADOW' }, --Arms - [128908] = { 'FIRE', 'STORM', 'IRON' }, --Fury + [128908] = { 'FIRE', 'WIND', 'IRON' }, --Fury [128289] = { 'IRON', 'BLOOD', 'FIRE' }, --Protection -- Hunter - [128861] = { 'STORM', 'ARCANE', 'IRON' }, --Beast Mastery - [128826] = { 'STORM', 'BLOOD', 'LIFE' }, --Markmanship - [128808] = { 'STORM', 'IRON', 'BLOOD' }, --Survival + [128861] = { 'WIND', 'ARCANE', 'IRON' }, --Beast Mastery + [128826] = { 'WIND', 'BLOOD', 'LIFE' }, --Markmanship + [128808] = { 'WIND', 'IRON', 'BLOOD' }, --Survival -- Shaman - [128935] = { 'STORM', 'FROST', 'STORM' }, --Elemental - [128819] = { 'FIRE', 'IRON', 'STORM' }, --Enhancement + [128935] = { 'WIND', 'FROST', 'WIND' }, --Elemental + [128819] = { 'FIRE', 'IRON', 'WIND' }, --Enhancement [128911] = { 'LIFE', 'FROST', 'LIFE' }, --Restoration -- Monk - [128938] = { 'LIFE', 'STORM', 'IRON' }, --Brewmaster - [128937] = { 'FROST', 'LIFE', 'STORM' }, --Mistweaver - [128940] = { 'STORM', 'IRON', 'STORM' }, --Windwalker + [128938] = { 'LIFE', 'WIND', 'IRON' }, --Brewmaster + [128937] = { 'FROST', 'LIFE', 'WIND' }, --Mistweaver + [128940] = { 'WIND', 'IRON', 'WIND' }, --Windwalker -- Rogue [128870] = { 'SHADOW', 'IRON', 'BLOOD' }, --Assasination - [128872] = { 'BLOOD', 'IRON', 'STORM' }, --Outlaw + [128872] = { 'BLOOD', 'IRON', 'WIND' }, --Outlaw [128476] = { 'FEL', 'SHADOW', 'FEL' }, --Subtlety -- Death Knight @@ -140,7 +140,7 @@ Info.Armory_Constants = { [127829] = { 'FEL', 'SHADOW', 'FEL' }, --Havoc [128832] = { 'IRON', 'ARCANE', 'FEL' } --Vengeance }, - + EmptySocketString = { [EMPTY_SOCKET_BLUE] = true, [EMPTY_SOCKET_COGWHEEL] = true, @@ -173,9 +173,9 @@ Info.Armory_Constants = { PvPTalentRequireLevel = { 1, 13, 31, 2, 16, 34, 4, 19, 37, 6, 22, 40, 8, 25, 43, 10, 28, 46 }, BlizzardBackdropList = { - ["Alliance-bliz"] = [[Interface\LFGFrame\UI-PVP-BACKGROUND-Alliance]], - ["Horde-bliz"] = [[Interface\LFGFrame\UI-PVP-BACKGROUND-Horde]], - ["Arena-bliz"] = [[Interface\PVPFrame\PvpBg-NagrandArena-ToastBG]] + ['Alliance-bliz'] = [[Interface\LFGFrame\UI-PVP-BACKGROUND-Alliance]], + ['Horde-bliz'] = [[Interface\LFGFrame\UI-PVP-BACKGROUND-Horde]], + ['Arena-bliz'] = [[Interface\PVPFrame\PvpBg-NagrandArena-ToastBG]] } } diff --git a/ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua b/ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua index eaf395c..c0714c4 100644 --- a/ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua +++ b/ElvUI_SLE/modules/Armory/InspectArmory/InspectArmory.lua @@ -108,41 +108,6 @@ IA.Default_CurrentInspectData = { RB = {} } } ---for i = 1, MAX_TALENT_GROUPS do --- IA.Default_CurrentInspectData.Specialization[i] = {} ---end - - --- IA.MainStats = { -- STR, INT, AGI, --- WARRIOR = STR, --- HUNTER = AGI, --- SHAMAN = { --- [(L["Spec_Shaman_Elemental"])] = INT, --- [(L["Spec_Shaman_Enhancement"])] = AGI, --- [(L["Spec_Shaman_Restoration"])] = INT --- }, --- MONK = { --- [(L["Spec_Monk_Brewmaster"])] = AGI, --- [(L["Spec_Monk_Mistweaver"])] = INT, --- [(L["Spec_Monk_Windwalker"])] = AGI --- }, --- ROGUE = AGI, --- DEATHKNIGHT = STR, --- MAGE = INT, --- DRUID = { --- [(L["Spec_Druid_Balance"])] = INT, --- [(L["Spec_Druid_Feral"])] = AGI, --- [(L["Spec_Druid_Guardian"])] = AGI, --- [(L["Spec_Druid_Restoration"])] = INT --- }, --- PALADIN = { --- [(L["Spec_Paladin_Holy"])] = INT, --- [(L["Spec_Paladin_Protection"])] = STR, --- [(L["Spec_Paladin_Retribution"])] = STR --- }, --- PRIEST = INT, --- WARLOCK = INT --- } do --<< Button Script >>-- @@ -218,7 +183,12 @@ do --<< Button Script >>-- local CheckSpace = 2 for i = 1, _G["GameTooltip"]:NumLines() do - CurrentLineText = _G["GameTooltipTextLeft"..i]:GetText() + if self.ReplaceTooltipLines[i] then + CurrentLineText = self.ReplaceTooltipLines[i] + _G['GameTooltipTextLeft'..i]:SetText(CurrentLineText) + else + CurrentLineText = _G['GameTooltipTextLeft'..i]:GetText() + end SetName = CurrentLineText:match('^(.+) %((%d)/(%d)%)$') @@ -258,7 +228,7 @@ do --<< Button Script >>-- break elseif Info.Armory_Constants.CanTransmogrifySlot[self.SlotName] and Info.Armory_Constants.ItemBindString[CurrentLineText] and self.TransmogrifyAnchor.Link then - _G["GameTooltipTextLeft"..i]:SetText(E:RGBToHex(1, .5, 1)..TRANSMOGRIFIED_HEADER..'|n'..(T.GetItemInfo(self.TransmogrifyAnchor.Link) or self.TransmogrifyAnchor.Link)..'|r|n'..CurrentLineText) + _G['GameTooltipTextLeft'..i]:SetText(E:RGBToHex(1, .5, 1)..TRANSMOGRIFIED_HEADER..'|n'..(T.GetItemInfo(self.TransmogrifyAnchor.Link) or self.TransmogrifyAnchor.Link)..'|r|n'..CurrentLineText) end if CheckSpace == 0 then break end @@ -305,43 +275,21 @@ do --<< Button Script >>-- end - function IA:GemSocket_OnEnter() - _G["GameTooltip"]:SetOwner(self, 'ANCHOR_RIGHT') - - local Parent = self:GetParent() - - if Parent.GemItemID then - if T.type(Parent.GemItemID) == 'number' then - if T.GetItemInfo(Parent.GemItemID) then - _G["GameTooltip"]:SetHyperlink(T.select(2, T.GetItemInfo(Parent.GemItemID))) - self:SetScript('OnUpdate', nil) - else - self:SetScript('OnUpdate', IA.GemSocket_OnEnter) - return - end - else - _G["GameTooltip"]:ClearLines() - _G["GameTooltip"]:AddLine('|cffffffff'..Parent.GemItemID) - end - elseif Parent.GemType then - _G["GameTooltip"]:ClearLines() - _G["GameTooltip"]:AddLine('|cffffffff'.._G["EMPTY_SOCKET_"..Parent.GemType]) - end - - _G["GameTooltip"]:Show() - end - - function IA:GemSocket_OnClick() self = self:GetParent() - if self.GemItemID and T.type(self.GemItemID) == 'number' then + if self.GemItemID then local ItemName, ItemLink = T.GetItemInfo(self.GemItemID) + if self.Socket and self.Socket.Link then + ItemLink = self.Socket.Link + end - if not IsShiftKeyDown() then + if Button == 'LeftButton' and not IsShiftKeyDown() then SetItemRef(ItemLink, ItemLink, 'LeftButton') - else - if HandleModifiedItemClick(ItemLink) then + elseif IsShiftKeyDown() then + if Button == 'RightButton' then + ShowUIPanel(SocketInventoryItem(self.SlotID)) + elseif HandleModifiedItemClick(ItemLink) then elseif _G["BrowseName"] and _G["BrowseName"]:IsVisible() then AuctionFrameBrowse_Reset(_G["BrowseResetButton"]) _G["BrowseName"]:SetText(ItemName) @@ -405,8 +353,6 @@ function IA:ChangePage(Type) end end - --self.MainHandSlot:ClearAllPoints() - --self.SecondaryHandSlot:ClearAllPoints() if Type == 'Character' then for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do if self[SlotName].ItemLevel then @@ -414,8 +360,6 @@ function IA:ChangePage(Type) self[SlotName].Gradation:Show() end end - --self.MainHandSlot:Point('BOTTOMRIGHT', self.BP, 'TOP', -2, SPACING) - --self.SecondaryHandSlot:Point('BOTTOMLEFT', self.BP, 'TOP', 2, SPACING) else for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do if self[SlotName].ItemLevel then @@ -423,8 +367,6 @@ function IA:ChangePage(Type) self[SlotName].Gradation:Hide() end end - --self.MainHandSlot:Point('BOTTOMLEFT', self.BP, 'TOPLEFT', 1, SPACING) - --self.SecondaryHandSlot:Point('BOTTOMRIGHT', self.BP, 'TOPRIGHT', -1, SPACING) end self:DisplayMessage(Type) @@ -466,7 +408,6 @@ function IA:CreateInspectFrame() AISM.RegisteredFunction.InspectArmory = nil end - --ENI.CancelInspect(TableIndex) IA:UnregisterEvent('INSPECT_READY') IA:UnregisterEvent('INSPECT_HONOR_UPDATE') end @@ -581,7 +522,7 @@ function IA:CreateInspectFrame() self.Message = self.MessageFrame.Page.text end - do --<< Background >>-- + do --<< Backdrop >>-- self.BG = self:CreateTexture(nil, 'OVERLAY') self.BG:Point('TOPLEFT', self.Tab, 'BOTTOMLEFT', 0, -38) self.BG:Point('BOTTOMRIGHT', self.BP, 'TOPRIGHT') @@ -724,6 +665,7 @@ function IA:CreateInspectFrame() insets = { left = 0, right = 0, top = 0, bottom = 0} }) Slot:SetFrameLevel(CORE_FRAME_LEVEL + 3) + Slot.ReplaceTooltipLines = {} Slot:SetScript('OnEnter', self.EquipmentSlot_OnEnter) Slot:SetScript('OnLeave', self.OnLeave) Slot:SetScript('OnClick', self.OnClick) @@ -740,13 +682,6 @@ function IA:CreateInspectFrame() Slot.Highlight = Slot:CreateTexture('Frame', nil, self) Slot.Highlight:SetInside() - --Slot.Highlight:SetTexture("Interface\\AddOns\\ElvUI_SLE\\modules\\Armory\\Media\\Textures\\Gradation") - --if Slot.Direction == 'LEFT' then - --Slot.Highlight:SetTexCoord(0, 1, 0, 1) - --else - --Slot.Highlight:SetTexCoord(1, 0, 0, 1) - --end - --Slot.Highlight:SetAlpha(0.8) Slot.Highlight:SetColorTexture(1, 1, 1, 0.3) Slot:SetHighlightTexture(Slot.Highlight) @@ -809,7 +744,7 @@ function IA:CreateInspectFrame() -- Gem Socket for i = 1, MAX_NUM_SOCKETS do Slot['Socket'..i] = CreateFrame('Frame', nil, Slot.Gradation) - Slot["Socket"..i]:Size(E.db.sle.Armory.Inspect.Gem.SocketSize) + Slot['Socket'..i]:Size(E.db.sle.Armory.Inspect.Gem.SocketSize) Slot['Socket'..i]:SetBackdrop({ bgFile = E.media.blankTex, edgeFile = E.media.blankTex, @@ -829,7 +764,7 @@ function IA:CreateInspectFrame() }) Slot['Socket'..i].Socket:SetInside() Slot['Socket'..i].Socket:SetFrameLevel(CORE_FRAME_LEVEL + 4) - Slot['Socket'..i].Socket:SetScript('OnEnter', self.GemSocket_OnEnter) + Slot['Socket'..i].Socket:SetScript('OnEnter', self.OnEnter) Slot['Socket'..i].Socket:SetScript('OnLeave', self.OnLeave) Slot['Socket'..i].Socket:SetScript('OnClick', self.GemSocket_OnClick) @@ -903,9 +838,6 @@ function IA:CreateInspectFrame() KF:TextSetting(self.Character, nil, { Tag = 'AverageItemLevel', FontSize = 12 }, 'TOP', self.Model) end - --self.Model:Point('TOPLEFT', self.HeadSlot) - --self.Model:Point('TOPRIGHT', self.HandsSlot) - --self.Model:Point('BOTTOM', self.BP, 'TOP', 0, SPACING) do --<< Information Page >>-- self.Info = CreateFrame('ScrollFrame', nil, self) self.Info:SetFrameLevel(CORE_FRAME_LEVEL + 20) @@ -1297,6 +1229,8 @@ function IA:CreateInspectFrame() self.ScanTTForInspecting:SetOwner(UIParent, 'ANCHOR_NONE') self.ScanTT = CreateFrame('GameTooltip', 'InspectArmoryScanTT', nil, 'GameTooltipTemplate') self.ScanTT:SetOwner(UIParent, 'ANCHOR_NONE') + self.ScanTT2 = CreateFrame('GameTooltip', 'InspectArmoryScanTT2', nil, 'GameTooltipTemplate') + self.ScanTT2:SetOwner(UIParent, 'ANCHOR_NONE') end do --<< UnitPopup Setting >>-- @@ -1391,14 +1325,14 @@ function IA:CreateInspectFrame() Button.notCheckable = 1 UIDropDownMenu_AddButton(Button) - Button = _G["DropDownList1Button".._G["DropDownList1"].numButtons] + Button = _G['DropDownList1Button'.._G["DropDownList1"].numButtons] end Button.value = 'InspectArmory' Button:SetText((' '):rep(T.strlen(ButtonName))) _G["InspectArmory_UnitPopup"]:Show() - _G["InspectArmory_UnitPopup"]:SetParent("DropDownList1") + _G["InspectArmory_UnitPopup"]:SetParent('DropDownList1') _G["InspectArmory_UnitPopup"]:SetFrameStrata(Button:GetFrameStrata()) _G["InspectArmory_UnitPopup"]:SetFrameLevel(Button:GetFrameLevel() + 1) _G["InspectArmory_UnitPopup"]:ClearAllPoints() @@ -1779,7 +1713,7 @@ IA.InspectUnit = function(UnitID) return else - T.twipe(IA.CurrentInspectData) + wipe(IA.CurrentInspectData) E:CopyTable(IA.CurrentInspectData, IA.Default_CurrentInspectData) IA.CurrentInspectData.UnitID = UnitID @@ -1840,9 +1774,11 @@ end function IA:InspectFrame_DataSetting(DataTable) local SpecTab = DataTable.Specialization.SpecTab or 1 - local Slot, ErrorDetected, NeedUpdate, NeedUpdateList, R, G, B + local ErrorDetected, NeedUpdate, NeedUpdateList, R, G, B, CurrentLineText local ItemCount, ItemTotal = 0, 0 + local Slot, ItemData, BasicItemLevel, TrueItemLevel, ItemUpgradeID, CurrentUpgrade, MaxUpgrade, ItemType, ItemTexture, GemID, GemLink, GemCount_Default, GemCount_Enable, GemCount_Now, GemCount + do --<< Specialization Page Setting >>-- local Name, Texture @@ -1870,20 +1806,23 @@ function IA:InspectFrame_DataSetting(DataTable) end do --<< Equipment Slot and Enchant, Gem Setting >>-- - local ItemData, ItemRarity, BasicItemLevel, TrueItemLevel, ItemUpgradeID, CurrentUpgrade, MaxUpgrade, ItemType, ItemTexture, CurrentLineText, GemID, GemCount_Default, GemCount_Enable, GemCount_Now, GemCount - -- Setting except shirt and tabard for _, SlotName in T.pairs(T.type(self.GearUpdated) == 'table' and self.GearUpdated or Info.Armory_Constants.GearList) do Slot = self[SlotName] - ErrorDetected, ItemRarity, ItemTexture, R, G, B = nil, nil, nil, 0, 0, 0 + Slot.Link = DataTable.Gear[SlotName].ItemLink + Slot.ItemName = nil + Slot.ItemRarity = nil + Slot.ItemTexture = nil - if SlotName ~= 'ShirtSlot' and SlotName ~= 'TabardSlot' then + ErrorDetected, ItemTexture, R, G, B = nil, nil, 0, 0, 0 + + if not (SlotName == 'ShirtSlot' or SlotName == 'TabardSlot') then do --<< Clear Setting >>-- NeedUpdate, TrueItemLevel, ItemUpgradeID, CurrentUpgrade, MaxUpgrade, ItemType = nil, nil, nil, nil, nil, nil - Slot.Link = nil - Slot.ILvL = nil + Slot.ILvL = 0 Slot.IsEnchanted = nil + wipe(Slot.ReplaceTooltipLines) Slot.Gradation.ItemLevel:SetText(nil) Slot.Gradation.ItemEnchant:SetText(nil) for i = 1, MAX_NUM_SOCKETS do @@ -1908,92 +1847,69 @@ function IA:InspectFrame_DataSetting(DataTable) end end - if DataTable.Gear[SlotName].ItemLink then - -- _, Slot.Link = T.GetItemInfo(DataTable.Gear[SlotName].ItemLink) - Slot.Link = DataTable.Gear[SlotName].ItemLink - - if Slot.Link then - do --<< Gem Parts >>-- - ItemData = { T.split(':', Slot.Link) } - - if DataTable.Specialization[SpecTab].SpecializationID and DataTable.Specialization[SpecTab].SpecializationID ~= 0 then - ItemData[11] = DataTable.Specialization[SpecTab].SpecializationID - - Slot.Link = ItemData[1] - - for i = 2, #ItemData do - Slot.Link = Slot.Link..':'..ItemData[i] - end + if Slot.Link then + if not Slot.Link:find('%[%]') then -- sometimes itemLink is malformed so we need to update when crashed + --<< Prepare Setting >> + ItemData = { T.split(':', Slot.Link) } + + for i = 1, #ItemData do + if tonumber(ItemData[i]) then + ItemData[i] = tonumber(ItemData[i]) end + end + + Slot.ItemName, _, Slot.ItemRarity, BasicItemLevel, _, _, _, _, ItemType, Slot.ItemTexture = T.GetItemInfo(Slot.Link) + + if DataTable.Specialization[SpecTab].SpecializationID and DataTable.Specialization[SpecTab].SpecializationID ~= 0 then + ItemData[11] = DataTable.Specialization[SpecTab].SpecializationID - ItemData.FixedLink = ItemData[1] + Slot.Link = ItemData[1] for i = 2, #ItemData do - if i == 4 or i == 5 or i ==6 or i ==7 then - ItemData.FixedLink = ItemData.FixedLink..':'..0 - else - ItemData.FixedLink = ItemData.FixedLink..':'..ItemData[i] - end + Slot.Link = Slot.Link..':'..ItemData[i] end - - self:ClearTooltip(self.ScanTT) - self.ScanTT:SetHyperlink(ItemData.FixedLink) - + end + + do --<< Gem Parts >>-- GemCount_Default, GemCount_Now, GemCount = 0, 0, 0 - -- First, Counting default gem sockets - for i = 1, MAX_NUM_SOCKETS do - ItemTexture = _G['InspectArmoryScanTTTexture'..i]:GetTexture() + if Info.Armory_Constants.ArtifactType[(ItemData[2])] then -- Artifact Parts + GemCount_Default = 3 + GemCount_Enable = 3 + GemCount_Now = 3 - if ItemTexture and ItemTexture:find('Interface\\ItemSocketingFrame\\') then - GemCount_Default = GemCount_Default + 1 - Slot["Socket"..GemCount_Default].GemType = T.upper(gsub(ItemTexture, 'Interface\\ItemSocketingFrame\\UI--EmptySocket--', '')) - end - end - - -- Second, Check if slot's item enable to adding a socket - GemCount_Enable = GemCount_Default - --[[ - if (SlotName == 'WaistSlot' and DataTable.Level >= 70) or -- buckle - ((SlotName == 'WristSlot' or SlotName == 'HandsSlot') and (DataTable.Profession[1].Name == GetSpellInfo(110396) and DataTable.Profession[1].Level >= 550 or DataTable.Profession[2].Name == GetSpellInfo(110396) and DataTable.Profession[2].Level >= 550)) then -- BlackSmith + self:ClearTooltip(self.ScanTT) + self.ScanTT:SetHyperlink(Slot.Link) - GemCount_Enable = GemCount_Enable + 1 - Slot['Socket'..GemCount_Enable].GemType = 'PRISMATIC' - end - ]] - - - self:ClearTooltip(self.ScanTT) - self.ScanTT:SetHyperlink(Slot.Link) - - -- Apply current item's gem setting - for i = 1, MAX_NUM_SOCKETS do - ItemTexture = _G['InspectArmoryScanTTTexture'..i]:GetTexture() - GemID = ItemData[i + 3] ~= '' and tonumber(ItemData[i + 3]) or 0 - - if Slot['Socket'..i].GemType and Info.Armory_Constants.GemColor[Slot['Socket'..i].GemType] then - R, G, B = unpack(Info.Armory_Constants.GemColor[Slot['Socket'..i].GemType]) - Slot['Socket'..i].Socket:SetBackdropColor(R, G, B, .5) - Slot['Socket'..i].Socket:SetBackdropBorderColor(R, G, B) - else - Slot['Socket'..i].Socket:SetBackdropColor(1, 1, 1, .5) - Slot['Socket'..i].Socket:SetBackdropBorderColor(1, 1, 1) - end - - if ItemTexture then - if E.db.sle.Armory.Inspect.Gem.Display == 'Always' or E.db.sle.Armory.Inspect.Gem.Display == 'MouseoverOnly' and Slot.Mouseovered or E.db.sle.Armory.Inspect.Gem.Display == 'MissingOnly' then - Slot['Socket'..i]:Show() - Slot.SocketWarning:Point(Slot.Direction, Slot['Socket'..i], (Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 0) - end + for i = 1, MAX_NUM_SOCKETS do + Slot['Socket'..i].GemType = Info.Armory_Constants.ArtifactType[(ItemData[2])][i] + GemID = ItemData[i + 3] ~= '' and ItemData[i + 3] or 0 + _, GemLink = GetItemGem(Slot.Link, i) + Slot.SocketWarning:Point(Slot.Direction, Slot.Socket3, (Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 0) - GemCount_Now = GemCount_Now + 1 + if Slot['Socket'..i].GemType and Info.Armory_Constants.GemColor[Slot['Socket'..i].GemType] then + R, G, B = unpack(Info.Armory_Constants.GemColor[Slot['Socket'..i].GemType]) + Slot['Socket'..i].Socket:SetBackdropColor(R, G, B, .5) + Slot['Socket'..i].Socket:SetBackdropBorderColor(R, G, B) + else + R, G, B = 0, 0, 0 + Slot['Socket'..i].Socket:SetBackdropColor(1, 1, 1, .5) + Slot['Socket'..i].Socket:SetBackdropBorderColor(1, 1, 1) + end - if GemID ~= 0 then + Slot['Socket'..i].Socket.Message = format(RELIC_TOOLTIP_TYPE, E:RGBToHex(R, G, B).._G['RELIC_SLOT_TYPE_'..Slot['Socket'..i].GemType]) + if GemLink then + if E.db.sle.Armory.Inspect.Gem.Display == 'Always' or E.db.sle.Armory.Inspect.Gem.Display == 'MouseoverOnly' and Slot.Mouseovered or E.db.sle.Armory.Inspect.Gem.Display == 'MissingOnly' then + Slot['Socket'..i]:Show() + end + GemCount = GemCount + 1 Slot['Socket'..i].GemItemID = GemID + Slot['Socket'..i].Socket.Link = GemLink - _, Slot['Socket'..i].Socket.Link, _, _, _, _, _, _, _, ItemTexture = T.GetItemInfo(GemID) + ItemTexture = select(10, T.GetItemInfo(GemID)) + Slot['Socket'..i].Socket.Message = nil if ItemTexture then Slot['Socket'..i].Texture:SetTexture(ItemTexture) else @@ -2001,40 +1917,91 @@ function IA:InspectFrame_DataSetting(DataTable) end end end + else + ItemData.FixedLink = ItemData[1] - --[[ - CurrentLineText = select(2, _G['InspectArmoryScanTTTexture'..i]:GetPoint()) - CurrentLineText = DataTable.Gear[SlotName]['Gem'..i] or CurrentLineText ~= self.ScanTT and CurrentLineText.GetText and CurrentLineText:GetText():gsub('|cff......', ''):gsub('|r', '') or nil + for i = 2, #ItemData do + if i == 4 or i == 5 or i ==6 or i ==7 then + ItemData.FixedLink = ItemData.FixedLink..':' + else + ItemData.FixedLink = ItemData.FixedLink..':'..ItemData[i] + end + end + + self:ClearTooltip(self.ScanTT) + self.ScanTT:SetHyperlink(ItemData.FixedLink) - if CurrentLineText then - if KF.db.Modules.Armory.Inspect.Gem.Display == 'Always' or KF.db.Modules.Armory.Inspect.Gem.Display == 'MouseoverOnly' and Slot.Mouseovered or KF.db.Modules.Armory.Inspect.Gem.Display == 'MissingOnly' then - Slot['Socket'..i]:Show() - Slot.SocketWarning:Point(Slot.Direction, Slot['Socket'..i], (Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 0) + -- First, Counting default gem sockets + for i = 1, MAX_NUM_SOCKETS do + ItemTexture = _G['InspectArmoryScanTTTexture'..i]:GetTexture() + + if ItemTexture and ItemTexture:find('Interface\\ItemSocketingFrame\\') then + GemCount_Default = GemCount_Default + 1 + Slot['Socket'..GemCount_Default].GemType = T.upper(gsub(ItemTexture, 'Interface\\ItemSocketingFrame\\UI--EmptySocket--', '')) end + end + + -- Second, Check if slot's item enable to adding a socket + GemCount_Enable = GemCount_Default + --[[ + if (SlotName == 'WaistSlot' and DataTable.Level >= 70) or -- buckle + ((SlotName == 'WristSlot' or SlotName == 'HandsSlot') and (DataTable.Profession[1].Name == GetSpellInfo(110396) and DataTable.Profession[1].Level >= 550 or DataTable.Profession[2].Name == GetSpellInfo(110396) and DataTable.Profession[2].Level >= 550)) then -- BlackSmith - GemCount_Now = GemCount_Now + 1 + GemCount_Enable = GemCount_Enable + 1 + Slot['Socket'..GemCount_Enable].GemType = 'PRISMATIC' + end + ]] + + self:ClearTooltip(self.ScanTT) + self.ScanTT:SetHyperlink(Slot.Link) + + -- Apply current item's gem setting + for i = 1, MAX_NUM_SOCKETS do + ItemTexture = _G['InspectArmoryScanTTTexture'..i]:GetTexture() + GemID = ItemData[i + 3] ~= '' and ItemData[i + 3] or 0 + _, GemLink = GetItemGem(Slot.Link, i) - ItemTexture = ItemTexture or DataTable.Gear[SlotName]['Gem'..i] and select(10, GetItemInfo(DataTable.Gear[SlotName]['Gem'..i])) or nil + if Slot['Socket'..i].GemType and Info.Armory_Constants.GemColor[Slot['Socket'..i].GemType] then + R, G, B = unpack(Info.Armory_Constants.GemColor[Slot['Socket'..i].GemType]) + Slot['Socket'..i].Socket:SetBackdropColor(R, G, B, .5) + Slot['Socket'..i].Socket:SetBackdropBorderColor(R, G, B) + else + Slot['Socket'..i].Socket:SetBackdropColor(1, 1, 1, .5) + Slot['Socket'..i].Socket:SetBackdropBorderColor(1, 1, 1) + end - if not ItemTexture then - NeedUpdate = true - elseif not Info.Armory_Constants.EmptySocketString[CurrentLineText] then - GemCount = GemCount + 1 - Slot['Socket'..i].GemItemID = CurrentLineText - Slot['Socket'..i].Texture:SetTexture(ItemTexture) + if ItemTexture or GemLink then + if E.db.sle.Armory.Inspect.Gem.Display == 'Always' or E.db.sle.Armory.Inspect.Gem.Display == 'MouseoverOnly' and Slot.Mouseovered or E.db.sle.Armory.Inspect.Gem.Display == 'MissingOnly' then + Slot['Socket'..i]:Show() + Slot.SocketWarning:Point(Slot.Direction, Slot['Socket'..i], (Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT'), Slot.Direction == 'LEFT' and 3 or -3, 0) + end + + GemCount_Now = GemCount_Now + 1 + + if GemID ~= 0 then + GemCount = GemCount + 1 + Slot['Socket'..i].GemItemID = GemID + Slot['Socket'..i].Socket.Link = GemLink + + ItemTexture = select(10, T.GetItemInfo(GemID)) + + if ItemTexture then + Slot['Socket'..i].Texture:SetTexture(ItemTexture) + else + NeedUpdate = true + end + else + Slot['Socket'..i].Socket.Message = '|cffffffff'.._G['EMPTY_SOCKET_'..Slot['Socket'..i].GemType] + end end end - ]] - end - - if GemCount_Now < GemCount_Default then -- ItemInfo not loaded - NeedUpdate = true + + if GemCount_Now < GemCount_Default then -- ItemInfo not loaded + NeedUpdate = true + end end end - _, _, ItemRarity, BasicItemLevel, _, _, _, _, ItemType, ItemTexture = T.GetItemInfo(Slot.Link) - R, G, B = GetItemQualityColor(ItemRarity) - --<< Enchant Parts >>-- for i = 1, self.ScanTT:NumLines() do CurrentLineText = _G['InspectArmoryScanTTTextLeft'..i]:GetText() @@ -2078,7 +2045,7 @@ function IA:InspectFrame_DataSetting(DataTable) if BasicItemLevel then if ItemUpgradeID then - if ItemUpgradeID == '' or not E.db.sle.Armory.Inspect.Level.ShowUpgradeLevel and ItemRarity == 7 then + if ItemUpgradeID == '' or not E.db.sle.Armory.Inspect.Level.ShowUpgradeLevel and Slot.ItemRarity == 7 then ItemUpgradeID = nil elseif CurrentUpgrade or MaxUpgrade then ItemUpgradeID = TrueItemLevel - BasicItemLevel @@ -2143,7 +2110,7 @@ function IA:InspectFrame_DataSetting(DataTable) if GemCount_Enable > GemCount_Now then if SlotName == 'WaistSlot' then if TrueItemLevel < 300 then - _, Slot.SocketWarning.Link = GetItemInfo(41611) + _, Slot.SocketWarning.Link = GetItemInfo(41611) elseif TrueItemLevel < 417 then _, Slot.SocketWarning.Link = GetItemInfo(55054) else @@ -2192,33 +2159,28 @@ function IA:InspectFrame_DataSetting(DataTable) Slot.TransmogrifyAnchor:Show() end end + + R, G, B = GetItemQualityColor(Slot.ItemRarity) else NeedUpdate = true end - end - - Slot.Texture:SetTexture(ItemTexture or Slot.EmptyTexture) - - if NeedUpdate then - NeedUpdateList = NeedUpdateList or {} - NeedUpdateList[#NeedUpdateList + 1] = SlotName - end - else - Slot.Link = DataTable.Gear[SlotName].ItemLink - - if Slot.Link then - _, _, ItemRarity, _, _, _, _, _, _, ItemTexture = T.GetItemInfo(Slot.Link) - if ItemRarity then - R, G, B = T.GetItemQualityColor(ItemRarity) - else + if NeedUpdate then NeedUpdateList = NeedUpdateList or {} NeedUpdateList[#NeedUpdateList + 1] = SlotName end end + elseif Slot.Link then + _, _, Slot.ItemRarity, _, _, _, _, _, _, Slot.ItemTexture = T.GetItemInfo(Slot.Link) - Slot.Texture:SetTexture(ItemTexture or self[SlotName].EmptyTexture) + if Slot.ItemRarity then + R, G, B = GetItemQualityColor(Slot.ItemRarity) + else + NeedUpdateList = NeedUpdateList or {} + NeedUpdateList[#NeedUpdateList + 1] = SlotName + end end + Slot.Texture:SetTexture(Slot.ItemTexture or Slot.EmptyTexture) -- Change Gradation if Slot.Link and E.db.sle.Armory.Inspect.Gradation.Display then @@ -2246,12 +2208,81 @@ function IA:InspectFrame_DataSetting(DataTable) end self.GearUpdated = nil + + do --<< Artifact Weapon >>-- + if (self.MainHandSlot.ItemRarity == 6 or self.SecondaryHandSlot.ItemRarity == 6) and self.MainHandSlot.ILvL ~= self.SecondaryHandSlot.ILvL then + local MajorArtifactSlot, MinorArtifactSlot + + if self.MainHandSlot.ILvL > self.SecondaryHandSlot.ILvL then + MajorArtifactSlot = 'MainHandSlot' + MinorArtifactSlot = 'SecondaryHandSlot' + else + MajorArtifactSlot = 'SecondaryHandSlot' + MinorArtifactSlot = 'MainHandSlot' + end + + self[MinorArtifactSlot].ILvL = self[MajorArtifactSlot].ILvL + + if self.MainHandSlot.ItemRarity == 6 and self.SecondaryHandSlot.ItemRarity == 6 then + self[MinorArtifactSlot].Gradation.ItemLevel:SetText(self[MinorArtifactSlot].ILvL) + + -- Find line starting minor artifact's data in major artifact tooltip. + local MajorTooltipStartLine, MinorArtifactName, MinorTooltipStartLine, MinorTooltipStartKey + + self:ClearTooltip(self.ScanTT) + self.ScanTT:SetHyperlink(self[MajorArtifactSlot].Link) + + self:ClearTooltip(self.ScanTT2) + self.ScanTT2:SetHyperlink(self[MinorArtifactSlot].Link) + + for i = 1, self.ScanTT2:NumLines() do + if _G['InspectArmoryScanTT2TextLeft'..i]:GetText():find(Info.Armory_Constants.ItemLevelKey) then + MinorArtifactName = _G['InspectArmoryScanTT2TextLeft'..(i - 1)]:GetText() + self[MinorArtifactSlot].ReplaceTooltipLines[i] = format(ITEM_LEVEL, self[MajorArtifactSlot].ILvL) + + break + end + end + + for i = 2, self.ScanTT:NumLines() do + if _G['InspectArmoryScanTTTextLeft'..i]:GetText() == MinorArtifactName then + MajorTooltipStartLine = i + 1 + MinorTooltipStartKey = _G['InspectArmoryScanTTTextLeft'..(i + 1)]:GetText() + + break + end + end + + for i = 1, self.ScanTT2:NumLines() do + if _G['InspectArmoryScanTT2TextLeft'..i]:GetText() == MinorTooltipStartKey then + MinorTooltipStartLine = i + + break + end + end + + for i = MajorTooltipStartLine, self.ScanTT:NumLines() do + CurrentLineText = _G['InspectArmoryScanTTTextLeft'..i]:GetText() + + if not CurrentLineText:find('"') then + self[MinorArtifactSlot].ReplaceTooltipLines[MinorTooltipStartLine] = CurrentLineText + + MinorTooltipStartLine = MinorTooltipStartLine + 1 + else + break + end + end + end + end + end + + do --<< Average ItemLevel >>-- for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do - if SlotName ~= 'ShirtSlot' and SlotName ~= 'TabardSlot' then + if not (SlotName == 'ShirtSlot' or SlotName == 'TabardSlot') then Slot = self[SlotName] - if Slot.ILvL then + if Slot.ILvL > 0 then ItemCount = ItemCount + 1 ItemTotal = ItemTotal + Slot.ILvL end @@ -2260,6 +2291,7 @@ function IA:InspectFrame_DataSetting(DataTable) self.Character.AverageItemLevel:SetText('|c'..RAID_CLASS_COLORS[DataTable.Class].colorStr..STAT_AVERAGE_ITEM_LEVEL..'|r : '..format('%.2f', ItemTotal / ItemCount)) end + R, G, B = RAID_CLASS_COLORS[DataTable.Class].r, RAID_CLASS_COLORS[DataTable.Class].g, RAID_CLASS_COLORS[DataTable.Class].b do --<< Basic Information >>-- @@ -2270,6 +2302,7 @@ function IA:InspectFrame_DataSetting(DataTable) self.Guild:SetText(DataTable.guildName and '<|cff2eb7e4'..DataTable.guildName..'|r> [|cff2eb7e4'..DataTable.guildRankName..'|r]' or '') end + do --<< Information Page Setting >>-- do -- Profession for i = 1, 2 do @@ -2307,6 +2340,7 @@ function IA:InspectFrame_DataSetting(DataTable) self:ReArrangeCategory() end + do --<< Model and Frame Setting When InspectUnit Changed >>-- if self.NeedModelSetting then self.Model:ClearAllPoints() @@ -2325,8 +2359,8 @@ function IA:InspectFrame_DataSetting(DataTable) self.Model:TryOn(BackSlotItem) self.Model:Undress() - for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do - if T.type(DataTable.Gear[SlotName].Transmogrify) == 'number' then + for _, SlotName in T.pairs(Info.Armory_Constants.GearList) do + if T.type(DataTable.Gear[SlotName].Transmogrify) == 'number' then self.Model:TryOn(DataTable.Gear[SlotName].Transmogrify) elseif DataTable.Gear[SlotName].ItemLink and not (DataTable.Gear[SlotName].Transmogrify and DataTable.Gear[SlotName].Transmogrify == 'NotDisplayed') then self.Model:TryOn(DataTable.Gear[SlotName].ItemLink) @@ -2385,6 +2419,7 @@ function IA:InspectFrame_DataSetting(DataTable) end end + self.LastDataSetting = DataTable.Name..(DataTable.Realm and '-'..DataTable.Realm or '') self:Update_Display(true) @@ -2708,7 +2743,7 @@ function IA:Update_Display(Force) SocketVisible = false end - if Slot["Socket"..i].GemType and E.db.sle.Armory.Inspect.NoticeMissing and not Slot["Socket"..i].GemItemID then + if Slot['Socket'..i].GemType and E.db.sle.Armory.Inspect.NoticeMissing and not Slot['Socket'..i].GemItemID then SocketVisible = true end end @@ -2780,7 +2815,6 @@ end KF.Modules[#KF.Modules + 1] = 'InspectArmory' KF.Modules.InspectArmory = function() if E.db.sle.Armory.Inspect.Enable ~= false and not Info.InspectArmory_Activate then - --Default_NotifyInspect = NotifyInspect Default_InspectUnit = InspectUnit Default_InspectFrame = _G.InspectFrame -- 1.7.9.5