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.

143 lines
11 KiB

local SLE, T, E, L, V, P, G = unpack(ElvUI_SLE)
local SA = SLE.Armory_Stats
local M = E.Misc
local ACH = E.Libs.ACH
local C
local function GetFontOptions(groupName, order, itemLevel)
local config = ACH:Group(groupName, nil, order, nil, function(info) return E.db.sle.armory.stats[info[#info-1]][info[#info]] end, function(info, value) E.db.sle.armory.stats[info[#info-1]][info[#info]] = value if itemLevel then SA:UpdateIlvlFont() else SA:PaperDollFrame_UpdateStats() end end)
config.guiInline = true
config.args.font = ACH:SharedMediaFont(L["Font"], nil, 1)
config.args.fontSize = ACH:Range(L["Font Size"], nil, 2, C.Values.FontSize)
config.args.fontOutline = ACH:FontFlags(L["Font Outline"], L["Set the font outline."], 3, nil, nil, nil, nil, nil)
return config
end
local table = {}
local function getReplacementTable()
wipe(table)
table[''] = L["None Selected"]
for label in pairs(E.db.sle.armory.stats.textReplacements) do
table[label] = _G[label]
end
return table
end
local function getStatName(stat)
local currentText = E.db.sle.armory.stats.textReplacements[stat]
local displayString = '%s%s %s|r'
local name = format(displayString, E:RGBToHex(1, 0.82, 0), (currentText and currentText ~= '') and L["Current Setting:"] or '', currentText and currentText or '')
return name
end
local function GetTextReplacements(label)
local config = E.Options.args.sle.args.modules.args.armory.args.stats.args.StringReplacements.args
if not label or label == '' then config.textReplacements = nil return end
config.textReplacements = ACH:Group(_G[label], nil, 10, nil, function(info) return E.db.sle.armory.stats[info[#info-1]][info[#info]] end, function(info, value) E.db.sle.armory.stats[info[#info-1]][info[#info]] = value PaperDollFrame_UpdateStats() end)
config.textReplacements.guiInline = true
config.textReplacements.args[label] = ACH:Input(function() return getStatName(label) end, nildesc, 5, nilmultiline, 'full', get, set, nildisabled, nilhidden, nilvalidate)
config.textReplacements.args[label].textChanged = function(text) print('text', text) end
end
local function configTable()
if not SLE.initialized then return end
C = unpack(E.Config)
local selectedString = ''
E.Options.args.sle.args.modules.args.armory.args.stats = ACH:Group(L["Attributes"], nil, 30, 'tree', function(info) return E.db.sle.armory.stats[info[#info]] end, function(info, value) E.db.sle.armory.stats[info[#info]] = value PaperDollFrame_UpdateStats() M:UpdateCharacterInfo() end, function() return SLE._Compatibility['DejaCharacterStats'] or not E.private.sle.armory.stats.enable end, function() return not E.private.skins.blizzard.enable or not E.private.skins.blizzard.character end)
local Stats = E.Options.args.sle.args.modules.args.armory.args.stats.args
Stats.OnlyPrimary = ACH:Toggle(L["Only Relevant Stats"], L["Show only those primary stats relevant to your spec."], 1)
Stats.decimals = ACH:Toggle(L["Decimals"], L["Show stats with decimals."], 2)
--* Stat Label Settings (Spacer)
Stats.groupSpacer1 = ACH:Group('--- |cff00FF00'..L["Stat Label Settings"]..'|r ---', nil, 10, nil, get, set, true)
--* Stat Font Settings
Stats.Fonts = ACH:Group(L["Stat Font Settings"], nil, 11)
Stats.Fonts.args.statHeaders = GetFontOptions(L["Stat Categories"], 1)
Stats.Fonts.args.statLabels = GetFontOptions(L["Stat Labels & Value Text"], 2)
--* String Replacement
Stats.StringReplacements = ACH:Group(L["String Replacement"], nil, 14)
local StringReplacements = Stats.StringReplacements.args
StringReplacements.description = ACH:Description(format('%s%s|r', E:RGBToHex(1, 0.82, 0), L["If you found that some stat labels need to be shorten or abbreviated, select the label from the dropdown below and enter the string to be displayed instead."]), 1, 'medium', nil, nil, nil, nil, width)
StringReplacements.spacer = ACH:Spacer(2, 'full')
StringReplacements.labelSelect = ACH:Select(L["Select A Label"], nil, 5, getReplacementTable, nilconfirm, nilwidth, function(_) return selectedString end, function(_, value) selectedString = value GetTextReplacements(selectedString) end, nildisabled, nilhidden)
StringReplacements.labelSelect.sortByValue = true
GetTextReplacements(selectedString)
--* Stats Panel (Spacer)
Stats.groupSpacer2 = ACH:Group('--- |cff00FF00'..L["Stats Panel"]..'|r ---', nil, 15, nil, get, set, true)
--* Item Level
local isItemLevelDisabled = SLE._Compatibility['DejaCharacterStats'] or not E.db.sle.armory.stats.itemLevel.enable or not E.private.sle.armory.stats.enable
Stats.ItemLevel = ACH:Group(L["Item Level"], nil, 20, nil, function(info) return E.db.sle.armory.stats.itemLevel[info[#info]] end, function(info, value) E.db.sle.armory.stats.itemLevel[info[#info]] = value PaperDollFrame_UpdateStats() M:UpdateCharacterInfo() end, function(info) if info[#info] == 'ItemLevel' or info[#info] == 'enable' then return SLE._Compatibility['DejaCharacterStats'] or not E.private.sle.armory.stats.enable else return SLE._Compatibility['DejaCharacterStats'] or not E.db.sle.armory.stats.itemLevel.enable or not E.private.sle.armory.stats.enable end end)
local ItemLevel = Stats.ItemLevel.args
ItemLevel.enable = ACH:Toggle(L["Enable"], nil, 0, nil, nil, nil, nil, function(info, value) E.db.sle.armory.stats.itemLevel[info[#info]] = value PaperDollFrame_UpdateStats() M:UpdateCharacterInfo() SA:UpdateIlvlFont() if not E.db.sle.armory.stats.itemLevel.enable then M:UpdateInspectPageFonts('Character') end end)
ItemLevel.spacer1 = ACH:Spacer(1, 'full')
ItemLevel.IlvlFull = ACH:Toggle(L["Full Item Level"], L["Show both equipped and average item levels."], 2)
ItemLevel.spacer2 = ACH:Spacer(10, 'full')
ItemLevel.itemLevel = GetFontOptions(L["Font Group"], 15, true)
ItemLevel.gradient = ACH:Group(L["Gradient"], nil, 20, nil, function(info) return E.db.sle.armory.stats.itemLevel[info[#info-1]][info[#info]] end, function(info, value) E.db.sle.armory.stats.itemLevel[info[#info-1]][info[#info]] = value SA:UpdateIlvlFont() end)
ItemLevel.gradient.guiInline = true
ItemLevel.gradient.args.style = ACH:Select(L["Style"], nil, 2, { [''] = 'Disabled', blizzard = 'Blizzard', levelupbg = L["Level-Up Background"] })
ItemLevel.color = ACH:Group(L["Text Color Group"], nil, 10, nil, function(info) return E.db.sle.armory.stats.itemLevel[info[#info]] end, function(info, value) E.db.sle.armory.stats.itemLevel[info[#info]] = value SA:UpdateIlvlFont() SA:UpdateCharacterItemLevel(_G.CharacterFrame, 'Character') end)
ItemLevel.color.guiInline = true
ItemLevel.color.args.header1 = ACH:Header(L["Equipped Text"], 1)
ItemLevel.color.args.EquippedBlizzColor = ACH:Toggle(L["Use Blizzards Color"], L["This will color the text based on what blizzard would normally use."], 2, nil, nil, nil, nilget, nilset, function() return isItemLevelDisabled end)
ItemLevel.color.args.EquippedGradient = ACH:Toggle(L["Gradient Equipped Color"], L["Colors the equipped item level text as a gradient value based on Average and Equipped gear."], 5, nil, nil, nil, nilget, nilset, function() return isItemLevelDisabled or E.db.sle.armory.stats.itemLevel.EquippedBlizzColor end)
ItemLevel.color.args.EquippedColor = ACH:Color(L["Color of Equipped"], L["Sets the color of equipped item level."], 6, false, nil, function(info) local t = E.db.sle.armory.stats.itemLevel[info[#info]] local d = P.sle.armory.stats.itemLevel[info[#info]] return t.r, t.g, t.b, t.a, d.r, d.g, d.b, d.a end, function(info, r, g, b, a) E.db.sle.armory.stats.itemLevel[info[#info]] = {} local t = E.db.sle.armory.stats.itemLevel[info[#info]] t.r, t.g, t.b, t.a = r, g, b, a M:UpdateCharacterInfo() PaperDollFrame_UpdateStats() end, function() return isItemLevelDisabled or E.db.sle.armory.stats.itemLevel.EquippedGradient or E.db.sle.armory.stats.itemLevel.EquippedBlizzColor end)
ItemLevel.color.args.spacer1 = ACH:Spacer(9, 'full')
ItemLevel.color.args.header2 = ACH:Header(L["Average Text"], 10)
ItemLevel.color.args.AverageBlizzColor = ACH:Toggle(L["Use Blizzards Color"], L["This will color the text based on what blizzard would normally use."], 11, nil, nil, nil, nilget, nilset, function() return isItemLevelDisabled or not E.db.sle.armory.stats.itemLevel.IlvlFull end)
ItemLevel.color.args.AverageColor = ACH:Color(L["Color of Average"], L["Sets the color of average item level."], 12, false, nil, function(info) local t = E.db.sle.armory.stats.itemLevel[info[#info]] local d = P.sle.armory.stats.itemLevel[info[#info]] return t.r, t.g, t.b, t.a, d.r, d.g, d.b, d.a end, function(info, r, g, b, a) E.db.sle.armory.stats.itemLevel[info[#info]] = {} local t = E.db.sle.armory.stats.itemLevel[info[#info]] t.r, t.g, t.b, t.a = r, g, b, a M:UpdateCharacterInfo() PaperDollFrame_UpdateStats() end, function() return isItemLevelDisabled or not E.db.sle.armory.stats.itemLevel.IlvlFull or E.db.sle.armory.stats.itemLevel.AverageBlizzColor end)
--* Attributes
Stats.Attributes = ACH:Group(L["Attributes"], nil, 25, nil, function(info) return E.db.sle.armory.stats.List[info[#info]] end, function(info, value) E.db.sle.armory.stats.List[info[#info]] = value PaperDollFrame_UpdateStats() end)
local Attributes = Stats.Attributes.args
Attributes.HEALTH = ACH:Toggle(L["Health"], nil, 1)
Attributes.POWER = ACH:Toggle(function() local power = _G[select(2, UnitPowerType('player'))] or L["Power"] return power end, nil, 2)
Attributes.ALTERNATEMANA = ACH:Toggle(L["Alternate Resource"], nil, 3)
Attributes.MOVESPEED = ACH:Toggle(L["Speed"], nil, 4)
--* Attack
Stats.Attack = ACH:Group(L["Attack"], nil, 30, nil, function(info) return E.db.sle.armory.stats.List[info[#info]] end, function(info, value) E.db.sle.armory.stats.List[info[#info]] = value PaperDollFrame_UpdateStats() end)
local Attack = Stats.Attack.args
Attack.ATTACK_DAMAGE = ACH:Toggle(L["Damage"], nil, 1)
Attack.ATTACK_AP = ACH:Toggle(L["Attack Power"], nil, 2)
Attack.ATTACK_ATTACKSPEED = ACH:Toggle(L["Attack Speed"], nil, 3)
Attack.SPELLPOWER = ACH:Toggle(L["Spell Power"], nil, 4)
Attack.MANAREGEN = ACH:Toggle(L["Mana Regen"], nil, 5)
Attack.ENERGY_REGEN = ACH:Toggle(L["Energy Regen"], nil, 6)
Attack.RUNE_REGEN = ACH:Toggle(L["Rune Speed"], nil, 7)
Attack.FOCUS_REGEN = ACH:Toggle(L["Focus Regen"], nil, 8)
--* Enhancements
Stats.Enhancements = ACH:Group(L["Enhancements"], nil, 35, nil, function(info) return E.db.sle.armory.stats.List[info[#info]] end, function(info, value) E.db.sle.armory.stats.List[info[#info]] = value PaperDollFrame_UpdateStats() end)
local Enhancements = Stats.Enhancements.args
Enhancements.CRITCHANCE = ACH:Toggle(L["Critical Strike"], nil, 1)
Enhancements.HASTE = ACH:Toggle(L["Haste"], nil, 2)
Enhancements.MASTERY = ACH:Toggle(L["Mastery"], nil, 3)
Enhancements.VERSATILITY = ACH:Toggle(L["Versatility"], nil, 4)
Enhancements.LIFESTEAL = ACH:Toggle(L["Leech"], nil, 5)
--* Defense
Stats.Defense = ACH:Group(L["Defense"], nil, 40, nil, function(info) return E.db.sle.armory.stats.List[info[#info]] end, function(info, value) E.db.sle.armory.stats.List[info[#info]] = value PaperDollFrame_UpdateStats() end)
local Defense = Stats.Defense.args
Defense.ARMOR = ACH:Toggle(L["Armor"], nil, 1)
Defense.AVOIDANCE = ACH:Toggle(L["Avoidance"], nil, 2)
Defense.DODGE = ACH:Toggle(L["Dodge"], nil, 3)
Defense.PARRY = ACH:Toggle(L["Parry"], nil, 4)
Defense.BLOCK = ACH:Toggle(L["Block"], nil, 5)
end
tinsert(SLE.Configs, configTable)