From b64115dbc4f94f5569f6e27a61962cb9546034a7 Mon Sep 17 00:00:00 2001 From: praxis <889+praxis@noreply.octowow.st> Date: Sun, 13 Sep 2026 09:51:24 +0000 Subject: [PATCH] Add modules/combopoints.lua --- modules/combopoints.lua | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 modules/combopoints.lua diff --git a/modules/combopoints.lua b/modules/combopoints.lua new file mode 100644 index 0000000..f874974 --- /dev/null +++ b/modules/combopoints.lua @@ -0,0 +1,93 @@ +pfUI:RegisterModule("combopoints", "vanilla:tbc", function () + local rawborder, border = GetBorderSize() + + -- Hide Blizzard combo point frame and unregister all events to prevent it from popping up again + ComboFrame:Hide() + ComboFrame:UnregisterAllEvents() + + local _, class = UnitClass("player") + local combo_width = C["unitframes"]["combowidth"] + local combo_height = C["unitframes"]["comboheight"] + pfUI.combopoints = {} + + for point = 1, 5 do + pfUI.combopoints[point] = CreateFrame("Frame", "pfCombo" .. point, UIParent) + pfUI.combopoints[point]:SetFrameStrata("HIGH") + pfUI.combopoints[point]:SetWidth(combo_width) + pfUI.combopoints[point]:SetHeight(combo_height) + pfUI.combopoints[point]:Hide() + + if pfUI.uf.target then + pfUI.combopoints[point]:SetPoint("TOPLEFT", pfUI.uf.target, "TOPRIGHT", border*3, -(point - 1) * (combo_height + border*3)) + else + pfUI.combopoints[point]:SetPoint("CENTER", UIParent, "CENTER", (point - 3) * (combo_width + border*3), 10 ) + end + + pfUI.combopoints[point].tex = pfUI.combopoints[point]:CreateTexture("OVERLAY") + pfUI.combopoints[point].tex:SetAllPoints(pfUI.combopoints[point]) + + if point < 3 then + pfUI.combopoints[point].tex:SetTexture(1, .3, .3, .75) + elseif point < 4 then + pfUI.combopoints[point].tex:SetTexture(1, 1, .3, .75) + else + pfUI.combopoints[point].tex:SetTexture(.3, 1, .3, .75) + end + + UpdateMovable(pfUI.combopoints[point]) + CreateBackdrop(pfUI.combopoints[point]) + CreateBackdropShadow(pfUI.combopoints[point]) + end + + function pfUI.combopoints:DisplayNum(num) + for point=1, num do + pfUI.combopoints[point]:Show() + end + + for point=num+1, 5 do + pfUI.combopoints[point]:Hide() + end + end + + -- combo + if class == "DRUID" or class == "ROGUE" then + local combo = CreateFrame("Frame") + combo:RegisterEvent("UNIT_COMBO_POINTS") + combo:RegisterEvent("PLAYER_COMBO_POINTS") + combo:RegisterEvent("PLAYER_TARGET_CHANGED") + combo:RegisterEvent("PLAYER_ENTERING_WORLD") + combo:SetScript("OnEvent", function() + pfUI.combopoints:DisplayNum(GetComboPoints("target")) + end) + + -- reck + elseif class == "PALADIN" then + local reck = CreateFrame("Frame") + reck:RegisterEvent("CHARACTER_POINTS_CHANGED") + reck:RegisterEvent("PLAYER_DEAD") + reck:RegisterEvent("CHAT_MSG_COMBAT_SELF_HITS") + reck:RegisterEvent("CHAT_MSG_COMBAT_SELF_CRITS") + reck:RegisterEvent("CHAT_MSG_COMBAT_SELF_MISSES") + reck:RegisterEvent("CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS") + reck:RegisterEvent("CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS") + + local COMBATHITCRITOTHERSELF = SanitizePattern(COMBATHITCRITOTHERSELF) + local COMBATHITCRITSCHOOLOTHERSELF = SanitizePattern(COMBATHITCRITSCHOOLOTHERSELF) + + reck:SetScript("OnEvent", function() + if not this.rank or event == "CHARACTER_POINTS_CHANGED" then + _,_,_,_,this.rank = GetTalentInfo(2,13) + end + + if event == "PLAYER_DEAD" or event == "CHAT_MSG_COMBAT_SELF_HITS" or event == "CHAT_MSG_COMBAT_SELF_CRITS" or event == "CHAT_MSG_COMBAT_SELF_MISSES" then + this.stacks = 0 + pfUI.combopoints:DisplayNum(0) + elseif arg1 and this.rank and this.rank == 5 and this.stacks and this.stacks < 4 then + if strfind(arg1, COMBATHITCRITOTHERSELF) or strfind(arg1, COMBATHITCRITSCHOOLOTHERSELF) then + this.stacks = this.stacks + 1 + pfUI.combopoints:DisplayNum(this.stacks) + end + end + end) + end +end)