Backend improvements and bug fixes
- Fixed an error when hovering over some spells in the Auras panel on the Player Breakdown window. - Fixed the character item level, which was not showing for players that left the party group on the Player Breakdown window. - Fixed boss images not showing at the segments selection menu. - Other updates related to encounter journal and mythic+, both under development.
This commit is contained in:
+6
-341
@@ -194,48 +194,13 @@ do
|
||||
---@return number
|
||||
---@return number
|
||||
function Details:GetBossEncounterTexture(encounterName)
|
||||
assert(type(encounterName) == "string", "bad argument #1 to 'GetBossEncounterTexture' (string expected, got " .. type(encounterName) .. ")")
|
||||
encounterName = string.lower(encounterName)
|
||||
|
||||
if (Details.boss_icon_cache[encounterName]) then
|
||||
return Details.boss_icon_cache[encounterName], 32, 20, 0, 1, 0, 0.9
|
||||
---@type details_encounterinfo
|
||||
local encounterInfo = Details:GetEncounterInfo(encounterName)
|
||||
if (not encounterInfo) then
|
||||
Details:Msg("did not find encounter info for: " .. (encounterName or "no-name") .. ".")
|
||||
return "", 32, 20, 0, 1, 0, 1
|
||||
end
|
||||
|
||||
local EJ_GetInstanceByIndex = EJ_GetInstanceByIndex or function(instanceIndex, bIsRaidInstance) return nil end
|
||||
local EJ_GetEncounterInfoByIndex = EJ_GetEncounterInfoByIndex or function(index, instanceID) return nil end
|
||||
local EJ_GetCreatureInfo = EJ_GetCreatureInfo or function(index, bossId) return nil end
|
||||
|
||||
---@type boolean
|
||||
local bIsRaidInstance = true
|
||||
|
||||
---starts on DragonIsles world bosses > Vault of Incarnates > Aberrus, The Shadowed Crucible
|
||||
---could go to 10 for less maintenance
|
||||
---@type number
|
||||
local maxInstancesInCurrentPath = 3
|
||||
for instanceIndex = 1, maxInstancesInCurrentPath do
|
||||
local instanceID = EJ_GetInstanceByIndex(instanceIndex, bIsRaidInstance)
|
||||
if (instanceID) then
|
||||
detailsFramework.EncounterJournal.EJ_SelectInstance(instanceID)
|
||||
--we don't know how many bosses are in the instance, so we'll just loop through them all
|
||||
for i = 1, 20 do
|
||||
local name, description, bossID, rootSectionID, link, journalInstanceID, dungeonEncounterID, UiMapID = EJ_GetEncounterInfoByIndex(i, instanceID)
|
||||
--print(name, bossID)
|
||||
if (name) then
|
||||
name = name:lower()
|
||||
if (name == encounterName) then
|
||||
local id, creatureName, creatureDescription, displayInfo, iconImage = EJ_GetCreatureInfo(1, bossID)
|
||||
Details.boss_icon_cache[encounterName] = iconImage
|
||||
return iconImage, 32, 20, 0, 1, 0, 0.9
|
||||
end
|
||||
else
|
||||
--no more bosses in this instance, go to the next one
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return ""
|
||||
return encounterInfo.creatureIcon, 32, 20, 0, 1, 0, 0.9
|
||||
end
|
||||
|
||||
function Details:GetEncounterInfoFromEncounterName (EJID, encountername)
|
||||
@@ -573,306 +538,6 @@ do
|
||||
return Details222.EJCache.CacheDungeonData_ByMapId[instanceId]
|
||||
end
|
||||
|
||||
function Details222.EJCache.MakeCache()
|
||||
Details222.EJCache.CacheRaidData_ByInstanceId = {}
|
||||
Details222.EJCache.CacheRaidData_ByInstanceName = {} --this is localized name
|
||||
Details222.EJCache.CacheRaidData_ByMapId = {} --retrivied from GetInstanceInfo()
|
||||
|
||||
Details222.EJCache.CacheDungeonData_ByInstanceId = {}
|
||||
Details222.EJCache.CacheDungeonData_ByInstanceName = {}
|
||||
Details222.EJCache.CacheDungeonData_ByMapId = {}
|
||||
|
||||
--exit this function if is classic wow using DetailsFramework
|
||||
if (DetailsFramework.IsClassicWow()) then
|
||||
return
|
||||
end
|
||||
|
||||
if (not EncounterJournal_LoadUI) then
|
||||
return
|
||||
end
|
||||
|
||||
--todo generate encounter spells cache
|
||||
|
||||
--delay the cache createation as it is not needed right away
|
||||
--createEJCache() will check if encounter journal is loaded, if not it will load it and then create the cache
|
||||
local createEJCache = function()
|
||||
--[[hooksecurefunc("EncounterJournal_OpenJournalLink", Details222.EJCache.OnClickEncounterJournalLink)]]
|
||||
|
||||
---iterate among all raid instances, by passing true in the second argument of EJ_GetInstanceByIndex, indicates to the API we want to get raid instances
|
||||
---@type boolean
|
||||
local bGetRaidInstances = true
|
||||
|
||||
---returns the number of valid encounter journal tier indices
|
||||
---@type number
|
||||
local tierAmount = EJ_GetNumTiers()
|
||||
|
||||
---returns the currently active encounter journal tier index
|
||||
---@type number
|
||||
local currentTier = EJ_GetCurrentTier()
|
||||
|
||||
---increment this each expansion
|
||||
---@type number
|
||||
local currentTierId = 10 --maintenance | 10 is "Dragonflight"
|
||||
|
||||
---is the id of where it shows the mythic+ dungeons available for the season
|
||||
---can be found in the adventure guide in the dungeons tab > dropdown
|
||||
---@type number
|
||||
local currentMythicPlusTierId = 11 --maintenance | 11 is "Current Season"
|
||||
|
||||
---maximum amount of raid tiers in the expansion
|
||||
---@type number
|
||||
local maxAmountOfRaidTiers = 10
|
||||
|
||||
---maximum amount of dungeons in the expansion
|
||||
---@type number
|
||||
local maxAmountOfDungeons = 20
|
||||
|
||||
---the index of the first raid tier in the expansion, ignoring the first tier as it is open world bosses
|
||||
---@type number
|
||||
local raidTierStartIndex = 2
|
||||
|
||||
---max amount of bosses which a raid tier can have
|
||||
---@type number
|
||||
local maxRaidBosses = 20
|
||||
|
||||
do --get raid instances data
|
||||
--EncounterJournalRaidTab:Click()
|
||||
--EncounterJournal_TierDropDown_Select(_, 10) --select Dragonflight
|
||||
EJ_SelectTier(currentTierId)
|
||||
|
||||
for instanceIndex = maxAmountOfRaidTiers, raidTierStartIndex, -1 do
|
||||
local journalInstanceID, instanceName, description, bgImage, buttonImage1, loreImage, buttonImage2, dungeonAreaMapID = EJ_GetInstanceByIndex(instanceIndex, bGetRaidInstances)
|
||||
|
||||
if (journalInstanceID) then
|
||||
--tell the encounter journal to display the raid instance by the instanceId
|
||||
--EncounterJournal_DisplayInstance(journalInstanceID)
|
||||
EJ_SelectInstance(journalInstanceID)
|
||||
|
||||
--build a table with data of the raid instance
|
||||
local instanceData = {
|
||||
name = instanceName,
|
||||
mapId = dungeonAreaMapID,
|
||||
bgImage = bgImage,
|
||||
instanceId = journalInstanceID,
|
||||
|
||||
encountersArray = {},
|
||||
encountersByName = {},
|
||||
encountersByDungeonEncounterId = {},
|
||||
encountersByJournalEncounterId = {},
|
||||
|
||||
icon = buttonImage1,
|
||||
iconSize = {70, 36},
|
||||
iconCoords = {0.01, .67, 0.025, .725},
|
||||
|
||||
iconLore = loreImage,
|
||||
iconLoreSize = {70, 36},
|
||||
iconLoreCoords = {0, 1, 0, 0.95},
|
||||
|
||||
iconTexture = buttonImage2,
|
||||
iconTextureSize = {70, 36},
|
||||
iconTextureCoords = {0, 1, 0, 0.95},
|
||||
}
|
||||
|
||||
--cache the raidData on different tables using different indexes
|
||||
Details222.EJCache.CacheRaidData_ByInstanceId[journalInstanceID] = instanceData
|
||||
Details222.EJCache.CacheRaidData_ByInstanceName[instanceName] = instanceData
|
||||
Details222.EJCache.CacheRaidData_ByMapId[dungeonAreaMapID] = instanceData
|
||||
|
||||
for encounterIndex = 1, maxRaidBosses do
|
||||
local name, description, journalEncounterID, rootSectionID, link, journalInstanceID, dungeonEncounterID, UiMapID = EJ_GetEncounterInfoByIndex(encounterIndex, journalInstanceID)
|
||||
|
||||
if (name) then
|
||||
local encounterData = {
|
||||
name = name,
|
||||
mapId = dungeonAreaMapID,
|
||||
uiMapId = UiMapID,
|
||||
dungeonEncounterId = dungeonEncounterID,
|
||||
journalEncounterId = journalEncounterID,
|
||||
journalInstanceId = journalInstanceID,
|
||||
}
|
||||
|
||||
local journalEncounterCreatureId, creatureName, creatureDescription, creatureDisplayID, iconImage, uiModelSceneID = EJ_GetCreatureInfo(1, journalEncounterID)
|
||||
if (journalEncounterCreatureId) then
|
||||
encounterData.creatureName = creatureName
|
||||
encounterData.creatureIcon = iconImage
|
||||
encounterData.creatureId = journalEncounterCreatureId
|
||||
encounterData.creatureDisplayId = creatureDisplayID
|
||||
encounterData.creatureUIModelSceneId = uiModelSceneID
|
||||
end
|
||||
|
||||
instanceData.encountersArray[#instanceData.encountersArray+1] = encounterData
|
||||
instanceData.encountersByName[name] = encounterData
|
||||
instanceData.encountersByDungeonEncounterId[dungeonEncounterID] = encounterData
|
||||
instanceData.encountersByJournalEncounterId[journalEncounterID] = encounterData
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
do --get current expansion dungeon instances data and mythic+ data
|
||||
bGetRaidInstances = false
|
||||
|
||||
--get mythic+ dungeon data
|
||||
EJ_SelectTier(currentMythicPlusTierId)
|
||||
|
||||
for instanceIndex = maxAmountOfDungeons, 1, -1 do
|
||||
local journalInstanceID, instanceName, description, bgImage, buttonImage1, loreImage, buttonImage2, dungeonAreaMapID = EJ_GetInstanceByIndex(instanceIndex, bGetRaidInstances)
|
||||
if (journalInstanceID) then
|
||||
EJ_SelectInstance(journalInstanceID)
|
||||
|
||||
--build a table with data of the raid instance
|
||||
local instanceData = {
|
||||
name = instanceName,
|
||||
mapId = dungeonAreaMapID,
|
||||
bgImage = bgImage,
|
||||
instanceId = journalInstanceID,
|
||||
|
||||
encountersArray = {},
|
||||
encountersByName = {},
|
||||
encountersByDungeonEncounterId = {},
|
||||
encountersByJournalEncounterId = {},
|
||||
|
||||
icon = buttonImage1,
|
||||
iconSize = {70, 36},
|
||||
iconCoords = {0.01, .67, 0.025, .725},
|
||||
|
||||
iconLore = loreImage,
|
||||
iconLoreSize = {70, 36},
|
||||
iconLoreCoords = {0, 1, 0, 0.95},
|
||||
|
||||
iconTexture = buttonImage2,
|
||||
iconTextureSize = {70, 36},
|
||||
iconTextureCoords = {0, 1, 0, 0.95},
|
||||
}
|
||||
|
||||
--cache the raidData on different tables using different indexes
|
||||
Details222.EJCache.CacheDungeonData_ByInstanceId[journalInstanceID] = instanceData
|
||||
Details222.EJCache.CacheDungeonData_ByInstanceName[instanceName] = instanceData
|
||||
Details222.EJCache.CacheDungeonData_ByMapId[dungeonAreaMapID] = instanceData
|
||||
|
||||
--iterate among all encounters of the dungeon instance
|
||||
for encounterIndex = 1, 20 do
|
||||
local name, description, journalEncounterID, rootSectionID, link, journalInstanceID, dungeonEncounterID, UiMapID = _G.EJ_GetEncounterInfoByIndex(encounterIndex, journalInstanceID)
|
||||
|
||||
if (name) then
|
||||
local encounterData = {
|
||||
name = name,
|
||||
mapId = dungeonAreaMapID,
|
||||
uiMapId = UiMapID,
|
||||
dungeonEncounterId = dungeonEncounterID,
|
||||
journalEncounterId = journalEncounterID,
|
||||
journalInstanceId = journalInstanceID,
|
||||
}
|
||||
|
||||
local journalEncounterCreatureId, creatureName, creatureDescription, creatureDisplayID, iconImage, uiModelSceneID = EJ_GetCreatureInfo(1, journalEncounterID)
|
||||
if (journalEncounterCreatureId) then
|
||||
encounterData.creatureName = creatureName
|
||||
encounterData.creatureIcon = iconImage
|
||||
encounterData.creatureId = journalEncounterCreatureId
|
||||
encounterData.creatureDisplayId = creatureDisplayID
|
||||
encounterData.creatureUIModelSceneId = uiModelSceneID
|
||||
end
|
||||
|
||||
instanceData.encountersArray[#instanceData.encountersArray+1] = encounterData
|
||||
instanceData.encountersByName[name] = encounterData
|
||||
instanceData.encountersByDungeonEncounterId[dungeonEncounterID] = encounterData
|
||||
instanceData.encountersByJournalEncounterId[journalEncounterID] = encounterData
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--get current expansion dungeons data
|
||||
EJ_SelectTier(currentTierId)
|
||||
|
||||
for instanceIndex = 20, 1, -1 do
|
||||
local journalInstanceID, instanceName, description, bgImage, buttonImage1, loreImage, buttonImage2, dungeonAreaMapID = EJ_GetInstanceByIndex(instanceIndex, bGetRaidInstances)
|
||||
|
||||
if (journalInstanceID and not Details222.EJCache.CacheDungeonData_ByInstanceId[journalInstanceID]) then
|
||||
--tell the encounter journal to display the dungeon instance by the instanceId
|
||||
EJ_SelectInstance(journalInstanceID)
|
||||
|
||||
--build a table with data of the raid instance
|
||||
local instanceData = {
|
||||
name = instanceName,
|
||||
mapId = dungeonAreaMapID,
|
||||
bgImage = bgImage,
|
||||
instanceId = journalInstanceID,
|
||||
|
||||
encountersArray = {},
|
||||
encountersByName = {},
|
||||
encountersByDungeonEncounterId = {},
|
||||
encountersByJournalEncounterId = {},
|
||||
|
||||
icon = buttonImage1,
|
||||
iconSize = {70, 36},
|
||||
iconCoords = {0.01, .67, 0.025, .725},
|
||||
|
||||
iconLore = loreImage,
|
||||
iconLoreSize = {70, 36},
|
||||
iconLoreCoords = {0, 1, 0, 0.95},
|
||||
|
||||
iconTexture = buttonImage2,
|
||||
iconTextureSize = {70, 36},
|
||||
iconTextureCoords = {0, 1, 0, 0.95},
|
||||
}
|
||||
|
||||
--cache the raidData on different tables using different indexes
|
||||
Details222.EJCache.CacheDungeonData_ByInstanceId[journalInstanceID] = instanceData
|
||||
Details222.EJCache.CacheDungeonData_ByInstanceName[instanceName] = instanceData
|
||||
Details222.EJCache.CacheDungeonData_ByMapId[dungeonAreaMapID] = instanceData
|
||||
|
||||
--iterate among all encounters of the dungeon instance
|
||||
for encounterIndex = 1, 20 do
|
||||
local name, description, journalEncounterID, rootSectionID, link, journalInstanceID, dungeonEncounterID, UiMapID = _G.EJ_GetEncounterInfoByIndex(encounterIndex, journalInstanceID)
|
||||
if (name) then
|
||||
|
||||
local encounterData = {
|
||||
name = name,
|
||||
mapId = dungeonAreaMapID,
|
||||
uiMapId = UiMapID,
|
||||
dungeonEncounterId = dungeonEncounterID,
|
||||
journalEncounterId = journalEncounterID,
|
||||
journalInstanceId = journalInstanceID,
|
||||
}
|
||||
|
||||
local journalEncounterCreatureId, creatureName, creatureDescription, creatureDisplayID, iconImage, uiModelSceneID = EJ_GetCreatureInfo(1, journalEncounterID)
|
||||
if (journalEncounterCreatureId) then
|
||||
encounterData.creatureName = creatureName
|
||||
encounterData.creatureIcon = iconImage
|
||||
encounterData.creatureId = journalEncounterCreatureId
|
||||
encounterData.creatureDisplayId = creatureDisplayID
|
||||
encounterData.creatureUIModelSceneId = uiModelSceneID
|
||||
end
|
||||
|
||||
instanceData.encountersArray[#instanceData.encountersArray+1] = encounterData
|
||||
instanceData.encountersByName[name] = encounterData
|
||||
instanceData.encountersByDungeonEncounterId[dungeonEncounterID] = encounterData
|
||||
instanceData.encountersByJournalEncounterId[journalEncounterID] = encounterData
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--reset the dungeon journal to the default state
|
||||
C_Timer.After(0.5, function()
|
||||
if (EncounterJournal_ResetDisplay) then
|
||||
EncounterJournal_ResetDisplay(nil, "none")
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
--todo: should run one second after the player_login event or entering_world | 2023-12-05: already executing on the player_login event
|
||||
C_Timer.After(1, function()
|
||||
if (not EncounterJournal_LoadUI) then
|
||||
return
|
||||
end
|
||||
createEJCache()
|
||||
end)
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--core
|
||||
|
||||
|
||||
+461
-29
@@ -79,7 +79,6 @@ local addPlayerDamage = function(unitCleuName)
|
||||
if (segmentId ~= playerData.LastCombatID) then
|
||||
playerData.LastDamage = 0
|
||||
playerData.LastCombatID = segmentId
|
||||
|
||||
--mythicDungeonCharts:Debug("Combat changed for player", unitCleuName)
|
||||
end
|
||||
|
||||
@@ -245,9 +244,13 @@ function mythicDungeonCharts:OnEndMythicDungeon()
|
||||
|
||||
mythicDungeonCharts:Debug("Dungeon ended successfully, chart data capture stopped, scheduling to open the window.")
|
||||
|
||||
C_Timer.After(0.1, function()
|
||||
|
||||
end)
|
||||
|
||||
--the run is valid, schedule to open the chart window
|
||||
Details.mythic_plus.delay_to_show_graphic = 5
|
||||
C_Timer.After(Details.mythic_plus.delay_to_show_graphic or 5, mythicDungeonCharts.ShowReadyPanel)
|
||||
Details.mythic_plus.delay_to_show_graphic = 1
|
||||
C_Timer.After(Details.mythic_plus.delay_to_show_graphic, mythicDungeonCharts.ShowReadyPanel)
|
||||
|
||||
if (verbosemode) then
|
||||
mythicDungeonCharts:Debug("OnEndMythicDungeon() success!")
|
||||
@@ -264,20 +267,220 @@ mythicDungeonCharts:RegisterEvent("COMBAT_MYTHICDUNGEON_START", "OnStartMythicDu
|
||||
mythicDungeonCharts:RegisterEvent("COMBAT_MYTHICDUNGEON_END", "OnEndMythicDungeon")
|
||||
mythicDungeonCharts:RegisterEvent("COMBAT_BOSS_DEFEATED", "OnBossDefeated")
|
||||
|
||||
local createPlayerBanner = function(parent, name)
|
||||
local template = "ChallengeModeBannerPartyMemberTemplate"
|
||||
local playerFrame = CreateFrame("frame", name, parent, template)
|
||||
playerFrame:SetAlpha(1)
|
||||
playerFrame:EnableMouse(true)
|
||||
playerFrame:SetFrameLevel(parent:GetFrameLevel()+2)
|
||||
|
||||
local playerNameFontString = playerFrame:CreateFontString("$parentPlayerNameText", "overlay", "GameFontNormal")
|
||||
playerNameFontString:SetTextColor(1, 1, 1)
|
||||
playerNameFontString:SetPoint("top", playerFrame, "bottom", -1, -7)
|
||||
DetailsFramework:SetFontSize(playerNameFontString, 12)
|
||||
playerFrame.PlayerNameFontString = playerNameFontString
|
||||
|
||||
local playerNameBackgroundTexture = playerFrame:CreateTexture("$parentPlayerNameBackgroundTexture", "overlay", nil, 6)
|
||||
playerNameBackgroundTexture:SetTexture([[Interface\Cooldown\LoC-ShadowBG]])
|
||||
playerNameBackgroundTexture:SetSize(60, 12)
|
||||
playerNameBackgroundTexture:SetPoint("center", playerNameFontString, "center", 0, 0)
|
||||
|
||||
local backgroundBannerTexture = playerFrame:CreateTexture("$parentBannerTexture", "background", nil, 0)
|
||||
backgroundBannerTexture:SetTexture([[Interface\ACHIEVEMENTFRAME\GuildTabard]])
|
||||
backgroundBannerTexture:SetDrawLayer("background", 0)
|
||||
backgroundBannerTexture:SetSize(63, 129)
|
||||
backgroundBannerTexture:SetTexCoord(5/128, 68/128, 123/256, 252/256)
|
||||
backgroundBannerTexture:SetPoint("topleft", playerFrame, "bottomleft", -5, playerFrame:GetHeight()/2)
|
||||
backgroundBannerTexture:SetPoint("topright", playerFrame, "bottomright", 4, playerFrame:GetHeight()/2)
|
||||
backgroundBannerTexture:SetVertexColor(.1, .1, .1)
|
||||
playerFrame.BackgroundBannerTexture = backgroundBannerTexture
|
||||
|
||||
local backgroundBannerBorderTexture = playerFrame:CreateTexture("$parentBannerBorderTexture", "highlight", nil, -1)
|
||||
backgroundBannerBorderTexture:SetAtlas("UI-Achievement-Guild-Flag-Outline")
|
||||
backgroundBannerBorderTexture:SetSize(63, 129)
|
||||
backgroundBannerBorderTexture:SetPoint("topleft", playerFrame, "bottomleft", -5, playerFrame:GetHeight()/2)
|
||||
backgroundBannerBorderTexture:SetPoint("topright", playerFrame, "bottomright", 4, playerFrame:GetHeight()/2)
|
||||
|
||||
local dungeonTexture = playerFrame:CreateTexture("$parentDungeonTexture", "artwork")
|
||||
dungeonTexture:SetTexCoord(25/512, 360/512, 50/512, 290/512)
|
||||
dungeonTexture:SetSize(50, 39)
|
||||
dungeonTexture:SetPoint("top", playerFrame,"bottom", 0, -16)
|
||||
dungeonTexture:SetAlpha(0.9934)
|
||||
playerFrame.DungeonTexture = dungeonTexture
|
||||
|
||||
local dungeonBorderTexture = playerFrame:CreateTexture("$parentDungeonBorder", "border")
|
||||
dungeonBorderTexture:SetTexture([[Interface\BUTTONS\UI-EmptySlot]])
|
||||
dungeonBorderTexture:SetDrawLayer("border", 0)
|
||||
dungeonBorderTexture:ClearAllPoints()
|
||||
dungeonBorderTexture:SetPoint("topleft", dungeonTexture,"topleft", -17, 15)
|
||||
dungeonBorderTexture:SetPoint("bottomright", dungeonTexture,"bottomright", 18, -15)
|
||||
dungeonBorderTexture:SetAlpha(1)
|
||||
playerFrame.DungeonBorderTexture = dungeonBorderTexture
|
||||
|
||||
local levelFontString = playerFrame:CreateFontString("$parentLVLText", "artwork", "GameFontNormal")
|
||||
levelFontString:SetTextColor(1, 1, 1)
|
||||
levelFontString:SetPoint("top", dungeonTexture, "bottom", -1, -7)
|
||||
DetailsFramework:SetFontSize(levelFontString, 20)
|
||||
playerFrame.LevelFontString = levelFontString
|
||||
|
||||
local lootSquare = CreateFrame("frame", name, parent)
|
||||
lootSquare:SetSize(46, 46)
|
||||
lootSquare:SetPoint("top", playerFrame, "bottom", 0, -90)
|
||||
lootSquare:SetFrameLevel(parent:GetFrameLevel()+1)
|
||||
playerFrame.LootSquare = lootSquare
|
||||
lootSquare:Hide()
|
||||
|
||||
lootSquare:SetScript("OnEnter", function(self)
|
||||
if (self.itemLink) then
|
||||
GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
|
||||
GameTooltip:SetHyperlink(lootSquare.itemLink)
|
||||
GameTooltip:Show()
|
||||
end
|
||||
end)
|
||||
|
||||
lootSquare:SetScript("OnLeave", function(self)
|
||||
GameTooltip:Hide()
|
||||
end)
|
||||
|
||||
local lootIcon = lootSquare:CreateTexture("$parentLootIcon", "artwork")
|
||||
lootIcon:SetSize(46, 46)
|
||||
lootIcon:SetPoint("center", lootSquare, "center", 0, 0)
|
||||
lootIcon:SetTexture([[Interface\ICONS\INV_Misc_QuestionMark]])
|
||||
lootSquare.LootIcon = lootIcon
|
||||
|
||||
local lootIconBorder = lootSquare:CreateTexture("$parentLootSquareBorder", "overlay")
|
||||
lootIconBorder:SetTexture([[Interface\COMMON\WhiteIconFrame]])
|
||||
lootIconBorder:SetTexCoord(0, 1, 0, 1)
|
||||
lootIconBorder:SetSize(46, 46)
|
||||
lootIconBorder:SetPoint("center", lootIcon, "center", 0, 0)
|
||||
lootSquare.LootIconBorder = lootIconBorder
|
||||
|
||||
local lootItemLevel = lootSquare:CreateFontString("$parentLootItemLevel", "overlay", "GameFontNormal")
|
||||
lootItemLevel:SetPoint("top", lootSquare, "bottom", 0, -2)
|
||||
lootItemLevel:SetTextColor(1, 1, 1)
|
||||
DetailsFramework:SetFontSize(lootItemLevel, 12)
|
||||
lootSquare.LootItemLevel = lootItemLevel
|
||||
|
||||
return playerFrame
|
||||
end
|
||||
|
||||
-- /run _G.DetailsMythicDungeonChartHandler.ShowChart(); DetailsMythicDungeonChartFrame.ShowChartFrame()
|
||||
-- /run _G.DetailsMythicDungeonChartHandler.ShowReadyPanel()
|
||||
|
||||
--show a small panel telling the chart is ready to show
|
||||
function mythicDungeonCharts.ShowReadyPanel()
|
||||
function mythicDungeonCharts.ShowReadyPanel(bIsDebug)
|
||||
--check if is enabled
|
||||
if (not Details.mythic_plus.show_damage_graphic) then
|
||||
return
|
||||
end
|
||||
|
||||
if (bIsDebug) then
|
||||
Details222.MythicPlus.Level = Details222.MythicPlus.Level or 2
|
||||
end
|
||||
|
||||
if (Details222.MythicPlus.Level < 28 and UnitGUID("player") ~= "Player-3209-0B98EC46") then
|
||||
--create the panel
|
||||
if (not mythicDungeonCharts.ReadyFrame) then
|
||||
mythicDungeonCharts.ReadyFrame = CreateFrame("frame", "DetailsMythicDungeonReadyFrame", UIParent, "BackdropTemplate")
|
||||
local readyFrame = mythicDungeonCharts.ReadyFrame
|
||||
|
||||
local textColor = {1, 0.8196, 0, 1}
|
||||
local textSize = 11
|
||||
|
||||
local roundedCornerTemplate = {
|
||||
roundness = 6,
|
||||
color = {.1, .1, .1, 0.98},
|
||||
border_color = {.05, .05, .05, 0.834},
|
||||
}
|
||||
|
||||
detailsFramework:AddRoundedCornersToFrame(readyFrame, roundedCornerTemplate)
|
||||
|
||||
local titleLabel = DetailsFramework:CreateLabel(readyFrame, "Details! Mythic Run Completed!", 12, "yellow")
|
||||
titleLabel:SetPoint("top", readyFrame, "top", 0, -7)
|
||||
titleLabel.textcolor = textColor
|
||||
|
||||
local closeButton = detailsFramework:CreateCloseButton(readyFrame, "$parentCloseButton")
|
||||
closeButton:SetPoint("topright", readyFrame, "topright", -2, -2)
|
||||
closeButton:SetScale(1.4)
|
||||
closeButton:SetAlpha(0.823)
|
||||
|
||||
readyFrame:SetSize(255, 120)
|
||||
readyFrame:SetPoint("center", UIParent, "center", 300, 0)
|
||||
readyFrame:SetFrameStrata("LOW")
|
||||
readyFrame:EnableMouse(true)
|
||||
readyFrame:SetMovable(true)
|
||||
--DetailsFramework:ApplyStandardBackdrop(readyFrame)
|
||||
--DetailsFramework:CreateTitleBar (readyFrame, "Details! Mythic Run Completed!")
|
||||
|
||||
readyFrame:Hide()
|
||||
|
||||
--register to libwindow
|
||||
local LibWindow = LibStub("LibWindow-1.1")
|
||||
LibWindow.RegisterConfig(readyFrame, Details.mythic_plus.mythicrun_chart_frame_ready)
|
||||
LibWindow.RestorePosition(readyFrame)
|
||||
LibWindow.MakeDraggable(readyFrame)
|
||||
LibWindow.SavePosition(readyFrame)
|
||||
|
||||
--show button
|
||||
---@type df_button
|
||||
readyFrame.ShowButton = DetailsFramework:CreateButton(readyFrame, function() mythicDungeonCharts.ShowChart(); readyFrame:Hide() end, 80, 20, "Show Damage Graphic")
|
||||
readyFrame.ShowButton:SetTemplate(DetailsFramework:GetTemplate("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE"))
|
||||
readyFrame.ShowButton:SetPoint("topleft", readyFrame, "topleft", 5, -30)
|
||||
readyFrame.ShowButton:SetIcon([[Interface\AddOns\Details\images\icons2.png]], 16, 16, "overlay", {42/512, 75/512, 153/512, 187/512}, {.7, .7, .7, 1}, nil, 0, 0)
|
||||
readyFrame.ShowButton.textcolor = textColor
|
||||
|
||||
--discart button
|
||||
--readyFrame.DiscartButton = DetailsFramework:CreateButton(readyFrame, function() readyFrame:Hide() end, 80, 20, Loc ["STRING_DISCARD"])
|
||||
--readyFrame.DiscartButton:SetTemplate(DetailsFramework:GetTemplate("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE"))
|
||||
--readyFrame.DiscartButton:SetPoint("right", readyFrame.ShowButton, "left", -5, 0)
|
||||
|
||||
--disable feature check box (dont show this again)
|
||||
local on_switch_enable = function(self, _, value)
|
||||
Details.mythic_plus.show_damage_graphic = not value
|
||||
end
|
||||
|
||||
local notAgainSwitch, notAgainLabel = DetailsFramework:CreateSwitch(readyFrame, on_switch_enable, not Details.mythic_plus.show_damage_graphic, _, _, _, _, _, _, _, _, _, Loc ["STRING_MINITUTORIAL_BOOKMARK4"], DetailsFramework:GetTemplate("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"), "GameFontHighlightLeft")
|
||||
notAgainSwitch:ClearAllPoints()
|
||||
notAgainLabel:SetPoint("left", notAgainSwitch, "right", 2, 0)
|
||||
notAgainSwitch:SetPoint("bottomleft", readyFrame, "bottomleft", 5, 5)
|
||||
notAgainSwitch:SetAsCheckBox()
|
||||
notAgainLabel.textSize = textSize
|
||||
|
||||
local timeNotInCombatLabel = DetailsFramework:CreateLabel(readyFrame, "Time not in combat:", textSize, "orangered")
|
||||
timeNotInCombatLabel:SetPoint("bottomleft", notAgainSwitch, "topleft", 0, 7)
|
||||
local timeNotInCombatAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, "orangered")
|
||||
timeNotInCombatAmount:SetPoint("left", timeNotInCombatLabel, "left", 130, 0)
|
||||
|
||||
local elapsedTimeLabel = DetailsFramework:CreateLabel(readyFrame, "Run Time:", textSize, textColor)
|
||||
elapsedTimeLabel:SetPoint("bottomleft", timeNotInCombatLabel, "topleft", 0, 5)
|
||||
local elapsedTimeAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, textColor)
|
||||
elapsedTimeAmount:SetPoint("left", elapsedTimeLabel, "left", 130, 0)
|
||||
|
||||
readyFrame.TimeNotInCombatAmountLabel = timeNotInCombatAmount
|
||||
readyFrame.ElapsedTimeAmountLabel = elapsedTimeAmount
|
||||
end
|
||||
|
||||
mythicDungeonCharts.ReadyFrame:Show()
|
||||
|
||||
--update the run time and time not in combat
|
||||
local elapsedTime = Details222.MythicPlus.time or 1507
|
||||
mythicDungeonCharts.ReadyFrame.ElapsedTimeAmountLabel.text = DetailsFramework:IntegerToTimer(elapsedTime)
|
||||
|
||||
local overallMythicDungeonCombat = Details:GetCurrentCombat()
|
||||
if (overallMythicDungeonCombat:GetCombatType() == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_OVERALL) then
|
||||
local combatTime = overallMythicDungeonCombat:GetCombatTime()
|
||||
local notInCombat = elapsedTime - combatTime
|
||||
mythicDungeonCharts.ReadyFrame.TimeNotInCombatAmountLabel.text = DetailsFramework:IntegerToTimer(notInCombat) .. " (" .. math.floor(notInCombat / elapsedTime * 100) .. "%)"
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
--create the panel
|
||||
if (not mythicDungeonCharts.ReadyFrame) then
|
||||
mythicDungeonCharts.ReadyFrame = CreateFrame("frame", "DetailsMythicDungeonReadyFrame", UIParent, "BackdropTemplate")
|
||||
local readyFrame = mythicDungeonCharts.ReadyFrame
|
||||
readyFrame.playerCacheByName = {}
|
||||
|
||||
local textColor = {1, 0.8196, 0, 1}
|
||||
local textSize = 11
|
||||
@@ -299,14 +502,11 @@ function mythicDungeonCharts.ShowReadyPanel()
|
||||
closeButton:SetScale(1.4)
|
||||
closeButton:SetAlpha(0.823)
|
||||
|
||||
readyFrame:SetSize(255, 120)
|
||||
readyFrame:SetSize(355, 390)
|
||||
readyFrame:SetPoint("center", UIParent, "center", 300, 0)
|
||||
readyFrame:SetFrameStrata("LOW")
|
||||
readyFrame:EnableMouse(true)
|
||||
readyFrame:SetMovable(true)
|
||||
--DetailsFramework:ApplyStandardBackdrop(readyFrame)
|
||||
--DetailsFramework:CreateTitleBar (readyFrame, "Details! Mythic Run Completed!")
|
||||
|
||||
readyFrame:Hide()
|
||||
|
||||
--register to libwindow
|
||||
@@ -316,6 +516,10 @@ function mythicDungeonCharts.ShowReadyPanel()
|
||||
LibWindow.MakeDraggable(readyFrame)
|
||||
LibWindow.SavePosition(readyFrame)
|
||||
|
||||
--warning footer
|
||||
local warningFooter = DetailsFramework:CreateLabel(readyFrame, "You are seeing this because it's a 28 or above. Under development.", 9, "yellow")
|
||||
warningFooter:SetPoint("bottom", readyFrame, "bottom", 0, 20)
|
||||
|
||||
--show button
|
||||
---@type df_button
|
||||
readyFrame.ShowButton = DetailsFramework:CreateButton(readyFrame, function() mythicDungeonCharts.ShowChart(); readyFrame:Hide() end, 80, 20, "Show Damage Graphic")
|
||||
@@ -324,53 +528,281 @@ function mythicDungeonCharts.ShowReadyPanel()
|
||||
readyFrame.ShowButton:SetIcon([[Interface\AddOns\Details\images\icons2.png]], 16, 16, "overlay", {42/512, 75/512, 153/512, 187/512}, {.7, .7, .7, 1}, nil, 0, 0)
|
||||
readyFrame.ShowButton.textcolor = textColor
|
||||
|
||||
--discart button
|
||||
--readyFrame.DiscartButton = DetailsFramework:CreateButton(readyFrame, function() readyFrame:Hide() end, 80, 20, Loc ["STRING_DISCARD"])
|
||||
--readyFrame.DiscartButton:SetTemplate(DetailsFramework:GetTemplate("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE"))
|
||||
--readyFrame.DiscartButton:SetPoint("right", readyFrame.ShowButton, "left", -5, 0)
|
||||
|
||||
--disable feature check box (dont show this again)
|
||||
local on_switch_enable = function(self, _, value)
|
||||
Details.mythic_plus.show_damage_graphic = not value
|
||||
end
|
||||
|
||||
local elapsedTimeLabel = DetailsFramework:CreateLabel(readyFrame, "Run Time:", textSize, textColor)
|
||||
elapsedTimeLabel:SetPoint("topleft", readyFrame.ShowButton, "bottomleft", 0, -8)
|
||||
local elapsedTimeAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, textColor)
|
||||
elapsedTimeAmount:SetPoint("left", elapsedTimeLabel, "left", 130, 0)
|
||||
|
||||
local timeNotInCombatLabel = DetailsFramework:CreateLabel(readyFrame, "Time not in combat:", textSize, "orangered")
|
||||
timeNotInCombatLabel:SetPoint("topleft", elapsedTimeLabel, "bottomleft", 0, -5)
|
||||
local timeNotInCombatAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, "orangered")
|
||||
timeNotInCombatAmount:SetPoint("left", timeNotInCombatLabel, "left", 130, 0)
|
||||
|
||||
local youBeatTheTimerLabel = DetailsFramework:CreateLabel(readyFrame, "", textSize, "white")
|
||||
youBeatTheTimerLabel:SetPoint("topleft", timeNotInCombatLabel, "bottomleft", 0, -5)
|
||||
|
||||
--local keystoneUpgradeLabel = DetailsFramework:CreateLabel(readyFrame, "Keystone Upgrade:", textSize, "white")
|
||||
--keystoneUpgradeLabel:SetPoint("topleft", youBeatTheTimerLabel, "bottomleft", 0, -5)
|
||||
|
||||
local rantingLabel = DetailsFramework:CreateLabel(readyFrame, "", textSize, textColor)
|
||||
--rantingLabel:SetPoint("topleft", keystoneUpgradeLabel, "bottomleft", 0, -5)
|
||||
rantingLabel:SetPoint("topleft", youBeatTheTimerLabel, "bottomleft", 0, -5)
|
||||
|
||||
readyFrame.PlayerBanners = {}
|
||||
for i = 1, 5 do
|
||||
local playerBanner = createPlayerBanner(readyFrame, "$parentPlayerBanner" .. i)
|
||||
readyFrame.PlayerBanners[#readyFrame.PlayerBanners+1] = playerBanner
|
||||
if (i == 1) then
|
||||
playerBanner:SetPoint("topleft", rantingLabel.widget, "bottomleft", 0, -22)
|
||||
else
|
||||
playerBanner:SetPoint("topleft", readyFrame.PlayerBanners[i-1], "topright", 10, 0)
|
||||
end
|
||||
end
|
||||
|
||||
--frame to handle loot events
|
||||
local lootFrame = CreateFrame("frame", "$parentLootFrame", readyFrame)
|
||||
lootFrame:RegisterEvent("BOSS_KILL");
|
||||
lootFrame:RegisterEvent("ENCOUNTER_LOOT_RECEIVED")
|
||||
|
||||
local bossKillEncounterId
|
||||
|
||||
lootFrame:SetScript("OnEvent", function(self, event, ...)
|
||||
if (event == "BOSS_KILL") then
|
||||
local encounterID, name = ...;
|
||||
bossKillEncounterId = encounterID
|
||||
--print("BOSS_KILL", GetTime(), bossKillEncounterId)
|
||||
|
||||
elseif (event == "ENCOUNTER_LOOT_RECEIVED") then
|
||||
local lootEncounterId, itemID, itemLink, quantity, playerName, className = ...
|
||||
--print("ENCOUNTER_LOOT_RECEIVED", GetTime(), lootEncounterId, bossKillEncounterId)
|
||||
|
||||
--print("no ambig:", playerName, "with ambig:", Ambiguate(playerName, "none")) --debug
|
||||
playerName = Ambiguate(playerName, "none")
|
||||
local unitBanner = readyFrame.playerCacheByName[playerName]
|
||||
|
||||
if (not unitBanner) then
|
||||
--print("no unitBanner for player", playerName, "aborting.")
|
||||
return
|
||||
end
|
||||
|
||||
local _, instanceType = GetInstanceInfo()
|
||||
--print("Is encounter the same:", lootEncounterId == bossKillEncounterId)
|
||||
if (instanceType == "party") then -- or instanceType == "raid" --lootEncounterId == bossKillEncounterId and
|
||||
--print("all good showing loot for player", playerName)
|
||||
local lootSquare = unitBanner.LootSquare
|
||||
lootSquare.itemLink = itemLink
|
||||
|
||||
local effectiveILvl = GetDetailedItemLevelInfo(itemLink)
|
||||
|
||||
local itemName, itemLink, itemQuality, itemLevel, itemMinLevel, itemType, itemSubType,
|
||||
itemStackCount, itemEquipLoc, itemTexture, sellPrice, classID, subclassID, bindType,
|
||||
expacID, setID, isCraftingReagent = GetItemInfo(itemLink)
|
||||
|
||||
local rarityColor = ITEM_QUALITY_COLORS[itemQuality]
|
||||
lootSquare.LootIconBorder:SetVertexColor(rarityColor.r, rarityColor.g, rarityColor.b, 1)
|
||||
|
||||
lootSquare.LootIcon:SetTexture(GetItemIcon(itemID))
|
||||
lootSquare.LootItemLevel:SetText(effectiveILvl or "0")
|
||||
|
||||
--print("loot info:", itemLink, effectiveILvl, itemQuality)
|
||||
lootSquare:Show()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
--[=[
|
||||
Details222.MythicPlus.MapID = mapID
|
||||
Details222.MythicPlus.Level = level --level of the key just finished
|
||||
Details222.MythicPlus.OnTime = onTime
|
||||
Details222.MythicPlus.KeystoneUpgradeLevels = keystoneUpgradeLevels
|
||||
Details222.MythicPlus.PracticeRun = practiceRun
|
||||
Details222.MythicPlus.OldDungeonScore = oldDungeonScore
|
||||
Details222.MythicPlus.NewDungeonScore = newDungeonScore
|
||||
Details222.MythicPlus.IsAffixRecord = isAffixRecord
|
||||
Details222.MythicPlus.IsMapRecord = isMapRecord
|
||||
Details222.MythicPlus.PrimaryAffix = primaryAffix
|
||||
Details222.MythicPlus.IsEligibleForScore = isEligibleForScore
|
||||
Details222.MythicPlus.UpgradeMembers = upgradeMembers
|
||||
Details222.MythicPlus.DungeonName = dungeonName
|
||||
Details222.MythicPlus.DungeonID = id
|
||||
Details222.MythicPlus.TimeLimit = timeLimit
|
||||
Details222.MythicPlus.Texture = texture
|
||||
Details222.MythicPlus.BackgroundTexture = backgroundTexture
|
||||
--]=]
|
||||
|
||||
local notAgainSwitch, notAgainLabel = DetailsFramework:CreateSwitch(readyFrame, on_switch_enable, not Details.mythic_plus.show_damage_graphic, _, _, _, _, _, _, _, _, _, Loc ["STRING_MINITUTORIAL_BOOKMARK4"], DetailsFramework:GetTemplate("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"), "GameFontHighlightLeft")
|
||||
notAgainSwitch:ClearAllPoints()
|
||||
notAgainLabel:SetPoint("left", notAgainSwitch, "right", 2, 0)
|
||||
notAgainSwitch:SetPoint("bottomleft", readyFrame, "bottomleft", 5, 5)
|
||||
notAgainSwitch:SetAsCheckBox()
|
||||
notAgainLabel.textSize = textSize
|
||||
|
||||
|
||||
|
||||
local timeNotInCombatLabel = DetailsFramework:CreateLabel(readyFrame, "Time not in combat:", textSize, "orangered")
|
||||
timeNotInCombatLabel:SetPoint("bottomleft", notAgainSwitch, "topleft", 0, 7)
|
||||
local timeNotInCombatAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, "orangered")
|
||||
timeNotInCombatAmount:SetPoint("left", timeNotInCombatLabel, "left", 130, 0)
|
||||
|
||||
local elapsedTimeLabel = DetailsFramework:CreateLabel(readyFrame, "Run Time:", textSize, textColor)
|
||||
elapsedTimeLabel:SetPoint("bottomleft", timeNotInCombatLabel, "topleft", 0, 5)
|
||||
local elapsedTimeAmount = DetailsFramework:CreateLabel(readyFrame, "00:00", textSize, textColor)
|
||||
elapsedTimeAmount:SetPoint("left", elapsedTimeLabel, "left", 130, 0)
|
||||
notAgainSwitch:SetSize(12, 12)
|
||||
notAgainLabel.textsize = 9
|
||||
|
||||
readyFrame.TimeNotInCombatAmountLabel = timeNotInCombatAmount
|
||||
readyFrame.ElapsedTimeAmountLabel = elapsedTimeAmount
|
||||
readyFrame.YouBeatTheTimerLabel = youBeatTheTimerLabel
|
||||
readyFrame.KeystoneUpgradeLabel = keystoneUpgradeLabel
|
||||
readyFrame.RantingLabel = rantingLabel
|
||||
end
|
||||
|
||||
mythicDungeonCharts.ReadyFrame:Show()
|
||||
local readyFrame = mythicDungeonCharts.ReadyFrame
|
||||
readyFrame:Show()
|
||||
|
||||
for i = 1, #readyFrame.PlayerBanners do
|
||||
--hide the lootSquare
|
||||
readyFrame.PlayerBanners[i].LootSquare:Hide()
|
||||
end
|
||||
|
||||
wipe(readyFrame.playerCacheByName)
|
||||
|
||||
--update the run time and time not in combat
|
||||
local elapsedTime = Details222.MythicPlus.time or 1507
|
||||
mythicDungeonCharts.ReadyFrame.ElapsedTimeAmountLabel.text = DetailsFramework:IntegerToTimer(elapsedTime)
|
||||
readyFrame.ElapsedTimeAmountLabel.text = DetailsFramework:IntegerToTimer(elapsedTime)
|
||||
|
||||
local overallMythicDungeonCombat = Details:GetCurrentCombat()
|
||||
if (overallMythicDungeonCombat:GetCombatType() == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_OVERALL) then
|
||||
local combatTime = overallMythicDungeonCombat:GetCombatTime()
|
||||
local notInCombat = elapsedTime - combatTime
|
||||
mythicDungeonCharts.ReadyFrame.TimeNotInCombatAmountLabel.text = DetailsFramework:IntegerToTimer(notInCombat) .. " (" .. math.floor(notInCombat / elapsedTime * 100) .. "%)"
|
||||
readyFrame.TimeNotInCombatAmountLabel.text = DetailsFramework:IntegerToTimer(notInCombat) .. " (" .. math.floor(notInCombat / elapsedTime * 100) .. "%)"
|
||||
end
|
||||
|
||||
if (Details222.MythicPlus.OnTime) then
|
||||
readyFrame.YouBeatTheTimerLabel:SetFormattedText(CHALLENGE_MODE_COMPLETE_BEAT_TIMER .. " | " .. CHALLENGE_MODE_COMPLETE_KEYSTONE_UPGRADED, Details222.MythicPlus.KeystoneUpgradeLevels) --"You beat the timer!"
|
||||
readyFrame.YouBeatTheTimerLabel.textcolor = "limegreen"
|
||||
--readyFrame.KeystoneUpgradeLabel:SetFormattedText(CHALLENGE_MODE_COMPLETE_KEYSTONE_UPGRADED, Details222.MythicPlus.KeystoneUpgradeLevels)
|
||||
else
|
||||
readyFrame.YouBeatTheTimerLabel.textcolor = "white"
|
||||
readyFrame.YouBeatTheTimerLabel.text = CHALLENGE_MODE_COMPLETE_TIME_EXPIRED --"Time expired!"
|
||||
--readyFrame.KeystoneUpgradeLabel.text = CHALLENGE_MODE_COMPLETE_TRY_AGAIN --"Try again! Beat the timer to upgrade your keystone!"
|
||||
end
|
||||
|
||||
if (Details222.MythicPlus.NewDungeonScore and Details222.MythicPlus.OldDungeonScore) then
|
||||
local gainedScore = Details222.MythicPlus.NewDungeonScore - Details222.MythicPlus.OldDungeonScore
|
||||
local color = C_ChallengeMode.GetDungeonScoreRarityColor(Details222.MythicPlus.NewDungeonScore)
|
||||
if (not color) then
|
||||
color = HIGHLIGHT_FONT_COLOR
|
||||
end
|
||||
readyFrame.RantingLabel.text = CHALLENGE_COMPLETE_DUNGEON_SCORE:format(color:WrapTextInColorCode(CHALLENGE_COMPLETE_DUNGEON_SCORE_FORMAT_TEXT:format(Details222.MythicPlus.NewDungeonScore, gainedScore)))
|
||||
readyFrame.RantingLabel.textcolor = "limegreen"
|
||||
else
|
||||
readyFrame.RantingLabel.text = ""
|
||||
end
|
||||
|
||||
for i = 1, #readyFrame.PlayerBanners do
|
||||
readyFrame.PlayerBanners[i]:Hide()
|
||||
end
|
||||
|
||||
local playerName = UnitName("player")
|
||||
local libOpenRaid = LibStub("LibOpenRaid-1.0", true)
|
||||
local bCreateIfNotFound = true
|
||||
local playerKeystoneInfo = libOpenRaid.KeystoneInfoManager.GetKeystoneInfo(playerName, bCreateIfNotFound)
|
||||
|
||||
---@type details_instanceinfo
|
||||
local instanceInfo = Details:GetInstanceInfo(playerKeystoneInfo.mapID)
|
||||
|
||||
local playerBanner = readyFrame.PlayerBanners[1]
|
||||
readyFrame.playerCacheByName[Ambiguate(playerName, "none")] = playerBanner
|
||||
playerBanner:Show()
|
||||
|
||||
SetPortraitTexture(playerBanner.Portrait, "player")
|
||||
|
||||
playerBanner.PlayerNameFontString:SetText(playerName)
|
||||
|
||||
local role = UnitGroupRolesAssigned("player")
|
||||
if (role == "TANK" or role == "HEALER" or role == "DAMAGER") then
|
||||
playerBanner.RoleIcon:SetAtlas(GetMicroIconForRole(role), TextureKitConstants.IgnoreAtlasSize)
|
||||
playerBanner.RoleIcon:Show()
|
||||
end
|
||||
|
||||
playerBanner.LevelFontString:SetText(playerKeystoneInfo.level or "")
|
||||
|
||||
if (instanceInfo) then
|
||||
playerBanner.DungeonTexture:SetTexture(instanceInfo.iconLore)
|
||||
else
|
||||
playerBanner.DungeonTexture:SetTexture([[Interface\ICONS\INV_Misc_QuestionMark]])
|
||||
end
|
||||
|
||||
local updateKeysStoneLevel = function()
|
||||
for i = 1, #readyFrame.PlayerBanners do
|
||||
local unitId = i == 1 and "player" or "party"..i
|
||||
if (UnitExists(unitId)) then
|
||||
local unitKeystoneInfo = libOpenRaid.KeystoneInfoManager.GetKeystoneInfo(Details:GetFullName(unitId))
|
||||
local unitBanner = readyFrame.PlayerBanners[i]
|
||||
if (unitKeystoneInfo) then
|
||||
if (instanceInfo) then
|
||||
---@type details_instanceinfo
|
||||
local thisInstanceInfo = Details:GetInstanceInfo(unitKeystoneInfo.mapID)
|
||||
unitBanner.DungeonTexture:SetTexture(thisInstanceInfo.iconLore)
|
||||
end
|
||||
unitBanner.LevelFontString:SetText(unitKeystoneInfo.level)
|
||||
print("keystone level updated for", Details:GetFullName(unitId), unitKeystoneInfo.level)
|
||||
else
|
||||
unitBanner.DungeonTexture:SetTexture([[Interface\ICONS\INV_Misc_QuestionMark]])
|
||||
unitBanner.LevelFontString:SetText("")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local playersFound = 1
|
||||
for i = 2, #readyFrame.PlayerBanners do
|
||||
local unitId = "party" .. (i-1)
|
||||
if (UnitExists(unitId)) then
|
||||
local unitName = Details:GetFullName(unitId)
|
||||
local unitBanner = readyFrame.PlayerBanners[i]
|
||||
unitBanner:Show()
|
||||
|
||||
SetPortraitTexture(unitBanner.Portrait, unitId)
|
||||
unitBanner.PlayerNameFontString:SetText(DetailsFramework:RemoveRealmName(unitName))
|
||||
readyFrame.playerCacheByName[Ambiguate(unitName, "none")] = unitBanner
|
||||
|
||||
local role = UnitGroupRolesAssigned(unitId)
|
||||
if (role == "TANK" or role == "HEALER" or role == "DAMAGER") then
|
||||
unitBanner.RoleIcon:SetAtlas(GetMicroIconForRole(role), TextureKitConstants.IgnoreAtlasSize)
|
||||
unitBanner.RoleIcon:Show()
|
||||
else
|
||||
unitBanner.RoleIcon:Hide()
|
||||
end
|
||||
|
||||
unitBanner:SetAlpha(0)
|
||||
unitBanner:Show()
|
||||
unitBanner.AnimIn:Play()
|
||||
|
||||
local unitKeystoneInfo = libOpenRaid.KeystoneInfoManager.GetKeystoneInfo(Details:GetFullName(unitId))
|
||||
if (unitKeystoneInfo) then
|
||||
if (instanceInfo) then
|
||||
---@type details_instanceinfo
|
||||
local thisInstanceInfo = Details:GetInstanceInfo(unitKeystoneInfo.mapID)
|
||||
unitBanner.DungeonTexture:SetTexture(thisInstanceInfo.iconLore)
|
||||
end
|
||||
unitBanner.LevelFontString:SetText(unitKeystoneInfo.level)
|
||||
else
|
||||
unitBanner.DungeonTexture:SetTexture([[Interface\ICONS\INV_Misc_QuestionMark]])
|
||||
unitBanner.LevelFontString:SetText("")
|
||||
end
|
||||
end
|
||||
|
||||
playersFound = playersFound + 1
|
||||
end
|
||||
|
||||
for i = playersFound+1, #readyFrame.PlayerBanners do
|
||||
readyFrame.PlayerBanners[i]:Hide()
|
||||
end
|
||||
|
||||
C_Timer.After(0.5, updateKeysStoneLevel)
|
||||
C_Timer.After(1, updateKeysStoneLevel)
|
||||
C_Timer.After(1.5, updateKeysStoneLevel)
|
||||
C_Timer.After(2, updateKeysStoneLevel)
|
||||
C_Timer.After(2.5, updateKeysStoneLevel)
|
||||
end
|
||||
|
||||
-- /run _G.DetailsMythicDungeonChartHandler.ShowReadyPanel()
|
||||
|
||||
function mythicDungeonCharts.ShowChart()
|
||||
if (not mythicDungeonCharts.Frame) then
|
||||
mythicDungeonCharts.Frame = CreateFrame("frame", "DetailsMythicDungeonChartFrame", UIParent, "BackdropTemplate")
|
||||
|
||||
+229
-20
@@ -6,34 +6,142 @@ local detailsFramework = DetailsFramework
|
||||
|
||||
local ejTable = Details222.EncounterJournalDump
|
||||
|
||||
--maybe also cache old expansions and perhaps current expansion dungeons that aren't in the current mythic+ season
|
||||
|
||||
---@class details_encounterinfo : table
|
||||
---@field name string
|
||||
---@field mapId number
|
||||
---@field instanceId number
|
||||
---@field dungeonEncounterId number
|
||||
---@field journalEncounterId number
|
||||
---@field journalInstanceId number
|
||||
---@field creatureName string
|
||||
---@field creatureIcon string
|
||||
---@field creatureId number
|
||||
---@field creatureDisplayId number
|
||||
---@field creatureUIModelSceneId number
|
||||
|
||||
---@class details_instanceinfo : table
|
||||
---@field name string
|
||||
---@field bgImage string
|
||||
---@field mapId number
|
||||
---@field instanceId number
|
||||
---@field journalInstanceId number
|
||||
---@field encountersArray details_encounterinfo[]
|
||||
---@field encountersByName table<string, details_encounterinfo>
|
||||
---@field encountersByDungeonEncounterId table<number, details_encounterinfo>
|
||||
---@field encountersByJournalEncounterId table<number, details_encounterinfo>
|
||||
---@field icon string
|
||||
---@field iconSize table<number, number>
|
||||
---@field iconCoords table<number, number, number, number>
|
||||
---@field iconLore string
|
||||
---@field iconLoreSize table<number, number>
|
||||
---@field iconLoreCoords table<number, number, number, number>
|
||||
---@field iconTexture string
|
||||
---@field iconTextureSize table<number, number>
|
||||
---@field iconTextureCoords table<number, number, number, number>
|
||||
|
||||
---@return details_encounterinfo?
|
||||
function Details:GetEncounterInfo(id)
|
||||
---@type details_encounterinfo
|
||||
local encounterData = Details222.EJCache.CacheEncountersBy_EncounterId[id]
|
||||
if (encounterData) then
|
||||
return encounterData
|
||||
end
|
||||
|
||||
encounterData = Details222.EJCache.CacheEncountersBy_EncounterName[id]
|
||||
if (encounterData) then
|
||||
return encounterData
|
||||
end
|
||||
|
||||
encounterData = Details222.EJCache.CacheEncountersBy_JournalEncounterId[id]
|
||||
if (encounterData) then
|
||||
return encounterData
|
||||
end
|
||||
end
|
||||
|
||||
---@return details_instanceinfo?
|
||||
function Details:GetInstanceInfo(id)
|
||||
---@type details_encounterinfo
|
||||
local instanceData = Details222.EJCache.CacheRaidData_ByInstanceId[id]
|
||||
if (instanceData) then
|
||||
return instanceData
|
||||
end
|
||||
|
||||
instanceData = Details222.EJCache.CacheRaidData_ByInstanceName[id]
|
||||
if (instanceData) then
|
||||
return instanceData
|
||||
end
|
||||
|
||||
instanceData = Details222.EJCache.CacheRaidData_ByMapId[id]
|
||||
if (instanceData) then
|
||||
return instanceData
|
||||
end
|
||||
|
||||
instanceData = Details222.EJCache.CacheDungeonData_ByInstanceId[id]
|
||||
if (instanceData) then
|
||||
return instanceData
|
||||
end
|
||||
|
||||
instanceData = Details222.EJCache.CacheDungeonData_ByInstanceName[id]
|
||||
if (instanceData) then
|
||||
return instanceData
|
||||
end
|
||||
|
||||
instanceData = Details222.EJCache.CacheDungeonData_ByMapId[id]
|
||||
if (instanceData) then
|
||||
return instanceData
|
||||
end
|
||||
end
|
||||
|
||||
function Details:GetInstanceEJID(...)
|
||||
for i = 1, select("#", ...) do
|
||||
local id = select(i, ...)
|
||||
local EJID = Details222.EJCache.Id_To_JournalInstanceID[id]
|
||||
if (EJID) then
|
||||
return EJID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Details222.EJCache.CreateEncounterJournalDump()
|
||||
Details222.EJCache.CacheRaidData_ByInstanceId = {}
|
||||
Details222.EJCache.CacheRaidData_ByInstanceName = {} --this is localized name
|
||||
Details222.EJCache.CacheRaidData_ByMapId = {} --retrivied from GetInstanceInfo()
|
||||
Details222.EJCache.CacheDungeonData_ByInstanceId = {}
|
||||
Details222.EJCache.CacheDungeonData_ByInstanceName = {}
|
||||
Details222.EJCache.CacheDungeonData_ByMapId = {}
|
||||
Details222.EJCache.CacheEncountersByEncounterName = {}
|
||||
Details222.EJCache.CacheEncountersBy_EncounterName = {}
|
||||
Details222.EJCache.CacheEncountersBy_EncounterId = {}
|
||||
Details222.EJCache.CacheEncountersBy_JournalEncounterId = {}
|
||||
|
||||
---cahe the uiMapID pointing to the instanceID
|
||||
---this replace the need to call EJ_GetInstanceForMap to get the journalInstanceID
|
||||
---@type table
|
||||
local id_to_journalInstanceID = {}
|
||||
Details222.EJCache.Id_To_JournalInstanceID = id_to_journalInstanceID
|
||||
|
||||
--if the expansion does not support the encounter journal, then return
|
||||
if (not EncounterJournal_LoadUI) then
|
||||
return
|
||||
end
|
||||
|
||||
--if true then return end
|
||||
|
||||
local ejCacheSaved = Details.encounter_journal_cache
|
||||
|
||||
function Details.CreateEncounterJournalDump()
|
||||
local data = {}
|
||||
|
||||
---iterate among all raid instances, by passing true in the second argument of EJ_GetInstanceByIndex, indicates to the API we want to get raid instances
|
||||
---@type boolean
|
||||
local bGetRaidInstances = true
|
||||
|
||||
---returns the number of valid encounter journal tier indices
|
||||
---@type number
|
||||
local tierAmount = EJ_GetNumTiers()
|
||||
local tierAmount = EJ_GetNumTiers() --return 11 for dragonisles
|
||||
|
||||
---returns the currently active encounter journal tier index
|
||||
---could also be tierAmount - 1
|
||||
---bacause the tier is "current season"
|
||||
---@type number
|
||||
local currentTier = EJ_GetCurrentTier()
|
||||
|
||||
---increment this each expansion
|
||||
---@type number
|
||||
local currentTierId = 10 --maintenance | 10 is "Dragonflight"
|
||||
|
||||
---is the id of where it shows the mythic+ dungeons available for the season
|
||||
---can be found in the adventure guide in the dungeons tab > dropdown
|
||||
---@type number
|
||||
local currentMythicPlusTierId = 11 --maintenance | 11 is "Current Season"
|
||||
|
||||
---maximum amount of raid tiers in the expansion
|
||||
---@type number
|
||||
local maxAmountOfRaidTiers = 10
|
||||
local currentTierId = tierAmount --EJ_GetCurrentTier(), for some unknown reason, this function is returning 3 on retail
|
||||
|
||||
---maximum amount of dungeons in the expansion
|
||||
---@type number
|
||||
@@ -47,12 +155,113 @@ function Details.CreateEncounterJournalDump()
|
||||
---@type number
|
||||
local maxRaidBosses = 20
|
||||
|
||||
---two iterations are required, one for dungeons and another for raids
|
||||
---this table store two booleans that are passed to EJ_GetInstanceByIndex second argument, to indicate if we want to get dungeons or raids
|
||||
local tGetDungeonsOrRaids = {false, true}
|
||||
|
||||
do --get raid instances data
|
||||
for i = 1, #tGetDungeonsOrRaids do
|
||||
local bIsRaid = tGetDungeonsOrRaids[i]
|
||||
|
||||
--select the tier, use current tier - 1 for raids, as the currentTier only shows the latest release raid
|
||||
--use current tier for dungeons, as the current tier shows the dungeons used for the current season of Mythic+
|
||||
local startIndex, endIndex
|
||||
if (bIsRaid) then
|
||||
EJ_SelectTier(currentTierId - 1) --print("tier selected:", currentTierId - 1, "raids") --debug
|
||||
startIndex = raidTierStartIndex
|
||||
endIndex = 20
|
||||
else
|
||||
EJ_SelectTier(currentTierId) --print("tier selected:", currentTierId, "dungeons", "currentTierId:", currentTierId) --debug
|
||||
startIndex = 1
|
||||
endIndex = maxAmountOfDungeons
|
||||
end
|
||||
|
||||
for instanceIndex = endIndex, startIndex, -1 do
|
||||
--instanceID: number - the unique ID of the instance, also returned by GetInstanceInfo() 8th return value
|
||||
--journalInstanceID: number - the ID used by the Encounter Journal API
|
||||
--dungeonUiMapID: number - the ID used by the world map API
|
||||
--dungeonEncounterID: number - same ID passed by the ENCOUNTER_STAR and ENCOUNTER_END events
|
||||
local journalInstanceID, instanceName, description, bgImage, buttonImage1, loreImage, buttonImage2, dungeonUiMapID, journalLink, shouldDisplayDifficulty, instanceID = EJ_GetInstanceByIndex(instanceIndex, bIsRaid)
|
||||
|
||||
if (journalInstanceID) then
|
||||
id_to_journalInstanceID[dungeonUiMapID] = journalInstanceID
|
||||
id_to_journalInstanceID[instanceName] = journalInstanceID
|
||||
id_to_journalInstanceID[instanceID] = journalInstanceID
|
||||
|
||||
--select the raid instance, this allow to retrieve data about the encounters of the instance
|
||||
EJ_SelectInstance(journalInstanceID)
|
||||
|
||||
--build a table with data of the raid instance
|
||||
local instanceData = {
|
||||
name = instanceName,
|
||||
bgImage = bgImage,
|
||||
mapId = dungeonUiMapID,
|
||||
instanceId = instanceID,
|
||||
journalInstanceId = journalInstanceID,
|
||||
|
||||
encountersArray = {},
|
||||
encountersByName = {},
|
||||
encountersByDungeonEncounterId = {},
|
||||
encountersByJournalEncounterId = {},
|
||||
|
||||
icon = buttonImage1,
|
||||
iconSize = {70, 36},
|
||||
iconCoords = {0.01, .67, 0.025, .725},
|
||||
|
||||
iconLore = loreImage,
|
||||
iconLoreSize = {70, 36},
|
||||
iconLoreCoords = {0, 1, 0, 0.95},
|
||||
|
||||
iconTexture = buttonImage2,
|
||||
iconTextureSize = {70, 36},
|
||||
iconTextureCoords = {0, 1, 0, 0.95},
|
||||
}
|
||||
|
||||
--cache the raidData, in different tables, using different keys
|
||||
Details222.EJCache.CacheRaidData_ByInstanceId[journalInstanceID] = instanceData
|
||||
Details222.EJCache.CacheRaidData_ByInstanceId[instanceID] = instanceData
|
||||
Details222.EJCache.CacheRaidData_ByInstanceName[instanceName] = instanceData
|
||||
Details222.EJCache.CacheRaidData_ByMapId[dungeonUiMapID] = instanceData
|
||||
|
||||
--get information about the bosses in the raid
|
||||
for encounterIndex = 1, maxRaidBosses do
|
||||
local encounterName, encounterDescription, journalEncounterID, rootSectionID, link, journalInstanceID, dungeonEncounterID, instanceID = EJ_GetEncounterInfoByIndex(encounterIndex, journalInstanceID)
|
||||
|
||||
if (encounterName) then
|
||||
local encounterData = {
|
||||
name = encounterName,
|
||||
mapId = dungeonUiMapID,
|
||||
instanceId = instanceID,
|
||||
dungeonEncounterId = dungeonEncounterID,
|
||||
journalEncounterId = journalEncounterID,
|
||||
journalInstanceId = journalInstanceID,
|
||||
}
|
||||
|
||||
local journalEncounterCreatureId, creatureName, creatureDescription, creatureDisplayID, iconImage, uiModelSceneID = EJ_GetCreatureInfo(1, journalEncounterID)
|
||||
if (journalEncounterCreatureId) then
|
||||
encounterData.creatureName = creatureName
|
||||
encounterData.creatureIcon = iconImage
|
||||
encounterData.creatureId = journalEncounterCreatureId
|
||||
encounterData.creatureDisplayId = creatureDisplayID
|
||||
encounterData.creatureUIModelSceneId = uiModelSceneID
|
||||
end
|
||||
|
||||
instanceData.encountersArray[#instanceData.encountersArray+1] = encounterData
|
||||
instanceData.encountersByName[encounterName] = encounterData
|
||||
--print(instanceName, encounterName, journalEncounterID, journalInstanceID, dungeonEncounterID, instanceID)
|
||||
instanceData.encountersByDungeonEncounterId[dungeonEncounterID] = encounterData
|
||||
instanceData.encountersByJournalEncounterId[journalEncounterID] = encounterData
|
||||
Details222.EJCache.CacheEncountersBy_EncounterName[encounterName] = encounterData
|
||||
Details222.EJCache.CacheEncountersBy_EncounterId[dungeonEncounterID] = encounterData
|
||||
Details222.EJCache.CacheEncountersBy_JournalEncounterId[journalEncounterID] = encounterData
|
||||
|
||||
id_to_journalInstanceID[encounterName] = journalInstanceID
|
||||
id_to_journalInstanceID[dungeonEncounterID] = journalInstanceID
|
||||
id_to_journalInstanceID[journalEncounterID] = journalInstanceID
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end --end loop of raid or dungeon
|
||||
end
|
||||
end
|
||||
@@ -103,9 +103,24 @@ function DetailsMythicPlusFrame.MergeSegmentsOnEnd() --~merge
|
||||
RunID = Details.mythic_dungeon_id,
|
||||
OverallSegment = true,
|
||||
ZoneName = Details.MythicPlus.DungeonName,
|
||||
MapID = instanceMapID,
|
||||
Level = Details.MythicPlus.Level,
|
||||
EJID = Details.MythicPlus.ejID,
|
||||
MapID = Details222.MythicPlus.MapID,
|
||||
Level = Details222.MythicPlus.Level,
|
||||
OnTime = Details222.MythicPlus.OnTime,
|
||||
KeystoneUpgradeLevels = Details222.MythicPlus.KeystoneUpgradeLevels,
|
||||
PracticeRun = Details222.MythicPlus.PracticeRun,
|
||||
OldDungeonScore = Details222.MythicPlus.OldDungeonScore,
|
||||
NewDungeonScore = Details222.MythicPlus.NewDungeonScore,
|
||||
IsAffixRecord = Details222.MythicPlus.IsAffixRecord,
|
||||
IsMapRecord = Details222.MythicPlus.IsMapRecord,
|
||||
PrimaryAffix = Details222.MythicPlus.PrimaryAffix,
|
||||
IsEligibleForScore = Details222.MythicPlus.IsEligibleForScore,
|
||||
UpgradeMembers = Details222.MythicPlus.UpgradeMembers,
|
||||
TimeLimit = Details222.MythicPlus.TimeLimit,
|
||||
DungeonName = Details222.MythicPlus.DungeonName,
|
||||
DungeonID = Details222.MythicPlus.DungeonID,
|
||||
DungeonTexture = Details222.MythicPlus.Texture,
|
||||
DungeonBackgroundTexture = Details222.MythicPlus.BackgroundTexture,
|
||||
}
|
||||
|
||||
--add all boss segments from this run to this new segment
|
||||
@@ -528,6 +543,7 @@ function DetailsMythicPlusFrame.MythicDungeonFinished (fromZoneLeft)
|
||||
--check if there is trash segments after the last boss. need to merge these segments with the trash segment of the last boss
|
||||
local bCanMergeBossTrash = Details.mythic_plus.merge_boss_trash
|
||||
Details222.MythicPlus.LogStep("MythicDungeonFinished() | merge_boss_trash = " .. (bCanMergeBossTrash and "true" or "false"))
|
||||
|
||||
if (bCanMergeBossTrash and not Details.MythicPlus.IsRestoredState and not fromZoneLeft) then
|
||||
--is the current combat not a boss fight?
|
||||
--this mean a combat was opened after the last boss of the dungeon was killed
|
||||
@@ -672,12 +688,13 @@ function DetailsMythicPlusFrame.MythicDungeonStarted()
|
||||
return
|
||||
end
|
||||
|
||||
local ejID = DF.EncounterJournal.EJ_GetInstanceForMap(mapID)
|
||||
local ejID = Details:GetInstanceEJID(mapID)
|
||||
|
||||
--setup the mythic run info
|
||||
Details.MythicPlus.Started = true
|
||||
Details.MythicPlus.DungeonName = zoneName
|
||||
Details.MythicPlus.DungeonID = currentZoneID
|
||||
Details:Msg("(debug) mythic dungeon start time: ", time()+9.7, "time now:", time(), "diff:", time()+9.7-time())
|
||||
Details.MythicPlus.StartedAt = time()+9.7 --there's the countdown timer of 10 seconds
|
||||
Details.MythicPlus.EndedAt = nil --reset
|
||||
Details.MythicPlus.SegmentID = 1
|
||||
|
||||
@@ -1380,6 +1380,7 @@ local default_global_data = {
|
||||
["14"] = false,
|
||||
},
|
||||
current_exp_raid_encounters = {},
|
||||
encounter_journal_cache = {}, --store a dump of the encounter journal
|
||||
installed_skins_cache = {},
|
||||
|
||||
show_aug_predicted_spell_damage = false,
|
||||
|
||||
Reference in New Issue
Block a user