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.

1300 lines
24 KiB

--[[
State provider for raid and dungeon lockouts
]]
local ADDON_NAME, Internal = ...
local External = _G[ADDON_NAME]
local L = Internal.L
-- Maps input names to ids
local mapNameToID = {}
-- On ADDON_LOADED we loop through these to get encounter names, instanceID and dungeonEncounterID
local journalEncounterData = {
89,
90,
91,
92,
93,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
122,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
139,
140,
154,
155,
156,
157,
158,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
283,
285,
289,
290,
291,
292,
311,
317,
318,
322,
323,
324,
325,
331,
332,
333,
335,
339,
340,
341,
342,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
433,
436,
437,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
483,
484,
485,
486,
487,
489,
523,
524,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632,
634,
635,
636,
637,
638,
639,
640,
641,
642,
643,
644,
649,
654,
655,
656,
657,
658,
659,
660,
663,
664,
665,
666,
668,
669,
670,
671,
672,
673,
674,
675,
676,
677,
679,
682,
683,
684,
685,
686,
687,
688,
689,
690,
691,
692,
693,
694,
695,
696,
697,
698,
708,
709,
713,
725,
726,
727,
728,
729,
737,
738,
741,
742,
743,
744,
745,
748,
749,
814,
816,
817,
818,
819,
820,
821,
824,
825,
826,
827,
828,
829,
831,
832,
833,
834,
846,
849,
850,
851,
852,
853,
856,
857,
858,
859,
860,
861,
864,
865,
866,
867,
868,
869,
870,
881,
887,
888,
889,
893,
895,
896,
899,
900,
901,
959,
965,
966,
967,
968,
971,
1122,
1123,
1128,
1133,
1138,
1139,
1140,
1141,
1142,
1143,
1144,
1145,
1146,
1147,
1148,
1153,
1154,
1155,
1160,
1161,
1162,
1163,
1168,
1185,
1186,
1195,
1196,
1197,
1202,
1203,
1207,
1208,
1209,
1210,
1211,
1214,
1216,
1225,
1226,
1227,
1228,
1229,
1234,
1235,
1236,
1237,
1238,
1262,
1291,
1372,
1391,
1392,
1394,
1395,
1396,
1425,
1426,
1427,
1432,
1433,
1438,
1447,
1452,
1467,
1468,
1469,
1470,
1479,
1480,
1485,
1486,
1487,
1488,
1489,
1490,
1491,
1492,
1497,
1498,
1499,
1500,
1501,
1502,
1512,
1518,
1519,
1520,
1521,
1522,
1523,
1524,
1525,
1526,
1527,
1528,
1529,
1530,
1531,
1532,
1533,
1534,
1535,
1536,
1537,
1538,
1539,
1540,
1541,
1542,
1543,
1544,
1545,
1546,
1547,
1548,
1549,
1550,
1551,
1552,
1553,
1554,
1555,
1556,
1557,
1559,
1560,
1561,
1562,
1563,
1564,
1565,
1566,
1567,
1568,
1569,
1570,
1571,
1572,
1573,
1574,
1575,
1576,
1577,
1578,
1579,
1580,
1581,
1582,
1583,
1584,
1585,
1586,
1587,
1588,
1589,
1590,
1591,
1592,
1593,
1594,
1595,
1596,
1597,
1598,
1599,
1600,
1601,
1602,
1603,
1604,
1605,
1606,
1607,
1608,
1609,
1610,
1611,
1612,
1613,
1614,
1615,
1616,
1617,
1618,
1619,
1620,
1621,
1622,
1623,
1624,
1625,
1626,
1627,
1628,
1629,
1630,
1631,
1632,
1633,
1634,
1635,
1636,
1637,
1638,
1639,
1640,
1641,
1642,
1643,
1644,
1645,
1646,
1647,
1648,
1649,
1650,
1651,
1652,
1653,
1654,
1655,
1656,
1657,
1662,
1663,
1664,
1665,
1667,
1672,
1673,
1686,
1687,
1688,
1693,
1694,
1695,
1696,
1697,
1702,
1703,
1704,
1706,
1711,
1713,
1718,
1719,
1720,
1725,
1726,
1731,
1732,
1737,
1738,
1743,
1744,
1749,
1750,
1751,
1756,
1761,
1762,
1763,
1764,
1769,
1770,
1774,
1783,
1789,
1790,
1795,
1796,
1817,
1818,
1819,
1820,
1825,
1826,
1827,
1829,
1830,
1835,
1836,
1837,
1838,
1856,
1861,
1862,
1867,
1872,
1873,
1878,
1883,
1884,
1885,
1896,
1897,
1898,
1903,
1904,
1905,
1906,
1956,
1979,
1980,
1981,
1982,
1983,
1984,
1985,
1986,
1987,
1992,
1997,
2004,
2009,
2010,
2011,
2012,
2013,
2014,
2015,
2025,
2030,
2031,
2036,
2082,
2083,
2093,
2094,
2095,
2096,
2097,
2098,
2099,
2102,
2109,
2114,
2115,
2116,
2125,
2126,
2127,
2128,
2129,
2130,
2131,
2132,
2133,
2134,
2139,
2140,
2141,
2142,
2143,
2144,
2145,
2146,
2147,
2153,
2154,
2155,
2156,
2157,
2158,
2165,
2166,
2167,
2168,
2169,
2170,
2171,
2172,
2173,
2194,
2195,
2197,
2198,
2199,
2210,
2212,
2213,
2323,
2325,
2328,
2329,
2330,
2331,
2332,
2333,
2334,
2335,
2336,
2337,
2339,
2340,
2341,
2342,
2343,
2344,
2345,
2347,
2348,
2349,
2351,
2352,
2353,
2354,
2355,
2357,
2358,
2359,
2360,
2361,
2362,
2363,
2364,
2365,
2366,
2367,
2368,
2369,
2370,
2372,
2373,
2374,
2375,
2377,
2378,
2381,
2387,
2388,
2389,
2390,
2391,
2392,
2393,
2394,
2395,
2396,
2397,
2398,
2399,
2400,
2401,
2402,
2403,
2404,
2405,
2406,
2407,
2408,
2409,
2410,
2411,
2412,
2413,
2414,
2415,
2416,
2417,
2418,
2419,
2420,
2421,
2422,
2423,
2424,
2425,
2426,
2428,
2429,
2430,
2431,
2432,
2433,
2456,
2435,
2442,
2439,
2444,
2445,
2443,
2446,
2447,
2440,
2441,
2437,
2454,
2436,
2452,
2451,
2448,
2449,
2455,
}
if select(4, GetBuildInfo()) >= 90200 then
tinsert(journalEncounterData, 2458)
tinsert(journalEncounterData, 2465)
tinsert(journalEncounterData, 2470)
tinsert(journalEncounterData, 2459)
tinsert(journalEncounterData, 2460)
tinsert(journalEncounterData, 2461)
tinsert(journalEncounterData, 2463)
tinsert(journalEncounterData, 2469)
tinsert(journalEncounterData, 2457)
tinsert(journalEncounterData, 2467)
tinsert(journalEncounterData, 2464)
end
local dungeonInstanceData = {}
local dungeonEncounterData = {}
local dungeonDifficultiesAll = {1,2,23,8};
local raidDifficultiesAll = {17,14,15,16};
local instanceDifficulties = {
-- Classic
[ 48] = { 1}, -- Blackfathom Deeps
[ 230] = { 1, 19}, -- Blackrock Depths
[ 229] = { 1}, -- Lower Blackrock Spire
[ 429] = { 1}, -- Dire Maul
[ 90] = { 1}, -- Gnomeregan
[ 349] = { 1}, -- Maraudon
[ 389] = { 1}, -- Ragefire Chasm
[ 129] = { 1}, -- Razorfen Downs
[ 47] = { 1}, -- Razorfen Kraul
[ 329] = { 1}, -- Stratholme
[ 109] = { 1}, -- The Temple of Atal'hakkar
[ 34] = { 1}, -- The Stockade
[ 70] = { 1}, -- Uldaman
[ 43] = { 1}, -- Wailing Caverns
[ 209] = { 1}, -- Zul'Farrak
[1001] = { 1, 2, 8}, -- Scarlet Halls
[1004] = { 1, 2, 8, 19}, -- Scarlet Monastery
[1007] = { 1, 2, 8}, -- Scholomance
[ 36] = { 1, 2}, -- Deadmines
[ 33] = { 1, 2, 19}, -- Shadowfang Keep
[ 409] = { 9, 18}, -- Molten Core
[ 469] = { 9, 18}, -- Blackwing Lair
[ 509] = { 3}, -- Ruins of Ahn'Qiraj
[ 531] = { 9, 18}, -- Temple of Ahn'Qiraj
-- The Burning Crusade
[ 558] = { 1, 2}, -- Auchenai Crypts
[ 543] = { 1, 2}, -- Hellfire Ramparts
[ 585] = { 1, 2}, -- Magisters' Terrace
[ 557] = { 1, 2}, -- Mana-Tombs
[ 560] = { 1, 2}, -- Old Hillsbrad Foothills
[ 556] = { 1, 2}, -- Sethekk Halls
[ 555] = { 1, 2}, -- Shadow Labyrinth
[ 552] = { 1, 2}, -- The Arcatraz
[ 269] = { 1, 2}, -- The Black Morass
[ 542] = { 1, 2}, -- The Blood Furnace
[ 553] = { 1, 2}, -- The Botanica
[ 554] = { 1, 2}, -- The Mechanar
[ 540] = { 1, 2}, -- The Shattered Halls
[ 547] = { 1, 2, 19}, -- The Slave Pens
[ 545] = { 1, 2}, -- The Steamvault
[ 546] = { 1, 2}, -- The Underbog
[ 532] = { 3}, -- Karazhan
[ 565] = { 4}, -- Gruul's Lair
[ 544] = { 4}, -- Magtheridon's Lair
[ 548] = { 4}, -- Serpentshrine Cavern
[ 550] = { 4}, -- The Eye
[ 534] = { 4}, -- The Battle for Mount Hyjal
[ 564] = {14, 33}, -- Black Temple
[ 580] = { 4}, -- Sunwell Plateau
-- Wrath of the Lich King
[ 619] = { 1, 2}, -- Ahn'kahet: The Old Kingdom
[ 601] = { 1, 2}, -- Azjol-Nerub
[ 600] = { 1, 2}, -- Drak'Tharon Keep
[ 604] = { 1, 2}, -- Gundrak
[ 602] = { 1, 2}, -- Halls of Lightning
[ 668] = { 1, 2}, -- Halls of Reflection
[ 599] = { 1, 2}, -- Halls of Stone
[ 658] = { 1, 2}, -- Pit of Saron
[ 595] = { 1, 2}, -- The Culling of Stratholme
[ 632] = { 1, 2}, -- The Forge of Souls
[ 576] = { 1, 2}, -- The Nexus
[ 578] = { 1, 2}, -- The Oculus
[ 608] = { 1, 2}, -- The Violet Hold
[ 650] = { 1, 2}, -- Trial of the Champion
[ 574] = { 1, 2}, -- Utgarde Keep
[ 575] = { 1, 2}, -- Utgarde Pinnacle
[ 624] = { 3, 4}, -- Vault of Archavon
[ 533] = { 3, 4}, -- Naxxramas
[ 615] = { 3, 4}, -- The Obsidian Sanctum
[ 616] = { 3, 4}, -- The Eye of Eternity
[ 649] = { 3, 4, 5, 6}, -- Trial of the Crusader
[ 631] = { 3, 4, 5, 6}, -- Icecrown Citadel
[ 603] = {14, 33}, -- Ulduar
[ 249] = { 3, 4}, -- Onyxia's Lair
[ 724] = { 3, 4, 5, 6}, -- The Ruby Sanctum
-- Cataclysm
[ 645] = { 1, 2}, -- Blackrock Caverns
[ 36] = { 1, 2}, -- Deadmines
[ 644] = { 1, 2}, -- Halls of Origination
[ 755] = { 1, 2}, -- Lost City of the Tol'vir
[ 33] = { 1, 2, 19}, -- Shadowfang Keep
[ 725] = { 1, 2}, -- The Stonecore
[ 657] = { 1, 2}, -- The Vortex Pinnacle
[ 643] = { 1, 2}, -- Throne of the Tides
[ 568] = { 1, 2}, -- Zul'Aman
[ 859] = { 1, 2}, -- Zul'Gurub
[ 670] = { 1, 2}, -- Grim Batol
[ 938] = { 2}, -- End Time
[ 939] = { 2}, -- Well of Eternity
[ 940] = { 2}, -- Hour of Twilight
[ 671] = { 3, 4, 5, 6}, -- The Bastion of Twilight
[ 669] = { 3, 4, 5, 6}, -- Blackwing Descent
[ 967] = { 3, 4, 5, 6, 7}, -- Dragon Soul
[ 720] = {14, 15, 33}, -- Firelands
[ 754] = { 3, 4, 5, 6}, -- Throne of the Four Winds
-- Mists of Pandaria
[ 961] = { 1, 2, 8}, -- Stormstout Brewery
[ 960] = { 1, 2, 8}, -- Temple of the Jade Serpent
[ 994] = { 1, 2, 8}, -- Mogu'shan Palace
[ 962] = { 1, 2, 8}, -- Gate of the Setting Sun
[1011] = { 1, 2, 8}, -- Siege of Niuzao Temple
[ 959] = { 1, 2, 8}, -- Shado-Pan Monastery
[1007] = { 1, 2, 8}, -- Scholomance
[1001] = { 1, 2, 8}, -- Scarlet Halls
[1004] = { 1, 2, 8, 19}, -- Scarlet Monastery
[1008] = { 3, 4, 5, 6, 7}, -- Mogu'shan Vaults
[1009] = { 3, 4, 5, 6, 7}, -- Heart of Fear
[ 996] = { 3, 4, 5, 6, 7}, -- Terrace of Endless Spring
[1098] = { 3, 4, 5, 6, 7}, -- Throne of Thunder
[1136] = raidDifficultiesAll, -- Siege of Orgrimmar
-- Warlords of Draenor
[1175] = dungeonDifficultiesAll, -- Bloodmaul Slag Mines
[1209] = dungeonDifficultiesAll, -- Skyreach
[1208] = dungeonDifficultiesAll, -- Grimrail Depot
[1176] = dungeonDifficultiesAll, -- Shadowmoon Burial Grounds
[1182] = dungeonDifficultiesAll, -- Auchindoun
[1279] = dungeonDifficultiesAll, -- The Everbloom
[1358] = { 1, 2, 8, 19, 23}, -- Upper Blackrock Spire
[1195] = dungeonDifficultiesAll, -- Iron Docks
[1205] = raidDifficultiesAll, -- Blackrock Foundry
[1228] = raidDifficultiesAll, -- Highmaul
[1228] = raidDifficultiesAll, -- Draenor
[1448] = raidDifficultiesAll, -- Hellfire Citadel
-- Legion
[1493] = dungeonDifficultiesAll, -- Vault of the Wardens
[1456] = dungeonDifficultiesAll, -- Eye of Azshara
[1477] = dungeonDifficultiesAll, -- Halls of Valor
[1492] = dungeonDifficultiesAll, -- Maw of Souls
[1516] = { 2, 8, 23}, -- The Arcway
[1501] = dungeonDifficultiesAll, -- Black Rook Hold
[1466] = dungeonDifficultiesAll, -- Darkheart Thicket
[1458] = dungeonDifficultiesAll, -- Neltharion's Lair
[1544] = { 1, 2, 23}, -- Assault on Violet Hold
[1571] = { 2, 8, 23}, -- Court of Stars
[1651] = { 2, 8, 23}, -- Return to Karazhan
[1677] = { 2, 8, 23}, -- Cathedral of Eternal Night
[1753] = { 2, 8, 23}, -- Seat of the Triumvirate
[1520] = raidDifficultiesAll, -- The Emerald Nightmare
[1530] = raidDifficultiesAll, -- The Nighthold
[1648] = raidDifficultiesAll, -- Trial of Valor
[1676] = raidDifficultiesAll, -- Tomb of Sargeras
[1712] = raidDifficultiesAll, -- Antorus, the Burning Throne
-- Battle for Azeroth
[1763] = dungeonDifficultiesAll, -- Atal'Dazar
[1754] = dungeonDifficultiesAll, -- Freehold
[1594] = dungeonDifficultiesAll, -- The MOTHERLODE!!
[1771] = dungeonDifficultiesAll, -- Tol Dagor
[1862] = dungeonDifficultiesAll, -- Waycrest Manor
[1841] = dungeonDifficultiesAll, -- The Underrot
[1822] = { 2, 8, 23}, -- Siege of Boralus
[1877] = dungeonDifficultiesAll, -- Temple of Sethraliss
[1864] = dungeonDifficultiesAll, -- Shrine of the Storm
[1762] = { 2, 8, 23}, -- Kings' Rest
[2097] = { 2, 8, 23}, -- Operation: Mechagon
[1861] = raidDifficultiesAll, -- Uldir
[2070] = raidDifficultiesAll, -- Battle of Dazar'alor
[2096] = raidDifficultiesAll, -- Crucible of Storms
[2164] = raidDifficultiesAll, -- The Eternal Palace
[2217] = raidDifficultiesAll, -- Ny'alotha, the Waking City
-- Shadowlands
[2286] = dungeonDifficultiesAll, -- The Necrotic Wake
[2289] = dungeonDifficultiesAll, -- Plaguefall
[2290] = dungeonDifficultiesAll, -- Mists of Tirna Scithe
[2287] = dungeonDifficultiesAll, -- Halls of Atonement
[2285] = dungeonDifficultiesAll, -- Spires of Ascension
[2293] = dungeonDifficultiesAll, -- Theater of Pain
[2291] = dungeonDifficultiesAll, -- De Other Side
[2284] = dungeonDifficultiesAll, -- Sanguine Depths
[2441] = {23}, -- Tazavesh, the Veiled Market
[2296] = raidDifficultiesAll, -- Castle Nathria
[2450] = raidDifficultiesAll, -- Sanctum of Domination
}
if select(4, GetBuildInfo()) >= 90200 then
instanceDifficulties[2441] = { 2, 8, 23} -- Tazavesh, the Veiled Market
instanceDifficulties[2481] = raidDifficultiesAll -- Sepulcher of the First Ones
end
local LockoutMixin = CreateFromMixins(External.StateMixin)
function LockoutMixin:Init(instanceID, difficultyID)
External.StateMixin.Init(self, instanceID)
self.difficultyID = difficultyID
self.name = GetRealZoneText(instanceID)
self.difficultyName = (GetDifficultyInfo(difficultyID))
self.encounters = dungeonInstanceData[instanceID]
end
function LockoutMixin:GetDifficultyID()
return self.difficultyID
end
function LockoutMixin:GetDisplayName()
return string.format(L["Lockout: %s"], self:GetName())
end
function LockoutMixin:GetUniqueKey()
return "lockout:" .. self:GetID() .. ":" .. self:GetDifficultyID()
end
function LockoutMixin:GetName()
return format("%s (%s)", self.name, self.difficultyName)
end
function LockoutMixin:GetDifficultyName()
return self.difficultyName
end
function LockoutMixin:IsBossCompleted(index)
local encounterID = self.encounters[index]
if self:GetCharacter():IsPlayer() then
return C_RaidLocks.IsEncounterComplete(self.id, encounterID, self.difficultyID)
else
return self:GetCharacter():GetData("encounterKill", encounterID .. ":" .. self.difficultyID)
end
end
function LockoutMixin:GetBossName(index)
local encounterID = self.encounters[index]
return dungeonEncounterData[encounterID]
end
function LockoutMixin:GetBossCount()
return #self.encounters
end
function LockoutMixin:GetBossKillCount()
local count = 0
if self:GetCharacter():IsPlayer() then
local mapID, difficultyID = self.id, self.difficultyID
for _,encounterID in ipairs(self.encounters) do
if C_RaidLocks.IsEncounterComplete(mapID, encounterID, difficultyID) then
count = count + 1
end
end
else
local difficultyID = self.difficultyID
for _,encounterID in ipairs(self.encounters) do
if self:GetCharacter():GetData("encounterKill", encounterID .. ":" .. difficultyID) then
count = count + 1
end
end
end
return count
end
function LockoutMixin:IsCompleted()
return self:GetBossKillCount() == self:GetBossCount()
end
function LockoutMixin:RegisterEventsFor(target)
target:RegisterEvents("PLAYER_ENTERING_WORLD", "ENCOUNTER_END")
end
local LockoutProviderMixin = CreateFromMixins(External.StateProviderMixin)
function LockoutProviderMixin:GetID()
return "lockout"
end
function LockoutProviderMixin:GetName()
return L["Lockout"]
end
function LockoutProviderMixin:Acquire(...)
return CreateAndInitFromMixin(LockoutMixin, ...)
end
function LockoutProviderMixin:GetFunctions()
return {
{
name = "GetValue",
returnValue = "string",
},
}
end
function LockoutProviderMixin:GetDefaults()
return {}, { -- Text
{"GetValue"}
}
end
function LockoutProviderMixin:ParseInput(value)
local a, b = strsplit(" ", value)
a, b = tonumber(a), tonumber(b)
if a ~= nil and b ~= nil then
return true, a, b
end
if mapNameToID[value] then
return true, unpack(mapNameToID[value])
end
return false, L["Invalid dungeon and difficulty"]
end
function LockoutProviderMixin:FillAutoComplete(tbl, text, offset, length)
local text = strsub(text, offset, length):lower()
for value in pairs(mapNameToID) do
local name = value:lower()
if #name >= #text and strsub(name, offset, length) == text then
tbl[#tbl+1] = value
end
end
table.sort(tbl)
end
Internal.RegisterStateProvider(CreateFromMixins(LockoutProviderMixin))
local function ADDON_LOADED(_, addon)
if addon == ADDON_NAME then
for _,journalEncounterID in ipairs(journalEncounterData) do
local name, _, _, _, _, _, dungeonEncounterID, instanceID = EJ_GetEncounterInfo(journalEncounterID)
if instanceID then
if not dungeonInstanceData[instanceID] then
dungeonInstanceData[instanceID] = {}
end
local dungeonInstanceBosses = dungeonInstanceData[instanceID]
dungeonInstanceBosses[#dungeonInstanceBosses+1] = dungeonEncounterID
dungeonEncounterData[dungeonEncounterID] = name
end
end
for instanceID,difficulties in pairs(instanceDifficulties) do
local name = GetRealZoneText(instanceID)
for _,difficultyID in ipairs(difficulties) do
local key = format("%s (%s)", name, (GetDifficultyInfo(difficultyID)))
mapNameToID[key] = {instanceID, difficultyID}
end
end
Internal.UnregisterEvent("ADDON_LOADED", ADDON_LOADED)
end
end
Internal.RegisterEvent("ADDON_LOADED", ADDON_LOADED, -10) -- Load this before todos are processed
local function PLAYER_LOGOUT()
local player = Internal.GetPlayer()
local encounterKill = player:GetDataTable("encounterKill")
wipe(encounterKill)
for i=1,GetNumSavedInstances() do
local _, _, _, _, _, extended = GetSavedInstanceInfo(i)
if not extended then
local _, _, instanceID, difficultyID = strsplit(":", string.match(GetSavedInstanceChatLink(i), "instancelock:[^|]+"))
instanceID, difficultyID = tonumber(instanceID), tonumber(difficultyID)
for _, encounterID in ipairs(dungeonInstanceData[instanceID]) do
encounterKill[encounterID .. ":" .. difficultyID] = C_RaidLocks.IsEncounterComplete(instanceID, encounterID, difficultyID) and true or nil
end
end
end
end
Internal.RegisterEvent("PLAYER_LOGOUT", PLAYER_LOGOUT)