View Single Post
08-12-23, 12:22 PM   #1
Infinite-Loop-Alchemist
A Murloc Raider
 
Infinite-Loop-Alchemist's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2023
Posts: 7
Exclamation The data gets stored, but wont Display in the tooltip for Killing Spree

I'm having a problem with my addon CritMatic. It records The highest Crits and Normals for every spell. It works for every spell but Killing Spree. Been Trying every thing I can think of for a week now. (Finally broke down to ask for help.) I think I know the cause or at least why is not working as expected. I Think Killing Spree has more then 1 icon Id or spell ids.
Code:
print(CombatLogGetCurrentEventInfo())
Shows 3 Different iconIDs and 10 attacks I thought I was 5 attacks?.
The IconID from idTip addon says
236277
but
print("Spell Name: ".. spellName .. GetSpellTexture(spellID))
-- shows
132369
132345

The data gets recorded by Spell Name but not displayed in a tooltip.
/dump CritMaticData["Killing Spree"]
--[1]={
--highestCrit=2337,
--spellIcon=132345,
--highestHealCrit=0,
--highestNormal=1325,
--highestHeal=0
--}
Here's the my addons git repo Currently working in the killingspree branch.
https://github.com/InfiniteLoopAlchemist/CritMatic
Here's parts of the code that's important, if you don't want to leave wow Interface.
Code:
local CritMaticLeft = "Highest Crit: "
      local CritMaticRight = tostring(CritMaticData[spellName].highestCrit) .. " (" .. format("%.1f", critDPS) .. " DPS)"
      local normalMaticLeft = "Highest Normal: "
      local normalMaticRight = tostring(CritMaticData[spellName].highestNormal) .. " (" .. format("%.1f", normalDPS) .. " DPS)"

local critMaticExists = false
local normalMaticExists = false

for i = 1, self:NumLines() do
        local gtl = _G["GameTooltipTextLeft" .. i]
        local gtr = _G["GameTooltipTextRight" .. i]

        if gtl and gtr then
          -- Healing related
          if gtl:GetText() == CritMaticHealLeft and gtr:GetText() == CritMaticHealRight then
            critMaticHealExists = true
          elseif gtl:GetText() == normalMaticHealLeft and gtr:GetText() == normalMaticHealRight then
            normalMaticHealExists = true
          end
          -- Damage related
          if gtl:GetText() == CritMaticLeft and gtr:GetText() == CritMaticRight then
            critMaticExists = true
          elseif gtl:GetText() == normalMaticLeft and gtr:GetText() == normalMaticRight then
            normalMaticExists = true
          end
        end
      end

      if CritMaticData[spellName].highestHeal > 0 or CritMaticData[spellName].highestHealCrit > 0 then
        -- If lines don't exist, add them.
        if not critMaticHealExists then
          self:AddDoubleLine(CritMaticHealLeft, CritMaticHealRight)
          _G["GameTooltipTextLeft" .. self:NumLines()]:SetTextColor(1, 1, 1) -- left side color (white)
          _G["GameTooltipTextRight" .. self:NumLines()]:SetTextColor(1, 0.82, 0) -- right side color (white)
        end

        if not normalMaticHealExists then
          self:AddDoubleLine(normalMaticHealLeft, normalMaticHealRight)
          _G["GameTooltipTextLeft" .. self:NumLines()]:SetTextColor(1, 1, 1) -- left side color (white)
          _G["GameTooltipTextRight" .. self:NumLines()]:SetTextColor(1, 0.82, 0) -- right side color (white)
        end
      end

      --if CritMaticData[spellName].highestNormal > 0 or CritMaticData[spellName].highestCrit > 0 or CritMaticData["Killing Spree"].highestCrit > 0 or CritMaticData["Killing Spree"].highestNormal > 0 then
      if CritMaticData[spellName].highestNormal > 0 or CritMaticData[spellName].highestCrit > 0 then
        -- This is a damaging spell
        if not critMaticExists then
          self:AddDoubleLine(CritMaticLeft, CritMaticRight)
          _G["GameTooltipTextLeft" .. self:NumLines()]:SetTextColor(1, 1, 1) -- left side color (white)
          _G["GameTooltipTextRight" .. self:NumLines()]:SetTextColor(1, 0.82, 0) -- right side color (white)
        end
        if not normalMaticExists then
          self:AddDoubleLine(normalMaticLeft, normalMaticRight)
          _G["GameTooltipTextLeft" .. self:NumLines()]:SetTextColor(1, 1, 1) -- left side color (white)
          _G["GameTooltipTextRight" .. self:NumLines()]:SetTextColor(1, 0.82, 0) -- right side color (white)
        end
      end

