local SLE, T, E, L, V, P, G = unpack(select(2, ...)) local DT = E.DataTexts local LFR = SLE.LFR local _G = _G local strlower = strlower local UnitLevel, GetAverageItemLevel = UnitLevel, GetAverageItemLevel local RAID_FINDER = RAID_FINDER local BOSS_DEAD = BOSS_DEAD local BOSS_ALIVE = BOSS_ALIVE local RED_FONT_COLOR = RED_FONT_COLOR local GREEN_FONT_COLOR = GREEN_FONT_COLOR local IsShiftKeyDown = IsShiftKeyDown local ExpackColor = '|cff9482c9' --Da grand table of every bit of info used by everything else LFR.InstanceData = { ExpackData = { Legion = { index = 6, maxLevel = 110 }, BFA = { index = 7, maxLevel = 120 }, }, Raids = { --Using numbers cause this way I can use for i = 1,# to order instances correctly Legion = { [1] = { name = 'nightmare', ilevel = 160, map = 777, dungeonIDs = { 1287,1288,1289 }, }, [2] = { name = 'trial', ilevel = 160, map = 806, dungeonIDs = { 1411 }, }, [3] = { name = 'palace', ilevel = 162, map = 764, dungeonIDs = { 1290,1291,1292,1293 }, }, [4] = { name = 'tomb', ilevel = 172, map = 850, dungeonIDs = { 1494,1495,1496,1497 }, }, [5] = { name = 'antorus', ilevel = 184, map = 909, dungeonIDs = { 1610,1611,1612,1613 }, }, }, BFA = { [1] = { name = 'uldir', ilevel = 300, map = 1148, dungeonIDs = { 1731,1732,1733 }, }, [3] = { name = 'sc', ilevel = 350, map = 1345, dungeonIDs = { 1951 }, }, [4] = { name = 'ep', ilevel = 380, map = 1512, dungeonIDs = { 2009,2010,2011 }, }, [5] = { name = 'nzoth', ilevel = 410, map = 1580, dungeonIDs = { 2036,2037,2038,2039 }, }, }, }, } if E.myfaction == 'Horde' then LFR.InstanceData['Raids']['BFA'][2] = { name = "daz", ilevel = 350, map = 1358, dungeonIDs = { 1948, 1949, 1950 }, } else LFR.InstanceData['Raids']['BFA'][2] = { name = 'daz', ilevel = 350, map = 1358, dungeonIDs = { 1945, 1946, 1947 }, } end --Checking if tracking of an expack dungeons is enabled function LFR:CheckOptions() if LFR:CheckLegion() or LFR:CheckBFA() then return true end return false end function LFR:CheckLegion() for _, v in pairs(LFR.db.legion) do if v == true then return v end end return false end function LFR:CheckBFA() for _, v in pairs(LFR.db.bfa) do if v == true then return v end end return false end --Creating a group of info for dungeons of expack passed. Also player level and ilvl are passed function LFR:BuildGroup(expack, lvl, ilvl) if not LFR['Check'..expack]() then return end --If nothing in this expack is selected to be tracked then our work is done local small = strlower(expack) --making lower case version of expack name for checking options DT.tooltip:AddLine(ExpackColor..'< '.._G['EXPANSION_NAME'..LFR.InstanceData['ExpackData'][expack].index]..' >|r') --Da title! for i = 1, #(LFR.InstanceData['Raids'][expack]) do local instanceInfo = LFR.InstanceData['Raids'][expack][i] if LFR.db[small][instanceInfo.name] then DT.tooltip:AddLine(' '..SLE:GetMapInfo(instanceInfo.map, 'name')) --Check for dungeon requirements if lvl == LFR.InstanceData['ExpackData'][expack].maxLevel and ilvl >= instanceInfo.ilevel then LFR:GetRaidLockInfo(unpack(instanceInfo.dungeonIDs)) --Adding info about bosses to the tooltip for this dungeon else DT.tooltip:AddLine(' '..L["This LFR isn't available for your level/gear."]) end end end --Add a separator from any possible following info DT.tooltip:AddLine(' ') end --Info about passed dungeon IDs. Don't feed map IDs, those are different. function LFR:GetRaidLockInfo(...) local dungeonIDs = {...} --All provided IDs local numBosses = 0 --Total number of bosses in the dungeon local killNum = 0 --How many were already killed for i = 1, #dungeonIDs do local isAvailable, isAvailableToPlayer = IsLFGDungeonJoinable(dungeonIDs[i]) --Only count this wing if it is actually available if isAvailable or isAvailableToPlayer then local numEncounters = GetLFGDungeonNumEncounters(dungeonIDs[i]) numBosses = numBosses + numEncounters for j = 1, numEncounters do local bossName, _, isKilled = GetLFGDungeonEncounterInfo(dungeonIDs[i], j) if IsShiftKeyDown() then --Show detailed info LFR:BossStatus(bossName, isKilled) else if (isKilled) then killNum = killNum + 1 end end end end end if not IsShiftKeyDown() then --Show just killed/total LFR:BossCount(killNum, numBosses) end end --Injecting into tooltip function LFR:Show() local lvl = UnitLevel('player') local ilvl = GetAverageItemLevel() DT.tooltip:AddLine(' ') DT.tooltip:AddLine(RAID_FINDER) if not LFR:CheckOptions() then DT.tooltip:AddLine(' '..L["You didn't select any instance to track."]) return end --Building dungeons info LFR:BuildGroup('BFA', lvl, ilvl) LFR:BuildGroup('Legion', lvl, ilvl) end --Detailed info about bosses in the wing function LFR:BossStatus(bossName, isKilled) if not bossName then return end if (isKilled) then DT.tooltip:AddDoubleLine(' '..bossName, BOSS_DEAD, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) else DT.tooltip:AddDoubleLine(" "..bossName, BOSS_ALIVE, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) end end --Da line "kill/total" function LFR:BossCount(killNum, numBosses) if killNum == numBosses then DT.tooltip:AddLine(' '..L["Bosses killed: "]..killNum..'/'..numBosses, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) else DT.tooltip:AddLine(' '..L["Bosses killed: "]..killNum..'/'..numBosses, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b, GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) end end function LFR:Initialize() if not SLE.initialized then return end --DB conversions if E.db.sle.lfr.cata then E.db.sle.lfr.cata = nil end if E.db.sle.lfr.mop then E.db.sle.lfr.mop = nil end if E.db.sle.lfr.wod then E.db.sle.lfr.wod = nil end LFR.db = E.db.sle.lfr function LFR:ForUpdateAll() if E.db.sle.lfr.cata then E.db.sle.lfr.cata = nil end if E.db.sle.lfr.mop then E.db.sle.lfr.mop = nil end if E.db.sle.lfr.wod then E.db.sle.lfr.wod = nil end LFR.db = E.db.sle.lfr end end SLE:RegisterModule(LFR:GetName())