Files
pfUI/pfUI.lua
T
2020-11-19 16:42:02 +01:00

365 lines
11 KiB
Lua

SLASH_RELOAD1 = '/rl'
function SlashCmdList.RELOAD(msg, editbox)
ReloadUI()
end
SLASH_PFUI1 = '/pfui'
function SlashCmdList.PFUI(msg, editbox)
if pfUI.gui:IsShown() then
pfUI.gui:Hide()
else
pfUI.gui:Show()
end
end
SLASH_GM1, SLASH_GM2 = '/gm', '/support'
function SlashCmdList.GM(msg, editbox)
ToggleHelpFrame(1)
end
pfUI = CreateFrame("Frame", nil, UIParent)
pfUI:RegisterEvent("ADDON_LOADED")
-- setup bootvar
pfUI.bootup = true
-- initialize saved variables
pfUI_playerDB = {}
pfUI_config = {}
pfUI_init = {}
pfUI_profiles = {}
pfUI_addon_profiles = {}
pfUI_cache = {}
-- localization
pfUI_locale = {}
pfUI_translation = {}
-- initialize default variables
pfUI.cache = {}
pfUI.module = {}
pfUI.modules = {}
pfUI.skin = {}
pfUI.skins = {}
pfUI.environment = {}
pfUI.movables = {}
pfUI.version = {}
pfUI.hooks = {}
pfUI.env = {}
-- detect current addon path
local tocs = { "", "-master", "-tbc", "-wotlk" }
for _, name in pairs(tocs) do
local current = string.format("pfUI%s", name)
local _, title = GetAddOnInfo(current)
if title then
pfUI.name = current
pfUI.path = "Interface\\AddOns\\" .. current
break
end
end
-- handle/convert media dir paths
pfUI.media = setmetatable({}, { __index = function(tab,key)
local value = tostring(key)
if strfind(value, "img:") then
value = string.gsub(value, "img:", pfUI.path .. "\\img\\")
elseif strfind(value, "font:") then
value = string.gsub(value, "font:", pfUI.path .. "\\fonts\\")
else
value = string.gsub(value, "Interface\\AddOns\\pfUI\\", pfUI.path .. "\\")
end
rawset(tab,key,value)
return value
end})
-- cache client version
local _, _, _, client = GetBuildInfo()
client = client or 11200
-- detect client expansion
if client >= 20000 and client <= 20400 then
pfUI.expansion = "tbc"
pfUI.client = client
elseif client >= 30000 and client <= 30300 then
pfUI.expansion = "wotlk"
pfUI.client = client
else
pfUI.expansion = "vanilla"
pfUI.client = client
end
-- setup pfUI namespace
setmetatable(pfUI.env, {__index = getfenv(0)})
function pfUI:UpdateColors()
if pfUI.expansion == "vanilla" then
-- update table to get unknown colors and blue shamans for vanilla
RAID_CLASS_COLORS = {
["WARRIOR"] = { r = 0.78, g = 0.61, b = 0.43, colorStr = "ffc79c6e" },
["MAGE"] = { r = 0.41, g = 0.8, b = 0.94, colorStr = "ff69ccf0" },
["ROGUE"] = { r = 1, g = 0.96, b = 0.41, colorStr = "fffff569" },
["DRUID"] = { r = 1, g = 0.49, b = 0.04, colorStr = "ffff7d0a" },
["HUNTER"] = { r = 0.67, g = 0.83, b = 0.45, colorStr = "ffabd473" },
["SHAMAN"] = { r = 0.14, g = 0.35, b = 1.0, colorStr = "ff0070de" },
["PRIEST"] = { r = 1, g = 1, b = 1, colorStr = "ffffffff" },
["WARLOCK"] = { r = 0.58, g = 0.51, b = 0.79, colorStr = "ff9482c9" },
["PALADIN"] = { r = 0.96, g = 0.55, b = 0.73, colorStr = "fff58cba" },
}
RAID_CLASS_COLORS = setmetatable(RAID_CLASS_COLORS, { __index = function(tab,key)
return { r = 0.6, g = 0.6, b = 0.6, colorStr = "ff999999" }
end})
end
end
function pfUI:UpdateFonts()
-- abort when config is not ready yet
if not pfUI_config or not pfUI_config.global then return end
-- load font configuration
local default, unit, combat
if pfUI_config.global.force_region == "1" and GetLocale() == "zhCN" and pfUI.expansion == "vanilla" then
-- force locale compatible fonts
default = "Fonts\\FZXHLJW.TTF"
combat = "Fonts\\FZXHLJW.TTF"
unit = "Fonts\\FZXHLJW.TTF"
elseif pfUI_config.global.force_region == "1" and GetLocale() == "zhCN" and pfUI.expansion == "tbc" then
-- force locale compatible fonts
default = "Fonts\\ZYHei.ttf"
combat = "Fonts\\ZYKai_C.ttf"
unit = "Fonts\\ZYKai_T.ttf"
elseif pfUI_config.global.force_region == "1" and GetLocale() == "koKR" then
-- force locale compatible fonts
default = "Fonts\\2002.TTF"
combat = "Fonts\\2002.TTF"
unit = "Fonts\\2002.TTF"
else
-- use default entries
default = pfUI.media[pfUI_config.global.font_default]
combat = pfUI.media[pfUI_config.global.font_combat]
unit = pfUI.media[pfUI_config.global.font_unit]
end
-- write setting shortcuts
pfUI.font_default = default
pfUI.font_combat = combat
pfUI.font_unit = unit
-- set game constants
STANDARD_TEXT_FONT = default
DAMAGE_TEXT_FONT = combat
NAMEPLATE_FONT = default
UNIT_NAME_FONT = default
-- set dropdown font to default size
UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT = 11
-- change default game font objects
SystemFont:SetFont(default, 15)
GameFontNormal:SetFont(default, 12)
GameFontBlack:SetFont(default, 12)
GameFontNormalSmall:SetFont(default, 11)
GameFontNormalLarge:SetFont(default, 16)
GameFontNormalHuge:SetFont(default, 20)
NumberFontNormal:SetFont(default, 14, "OUTLINE")
NumberFontNormalSmall:SetFont(default, 14, "OUTLINE")
NumberFontNormalLarge:SetFont(default, 16, "OUTLINE")
NumberFontNormalHuge:SetFont(default, 30, "OUTLINE")
QuestTitleFont:SetFont(default, 18)
QuestFont:SetFont(default, 13)
QuestFontHighlight:SetFont(default, 14)
ItemTextFontNormal:SetFont(default, 15)
MailTextFontNormal:SetFont(default, 15)
SubSpellFont:SetFont(default, 12)
DialogButtonNormalText:SetFont(default, 16)
ZoneTextFont:SetFont(default, 34, "OUTLINE")
SubZoneTextFont:SetFont(default, 24, "OUTLINE")
GameTooltipText:SetFont(default, 12)
GameTooltipTextSmall:SetFont(default, 12)
GameTooltipHeaderText:SetFont(default, 13)
WorldMapTextFont:SetFont(default, 102, "THICK")
InvoiceTextFontNormal:SetFont(default, 12)
InvoiceTextFontSmall:SetFont(default, 12)
CombatTextFont:SetFont(combat, 25)
ChatFontNormal:SetFont(default, 13, pfUI_config.chat.text.outline == "1" and "OUTLINE")
if TextStatusBarTextSmall then -- does not exist in koKR
TextStatusBarTextSmall:SetFont(default, 12, "NORMAL")
end
end
function pfUI:GetEnvironment()
-- load api into environment
for m, func in pairs(pfUI.api or {}) do
pfUI.env[m] = func
end
if pfUI_config and pfUI_config.global and pfUI_config.global.language and not pfUI.env.T then
local lang = pfUI_config and pfUI_config.global and pfUI_config.global.language and pfUI_translation[pfUI_config.global.language] and pfUI_config.global.language or GetLocale()
pfUI.env.T = setmetatable(pfUI_translation[lang] or {}, { __index = function(tab,key)
local value = tostring(key)
rawset(tab,key,value)
return value
end})
end
pfUI.env._G = getfenv(0)
pfUI.env.C = pfUI_config
pfUI.env.L = (pfUI_locale[GetLocale()] or pfUI_locale["enUS"])
return pfUI.env
end
function pfUI:RegisterModule(name, a2, a3)
if pfUI.module[name] then return end
local hasv = type(a2) == "string"
local func, version = hasv and a3 or a2, hasv and a2 or "vanilla:tbc:wotlk"
-- check for client compatibility
if not strfind(version, pfUI.expansion) then return end
pfUI.module[name] = func
table.insert(pfUI.modules, name)
if not pfUI.bootup then
pfUI:LoadModule(name)
end
end
function pfUI:RegisterSkin(name, a2, a3)
if pfUI.skin[name] then return end
local hasv = type(a2) == "string"
local func, version = hasv and a3 or a2, hasv and a2 or "vanilla:tbc:wotlk"
-- check for client compatibility
if not strfind(version, pfUI.expansion) then return end
pfUI.skin[name] = func
table.insert(pfUI.skins, name)
if not pfUI.bootup then
pfUI:LoadSkin(name)
end
end
function pfUI:LoadModule(m)
setfenv(pfUI.module[m], pfUI:GetEnvironment())
pfUI.module[m]()
end
function pfUI:LoadSkin(s)
setfenv(pfUI.skin[s], pfUI:GetEnvironment())
pfUI.skin[s]()
end
pfUI:SetScript("OnEvent", function()
-- enforce color updates on each event
pfUI:UpdateColors()
-- make sure to initialize and set our fonts
-- each time an addon got loaded but only
-- when the config is already accessible
if not pfUI.bootup then
pfUI:UpdateFonts()
end
if arg1 == pfUI.name then
-- read pfUI version from .toc file
local major, minor, fix = pfUI.api.strsplit(".", tostring(GetAddOnMetadata(pfUI.name, "Version")))
pfUI.version.major = tonumber(major) or 1
pfUI.version.minor = tonumber(minor) or 2
pfUI.version.fix = tonumber(fix) or 0
pfUI.version.string = pfUI.version.major .. "." .. pfUI.version.minor .. "." .. pfUI.version.fix
pfUI:LoadConfig()
pfUI:MigrateConfig()
pfUI:UpdateFonts()
-- load modules
for _, m in pairs(this.modules) do
if not ( pfUI_config["disabled"] and pfUI_config["disabled"][m] == "1" ) then
pfUI:LoadModule(m)
end
end
-- load skins
for _, s in pairs(this.skins) do
if not ( pfUI_config["disabled"] and pfUI_config["disabled"]["skin_" .. s] == "1" ) then
pfUI:LoadSkin(s)
end
end
pfUI.bootup = nil
end
end)
pfUI.backdrop = {
bgFile = "Interface\\BUTTONS\\WHITE8X8", tile = false, tileSize = 0,
edgeFile = "Interface\\BUTTONS\\WHITE8X8", edgeSize = 1,
insets = {left = -1, right = -1, top = -1, bottom = -1},
}
pfUI.backdrop_no_top = pfUI.backdrop
pfUI.backdrop_thin = {
bgFile = "Interface\\BUTTONS\\WHITE8X8", tile = false, tileSize = 0,
edgeFile = "Interface\\BUTTONS\\WHITE8X8", edgeSize = 1,
insets = {left = 0, right = 0, top = 0, bottom = 0},
}
pfUI.backdrop_hover = {
edgeFile = "Interface\\BUTTONS\\WHITE8X8", edgeSize = 24,
insets = {left = -1, right = -1, top = -1, bottom = -1},
}
pfUI.backdrop_shadow = {
edgeFile = pfUI.media["img:glow2"], edgeSize = 8,
insets = {left = 0, right = 0, top = 0, bottom = 0},
}
message = function(msg)
DEFAULT_CHAT_FRAME:AddMessage("|cffcccc33INFO: |cffffff55" .. ( msg or "nil" ))
end
print = message
error = function(msg)
if PF_DEBUG_MODE then message(debugstack()) end
if string.find(msg, "AddOns\\pfUI") then
DEFAULT_CHAT_FRAME:AddMessage("|cffcc3333ERROR: |cffff5555".. (msg or "nil" ))
elseif not pfUI_config or (pfUI_config.global and pfUI_config.global.errors == "1") then
DEFAULT_CHAT_FRAME:AddMessage("|cffcc3333ERROR: |cffff5555".. (msg or "nil" ))
end
end
seterrorhandler(error)
function pfUI.SetupCVars()
ClearTutorials()
TutorialFrame_HideAllAlerts()
ConsoleExec("CameraDistanceMaxFactor 5")
SetCVar("autoSelfCast", "1")
SetCVar("profanityFilter", "0")
MultiActionBar_ShowAllGrids()
ALWAYS_SHOW_MULTIBARS = "1"
SHOW_BUFF_DURATIONS = "1"
QUEST_FADING_DISABLE = "1"
NAMEPLATES_ON = "1"
SHOW_COMBAT_TEXT = "1"
COMBAT_TEXT_SHOW_LOW_HEALTH_MANA = "1"
COMBAT_TEXT_SHOW_AURAS = "1"
COMBAT_TEXT_SHOW_AURA_FADE = "1"
COMBAT_TEXT_SHOW_COMBAT_STATE = "1"
COMBAT_TEXT_SHOW_DODGE_PARRY_MISS = "1"
COMBAT_TEXT_SHOW_RESISTANCES = "1"
COMBAT_TEXT_SHOW_REPUTATION = "1"
COMBAT_TEXT_SHOW_REACTIVES = "1"
COMBAT_TEXT_SHOW_FRIENDLY_NAMES = "1"
COMBAT_TEXT_SHOW_COMBO_POINTS = "1"
COMBAT_TEXT_SHOW_MANA = "1"
COMBAT_TEXT_FLOAT_MODE = "1"
COMBAT_TEXT_SHOW_HONOR_GAINED = "1"
UIParentLoadAddOn("Blizzard_CombatText")
end