local isKillingSpreeActive = false
local killingSpreeDamage = 0
local killingSpreeCritDamage = 0
local killingSpreeCount = 0  -- Get information about the combat event.
local killingSpreeCritCount = 0

if event == "UNIT_SPELLCAST_SUCCEEDED" then
    local unitTarget, castGUID, spellID = ...
    local spellName = GetSpellInfo(spellID)
    if unitTarget == "player" and spellName == "Killing Spree" then
      isKillingSpreeActive = true
      killingSpreeDamage = 0
      killingSpreeCritDamage = 0
      killingSpreeCount = 0
      killingSpreeCritCount = 0
    end

if spellName then
        CritMaticData[baseSpellName] = CritMaticData[baseSpellName] or {
          highestCrit = 0,
          highestNormal = 0,
          highestHeal = 0,
          highestHealCrit = 0,
         -- spellIcon = baseSpellName == "Killing Spree" and GetSpellTexture(57842) or GetSpellTexture(spellID)
          spellIcon = GetSpellTexture(spellID)
        }

        --print(CombatLogGetCurrentEventInfo())

        --print("Spell Name: ".. spellName .. GetSpellTexture(spellID))
        if isKillingSpreeActive and baseSpellName == "Killing Spree" then
          print("[Debug] Killing Spree attack detected. Damage:", amount)  -- Debug: Damage of the current attack
          if critical then
            print("[Debug] This attack was a critical hit!")  -- Debug: Indicate if the attack was a critical hit
            killingSpreeCritDamage = killingSpreeCritDamage + amount
            killingSpreeCritCount = killingSpreeCritCount + 1
          else
            killingSpreeDamage = killingSpreeDamage + amount
          end
          killingSpreeCount = killingSpreeCount + 1
          print("[Debug] Attack count so far:", killingSpreeCount)  -- Debug: Track the number of attacks
          if killingSpreeCount >= 5 then
            print("[Debug] Killing Spree ended. Total Damage:", killingSpreeDamage, "Total Crit Damage:", killingSpreeCritDamage)  -- Debug: Total damage and crit damage after 5 attacks
            isKillingSpreeActive = false

            if killingSpreeCritCount > 0 then

              if killingSpreeCritDamage + killingSpreeDamage > CritMaticData[baseSpellName].highestCrit then
                print("[Debug] New highest critical damage recorded for Killing Spree:", killingSpreeCritDamage)  -- Debug: New highest critical damage
                CritMaticData["Killing Spree"].highestCrit = killingSpreeCritDamage + killingSpreeDamage
                PlaySound(888, "SFX")
                CritMatic.ShowNewCritMessage(baseSpellName, killingSpreeCritDamage + killingSpreeDamage)
                print("New highest crit hit for " .. baseSpellName .. ": " .. CritMaticData[baseSpellName].highestCrit)
                --print(" crit saved! " .. baseSpellName .. ": " .. CritMaticData[spellName].highestCrit)
              end
            else
              if killingSpreeDamage > CritMaticData[baseSpellName].highestNormal then
                print("[Debug] New highest normal damage recorded for Killing Spree:", killingSpreeDamage)  -- Debug: New highest normal damage
                CritMaticData["Killing Spree"].highestNormal = killingSpreeDamage
                PlaySound(10049, "SFX")
                CritMatic.ShowNewNormalMessage(baseSpellName, killingSpreeDamage)
                print("New highest normal hit for " .. baseSpellName .. ": " .. CritMaticData[baseSpellName].highestNormal)
                --print("normal saved " .. baseSpellName .. ": " .. CritMaticData[spellName].highestNormal)
              end
            end
            killingSpreeCount = 0
            killingSpreeDamage = 0
            killingSpreeCritDamage = 0
            killingSpreeCritCount = 0
          end
  Reply With Quote