You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
606 lines
24 KiB
606 lines
24 KiB
local SLE, T, E, L, V, P, G = unpack(ElvUI_SLE)
|
|
local Armory = SLE.Armory_Core
|
|
local M = E.Misc
|
|
local LCG = E.Libs.CustomGlow
|
|
|
|
local GetAverageItemLevel = GetAverageItemLevel
|
|
local C_TransmogCollection_GetAppearanceSourceInfo = C_TransmogCollection.GetAppearanceSourceInfo
|
|
local C_Transmog_GetSlotVisualInfo = C_Transmog.GetSlotVisualInfo
|
|
local HandleModifiedItemClick = HandleModifiedItemClick
|
|
local C_TransmogCollection_GetInspectItemTransmogInfoList = C_TransmogCollection.GetInspectItemTransmogInfoList
|
|
local C_Item_GetItemGem = C_Item.GetItemGem
|
|
local C_Item_GetItemInfo = C_Item.GetItemInfo
|
|
local GetSpecialization, GetSpecializationInfo, GetInspectSpecialization = GetSpecialization, GetSpecializationInfo, GetInspectSpecialization
|
|
local InCombatLockdown = InCombatLockdown
|
|
local CA, IA, SA
|
|
Armory.Constants = {}
|
|
|
|
--Create ench replacement string DB
|
|
if not SLE_ArmoryDB or type(SLE_ArmoryDB) ~= 'table' then
|
|
SLE_ArmoryDB = {
|
|
EnchantString = {}
|
|
}
|
|
end
|
|
|
|
Armory.Constants.GearList = {
|
|
'HeadSlot', 'HandsSlot', 'NeckSlot', 'WaistSlot', 'ShoulderSlot', 'LegsSlot', 'BackSlot', 'FeetSlot', 'ChestSlot', 'Finger0Slot',
|
|
'ShirtSlot', 'Finger1Slot', 'TabardSlot', 'Trinket0Slot', 'WristSlot', 'Trinket1Slot', 'SecondaryHandSlot', 'MainHandSlot'
|
|
}
|
|
Armory.Constants.AzeriteSlot = {
|
|
'HeadSlot', 'ShoulderSlot', 'ChestSlot',
|
|
}
|
|
Armory.Constants.CanTransmogrify = {
|
|
['HeadSlot'] = true,
|
|
['ShoulderSlot'] = true,
|
|
['BackSlot'] = true,
|
|
['ChestSlot'] = true,
|
|
['TabardSlot'] = true,
|
|
['WristSlot'] = true,
|
|
['HandsSlot'] = true,
|
|
['WaistSlot'] = true,
|
|
['LegsSlot'] = true,
|
|
['FeetSlot'] = true,
|
|
['MainHandSlot'] = true,
|
|
['SecondaryHandSlot'] = true
|
|
}
|
|
|
|
Armory.Constants.EnchantableSlots = {
|
|
['BackSlot'] = true,
|
|
['ChestSlot'] = true,
|
|
['LegsSlot'] = true,
|
|
['FeetSlot'] = true,
|
|
['Finger0Slot'] = true,
|
|
['Finger1Slot'] = true,
|
|
['MainHandSlot'] = true,
|
|
['SecondaryHandSlot'] = true,
|
|
['WristSlot'] = true,
|
|
}
|
|
Armory.Constants.SpecPrimaryStats = {
|
|
[62] = 4, -- Mage: Arcane
|
|
[63] = 4, -- Mage: Fire
|
|
[64] = 4, -- Mage: Frost
|
|
[65] = 4, -- Paladin: Holy
|
|
[66] = 1, -- Paladin: Protection
|
|
[70] = 1, -- Paladin: Retribution
|
|
[71] = 1, -- Warrior: Arms
|
|
[72] = 1, -- Warrior: Fury
|
|
[73] = 1, -- Warrior: Protection
|
|
[102] = 4, -- Druid: Balance
|
|
[103] = 2, -- Druid: Feral
|
|
[104] = 2, -- Druid: Guardian
|
|
[105] = 4, -- Druid: Restoration
|
|
[250] = 1, -- Death Knight: Blood
|
|
[251] = 1, -- Death Knight: Frost
|
|
[252] = 1, -- Death Knight: Unholy
|
|
[253] = 2, -- Hunter: Beast Mastery
|
|
[254] = 2, -- Hunter: Marksmanship
|
|
[255] = 2, -- Hunter: Survival
|
|
[256] = 4, -- Priest: Discipline
|
|
[257] = 4, -- Priest: Holy
|
|
[258] = 4, -- Priest: Shadow
|
|
[259] = 2, -- Rogue: Assassination
|
|
[260] = 2, -- Rogue: Outlaw
|
|
[261] = 2, -- Rogue: Subtlety
|
|
[262] = 4, -- Shaman: Elemental
|
|
[263] = 2, -- Shaman: Enhancement
|
|
[264] = 4, -- Shaman: Restoration
|
|
[265] = 4, -- Warlock: Affliction
|
|
[266] = 4, -- Warlock: Demonology
|
|
[267] = 4, -- Warlock: Destruction
|
|
[268] = 2, -- Monk: Brewmaster
|
|
[269] = 2, -- Monk: Windwalker
|
|
[270] = 4, -- Monk: Mistweaver
|
|
[577] = 2, -- DH: Havoc
|
|
[581] = 2, -- DH: Vengeance
|
|
[1467] = 4, -- Evoker: Devastation
|
|
[1468] = 4, -- Evoker: Preservation
|
|
[1473] = 4, -- Evoker: Augmentation
|
|
}
|
|
|
|
Armory.Constants.AzeriteTraitAvailableColor = {0.95, 0.95, 0.32, 1}
|
|
Armory.Constants.Character_Defaults_Cached = false
|
|
Armory.Constants.Inspect_Defaults_Cached = false
|
|
Armory.Constants.Character_Defaults = {}
|
|
Armory.Constants.Inspect_Defaults = {}
|
|
-- Armory.Constants.WarningTexture = [[Interface\AddOns\ElvUI_SLE\media\textures\armory\Warning-Small]]
|
|
Armory.Constants.WarningTexture = [[Interface\AddOns\ElvUI\Core\Media\Textures\Minimalist]]
|
|
Armory.Constants.GradientTexture = [[Interface\AddOns\ElvUI_SLE\media\textures\armory\Gradation]]
|
|
Armory.Constants.TransmogTexture = [[Interface\AddOns\ElvUI_SLE\media\textures\armory\anchor]]
|
|
Armory.Constants.MaxGemSlots = 5
|
|
Armory.Constants.EssenceMilestones = {}
|
|
Armory.Constants.Stats = {
|
|
ScrollStepMultiplier = 5,
|
|
}
|
|
|
|
--Remembering default positions of stuff
|
|
function Armory:BuildFrameDefaultsCache(which)
|
|
for i, SlotName in pairs(Armory.Constants.GearList) do
|
|
Armory.Constants[which..'_Defaults'][SlotName] = {}
|
|
local Slot = _G[which..SlotName]
|
|
if not Slot then E:Delay(1, function() Armory:BuildFrameDefaultsCache(which) end); return end
|
|
Slot.Direction = i%2 == 1 and 'LEFT' or 'RIGHT'
|
|
if Slot.iLvlText then
|
|
Armory.Constants[which..'_Defaults'][SlotName]['iLvlText'] = { Slot.iLvlText:GetPoint() }
|
|
Armory.Constants[which..'_Defaults'][SlotName]['textureSlot1'] = { Slot.textureSlot1:GetPoint() }
|
|
for v = 2, 10 do
|
|
if Slot['textureSlot'..v] then Slot['textureSlot'..v]:ClearAllPoints(); Slot['textureSlot'..v]:Point(Slot.Direction, Slot['textureSlot'..(v-1)], Slot.Direction == 'LEFT' and 'RIGHT' or 'LEFT', E.twoPixelsPlease and 3 or 1, 0) end
|
|
end
|
|
Armory.Constants[which..'_Defaults'][SlotName]['enchantText'] = { Slot.enchantText:GetPoint() }
|
|
end
|
|
if SlotName == 'NeckSlot' and Slot.RankFrame then
|
|
Armory.Constants[which..'_Defaults'][SlotName]['RankFrame'] = { Slot.RankFrame:GetPoint() }
|
|
end
|
|
end
|
|
Armory.Constants[which..'_Defaults_Cached'] = true
|
|
end
|
|
|
|
function Armory:ClearTooltip(Tooltip)
|
|
local TooltipName = Tooltip:GetName()
|
|
|
|
Tooltip:ClearLines()
|
|
for i = 1, 10 do
|
|
_G[TooltipName..'Texture'..i]:SetTexture(nil)
|
|
_G[TooltipName..'Texture'..i]:ClearAllPoints()
|
|
_G[TooltipName..'Texture'..i]:Point('TOPLEFT', Tooltip)
|
|
end
|
|
end
|
|
|
|
function Armory:GetTransmogInfo(Slot, which, unit)
|
|
if not which or not unit then return nil end
|
|
|
|
local appearenceIDs = {}
|
|
local mogLink
|
|
local data = C_TransmogCollection_GetInspectItemTransmogInfoList()
|
|
|
|
if data then
|
|
for slotID, v in ipairs(data) do
|
|
if v.appearanceID and v.appearanceID > 0 then
|
|
appearenceIDs[slotID] = v.appearanceID
|
|
end
|
|
end
|
|
end
|
|
|
|
if appearenceIDs then
|
|
if appearenceIDs[Slot.ID] then
|
|
mogLink = select(6, C_TransmogCollection_GetAppearanceSourceInfo(appearenceIDs[Slot.ID]))
|
|
return mogLink
|
|
end
|
|
end
|
|
end
|
|
|
|
--Updates the frame
|
|
function Armory:UpdatePageInfo(frame, which)
|
|
if not (frame and which) then return end
|
|
local window = strlower(which)
|
|
if not (E.db.sle.armory[window].enable or Armory:CheckOptions(which)) then return end
|
|
|
|
local window = strlower(which)
|
|
local unit = (which == 'Character' and 'player') or frame.unit
|
|
|
|
if which == 'Character' then
|
|
CA:Update_Durability()
|
|
Armory.CharacterPrimaryStat = select(6, GetSpecializationInfo(GetSpecialization(), nil, nil, nil, UnitSex('player')))
|
|
else
|
|
Armory.InspectPrimaryStat = Armory.Constants.SpecPrimaryStats[GetInspectSpecialization(unit)]
|
|
if _G.InspectPaperDollFrame.SLE_Armory_BG then
|
|
IA:Update_BG()
|
|
end
|
|
|
|
InspectFrame.TitleContainer:ClearAllPoints()
|
|
InspectFrame.TitleContainer:Point('TOPLEFT', InspectFrame, 'TOPLEFT', 24, -1)
|
|
InspectFrame.TitleContainer:Point('TOPRIGHT', InspectFrame, 'TOPRIGHT', -24, -1)
|
|
|
|
InspectPaperDollFrame.LevelTextWrapper:ClearAllPoints()
|
|
InspectPaperDollFrame.LevelTextWrapper:Point('TOP', InspectPaperDollFrame, 'TOP', 0, -22)
|
|
end
|
|
|
|
for _, SlotName in pairs(Armory.Constants.GearList) do
|
|
local Slot = _G[which..SlotName]
|
|
if Slot then
|
|
if Slot.TransmogInfo then
|
|
if which == 'Character' then
|
|
local transmogLocation = TransmogUtil.GetTransmogLocation(Slot.ID, Enum.TransmogType.Appearance, Enum.TransmogModification.Main)
|
|
if not transmogLocation then return end
|
|
|
|
local itemBaseSourceID = select(3, C_Transmog_GetSlotVisualInfo(transmogLocation))
|
|
if not itemBaseSourceID then return end
|
|
|
|
Slot.TransmogInfo.Link = select(6, C_TransmogCollection_GetAppearanceSourceInfo(itemBaseSourceID))
|
|
elseif which == 'Inspect' then
|
|
Slot.TransmogInfo.Link = Armory:GetTransmogInfo(Slot, which, unit)
|
|
else
|
|
return
|
|
end
|
|
if E.db.sle.armory[window].enable and Slot.TransmogInfo.Link then
|
|
if E.db.sle.armory[window].transmog.enableArrow then Slot.TransmogInfo:Show() else Slot.TransmogInfo:Hide() end
|
|
if E.db.sle.armory[window].transmog.enableGlow then
|
|
LCG.AutoCastGlow_Start(Slot, {1, 0.5, 1, 1}, E.db.sle.armory[window].transmog.glowNumber, 0.25, 1, E.db.sle.armory[window].transmog.glowOffset, E.db.sle.armory[window].transmog.glowOffset, '_TransmogGlow')
|
|
else
|
|
LCG.AutoCastGlow_Stop(Slot, '_TransmogGlow')
|
|
end
|
|
else
|
|
Slot.TransmogInfo.Link = nil
|
|
Slot.TransmogInfo:Hide()
|
|
LCG.AutoCastGlow_Stop(Slot, '_TransmogGlow')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
--Updates ilvl and everything tied to the item somehow
|
|
function Armory:UpdatePageStrings(_, iLevelDB, Slot, slotInfo, which)
|
|
if not which then return end
|
|
local window = strlower(which) --to know which settings table to use
|
|
if (not (E.db.sle.armory[window] and E.db.sle.armory[window].enable) and Armory:CheckOptions(which)) then return end
|
|
|
|
Slot.itemLink = GetInventoryItemLink((which == 'Character' and 'player') or _G.InspectFrame.unit, Slot.ID)
|
|
if slotInfo.itemLevelColors then
|
|
local iR, iG, iB = unpack(slotInfo.itemLevelColors)
|
|
if Slot.enchantText and not (slotInfo.enchantTextShort == nil or slotInfo.enchantText == nil) then Armory:ProcessEnchant(window, Slot, slotInfo.enchantText, slotInfo.enchantTextReal) end
|
|
if E.db.sle.armory[window].ilvl.colorType == 'QUALITY' then
|
|
if iR ~= nil then
|
|
Slot.iLvlText:SetTextColor(iR, iG, iB) --Business as usual
|
|
end
|
|
elseif E.db.sle.armory[window].ilvl.colorType == 'GRADIENT' then
|
|
local equippedIlvl = window == 'character' and select(2, GetAverageItemLevel()) or E:CalculateAverageItemLevel(iLevelDB, _G.InspectFrame.unit)
|
|
local diff
|
|
if slotInfo.iLvl and (equippedIlvl and type(equippedIlvl) ~= 'boolean') then
|
|
diff = slotInfo.iLvl - equippedIlvl
|
|
else
|
|
diff = 0
|
|
end
|
|
local aR, aG, aB
|
|
if diff >= 0 then
|
|
aR, aG, aB = 0,1,0
|
|
else
|
|
aR, aG, aB = E:ColorGradient(-(3/diff), 1, 0, 0, 1, 1, 0, 0, 1, 0)
|
|
end
|
|
Slot.iLvlText:SetTextColor(aR, aG, aB)
|
|
else
|
|
Slot.iLvlText:SetTextColor(1, 1, 1)
|
|
end
|
|
|
|
--This block is separate cause disabling armory will not hide dem gradients otherwise
|
|
if Slot.SLE_Gradient then --First call for this function for inspect is before gradient is created. To avoid errors
|
|
if E.db.sle.armory[window].enable and E.db.sle.armory[window].gradient.enable and slotInfo.iLvl then
|
|
Slot.SLE_Gradient:Show()
|
|
if E.db.sle.armory[window].gradient.setArmor and select(16, C_Item_GetItemInfo(Slot.itemLink)) then
|
|
Slot.SLE_Gradient:SetVertexColor(unpack(E.db.sle.armory[window].gradient.setArmorColor))
|
|
elseif E.db.sle.armory[window].gradient.quality then
|
|
Slot.SLE_Gradient:SetVertexColor(unpack(slotInfo.itemLevelColors))
|
|
else
|
|
Slot.SLE_Gradient:SetVertexColor(unpack(E.db.sle.armory[window].gradient.color))
|
|
end
|
|
else
|
|
Slot.SLE_Gradient:Hide()
|
|
end
|
|
end
|
|
else
|
|
if Slot.SLE_Gradient then Slot.SLE_Gradient:Hide() end
|
|
end
|
|
--If put inside "if slotInfo.itemLevelColors" condition will not actually hide gem links/warnings on empty slots
|
|
Armory:UpdateGemInfo(Slot, which)
|
|
Armory:CheckForMissing(which, Slot, slotInfo.iLvl, slotInfo.gems, slotInfo.enchantTextShort, Armory[which..'PrimaryStat'])
|
|
if CA.DurabilityFontSet then CA:Calculate_Durability(which, Slot) end
|
|
end
|
|
|
|
---Store gem info in our hidden frame
|
|
function Armory:UpdateGemInfo(Slot, which)
|
|
local unit = which == 'Character' and 'player' or (_G.InspectFrame and _G.InspectFrame.unit)
|
|
if not unit then return end
|
|
local itemLink = Slot.itemLink
|
|
|
|
for i = 1, Armory.Constants.MaxGemSlots do
|
|
if not Slot['SLE_Gem'..i] then return end
|
|
|
|
local gemLink, gemTexture
|
|
if itemLink then
|
|
if Slot.ID == 2 then
|
|
if not CA.HearthMilestonesCached then CA:FixFuckingBlizzardLogic() end
|
|
local window = strlower(which)
|
|
if E.db.sle.armory[window] and E.db.sle.armory[window].enable then
|
|
if which == 'Character' and Slot['textureSlotEssenceType'..i] then
|
|
Slot['textureSlotEssenceType'..i]:Hide()
|
|
elseif which == 'Inspect' and Slot['textureSlotBackdrop'..i] then
|
|
Slot['textureSlotBackdrop'..i]:Hide()
|
|
end
|
|
end
|
|
if which == 'Character' and Armory.Constants.EssenceMilestones[i] then
|
|
local GemID = C_AzeriteEssence.GetMilestoneEssence(Armory.Constants.EssenceMilestones[i]) --Blizz messed up milestones IDs so using a god damned cache table
|
|
if GemID then
|
|
local rank = C_AzeriteEssence.GetEssenceInfo(GemID).rank
|
|
gemLink = C_AzeriteEssence.GetEssenceHyperlink(GemID, rank)
|
|
end
|
|
end
|
|
if not gemLink then
|
|
gemLink = select(2, C_Item_GetItemGem(itemLink, i))
|
|
end
|
|
else
|
|
local textureSlot = Slot['textureSlot'..i]
|
|
local textureID = textureSlot:GetTexture()
|
|
|
|
gemLink = select(2, C_Item_GetItemGem(itemLink, i))
|
|
if gemLink then
|
|
gemTexture = select(10, C_Item_GetItemInfo(gemLink))
|
|
gemLink = select(2, C_Item_GetItemGem(itemLink, textureID == gemTexture and i or i + 1))
|
|
end
|
|
end
|
|
end
|
|
Slot['SLE_Gem'..i].Link = gemLink
|
|
end
|
|
end
|
|
|
|
function Armory:CreateSlotStrings(_, which)
|
|
Armory:UpdateSharedStringsFonts(which)
|
|
end
|
|
|
|
function Armory:UpdateSharedStringsFonts(which)
|
|
local window = strlower(which)
|
|
for _, SlotName in pairs(Armory.Constants.GearList) do
|
|
local Slot = _G[which..SlotName]
|
|
if not Slot then return end
|
|
if Slot.iLvlText then
|
|
local fontIlvl, sizeIlvl, outlineIlvl, fontEnch, sizeEnch, outlineEnch
|
|
if E.db.sle.armory[window].enable then
|
|
fontIlvl, sizeIlvl, outlineIlvl = E.db.sle.armory[window].ilvl.font, E.db.sle.armory[window].ilvl.fontSize, E.db.sle.armory[window].ilvl.fontStyle
|
|
fontEnch, sizeEnch, outlineEnch = E.db.sle.armory[window].enchant.font, E.db.sle.armory[window].enchant.fontSize, E.db.sle.armory[window].enchant.fontStyle
|
|
else
|
|
fontIlvl, sizeIlvl, outlineIlvl = E.db.general.itemLevel.itemLevelFont, E.db.general.itemLevel.itemLevelFontSize or 12, E.db.general.itemLevel.itemLevelFontOutline or 'OUTLINE'
|
|
fontEnch, sizeEnch, outlineEnch = E.db.general.itemLevel.itemLevelFont, E.db.general.itemLevel.itemLevelFontSize or 12, E.db.general.itemLevel.itemLevelFontOutline or 'OUTLINE'
|
|
end
|
|
Slot.iLvlText:FontTemplate(E.LSM:Fetch('font', fontIlvl), sizeIlvl, outlineIlvl)
|
|
Slot.enchantText:FontTemplate(E.LSM:Fetch('font', fontEnch), sizeEnch, outlineEnch)
|
|
end
|
|
end
|
|
end
|
|
|
|
--Deals with dem enchants
|
|
function Armory:ProcessEnchant(which, Slot, enchantText, enchantTextReal)
|
|
if not E.db.sle.armory.enchantString.enable then return end
|
|
local window = strlower(which)
|
|
local strict = E.db.sle.armory.enchantString.strict
|
|
|
|
local showReal = E.db.sle.armory[window].enchant.showReal
|
|
local text = showReal and enchantTextReal or enchantText
|
|
|
|
if E.db.sle.armory.enchantString.replacement then
|
|
local profQuality = strmatch(enchantTextReal, '|A.-|a')
|
|
for _, enchData in pairs(SLE_ArmoryDB.EnchantString) do
|
|
if enchData.new and strict and enchantText == enchData.original then
|
|
text = enchData.new..' '..(showReal and profQuality or '')
|
|
elseif not strict and enchData.original and enchData.new then
|
|
text = gsub(text, E:EscapeString(enchData.original), enchData.new)
|
|
end
|
|
end
|
|
end
|
|
Slot.enchantText:SetText(text)
|
|
end
|
|
|
|
---<<<Global Hide tooltip func for armory>>>---
|
|
function Armory:Tooltip_OnLeave()
|
|
_G.GameTooltip:Hide()
|
|
end
|
|
|
|
---<<<Show Gem on mouse over>>>---
|
|
function Armory:Gem_OnEnter()
|
|
if E.db.sle.armory[self.frame].enable and self.Link then --Only do stuff if armory is enabled or the gem is present
|
|
_G.GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
|
|
_G.GameTooltip:SetHyperlink(self.Link)
|
|
_G.GameTooltip:Show()
|
|
end
|
|
end
|
|
|
|
---<<<Show what the fuck is wrong with this item>>>---
|
|
function Armory:Warning_OnEnter()
|
|
if E.db.sle.armory[self.frame].enable and self.Reason then --Only do stuff if armory is enabled and something is actually missing
|
|
_G.GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
|
|
_G.GameTooltip:AddLine(self.Reason, 1, 1, 1)
|
|
_G.GameTooltip:Show()
|
|
end
|
|
end
|
|
|
|
--<<<<<Transmog functions>>>>>--
|
|
function Armory:Transmog_OnEnter()
|
|
if not self.Link then return end
|
|
|
|
self.Texture:SetVertexColor(1, 0.8, 1)
|
|
_G.GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
|
|
|
|
if self.isInspect then
|
|
local inspectLink = select(2, C_Item_GetItemInfo(self.Link)) --In case the client actually decides to give us the info
|
|
if inspectLink then
|
|
_G.GameTooltip:SetHyperlink(inspectLink)
|
|
else
|
|
_G.GameTooltip:SetText(self.Link)
|
|
end
|
|
else
|
|
_G.GameTooltip:SetHyperlink(self.Link)
|
|
end
|
|
|
|
_G.GameTooltip:Show()
|
|
end
|
|
|
|
function Armory:Transmog_OnLeave()
|
|
self.Texture:SetVertexColor(1, .5, 1)
|
|
_G['GameTooltip']:Hide()
|
|
end
|
|
|
|
function Armory:Transmog_OnClick()
|
|
local _, ItemLink = C_Item_GetItemInfo(self.Link)
|
|
|
|
if not IsShiftKeyDown() then
|
|
SetItemRef(ItemLink, ItemLink, 'LeftButton')
|
|
else
|
|
HandleModifiedItemClick(ItemLink)
|
|
-- if HandleModifiedItemClick(ItemLink) then
|
|
-- print('test')
|
|
-- elseif _G.BrowseName and _G.BrowseName:IsVisible() then
|
|
-- print('test2')
|
|
-- AuctionFrameBrowse_Reset(_G.BrowseResetButton)
|
|
-- _G.BrowseName:SetText(ItemName)
|
|
-- _G.BrowseName:SetFocus()
|
|
-- end
|
|
end
|
|
end
|
|
|
|
function Armory:CheckForMissing(which, Slot, iLvl, gems, enchant, primaryStat)
|
|
if not Slot.SLE_Warning then return end --Shit happens
|
|
Slot.SLE_Warning.Reason = nil --Clear message, cause disabling armory doesn't affect those otherwise
|
|
local window = strlower(which)
|
|
if not (E.db.sle.armory[window] and E.db.sle.armory[window].enable and E.db.sle.armory[window].showWarning) then Slot.SLE_Warning:Hide(); return end --if something is disdbled
|
|
local SlotName = gsub(Slot:GetName(), which, '')
|
|
if not SlotName then return end --No slot?
|
|
local noChant, noGem = false, false
|
|
if iLvl and (Armory.Constants.EnchantableSlots[SlotName] == true or Armory.Constants.EnchantableSlots[SlotName] == primaryStat) and not enchant then --Item should be enchanted, but no string actually sent. This bastard is slacking
|
|
local classID, subclassID = select(12, C_Item_GetItemInfo(Slot.itemLink))
|
|
if (classID == 4 and subclassID == 6) or (classID == 4 and subclassID == 0 and Slot.ID == 17) then --Shields are special
|
|
noChant = false
|
|
else
|
|
noChant = true
|
|
end
|
|
end
|
|
if gems and Slot.ID ~= 2 then --If gems found and not neck
|
|
for i = 1, Armory.Constants.MaxGemSlots do
|
|
local texture = Slot['textureSlot'..i]
|
|
if (texture and texture:GetTexture()) and (Slot['SLE_Gem'..i] and not Slot['SLE_Gem'..i].Link) then noGem = true; break end --If there is a texture (e.g. actual slot), but no link = no gem installed
|
|
end
|
|
end
|
|
if (noChant or noGem) then --If anything us missing
|
|
local message = ''
|
|
if noGem then message = message..'|cffff0000'..L["Empty Socket"]..'|r\n' end
|
|
if noChant then message = message..'|cffff0000'..L["Not Enchanted"]..'|r\n' end
|
|
Slot.SLE_Warning.Reason = message or nil
|
|
Slot.SLE_Warning:Show()
|
|
Slot.SLE_Warning.texture:SetVertexColor(unpack(E.db.sle.armory.character.gradient.warningBarColor))
|
|
if Slot.SLE_Gradient then Slot.SLE_Gradient:SetVertexColor(unpack(E.db.sle.armory[window].gradient.warningColor)) end
|
|
else
|
|
Slot.SLE_Warning:Hide()
|
|
end
|
|
end
|
|
|
|
function Armory:UpdateInspectInfo()
|
|
if not _G.InspectFrame then return end --In case update for frame is called before it is actually created
|
|
if not Armory.Constants.Inspect_Defaults_Cached then
|
|
Armory:BuildFrameDefaultsCache('Inspect')
|
|
IA:LoadAndSetup()
|
|
end
|
|
if E.db.sle.armory.inspect.enable then M:UpdatePageInfo(_G.InspectFrame, 'Inspect') end
|
|
if not E.db.general.itemLevel.displayInspectInfo then M:ClearPageInfo(_G.InspectFrame, 'Inspect') end
|
|
end
|
|
|
|
function Armory:UpdateCharacterInfo(event)
|
|
if event == 'CRITERIA_UPDATE' and (InCombatLockdown() or not _G.CharacterFrame:IsShown()) then return end
|
|
|
|
if E.db.sle.armory.character.enable then
|
|
M:UpdatePageInfo(_G.CharacterFrame, 'Character')
|
|
end
|
|
if not E.db.general.itemLevel.displayCharacterInfo then
|
|
M:ClearPageInfo(_G.CharacterFrame, 'Character')
|
|
end
|
|
end
|
|
|
|
function Armory:ToggleItemLevelInfo()
|
|
if E.db.general.itemLevel.displayCharacterInfo then
|
|
-- Armory:UnregisterEvent('AZERITE_ESSENCE_UPDATE')
|
|
Armory:UnregisterEvent('SOCKET_INFO_UPDATE')
|
|
Armory:UnregisterEvent('WEAPON_ENCHANT_CHANGED')
|
|
Armory:UnregisterEvent('ENCHANT_SPELL_COMPLETED')
|
|
Armory:UnregisterEvent('CRITERIA_UPDATE')
|
|
Armory:UnregisterEvent('PLAYER_EQUIPMENT_CHANGED')
|
|
Armory:UnregisterEvent('UPDATE_INVENTORY_DURABILITY')
|
|
-- Armory:UnregisterEvent('PLAYER_AVG_ITEM_LEVEL_UPDATE')
|
|
else
|
|
-- Armory:RegisterEvent('AZERITE_ESSENCE_UPDATE', 'UpdateCharacterInfo')
|
|
Armory:RegisterEvent('SOCKET_INFO_UPDATE', 'UpdateCharacterInfo')
|
|
Armory:RegisterEvent('WEAPON_ENCHANT_CHANGED', 'UpdateCharacterInfo')
|
|
Armory:RegisterEvent('ENCHANT_SPELL_COMPLETED', 'UpdateCharacterInfo')
|
|
Armory:RegisterEvent('CRITERIA_UPDATE', 'UpdateCharacterInfo')
|
|
Armory:RegisterEvent('PLAYER_EQUIPMENT_CHANGED', 'UpdateCharacterInfo')
|
|
Armory:RegisterEvent('UPDATE_INVENTORY_DURABILITY', 'UpdateCharacterInfo')
|
|
-- Armory:RegisterEvent('PLAYER_AVG_ITEM_LEVEL_UPDATE', 'UpdateCharacterItemLevel')
|
|
end
|
|
|
|
if _G.InspectFrame and _G.InspectFrame:IsShown() and Armory:CheckOptions('Inspect') and E.db.general.itemLevel.displayInspectInfo then
|
|
M:UpdateInspectInfo()
|
|
else
|
|
M:ClearPageInfo(_G.InspectFrame, 'Inspect')
|
|
end
|
|
end
|
|
|
|
function Armory:CheckOptions(which)
|
|
if not E.private.skins.blizzard.enable then return false end
|
|
if (which == 'Character' and not E.private.skins.blizzard.character) or (which == 'Inspect' and not E.private.skins.blizzard.inspect) then return false end
|
|
return true
|
|
end
|
|
|
|
function Armory:Initialize()
|
|
if not Armory:CheckOptions() then return end
|
|
|
|
--May be usefull later
|
|
Armory.ScanTT = CreateFrame('GameTooltip', 'SLE_Armory_ScanTT', nil, 'GameTooltipTemplate')
|
|
Armory.ScanTT:SetOwner(UIParent, 'ANCHOR_NONE')
|
|
SA = SLE.Armory_Stats
|
|
CA = SLE.Armory_Character
|
|
SA:LoadAndSetup()
|
|
-- if not E.db.sle.armory.character.enable and not E.db.sle.armory.inspect.enable then return end
|
|
|
|
hooksecurefunc(M, 'UpdatePageInfo', Armory.UpdatePageInfo)
|
|
hooksecurefunc(M, 'UpdatePageStrings', Armory.UpdatePageStrings) --should be ok to call
|
|
hooksecurefunc(M, 'ToggleItemLevelInfo', Armory.ToggleItemLevelInfo) --! idk yet
|
|
hooksecurefunc(M, 'UpdateInspectPageFonts', Armory.UpdateSharedStringsFonts) --should be ok to call
|
|
hooksecurefunc(M, 'CreateSlotStrings', Armory.CreateSlotStrings) --should be ok to call
|
|
|
|
Armory:ToggleItemLevelInfo()
|
|
if E.db.sle.armory.character.enable and Armory:CheckOptions('Character') then
|
|
Armory:BuildFrameDefaultsCache('Character')
|
|
hooksecurefunc(M, 'UpdateCharacterInfo', Armory.UpdateCharacterInfo)
|
|
CA:LoadAndSetup()
|
|
Armory:UpdateCharacterInfo()
|
|
end
|
|
|
|
if E.db.sle.armory.inspect.enable and Armory:CheckOptions('Inspect') then
|
|
IA = SLE.Armory_Inspect
|
|
hooksecurefunc(M, 'UpdateInspectInfo', Armory.UpdateInspectInfo)
|
|
IA:PreSetup()
|
|
end
|
|
|
|
function Armory:ForUpdateAll()
|
|
-- if E.db.sle.armory.character.enable then
|
|
-- SLE.Armory_Character:ToggleArmory()
|
|
-- M:UpdatePageInfo(_G.CharacterFrame, 'Character')
|
|
-- if not E.db.general.itemLevel.displayCharacterInfo then M:ClearPageInfo(_G.CharacterFrame, 'Character') end
|
|
-- end
|
|
|
|
-- if E.db.sle.armory.inspect.enable then
|
|
-- SLE.Armory_Inspect:ToggleArmory()
|
|
-- M:UpdatePageInfo(_G.InspectFrame, "Inspect") --Putting this under the elv's option check just breaks the shit out of the frame
|
|
-- if not E.db.general.itemLevel.displayInspectInfo then M:ClearPageInfo(_G.InspectFrame, 'Inspect') end --Clear the infos if those are actually not supposed to be shown.
|
|
-- end
|
|
end
|
|
|
|
_G.CharacterFrame:HookScript('OnShow', function()
|
|
-- if not E.db.general.itemLevel.displayCharacterInfo then
|
|
-- M:ClearPageInfo(_G.CharacterFrame, 'Character')
|
|
-- -- SLE:Print("Charcter Page Hook Done")
|
|
-- end
|
|
end)
|
|
|
|
--Move Pawn buttons. Cause Pawn buttons happen to be overlapped by some shit
|
|
if SLE._Compatibility['Pawn'] then
|
|
PawnUI_InventoryPawnButton:SetFrameLevel(PawnUI_InventoryPawnButton:GetFrameLevel() + 5)
|
|
hooksecurefunc('PawnUI_InventoryPawnButton_Move', function()
|
|
if PawnCommon.ButtonPosition == PawnButtonPositionRight then
|
|
PawnUI_InventoryPawnButton:ClearAllPoints()
|
|
if PaperDollFrame.ExpandButton then --Try not to break Pawn's DCS innate compatibility
|
|
PawnUI_InventoryPawnButton:SetPoint('TOPRIGHT', 'CharacterTrinket1Slot', 'BOTTOMRIGHT', -31, -8)
|
|
else
|
|
PawnUI_InventoryPawnButton:SetPoint('TOPRIGHT', 'CharacterTrinket1Slot', 'BOTTOMRIGHT', -1, -8)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
SLE:RegisterModule(Armory:GetName())
|
|
|