Framework, update
This commit is contained in:
+94
-58
@@ -3745,7 +3745,7 @@ function damageClass:ToolTip_Enemies (instancia, numero, barra, keydown)
|
||||
end
|
||||
|
||||
---------DAMAGE TAKEN
|
||||
function damageClass:ToolTip_DamageTaken (instance, numero, barra, keydown)
|
||||
function damageClass:ToolTip_DamageTaken(instance, numero, barra, keydown)
|
||||
--if the object has a owner, it's a pet
|
||||
local owner = self.owner
|
||||
if (owner and owner.classe) then
|
||||
@@ -3761,13 +3761,19 @@ function damageClass:ToolTip_DamageTaken (instance, numero, barra, keydown)
|
||||
local combatObject = instance:GetShowingCombat()
|
||||
local damageContainer = combatObject:GetContainer(DETAILS_ATTRIBUTE_DAMAGE)
|
||||
|
||||
local damageTakenSorted = {}
|
||||
---@type {key1:actorname, key2:valueamount, key3:class, key4:actor}
|
||||
local damageTakenDataSorted = {}
|
||||
local mainAttribute, subAttribute = instance:GetDisplay()
|
||||
|
||||
if (subAttribute == DETAILS_SUBATTRIBUTE_ENEMIES) then
|
||||
for _, actorObject in damageContainer:ListActors() do
|
||||
if (actorObject:IsGroupPlayer() and actorObject.targets[actorName]) then
|
||||
damageTakenSorted [#damageTakenSorted+1] = {actorName, actorObject.targets[actorName], actorObject.classe, actorObject}
|
||||
damageTakenDataSorted [#damageTakenDataSorted+1] = {
|
||||
actorName,
|
||||
actorObject.targets[actorName],
|
||||
actorObject:Class(),
|
||||
actorObject
|
||||
}
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -3775,67 +3781,66 @@ function damageClass:ToolTip_DamageTaken (instance, numero, barra, keydown)
|
||||
--get the aggressor
|
||||
local enemyActorObject = damageContainer:GetActor(enemyName)
|
||||
if (enemyActorObject) then
|
||||
--local name = enemyName
|
||||
---@type {key1:actorname, key2:valueamount, key3:class, key4:actor}
|
||||
local damageTakenTable
|
||||
local damageInflictedByThisEnemy = enemyActorObject.targets[actorName]
|
||||
|
||||
if (damageInflictedByThisEnemy) then
|
||||
if (enemyActorObject:IsPlayer() or enemyActorObject:IsNeutralOrEnemy()) then
|
||||
damageTakenTable = {enemyName, damageInflictedByThisEnemy, enemyActorObject.classe, enemyActorObject}
|
||||
damageTakenSorted [#damageTakenSorted+1] = damageTakenTable
|
||||
damageTakenTable = {enemyName, damageInflictedByThisEnemy, enemyActorObject:Class(), enemyActorObject}
|
||||
damageTakenDataSorted[#damageTakenDataSorted+1] = damageTakenTable
|
||||
end
|
||||
end
|
||||
|
||||
--special cases - monk stagger
|
||||
if (enemyName == actorName and self.classe == "MONK") then
|
||||
local ff = enemyActorObject.friendlyfire [enemyName]
|
||||
if (ff and ff.total > 0) then
|
||||
local staggerDamage = ff.spells [124255] or 0
|
||||
if (enemyName == actorName and self:Class() == "MONK") then
|
||||
local friendlyFire = enemyActorObject.friendlyfire[enemyName]
|
||||
if (friendlyFire and friendlyFire.total > 0) then
|
||||
local staggerDamage = friendlyFire.spells[124255] or 0
|
||||
if (staggerDamage > 0) then
|
||||
if (damageTakenTable) then
|
||||
damageTakenTable [2] = damageTakenTable [2] + staggerDamage
|
||||
damageTakenTable[2] = damageTakenTable[2] + staggerDamage
|
||||
else
|
||||
damageTakenSorted [#damageTakenSorted+1] = {enemyName, staggerDamage, "MONK", enemyActorObject}
|
||||
damageTakenDataSorted[#damageTakenDataSorted+1] = {enemyName, staggerDamage, "MONK", enemyActorObject}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local max = #damageTakenSorted
|
||||
if (max > 10) then
|
||||
max = 10
|
||||
local maxDataAllowed = #damageTakenDataSorted
|
||||
if (maxDataAllowed > 10) then
|
||||
maxDataAllowed = 10
|
||||
end
|
||||
|
||||
local bIsMaximized = false
|
||||
if (keydown == "shift" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 3 or instance.sub_atributo == 6 or Details.damage_taken_everything) then
|
||||
max = #damageTakenSorted
|
||||
maxDataAllowed = #damageTakenDataSorted
|
||||
bIsMaximized = true
|
||||
end
|
||||
|
||||
if (subAttribute == DETAILS_SUBATTRIBUTE_ENEMIES) then
|
||||
Details:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_TAKEN_FROM"], headerColor, #damageTakenSorted, [[Interface\Buttons\UI-MicroStream-Red]], 0.1875, 0.8125, 0.15625, 0.78125)
|
||||
Details:AddTooltipSpellHeaderText(Loc ["STRING_DAMAGE_TAKEN_FROM"], headerColor, #damageTakenDataSorted, [[Interface\Buttons\UI-MicroStream-Red]], 0.1875, 0.8125, 0.15625, 0.78125)
|
||||
else
|
||||
Details:AddTooltipSpellHeaderText (Loc ["STRING_FROM"], headerColor, #damageTakenSorted, [[Interface\Addons\Details\images\icons]], 0.126953125, 0.1796875, 0, 0.0546875)
|
||||
Details:AddTooltipSpellHeaderText(Loc ["STRING_FROM"], headerColor, #damageTakenDataSorted, [[Interface\Addons\Details\images\icons]], 0.126953125, 0.1796875, 0, 0.0546875)
|
||||
end
|
||||
|
||||
if (bIsMaximized) then
|
||||
--highlight
|
||||
GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2)
|
||||
GameCooltip:AddIcon([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay2)
|
||||
if (subAttribute == DETAILS_SUBATTRIBUTE_ENEMIES) then
|
||||
GameCooltip:AddStatusBar (100, 1, 0.7, g, b, 1)
|
||||
GameCooltip:AddStatusBar(100, 1, 0.7, g, b, 1)
|
||||
else
|
||||
Details:AddTooltipHeaderStatusbar (r, g, b, 1)
|
||||
Details:AddTooltipHeaderStatusbar(r, g, b, 1)
|
||||
end
|
||||
else
|
||||
GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay1)
|
||||
GameCooltip:AddIcon([[Interface\AddOns\Details\images\key_shift]], 1, 2, Details.tooltip_key_size_width, Details.tooltip_key_size_height, 0, 1, 0, 0.640625, Details.tooltip_key_overlay1)
|
||||
if (subAttribute == DETAILS_SUBATTRIBUTE_ENEMIES) then
|
||||
GameCooltip:AddStatusBar (100, 1, 0.7, 0, 0, barAlha)
|
||||
GameCooltip:AddStatusBar(100, 1, 0.7, 0, 0, barAlha)
|
||||
else
|
||||
Details:AddTooltipHeaderStatusbar (r, g, b, barAlha)
|
||||
Details:AddTooltipHeaderStatusbar(r, g, b, barAlha)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3843,65 +3848,96 @@ function damageClass:ToolTip_DamageTaken (instance, numero, barra, keydown)
|
||||
local iconBorderTexCoord = Details.tooltip.icon_border_texcoord
|
||||
|
||||
-- create a full list of incoming damage, before adding any lines to the tooltip, so we can sort them appropriately
|
||||
|
||||
---@class cooltip_icon
|
||||
---@field key1 textureid
|
||||
---@field key2 number 1 for main tooltip frame, 2 for the secondary frame
|
||||
---@field key3 number 1 for the left side, 2 for the right size
|
||||
---@field key4 width
|
||||
---@field key5 height
|
||||
---@field key6 coordleft
|
||||
---@field key7 coordright
|
||||
---@field key8 coordtop
|
||||
---@field key9 coordbottom
|
||||
|
||||
---@type {key1:valueamount, key2:table<string, string>, key3:cooltip_icon}
|
||||
local lines_to_add = {}
|
||||
for i = 1, max do
|
||||
local enemyActorObject = damageTakenSorted[i][4]
|
||||
|
||||
for i = 1, maxDataAllowed do
|
||||
local enemyActorObject = damageTakenDataSorted[i][4]
|
||||
|
||||
--only shows damage from enemies or from the player it self
|
||||
--the player it self can only be placed on the list by the iteration above
|
||||
--the iteration doesnt check friendly fire for all actors, only a few cases like Monk Stagger
|
||||
|
||||
if (enemyActorObject:IsNeutralOrEnemy() or enemyActorObject.nome == self.nome) then
|
||||
local all_spells = {}
|
||||
if (enemyActorObject:IsNeutralOrEnemy() or enemyActorObject:Name() == self:Name()) then
|
||||
---@type {key1:spellid, key2:valueamount, key:actorname}
|
||||
local spellTargetDamageList = {}
|
||||
|
||||
for spellid, spell in pairs(enemyActorObject.spells._ActorTable) do
|
||||
local on_target = spell.targets [self.nome]
|
||||
if (on_target) then
|
||||
tinsert(all_spells, {spellid, on_target, enemyActorObject.nome})
|
||||
for spellId, spellTable in pairs(enemyActorObject.spells._ActorTable) do
|
||||
local damageOnTarget = spellTable.targets[self:Name()]
|
||||
if (damageOnTarget) then
|
||||
tinsert(spellTargetDamageList, {spellId, damageOnTarget, enemyActorObject:Name()})
|
||||
end
|
||||
end
|
||||
|
||||
--friendly fire
|
||||
local friendlyFire = enemyActorObject.friendlyfire [self.nome]
|
||||
local friendlyFire = enemyActorObject.friendlyfire[self:Name()]
|
||||
if (friendlyFire) then
|
||||
for spellid, amount in pairs(friendlyFire.spells) do
|
||||
tinsert(all_spells, {spellid, amount, enemyActorObject.nome})
|
||||
for spellId, valueAmount in pairs(friendlyFire.spells) do
|
||||
table.insert(spellTargetDamageList, {spellId, valueAmount, enemyActorObject:Name()})
|
||||
end
|
||||
end
|
||||
|
||||
for _, spell in ipairs(all_spells) do
|
||||
local spellname, _, spellicon = _GetSpellInfo(spell [1])
|
||||
for _, spell in ipairs(spellTargetDamageList) do
|
||||
local spellId, valueAmount, thisActorName = unpack(spell)
|
||||
|
||||
local spellName, _, spellIcon = _GetSpellInfo(spellId)
|
||||
local addTextArgs = {spellName .. " (|cFFFFFF00" .. thisActorName .. "|r)", Details:Format(valueAmount) .. " (" .. string.format("%.1f", (valueAmount / totalDamageTaken) * 100) .. "%)"}
|
||||
---@type cooltip_icon
|
||||
local addIconArgs = {spellIcon, 1, 1, iconSize.W, iconSize.H, iconBorderTexCoord.L, iconBorderTexCoord.R, iconBorderTexCoord.T, iconBorderTexCoord.B}
|
||||
|
||||
tinsert(lines_to_add, {
|
||||
spell [2],
|
||||
{spellname .. " (|cFFFFFF00" .. spell [3] .. "|r)", FormatTooltipNumber (_, spell [2]).." (" .. format("%.1f", (spell [2] / totalDamageTaken) * 100).."%)"},
|
||||
{spellicon, 1, 1, iconSize.W, iconSize.H, iconBorderTexCoord.L, iconBorderTexCoord.R, iconBorderTexCoord.T, iconBorderTexCoord.B}
|
||||
valueAmount,
|
||||
addTextArgs,
|
||||
addIconArgs
|
||||
})
|
||||
end
|
||||
|
||||
else
|
||||
local amount, addLineArgs, addIconArgs = damageTakenSorted[i][2]
|
||||
local aggressorName = Details:GetOnlyName(damageTakenSorted[i][1])
|
||||
if (bIsMaximized and damageTakenSorted[i][1]:find(Details.playername)) then
|
||||
addLineArgs = { aggressorName, FormatTooltipNumber (_, damageTakenSorted[i][2]).." ("..format("%.1f", (damageTakenSorted[i][2]/totalDamageTaken) * 100).."%)", nil, "yellow" }
|
||||
else
|
||||
addLineArgs = { aggressorName, FormatTooltipNumber (_, damageTakenSorted[i][2]).." ("..format("%.1f", (damageTakenSorted[i][2]/totalDamageTaken) * 100).."%)" }
|
||||
end
|
||||
local classe = damageTakenSorted[i][3]
|
||||
---@type actorname, valueamount, class, actor
|
||||
local thisAggrossorTable = damageTakenDataSorted[i]
|
||||
local actorName = thisAggrossorTable[1]
|
||||
local amount = thisAggrossorTable[2]
|
||||
local class = thisAggrossorTable[3]
|
||||
local actorObject = thisAggrossorTable[4]
|
||||
|
||||
if (not classe) then
|
||||
classe = "UNKNOW"
|
||||
---@type {key1:actorname, key2:string, key3:nil, key4:color}
|
||||
local addLineArgs
|
||||
---@type cooltip_icon
|
||||
local addIconArgs
|
||||
|
||||
local aggressorName = Details:GetOnlyName(actorName)
|
||||
if (bIsMaximized and actorName:find(Details.playername)) then
|
||||
addLineArgs = {aggressorName, Details:Format(amount) .. " ("..string.format("%.1f", (amount / totalDamageTaken) * 100) .. "%)", nil, "yellow"}
|
||||
else
|
||||
addLineArgs = {aggressorName, Details:Format(amount) .. " ("..string.format("%.1f", (amount / totalDamageTaken) * 100) .. "%)"}
|
||||
end
|
||||
|
||||
if (classe == "UNKNOW") then
|
||||
addIconArgs = { "Interface\\LFGFRAME\\LFGROLE_BW", nil, nil, iconSize.W, iconSize.H, .25, .5, 0, 1 }
|
||||
else
|
||||
addIconArgs= { instance.row_info.icon_file, nil, nil, iconSize.W, iconSize.H, unpack(Details.class_coords [classe]) }
|
||||
if (not class) then
|
||||
class = "UNKNOW"
|
||||
end
|
||||
tinsert(lines_to_add, { amount, addLineArgs, addIconArgs })
|
||||
|
||||
if (class == "UNKNOW") then
|
||||
addIconArgs = {"Interface\\LFGFRAME\\LFGROLE_BW", nil, nil, iconSize.W, iconSize.H, .25, .5, 0, 1}
|
||||
else
|
||||
addIconArgs= {instance.row_info.icon_file, nil, nil, iconSize.W, iconSize.H, unpack(Details.class_coords [class])}
|
||||
end
|
||||
tinsert(lines_to_add, {amount, addLineArgs, addIconArgs})
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(lines_to_add, function(a, b) return a[1] > b[1] end)
|
||||
table.sort(lines_to_add, Details.Sort1)
|
||||
|
||||
for _, line in ipairs(lines_to_add) do
|
||||
GameCooltip:AddLine(unpack(line[2]))
|
||||
GameCooltip:AddIcon(unpack(line[3]))
|
||||
|
||||
Reference in New Issue
Block a user