From a89566905104ee92610d7c5e1a50dcb3e2053c3c Mon Sep 17 00:00:00 2001 From: shagu Date: Tue, 26 Sep 2017 22:57:13 +0200 Subject: [PATCH] api: unify pattern conversion for gfind --- api/api.lua | 20 ++++++++++++++++++++ modules/castbar.lua | 28 ++++++++++++++-------------- modules/debuffs.lua | 27 +++++++++++++-------------- 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/api/api.lua b/api/api.lua index 6de0c033..7fe730c2 100644 --- a/api/api.lua +++ b/api/api.lua @@ -85,6 +85,26 @@ function pfUI.api.round(input, places) end end +-- [ SanitizePattern ] +-- Sanitizes and convert patterns into gfind compatible ones. +-- 'pattern' [string] unformatted pattern +-- returns: [string] simplified gfind compatible pattern +function SanitizePattern(pattern) + -- escape brackets + pattern = gsub(pattern, "%(", "%%(") + pattern = gsub(pattern, "%)", "%%)") + + -- remove bad capture indexes + pattern = gsub(pattern, "%d%$s","s") -- %1$s to %s + pattern = gsub(pattern, "%ds","s") -- %2s to %s + + -- add capture to all findings + pattern = gsub(pattern, "%%s", "(.+)") + pattern = gsub(pattern, "%%d", "(%%d+)") + + return pattern +end + -- [ GetItemLinkByName ] -- Returns an itemLink for the given itemname -- 'name' [string] name of the item diff --git a/modules/castbar.lua b/modules/castbar.lua index 47ad86d2..cad166d3 100644 --- a/modules/castbar.lua +++ b/modules/castbar.lua @@ -406,16 +406,16 @@ pfUI:RegisterModule("castbar", function () end end) - pfUI.castbar.target.SPELL_CAST = string.gsub(string.gsub(SPELLCASTOTHERSTART,"%d%$",""), "%%s", "(.+)") - pfUI.castbar.target.SPELL_PERFORM = string.gsub(string.gsub(SPELLPERFORMOTHERSTART,"%d%$",""), "%%s", "(.+)") - pfUI.castbar.target.SPELL_GAINS = string.gsub(string.gsub(AURAADDEDOTHERHELPFUL,"%d%$",""), "%%s", "(.+)") - pfUI.castbar.target.SPELL_AFFLICTED = string.gsub(string.gsub(AURAADDEDOTHERHARMFUL,"%d%$",""), "%%s", "(.+)") - pfUI.castbar.target.SPELL_HIT = string.gsub(string.gsub(string.gsub(SPELLLOGSELFOTHER,"%d%$",""),"%%d","%%d+"),"%%s","(.+)") - pfUI.castbar.target.SPELL_CRIT = string.gsub(string.gsub(string.gsub(SPELLLOGCRITSELFOTHER,"%d%$",""),"%%d","%%d+"),"%%s","(.+)") - pfUI.castbar.target.OTHER_SPELL_HIT = string.gsub(string.gsub(string.gsub(SPELLLOGOTHEROTHER,"%d%$",""), "%%s", "(.+)"), "%%d", "%%d+") - pfUI.castbar.target.OTHER_SPELL_CRIT = string.gsub(string.gsub(string.gsub(SPELLLOGOTHEROTHER,"%d%$",""), "%%s", "(.+)"), "%%d", "%%d+") - pfUI.castbar.target.SPELL_INTERRUPT = string.gsub(string.gsub(SPELLINTERRUPTSELFOTHER, "%d%$",""),"%%s","(.+)") - pfUI.castbar.target.OTHER_SPELL_INTERRUPT = string.gsub(string.gsub(SPELLINTERRUPTOTHEROTHER,"%d%$",""),"%%s", "(.+)") + pfUI.castbar.target.SPELL_CAST = SanitizePattern(SPELLCASTOTHERSTART) + pfUI.castbar.target.SPELL_PERFORM = SanitizePattern(SPELLPERFORMOTHERSTART) + pfUI.castbar.target.SPELL_GAINS = SanitizePattern(AURAADDEDOTHERHELPFUL) + pfUI.castbar.target.SPELL_AFFLICTED = SanitizePattern(AURAADDEDOTHERHARMFUL) + pfUI.castbar.target.SPELL_HIT = SanitizePattern(SPELLLOGSELFOTHER) + pfUI.castbar.target.SPELL_CRIT = SanitizePattern(SPELLLOGCRITSELFOTHER) + pfUI.castbar.target.OTHER_SPELL_HIT = SanitizePattern(SPELLLOGOTHEROTHER) + pfUI.castbar.target.OTHER_SPELL_CRIT = SanitizePattern(SPELLLOGOTHEROTHER) + pfUI.castbar.target.SPELL_INTERRUPT = SanitizePattern(SPELLINTERRUPTSELFOTHER) + pfUI.castbar.target.OTHER_SPELL_INTERRUPT = SanitizePattern(SPELLINTERRUPTOTHEROTHER) pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE") pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE") @@ -478,25 +478,25 @@ pfUI:RegisterModule("castbar", function () return end - -- Your (.+) hits (.+) for %d+. + -- Your (.+) hits (.+) for (%d+). for spell, mob in string.gfind(arg1, pfUI.castbar.target.SPELL_HIT) do pfUI.castbar.target:StopAction(mob, spell) return end - -- Your (.+) crits (.+) for %d+. + -- Your (.+) crits (.+) for (%d+). for spell, mob in string.gfind(arg1, pfUI.castbar.target.SPELL_CRIT) do pfUI.castbar.target:StopAction(mob, spell) return end - -- (.+)'s (.+) %a hits (.+) for %d+. + -- (.+)'s (.+) %a hits (.+) for (%d+). for _, spell, mob in string.gfind(arg1, pfUI.castbar.target.OTHER_SPELL_HIT) do pfUI.castbar.target:StopAction(mob, spell) return end - -- (.+)'s (.+) %a crits (.+) for %d+. + -- (.+)'s (.+) %a crits (.+) for (%d+). for _, spell, mob in string.gfind(arg1, pfUI.castbar.target.OTHER_SPELL_CRIT) do pfUI.castbar.target:StopAction(mob, spell) return diff --git a/modules/debuffs.lua b/modules/debuffs.lua index 8872750d..d4fff9f8 100644 --- a/modules/debuffs.lua +++ b/modules/debuffs.lua @@ -14,23 +14,23 @@ pfUI:RegisterModule("debuffs", function () pfUI.debuffs.active = true -- CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE // CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE - pfUI.debuffs.AURAADDEDOTHERHARMFUL = gsub(gsub(gsub(gsub(gsub(AURAADDEDOTHERHARMFUL, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") + pfUI.debuffs.AURAADDEDOTHERHARMFUL = SanitizePattern(AURAADDEDOTHERHARMFUL) -- CHAT_MSG_SPELL_FAILED_LOCALPLAYER - pfUI.debuffs.SPELLFAILCASTSELF = gsub(gsub(gsub(gsub(gsub(SPELLFAILCASTSELF, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLFAILPERFORMSELF = gsub(gsub(gsub(gsub(gsub(SPELLFAILPERFORMSELF, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLIMMUNESELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLIMMUNESELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") + pfUI.debuffs.SPELLFAILCASTSELF = SanitizePattern(SPELLFAILCASTSELF) + pfUI.debuffs.SPELLFAILPERFORMSELF = SanitizePattern(SPELLFAILPERFORMSELF) + pfUI.debuffs.SPELLIMMUNESELFOTHER = SanitizePattern(SPELLIMMUNESELFOTHER) -- CHAT_MSG_SPELL_SELF_DAMAGE - pfUI.debuffs.IMMUNEDAMAGECLASSSELFOTHER = gsub(gsub(gsub(gsub(gsub(IMMUNEDAMAGECLASSSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLMISSSELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLMISSSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLRESISTSELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLRESISTSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLEVADEDSELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLEVADEDSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLDODGEDSELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLDODGEDSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLDEFLECTEDSELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLDEFLECTEDSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLREFLECTSELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLREFLECTSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLPARRIEDSELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLPARRIEDSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") - pfUI.debuffs.SPELLLOGABSORBSELFOTHER = gsub(gsub(gsub(gsub(gsub(SPELLLOGABSORBSELFOTHER, "%(", "%%("), "%)", "%%)"), "%d%$",""), "%%s", "(.+)"), "%%d", "(%%d+)") + pfUI.debuffs.IMMUNEDAMAGECLASSSELFOTHER = SanitizePattern(IMMUNEDAMAGECLASSSELFOTHER) + pfUI.debuffs.SPELLMISSSELFOTHER = SanitizePattern(SPELLMISSSELFOTHER) + pfUI.debuffs.SPELLRESISTSELFOTHER = SanitizePattern(SPELLRESISTSELFOTHER) + pfUI.debuffs.SPELLEVADEDSELFOTHER = SanitizePattern(SPELLEVADEDSELFOTHER) + pfUI.debuffs.SPELLDODGEDSELFOTHER = SanitizePattern(SPELLDODGEDSELFOTHER) + pfUI.debuffs.SPELLDEFLECTEDSELFOTHER = SanitizePattern(SPELLDEFLECTEDSELFOTHER) + pfUI.debuffs.SPELLREFLECTSELFOTHER = SanitizePattern(SPELLREFLECTSELFOTHER) + pfUI.debuffs.SPELLPARRIEDSELFOTHER = SanitizePattern(SPELLPARRIEDSELFOTHER) + pfUI.debuffs.SPELLLOGABSORBSELFOTHER = SanitizePattern(SPELLLOGABSORBSELFOTHER) pfUI.debuffs.objects = {} @@ -198,7 +198,6 @@ pfUI:RegisterModule("debuffs", function () function pfUI.debuffs:AddEffect(unit, unitlevel, effect) if not unit or not effect then return end unitlevel = unitlevel or 0 - --message("add effect " .. unit .. "(" .. unitlevel .. ") - " .. effect) if not pfUI.debuffs.objects[unit] then pfUI.debuffs.objects[unit] = {} end if not pfUI.debuffs.objects[unit][unitlevel] then pfUI.debuffs.objects[unit][unitlevel] = {} end if not pfUI.debuffs.objects[unit][unitlevel][effect] then pfUI.debuffs.objects[unit][unitlevel][effect] = {} end