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.

87 lines
2.4 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 GetCurrentRegion = GetCurrentRegion
local GetCVar = GetCVar
local GetTime = GetTime
local UnitAura = UnitAura
-- UnitAura/UnitBuff/UnitDebuff fix for Patch 8.0
-- Get these functions from WeakAuras 2
function SI:GetUnitAura(unit, spell, filter)
if filter and not filter:upper():find('FUL') then
filter = filter .. '|HELPFUL'
end
for i = 1, 255 do
local name, _, _, _, _, _, _, _, _, spellId = UnitAura(unit, i, filter)
if not name then return end
if spell == spellId or spell == name then
return UnitAura(unit, i, filter)
end
end
end
function SI:GetUnitBuff(unit, spell, filter)
filter = filter and filter .. '|HELPFUL' or 'HELPFUL'
return SI:GetUnitAura(unit, spell, filter)
end
function SI:GetUnitDebuff(unit, spell, filter)
filter = filter and filter .. '|HARMFUL' or 'HARMFUL'
return SI:GetUnitAura(unit, spell, filter)
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