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.
99 lines
2.8 KiB
99 lines
2.8 KiB
local SI, L = unpack((select(2, ...)))
|
|
|
|
-- Lua functions
|
|
local _G = _G
|
|
local format, strmatch, strupper = format, strmatch, strupper
|
|
|
|
-- WoW API / Variables
|
|
local C_Map_GetBestMapForUnit = C_Map.GetBestMapForUnit
|
|
local C_UnitAuras_GetPlayerAuraBySpellID = C_UnitAuras.GetPlayerAuraBySpellID
|
|
local GetCurrentRegion = GetCurrentRegion
|
|
local GetCVar = GetCVar
|
|
local GetTime = GetTime
|
|
|
|
function SI:GetPlayerAuraExpirationTime(spellID)
|
|
local info = C_UnitAuras_GetPlayerAuraBySpellID(spellID)
|
|
return info and info.expirationTime
|
|
end
|
|
|
|
-- Chat Message and Bug Report Reminder
|
|
function SI:ChatMsg(...)
|
|
_G.DEFAULT_CHAT_FRAME:AddMessage('|cFFFF0000SavedInstances|r: ' .. format(...))
|
|
end
|
|
|
|
do
|
|
local bugReported = {}
|
|
function SI:BugReport(msg)
|
|
local now = GetTime()
|
|
if bugReported[msg] and now < bugReported[msg] + 60 then return end
|
|
bugReported[msg] = now
|
|
SI:ChatMsg(msg)
|
|
|
|
if bugReported['url'] and now < bugReported['url'] + 5 then return end
|
|
bugReported['url'] = now
|
|
SI:ChatMsg("Please report this bug at: https://github.com/SavedInstances/SavedInstances/issues")
|
|
end
|
|
end
|
|
|
|
-- Get Region
|
|
do
|
|
local region
|
|
function SI:GetRegion()
|
|
if not region then
|
|
local portal = GetCVar('portal')
|
|
if portal == 'public-test' then
|
|
-- PTR uses US region resets, despite the misleading realm name suffix
|
|
portal = 'US'
|
|
end
|
|
if not portal or #portal ~= 2 then
|
|
local regionID = GetCurrentRegion()
|
|
portal = portal and ({'US', 'KR', 'EU', 'TW', 'CN'})[regionID]
|
|
end
|
|
if not portal or #portal ~= 2 then -- other test realms?
|
|
portal = strmatch(SI.realmName or '', '%((%a%a)%)')
|
|
end
|
|
portal = portal and strupper(portal)
|
|
if portal and #portal == 2 then
|
|
region = portal
|
|
end
|
|
end
|
|
return region
|
|
end
|
|
end
|
|
|
|
-- Get Current uiMapID
|
|
function SI:GetCurrentMapAreaID()
|
|
return C_Map_GetBestMapForUnit('player')
|
|
end
|
|
|
|
function SI:ClassColorString(toon, str)
|
|
if not str then
|
|
str = toon
|
|
end
|
|
|
|
local class = SI.db.Toons[toon] and SI.db.Toons[toon].class
|
|
if not class then
|
|
return str
|
|
end
|
|
|
|
local color = (CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class]) or RAID_CLASS_COLORS[class]
|
|
if color.colorStr then
|
|
return "|c" .. color.colorStr .. str .. FONT_COLOR_CODE_CLOSE
|
|
end
|
|
|
|
local r = color[1] or color.r
|
|
local g = color[2] or color.g
|
|
local b = color[3] or color.b
|
|
local a = color[4] or color.a or 1
|
|
|
|
return format(
|
|
"|c%02x%02x%02x%02x%s%s",
|
|
floor(a * 255), floor(r * 255), floor(g * 255), floor(b * 255),
|
|
str, FONT_COLOR_CODE_CLOSE
|
|
)
|
|
end
|
|
|
|
function SI:ClassColorToon(toon)
|
|
local str = (SI.db.Tooltip.ShowServer and toon) or strsplit(' ', toon)
|
|
return SI:ClassColorString(toon, str)
|
|
end
|
|
|