From 2ca8ce36ea8e4909d0affd6dfe4085b72bc89386 Mon Sep 17 00:00:00 2001 From: Tercio Jose Date: Tue, 22 Nov 2022 13:19:11 -0300 Subject: [PATCH] Evoker Empowerment --- boot.lua | 4 +- classes/class_damage.lua | 70 +++++++++++++++++++++++--- classes/class_heal.lua | 60 ++++++++++++++++++++++ core/parser.lua | 83 ++++++++++++++++++++++++------- frames/window_playerbreakdown.lua | 19 +++++-- 5 files changed, 206 insertions(+), 30 deletions(-) diff --git a/boot.lua b/boot.lua index 374de195..8ae762fa 100644 --- a/boot.lua +++ b/boot.lua @@ -6,8 +6,8 @@ local addonName, Details222 = ... local version, build, date, tocversion = GetBuildInfo() - _detalhes.build_counter = 10280 - _detalhes.alpha_build_counter = 10280 --if this is higher than the regular counter, use it instead + _detalhes.build_counter = 10282 + _detalhes.alpha_build_counter = 10282 --if this is higher than the regular counter, use it instead _detalhes.dont_open_news = true _detalhes.game_version = version _detalhes.userversion = version .. " " .. _detalhes.build_counter diff --git a/classes/class_damage.lua b/classes/class_damage.lua index ec55880f..0696789a 100644 --- a/classes/class_damage.lua +++ b/classes/class_damage.lua @@ -4952,9 +4952,8 @@ function atributo_damage:MontaDetalhesDamageDone (spellId, spellLine, instance) cast_string = cast_string .. spell_cast end - local averageEmpowerLevel - if (esta_magia.e_lvl) then --spell empowered - averageEmpowerLevel = format("Empower Average: %.2f", esta_magia.e_lvl / esta_magia.e_amt) + if (esta_magia.e_total) then + cast_string = Loc ["STRING_CAST"] .. ": " .. "|cFFFFFF00" .. esta_magia.e_total .. "|r" end gump:SetaDetalheInfoTexto( index, 100, @@ -4963,9 +4962,7 @@ function atributo_damage:MontaDetalhesDamageDone (spellId, spellLine, instance) schooltext, --offhand, Loc ["STRING_AVERAGE"] .. ": " .. Details:comma_value (media), this_dps, - Loc ["STRING_HITS"]..": " .. hits_string, - averageEmpowerLevel or "", - "" + Loc ["STRING_HITS"]..": " .. hits_string ) --NORMAL @@ -5044,6 +5041,65 @@ function atributo_damage:MontaDetalhesDamageDone (spellId, spellLine, instance) end --empowered + if (esta_magia.e_total) then + local empowerLevelSum = esta_magia.e_total --total sum of empower levels + local empowerAmount = esta_magia.e_amt --amount of casts with empower + local empowerAmountPerLevel = esta_magia.e_lvl --{[1] = 4; [2] = 9; [3] = 15} + local empowerDamagePerLevel = esta_magia.e_dmg --{[1] = 54548745, [2] = 74548745} + + data[#data+1] = t4 + + local level1AverageDamage = "0" + local level2AverageDamage = "0" + local level3AverageDamage = "0" + local level4AverageDamage = "0" + local level5AverageDamage = "0" + + if (empowerDamagePerLevel[1]) then + level1AverageDamage = Details:ToK(empowerDamagePerLevel[1] / empowerAmountPerLevel[1]) + end + if (empowerDamagePerLevel[2]) then + level2AverageDamage = Details:ToK(empowerDamagePerLevel[2] / empowerAmountPerLevel[2]) + end + if (empowerDamagePerLevel[3]) then + level3AverageDamage = Details:ToK(empowerDamagePerLevel[3] / empowerAmountPerLevel[3]) + end + if (empowerDamagePerLevel[4]) then + level4AverageDamage = Details:ToK(empowerDamagePerLevel[4] / empowerAmountPerLevel[4]) + end + if (empowerDamagePerLevel[5]) then + level5AverageDamage = Details:ToK(empowerDamagePerLevel[5] / empowerAmountPerLevel[5]) + end + + t4[1] = 0 + t4[2] = {p = 100, c = {0.282353, 0.239216, 0.545098, 0.6}} + t4[3] = "Spell Empower Average Level: " .. format("%.2f", empowerLevelSum / empowerAmount) + t4[4] = "" + t4[5] = "" + t4[6] = "" + t4[10] = "" + t4[11] = "" + + if (level1AverageDamage ~= "0") then + t4[4] = "Level 1 Average: " .. level1AverageDamage .. " (" .. (empowerAmountPerLevel[1] or 0) .. ")" + end + + if (level2AverageDamage ~= "0") then + t4[6] = "Level 2 Average: " .. level2AverageDamage .. " (" .. (empowerAmountPerLevel[2] or 0) .. ")" + end + + if (level3AverageDamage ~= "0") then + t4[11] = "Level 3 Average: " .. level3AverageDamage .. " (" .. (empowerAmountPerLevel[3] or 0) .. ")" + end + + if (level4AverageDamage ~= "0") then + t4[10] = "Level 4 Average: " .. level4AverageDamage .. " (" .. (empowerAmountPerLevel[4] or 0) .. ")" + end + + if (level5AverageDamage ~= "0") then + t4[5] = "Level 5 Average: " .. level5AverageDamage .. " (" .. (empowerAmountPerLevel[5] or 0) .. ")" + end + end --Details:BuildPlayerDetailsSpellChart() @@ -5055,7 +5111,7 @@ function atributo_damage:MontaDetalhesDamageDone (spellId, spellLine, instance) _table_sort(data, Details.Sort1) for index, tabela in ipairs(data) do - gump:SetaDetalheInfoTexto(index+1, tabela[2], tabela[3], tabela[4], tabela[5], tabela[6], tabela[7], tabela[8], tabela[9]) + gump:SetaDetalheInfoTexto(index+1, tabela[2], tabela[3], tabela[4], tabela[5], tabela[6], tabela[7], tabela[8], tabela[9], tabela[10], tabela[11], tabela[12]) end for i = #data+2, 5 do diff --git a/classes/class_heal.lua b/classes/class_heal.lua index 7dbd6eac..559cd779 100644 --- a/classes/class_heal.lua +++ b/classes/class_heal.lua @@ -2375,6 +2375,66 @@ function atributo_heal:MontaDetalhesHealingDone (spellid, barra) t3[6] = "" t3[7] = "" t3[8] = _detalhes:comma_value (esta_magia.anti_heal) .. " / " .. _cstr ("%.1f", porcentagem_anti_heal) .. "%" + + --empowered + elseif (esta_magia.e_total) then + local empowerLevelSum = esta_magia.e_total --total sum of empower levels + local empowerAmount = esta_magia.e_amt --amount of casts with empower + local empowerAmountPerLevel = esta_magia.e_lvl --{[1] = 4; [2] = 9; [3] = 15} + local empowerDamagePerLevel = esta_magia.e_heal --{[1] = 54548745, [2] = 74548745} + + data[3] = t3 + + local level1AverageDamage = "0" + local level2AverageDamage = "0" + local level3AverageDamage = "0" + local level4AverageDamage = "0" + local level5AverageDamage = "0" + + if (empowerDamagePerLevel[1]) then + level1AverageDamage = Details:ToK(empowerDamagePerLevel[1] / empowerAmountPerLevel[1]) + end + if (empowerDamagePerLevel[2]) then + level2AverageDamage = Details:ToK(empowerDamagePerLevel[2] / empowerAmountPerLevel[2]) + end + if (empowerDamagePerLevel[3]) then + level3AverageDamage = Details:ToK(empowerDamagePerLevel[3] / empowerAmountPerLevel[3]) + end + if (empowerDamagePerLevel[4]) then + level4AverageDamage = Details:ToK(empowerDamagePerLevel[4] / empowerAmountPerLevel[4]) + end + if (empowerDamagePerLevel[5]) then + level5AverageDamage = Details:ToK(empowerDamagePerLevel[5] / empowerAmountPerLevel[5]) + end + + t3[1] = 0 + t3[2] = {p = 100, c = {0.282353, 0.239216, 0.545098, 0.6}} + t3[3] = "Spell Empower Average Level: " .. format("%.2f", empowerLevelSum / empowerAmount) + t3[4] = "" + t3[5] = "" + t3[6] = "" + t3[10] = "" + t3[11] = "" + + if (level1AverageDamage ~= "0") then + t3[4] = "Level 1 Average: " .. level1AverageDamage .. " (" .. (empowerAmountPerLevel[1] or 0) .. ")" + end + + if (level2AverageDamage ~= "0") then + t3[6] = "Level 2 Average: " .. level2AverageDamage .. " (" .. (empowerAmountPerLevel[2] or 0) .. ")" + end + + if (level3AverageDamage ~= "0") then + t3[11] = "Level 3 Average: " .. level3AverageDamage .. " (" .. (empowerAmountPerLevel[3] or 0) .. ")" + end + + if (level4AverageDamage ~= "0") then + t3[10] = "Level 4 Average: " .. level4AverageDamage .. " (" .. (empowerAmountPerLevel[4] or 0) .. ")" + end + + if (level5AverageDamage ~= "0") then + t3[5] = "Level 5 Average: " .. level5AverageDamage .. " (" .. (empowerAmountPerLevel[5] or 0) .. ")" + end end -- for i = #data+1, 3 do --para o overheal aparecer na ultima barra diff --git a/core/parser.lua b/core/parser.lua index 0116b7c6..45b174cc 100755 --- a/core/parser.lua +++ b/core/parser.lua @@ -13,7 +13,7 @@ local UnitGUID = UnitGUID local IsInRaid = IsInRaid local IsInGroup = IsInGroup - local GetNumGroupMembers = GetNumGroupMembers + --local GetNumGroupMembers = GetNumGroupMembers local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo local GetTime = GetTime local tonumber = tonumber @@ -157,6 +157,8 @@ [10060] = true, --power infusion } + local empower_cache = {} + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --constants local container_misc = _detalhes.container_type.CONTAINER_MISC_CLASS @@ -1392,6 +1394,29 @@ end end + --empowerment data + if (empower_cache[who_serial]) then + local empowerSpellInfo = empower_cache[who_serial][spellname] + if (empowerSpellInfo) then + if (not empowerSpellInfo.counted) then + --total of empowerment + spell.e_total = (spell.e_total or 0) + empowerSpellInfo.empowerLevel --usado para calcular o average empowerment + --total amount of empowerment + spell.e_amt = (spell.e_amt or 0) + 1 --usado para calcular o average empowerment + + --amount of casts on each level + spell.e_lvl = spell.e_lvl or {} + spell.e_lvl[empowerSpellInfo.empowerLevel] = (spell.e_lvl[empowerSpellInfo.empowerLevel] or 0) + 1 + + empowerSpellInfo.counted = true + end + + --damage bracket + spell.e_dmg = spell.e_dmg or {} + spell.e_dmg[empowerSpellInfo.empowerLevel] = (spell.e_dmg[empowerSpellInfo.empowerLevel] or 0) + amount + end + end + if (trinketData[spellid] and _in_combat) then local thisData = trinketData[spellid] if (thisData.lastCombatId == _global_combat_counter) then @@ -1949,6 +1974,10 @@ function parser:spell_empower(token, time, sourceGUID, sourceName, sourceFlags, targetGUID, targetName, targetFlags, targetRaidFlags, spellId, spellName, spellSchool, empowerLevel) --empowerLevel only exists on _END and _INTERRUPT + if (token == "SPELL_EMPOWER_START" or token == "SPELL_EMPOWER_INTERRUPT") then + return + end + if (not empowerLevel) then return end @@ -1973,17 +2002,14 @@ return end - --actor spells table - local spellTable = sourceObject.spells._ActorTable[spellId] - if (not spellTable) then - spellTable = sourceObject.spells:PegaHabilidade(spellId, true, token) - spellTable.spellschool = spellSchool or 1 - end - - spellTable.e_lvl = (spellTable.e_lvl or 0) + empowerLevel - spellTable.e_amt = (spellTable.e_amt or 0) + 1 - - --print("spellTable.e_lvl", spellTable.e_lvl, "spellTable.e_amt", spellTable.e_amt, "average:", spellTable.e_lvl / spellTable.e_amt) + empower_cache[sourceGUID] = empower_cache[sourceGUID] or {} + local empowerTable = { + spellName = spellName, + empowerLevel = empowerLevel, + time = time, + counted = false, + } + empower_cache[sourceGUID][spellName] = empowerTable end --parser.spell_empower --10/30 15:32:11.515 SPELL_EMPOWER_START,Player-4184-00242A35,"Isodrak-Valdrakken",0x514,0x0,Player-4184-00242A35,"Isodrak-Valdrakken",0x514,0x0,382266,"Fire Breath",0x4 @@ -2494,6 +2520,29 @@ end end + --empowerment data + if (empower_cache[who_serial]) then + local empowerSpellInfo = empower_cache[who_serial][spellname] + if (empowerSpellInfo) then + if (not empowerSpellInfo.counted) then + --total of empowerment + spell.e_total = (spell.e_total or 0) + empowerSpellInfo.empowerLevel --usado para calcular o average empowerment + --total amount of empowerment + spell.e_amt = (spell.e_amt or 0) + 1 --usado para calcular o average empowerment + + --amount of casts on each level + spell.e_lvl = spell.e_lvl or {} + spell.e_lvl[empowerSpellInfo.empowerLevel] = (spell.e_lvl[empowerSpellInfo.empowerLevel] or 0) + 1 + + empowerSpellInfo.counted = true + end + + --healing bracket + spell.e_heal = spell.e_heal or {} + spell.e_heal[empowerSpellInfo.empowerLevel] = (spell.e_heal[empowerSpellInfo.empowerLevel] or 0) + cura_efetiva + end + end + if (is_shield) then --return spell:Add (alvo_serial, alvo_name, alvo_flags, cura_efetiva, who_name, 0, nil, overhealing, true) return spell_heal_func (spell, alvo_serial, alvo_name, alvo_flags, cura_efetiva, who_name, 0, nil, overhealing, true) @@ -5274,6 +5323,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 wipe(necro_cheat_deaths) --remove on 10.0 wipe(dk_pets_cache.army) wipe(dk_pets_cache.apoc) + wipe(empower_cache) --remove on 10.0 spikeball from painsmith spikeball_damage_cache = { @@ -5462,6 +5512,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 if (not OnRegenEnabled) then wipe(bitfield_swap_cache) + wipe(empower_cache) _detalhes:DispatchAutoRunCode("on_leavecombat") end @@ -6031,11 +6082,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 xpcall(saveNicktabCache, saver_error) end) - --10/30 15:32:11.515 SPELL_EMPOWER_START,Player-4184-00242A35,"Isodrak-Valdrakken",0x514,0x0,Player-4184-00242A35,"Isodrak-Valdrakken",0x514,0x0,382266,"Fire Breath",0x4 - --10/30 15:32:12.433 SPELL_EMPOWER_END,Player-4184-00242A35,"Isodrak-Valdrakken",0x514,0x0,0000000000000000,nil,0x80000000,0x80000000,382266,"Fire Breath",0x4,1 - --10/30 15:33:45.970 SPELL_EMPOWER_INTERRUPT,Player-4184-00218B4F,"Minng-Valdrakken",0x512,0x0,0000000000000000,nil,0x80000000,0x80000000,382266,"Fire Breath",0x4,1 - - -- ~parserstart ~startparser ~cleu + -- ~parserstart ~startparser ~cleu ~parser function _detalhes.OnParserEvent(...) local time, token, hidding, who_serial, who_name, who_flags, who_flags2, target_serial, target_name, target_flags, target_flags2, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12 = CombatLogGetCurrentEventInfo() @@ -6113,6 +6160,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 wipe(misc_cache_pets) wipe(misc_cache_petsOwners) wipe(npcid_cache) + wipe(empower_cache) wipe(ignore_death) @@ -6167,6 +6215,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 wipe(tanks_members_cache) wipe(auto_regen_cache) wipe(bitfield_swap_cache) + wipe(empower_cache) local roster = _detalhes.tabela_vigente.raid_roster diff --git a/frames/window_playerbreakdown.lua b/frames/window_playerbreakdown.lua index 6aa69518..f50b9477 100644 --- a/frames/window_playerbreakdown.lua +++ b/frames/window_playerbreakdown.lua @@ -628,6 +628,7 @@ function gump:CriaDetalheInfo(index) spellInfoBlock.middleStringUp = spellInfoBlock.bg:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") spellInfoBlock.middleStringDown = spellInfoBlock.bg:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + spellInfoBlock.middleStringMiddle = spellInfoBlock.bg:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") spellInfoBlock.bg.overlay = spellInfoBlock.bg:CreateTexture("DetailsPlayerDetailsWindow_DetalheInfoBG_Overlay" .. index, "ARTWORK") spellInfoBlock.bg.overlay:SetTexture("Interface\\AddOns\\Details\\images\\overlay_detalhes") @@ -719,15 +720,17 @@ function gump:SetaDetalheInfoAltura(index, xmod, ymod) spellInfoBlock.dano:SetPoint("TOPLEFT", background, "TOPLEFT", xOffset, yOffset + (-24)) spellInfoBlock.dano_media:SetPoint("TOPLEFT", background, "TOPLEFT", xOffset, yOffset + (-44)) - spellInfoBlock.nome2:SetPoint("TOPRIGHT", background, "TOPRIGHT", -xOffset + right, yOffset + (-2)) + spellInfoBlock.nome2:SetPoint("TOPRIGHT", background, "TOPRIGHT", -xOffset + right, yOffset + (-4)) spellInfoBlock.dano_porcento:SetPoint("TOPRIGHT", background, "TOPRIGHT", -xOffset + right, yOffset + (-24)) spellInfoBlock.dano_dps:SetPoint("TOPRIGHT", background, "TOPRIGHT", -xOffset + right, yOffset + (-44)) spellInfoBlock.middleStringUp:SetPoint("center", background, "center", 0, 0) - spellInfoBlock.middleStringUp:SetPoint("top", background, "top", 0, -2) + spellInfoBlock.middleStringUp:SetPoint("top", background, "top", 0, -7) spellInfoBlock.middleStringDown:SetPoint("center", background, "center", 0, 0) - spellInfoBlock.middleStringDown:SetPoint("bottom", background, "bottom", 0, 2) + spellInfoBlock.middleStringDown:SetPoint("bottom", background, "bottom", 0, 19) + + spellInfoBlock.middleStringMiddle:SetPoint("center", background, "center", 0, 6) spellInfoBlock.bg:SetPoint("TOPLEFT", background, "TOPLEFT", 1, -1) spellInfoBlock.bg:SetHeight(background:GetHeight() - 2) @@ -746,7 +749,7 @@ end --seta o conte�do da barra de detalhes ------------------------------------------------------------------------------------------------------------------------------ -function gump:SetaDetalheInfoTexto(index, data, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) +function gump:SetaDetalheInfoTexto(index, data, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) local spellInfoBlock = _detalhes.playerDetailWindow.grupos_detalhes[index] if (data) then @@ -808,6 +811,12 @@ function gump:SetaDetalheInfoTexto(index, data, arg1, arg2, arg3, arg4, arg5, ar spellInfoBlock.middleStringDown:SetText("") end + if (arg9) then + spellInfoBlock.middleStringMiddle:SetText(arg9) + else + spellInfoBlock.middleStringMiddle:SetText("") + end + spellInfoBlock.nome:Show() spellInfoBlock.dano:Show() spellInfoBlock.dano_porcento:Show() @@ -816,6 +825,8 @@ function gump:SetaDetalheInfoTexto(index, data, arg1, arg2, arg3, arg4, arg5, ar spellInfoBlock.nome2:Show() spellInfoBlock.middleStringUp:Show() spellInfoBlock.middleStringDown:Show() + spellInfoBlock.middleStringDown:Show() + spellInfoBlock.middleStringMiddle:Show() end --cria as 5 caixas de detalhes infos que ser�o usados