local Details = _G.Details
local DF = _G.DetailsFramework
local C_Timer = _G.C_Timer
local addonName , Details222 = ...
local GetSpellInfo = Details222.GetSpellInfo
--get the sectionInfo and try to extract the spellID from it
--sectionInfo is always a valid table
local parseSectionInfoForSpellID = function ( sectionInfo )
local spellId = sectionInfo.spellID
if ( spellId ) then
spellId = tonumber ( spellId )
if ( spellId ) then
local spellName = GetSpellInfo ( spellId )
if ( spellName ) then
return spellId
end
end
end
end
---this function is called when the player clicks on a link in the chat window to open a section in the encounter journal
---Details! then will check if that spell linked did damage to the raid and show a small box with the damage done
---@param tag any tag isn't used
---@param journalTypeString string
---@param idString string
function Details222 . EJCache . OnClickEncounterJournalLink ( tag , journalTypeString , idString ) --not in use
local journalType = tonumber ( journalTypeString )
local id = tonumber ( idString )
local instanceId , encounterId , sectionId , tierIndex = EJ_HandleLinkPath ( journalType , id )
if ( sectionId ) then
local sectionInfo = C_EncounterJournal.GetSectionInfo ( sectionId )
if ( sectionInfo and type ( sectionInfo ) == " table " ) then
local spellId = parseSectionInfoForSpellID ( sectionInfo )
--spellId is guaranteed to be a valid spellId or nil
if ( spellId ) then
local damageDoneTable = Details222.DamageSpells . GetDamageDoneToPlayersBySpell ( spellId )
local topDamage = damageDoneTable [ 1 ] and damageDoneTable [ 1 ] [ 2 ]
if ( topDamage and topDamage > 0 ) then
--build a cooltip with the damage done to players by the spellId
local gameCooltip = GameCooltip
gameCooltip : Preset ( 2 )
gameCooltip : SetType ( " tooltip " )
gameCooltip : SetOption ( " LeftPadding " , - 5 )
gameCooltip : SetOption ( " RightPadding " , 5 )
gameCooltip : SetOption ( " LinePadding " , 1 )
gameCooltip : SetOption ( " StatusBarTexture " , [[Interface\AddOns\Details\images\bar_hyanda]] )
for i = 1 , # damageDoneTable do
local targetName , damageDone = unpack ( damageDoneTable [ i ] )
local nameWithoutRealm = DF : RemoveRealmName ( targetName )
local formattedDamage = Details : ToK2 ( damageDone )
local className = Details222.ClassCache . GetClass ( targetName )
local classTexture , left , right , top , bottom = Details : GetClassIcon ( className )
gameCooltip : AddLine ( nameWithoutRealm , formattedDamage )
gameCooltip : AddIcon ( classTexture , 1 , 1 , 14 , 14 , left , right , top , bottom )
gameCooltip : AddStatusBar ( damageDone / topDamage * 100 , 1 , .5 , .5 , .5 , 1 , false , { value = 100 , color = { .2 , .2 , .2 , 0.9 } , texture = [[Interface\AddOns\Details\images\bar_hyanda]] } )
end
local abilityString = DF : MakeStringFromSpellId ( spellId )
if ( abilityString ) then
abilityString = abilityString .. " (damage to) "
end
local anchor = { " bottom " , " top " , 0 , 0 }
gameCooltip : SetBannerImage ( 1 , 2 , [[Interface\PetBattles\Weather-Blizzard]] , 220 , 55 , anchor , { 0.85 , 0.189609375 , 1 , 0 } , { 0 , 0 , 0 , 1 } )
gameCooltip : SetBannerText ( 1 , 2 , abilityString or " Ability Damage Done " , { " bottomleft " , " topleft " , 0 , 2 } , " white " , 14 )
gameCooltip : SetOwner ( EncounterJournal , " topleft " , " topright " , 50 , - 10 )
gameCooltip : Show ( )
end
end
end
end
if ( not Details222.EJCache . HasJournalOnHideHooked ) then
Details222.EJCache . HasJournalOnHideHooked = true
EncounterJournal : HookScript ( " OnHide " , function ( )
GameCooltip : Hide ( )
end )
end
end
--search the damage container within the combatObject index[1] for actor that used the spellId passed and inflicted damage to players
---@param spellId number
---@param combatId any
---@return table
function Details222 . DamageSpells . GetDamageDoneToPlayersBySpell ( spellId , combatId )
local combatObject = Details : GetCombat ( combatId )
if ( not combatObject ) then
return { }
end
local damageContainer = combatObject : GetContainer ( DETAILS_ATTRIBUTE_DAMAGE )
if ( not damageContainer ) then
return { }
end
local damageDoneTable = { }
for index , actorObject in damageContainer : ListActors ( ) do
if ( actorObject : IsNeutralOrEnemy ( ) ) then
local spellTable = actorObject : GetSpell ( spellId )
if ( spellTable ) then
for targetName , damageDone in pairs ( spellTable.targets ) do
damageDoneTable [ targetName ] = ( damageDoneTable [ targetName ] or 0 ) + damageDone
end
end
end
end
local sortedResult = { }
for targetName , damageDone in pairs ( damageDoneTable ) do
local className = Details222.ClassCache . GetClass ( targetName )
sortedResult [ # sortedResult + 1 ] = { targetName , damageDone , className }
end
table.sort ( sortedResult , function ( a , b ) return a [ 2 ] > b [ 2 ] end )
return sortedResult
end
--[=[
[ " description " ] = " Eranog wreathes several players in flames. Upon expiration a Flamerift forms at each player's location, inflicting 144,550 Fire damage to players within 4 yards.
A Flamescale Tarasek spills forth from each Flamerift , leaving behind a Lava Flow .
On Mythic difficulty , Eranog also opens a Greater Flamerift that creates a Flamescale Captain . " ,
[ " link " ] = " [Flamerift] " ,
[ " siblingSectionID " ] = 26037 ,
[ " startsOpen " ] = false ,
[ " creatureDisplayID " ] = 0 ,
[ " headerType " ] = 2 ,
[ " title " ] = " Flamerift " ,
[ " firstChildSectionID " ] = 26036 ,
[ " uiModelSceneID " ] = 0 ,
[ " filteredByDifficulty " ] = false ,
[ " abilityIcon " ] = 134153 ,
[ " spellID " ] = 390715 ,
--]=]