initial commit
This commit is contained in:
142
Modules/DataTexts/Difficulty.lua
Normal file
142
Modules/DataTexts/Difficulty.lua
Normal file
@@ -0,0 +1,142 @@
|
||||
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||||
local DT = E:GetModule('DataTexts')
|
||||
|
||||
local _G = _G
|
||||
local pairs = pairs
|
||||
local format = format
|
||||
local GetDungeonDifficultyID, GetRaidDifficultyID, GetLegacyRaidDifficultyID = GetDungeonDifficultyID, GetRaidDifficultyID, GetLegacyRaidDifficultyID
|
||||
local SetDungeonDifficultyID, SetRaidDifficultyID, SetLegacyRaidDifficultyID = SetDungeonDifficultyID, SetRaidDifficultyID, SetLegacyRaidDifficultyID
|
||||
local GetInstanceInfo, GetDifficultyInfo, ResetInstances = GetInstanceInfo, GetDifficultyInfo, ResetInstances
|
||||
local C_ChallengeMode_GetActiveChallengeMapID = C_ChallengeMode.GetActiveChallengeMapID
|
||||
local C_ChallengeMode_GetActiveKeystoneInfo = C_ChallengeMode.GetActiveKeystoneInfo
|
||||
local C_ChallengeMode_IsChallengeModeActive = C_ChallengeMode.IsChallengeModeActive
|
||||
local C_MythicPlus_IsMythicPlusActive = C_MythicPlus.IsMythicPlusActive
|
||||
|
||||
local DungeonTexture, RaidTexture, LegacyTexture = CreateAtlasMarkup('Dungeon', 20, 20), CreateAtlasMarkup('Raid', 20, 20), CreateAtlasMarkup('worldquest-icon-raid', 20, 20)
|
||||
local DungeonDifficultyID, RaidDifficultyID, LegacyRaidDifficultyID = GetDungeonDifficultyID(), GetRaidDifficultyID(), GetLegacyRaidDifficultyID()
|
||||
|
||||
local RightClickMenu, DiffLabel = {
|
||||
{ text = _G.DUNGEON_DIFFICULTY, isTitle = true, notCheckable = true },
|
||||
{ text = _G.PLAYER_DIFFICULTY1, checked = function() return GetDungeonDifficultyID() == 1 end, func = function() SetDungeonDifficultyID(1) end },
|
||||
{ text = _G.PLAYER_DIFFICULTY2, checked = function() return GetDungeonDifficultyID() == 2 end, func = function() SetDungeonDifficultyID(2) end },
|
||||
{ text = _G.PLAYER_DIFFICULTY6, checked = function() return GetDungeonDifficultyID() == 23 end, func = function() SetDungeonDifficultyID(23) end },
|
||||
{ text = '', isTitle = true, notCheckable = true };
|
||||
{ text = _G.RAID_DIFFICULTY, isTitle = true, notCheckable = true},
|
||||
{ text = _G.PLAYER_DIFFICULTY1, checked = function() return GetRaidDifficultyID() == 14 end, func = function() SetRaidDifficultyID(14) end },
|
||||
{ text = _G.PLAYER_DIFFICULTY2, checked = function() return GetRaidDifficultyID() == 15 end, func = function() SetRaidDifficultyID(15) end },
|
||||
{ text = _G.PLAYER_DIFFICULTY6, checked = function() return GetRaidDifficultyID() == 16 end, func = function() SetRaidDifficultyID(16) end },
|
||||
{ text = '', isTitle = true, notCheckable = true };
|
||||
{ text = _G.UNIT_FRAME_DROPDOWN_SUBSECTION_TITLE_LEGACY_RAID, isTitle = true, notCheckable = true },
|
||||
{ text = _G.RAID_DIFFICULTY1, checked = function() return GetLegacyRaidDifficultyID() == 3 end, func = function() SetLegacyRaidDifficultyID(3) end },
|
||||
{ text = _G.RAID_DIFFICULTY1..' '.._G.PLAYER_DIFFICULTY2, checked = function() return GetLegacyRaidDifficultyID() == 5 end, func = function() SetLegacyRaidDifficultyID(5) end },
|
||||
{ text = _G.RAID_DIFFICULTY2, checked = function() return GetLegacyRaidDifficultyID() == 4 end, func = function() SetLegacyRaidDifficultyID(4) end },
|
||||
{ text = _G.RAID_DIFFICULTY2..' '.._G.PLAYER_DIFFICULTY2, checked = function() return GetLegacyRaidDifficultyID() == 6 end, func = function() SetLegacyRaidDifficultyID(6) end },
|
||||
{ text = '', isTitle = true, notCheckable = true };
|
||||
{ text = _G.RESET_INSTANCES, notCheckable = true, func = function() ResetInstances() end},
|
||||
}, {}
|
||||
|
||||
|
||||
for i = 1, 200 do
|
||||
if GetDifficultyInfo(i) then
|
||||
local Name = GetDifficultyInfo(i)
|
||||
if not DiffLabel[i] then DiffLabel[i] = Name end
|
||||
end
|
||||
end
|
||||
|
||||
local DiffIDLabel = {
|
||||
['N'] = { 1, 14, 38 },
|
||||
['H'] = { 2, 15, 39 },
|
||||
['M'] = { 16, 23, 40 },
|
||||
['10N'] = { 3 },
|
||||
['25N'] = { 4 },
|
||||
['10H'] = { 5 },
|
||||
['25H'] = { 6 },
|
||||
['LFR'] = { 7, 17 },
|
||||
['CM'] = { 8 },
|
||||
['40'] = { 9 },
|
||||
['TW'] = { 24, 33, 151 },
|
||||
['S'] = { 11, 12, 20, 152, 153 },
|
||||
['E'] = { 18, 19, 30 },
|
||||
['PvP'] = { 25, 29, 32, 34, 45 },
|
||||
['WF'] = { 147 },
|
||||
['WFH'] = { 149 },
|
||||
}
|
||||
|
||||
local IDTexture = {
|
||||
LEGACY = { 3, 4, 5, 6, 9 },
|
||||
RAID = { 14, 15, 16 },
|
||||
}
|
||||
|
||||
local Garrison = {
|
||||
[1152] = true,
|
||||
[1330] = true,
|
||||
[1153] = true,
|
||||
[1154] = true,
|
||||
[1158] = true,
|
||||
[1331] = true,
|
||||
[1159] = true,
|
||||
[1160] = true,
|
||||
}
|
||||
|
||||
local function GetDiffIDLabel(ID)
|
||||
for Name, Info in pairs(DiffIDLabel) do
|
||||
for _, Num in pairs(Info) do
|
||||
if Num == ID then
|
||||
return Name
|
||||
end
|
||||
end
|
||||
end
|
||||
return ID
|
||||
end
|
||||
|
||||
local function GetLabelTexture(ID)
|
||||
for Name, Info in pairs(IDTexture) do
|
||||
for _, Num in pairs(Info) do
|
||||
if Num == ID then
|
||||
return Name == 'LEGACY' and LegacyTexture or RaidTexture
|
||||
end
|
||||
end
|
||||
end
|
||||
return DungeonTexture
|
||||
end
|
||||
|
||||
local function OnClick(self)
|
||||
DT:SetEasyMenuAnchor(DT.EasyMenu, self)
|
||||
_G.EasyMenu(RightClickMenu, DT.EasyMenu, nil, nil, nil, 'MENU')
|
||||
end
|
||||
|
||||
local function OnEvent(self)
|
||||
local name, instanceType, difficultyID, _, _, _, _, instanceID = GetInstanceInfo()
|
||||
local keyStoneLevel = C_MythicPlus_IsMythicPlusActive() and C_ChallengeMode_GetActiveChallengeMapID() and C_ChallengeMode_IsChallengeModeActive() and C_ChallengeMode_GetActiveKeystoneInfo()
|
||||
|
||||
if keyStoneLevel then
|
||||
self.text:SetFormattedText('%s %s +%s', GetLabelTexture(difficultyID), name, keyStoneLevel)
|
||||
elseif instanceType ~= 'none' and difficultyID and not Garrison[instanceID] then
|
||||
self.text:SetFormattedText('%s %s %s', GetLabelTexture(difficultyID), name, GetDiffIDLabel(difficultyID))
|
||||
else
|
||||
DungeonDifficultyID, RaidDifficultyID, LegacyRaidDifficultyID = GetDungeonDifficultyID(), GetRaidDifficultyID(), GetLegacyRaidDifficultyID()
|
||||
self.text:SetFormattedText('%s %s %s %s %s %s', DungeonTexture, GetDiffIDLabel(DungeonDifficultyID), RaidTexture, GetDiffIDLabel(RaidDifficultyID), LegacyTexture, GetDiffIDLabel(LegacyRaidDifficultyID))
|
||||
end
|
||||
end
|
||||
|
||||
local function OnEnter()
|
||||
if not (DungeonDifficultyID or RaidDifficultyID or LegacyRaidDifficultyID) then return end
|
||||
|
||||
DT.tooltip:ClearLines()
|
||||
DT.tooltip:SetText(L["Current Difficulties:"])
|
||||
DT.tooltip:AddLine(' ')
|
||||
|
||||
if DungeonDifficultyID then
|
||||
DT.tooltip:AddLine(format('%s %s', DungeonTexture, DiffLabel[DungeonDifficultyID]), 1, 1, 1)
|
||||
end
|
||||
if RaidDifficultyID then
|
||||
DT.tooltip:AddLine(format('%s %s', RaidTexture, DiffLabel[RaidDifficultyID]), 1, 1, 1)
|
||||
end
|
||||
if LegacyRaidDifficultyID then
|
||||
DT.tooltip:AddLine(format('%s %s', LegacyTexture, DiffLabel[LegacyRaidDifficultyID]), 1, 1, 1)
|
||||
end
|
||||
|
||||
DT.tooltip:Show()
|
||||
end
|
||||
|
||||
DT:RegisterDatatext('Difficulty', nil, {'CHAT_MSG_SYSTEM', 'LOADING_SCREEN_DISABLED'}, OnEvent, nil, OnClick, OnEnter, nil, 'Difficulty')
|
||||
Reference in New Issue
Block a user