Files
florian.berthold 4b284d9521 fix(Interrupt): correct destFlags arg position; guard InterfaceOptionsFrame_OpenToCategory
modules/Interrupt.lua: the COMBAT_LOG_EVENT_UNFILTERED handler had destFlags at

arg position 9 (pre-RaidFlags layout); on 3.3.5 the signature is

(event, ts, subevent, hideCaster, srcGUID, srcName, srcFlags, srcRaidFlags,

 destGUID, destName, destFlags, destRaidFlags, spellId, spellName, spellSchool, ...).

destFlags is the 11th function parameter. Rewrite the parameter list with

all named args through spellSchool so the 0x511 (player + raid + me) bitmask

check on destFlags fires correctly and the SPELL_INTERRUPT path actually

recolors Player.Bar on the local player.

Config.lua: ChatCommand() called InterfaceOptionsFrame_OpenToCategory()

unconditionally. That global is nil on CoA's 3.3.5 client, so /quartz and /q3

with no arg threw 'attempt to call global ... (a nil value)'. Wrap with a

presence check and fall back to AceConfigDialog-3.0:Open("Quartz3").

luac -p clean on both files. libs/ untouched (coa-ace3-managed).
2026-05-24 17:39:28 +02:00

220 lines
6.3 KiB
Lua

--[[
Copyright (C) 2006-2007 Nymbia
Copyright (C) 2010 Hendrik "Nevcairiel" Leppkes < h.leppkes@gmail.com >
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
]]
local Quartz3 = LibStub("AceAddon-3.0"):GetAddon("Quartz3")
local L = LibStub("AceLocale-3.0"):GetLocale("Quartz3")
local media = LibStub("LibSharedMedia-3.0")
----------------------------
-- Upvalues
-- GLOBALS: LibStub, InterfaceOptionsFrame_OpenToCategory
local pairs, unpack, type = pairs, unpack, type
local getOpt, setOpt, getColor, setColor
do
function getOpt(info)
local key = info[#info]
return Quartz3.db.profile[key]
end
function setOpt(info, value)
local key = info[#info]
Quartz3.db.profile[key] = value
Quartz3:ApplySettings()
end
function getColor(info)
return unpack(getOpt(info))
end
function setColor(info, r, g, b, a)
setOpt(info, {r, g, b, a})
end
end
local options, moduleOptions = nil, {}
local function getOptions()
if not options then
options = {
type = "group",
args = {
general = {
type = "group",
inline = true,
name = "",
args = {
unlock = {
type = "execute",
name = L["Toggle Bar Lock"],
desc = L["Unlock the Bars to be able to move them around."],
func = function()
Quartz3:ToggleLock(true)
end,
order = 50,
},
nllock = {
type = "description",
name = "",
order = 51,
},
hidesamwise = {
type = "toggle",
name = L["Hide Samwise Icon"],
desc = L["Hide the icon for spells with no icon"],
order = 101,
get = getOpt,
set = setOpt,
},
casttimeprecision = {
type = "range",
name = L["Cast Time Precision"],
desc = L["Number of decimals to show for the Cast Time"],
min = 0, max = 3, step = 1,
get = getOpt,
set = setOpt,
order = 102,
},
colors = {
type = "group",
name = L["Colors"],
desc = L["Colors"],
guiInline = true,
order = 450,
get = getColor,
set = setColor,
args = {
spelltextcolor = {
type = "color",
name = L["Spell Text"],
desc = L["Set the color of the %s"]:format(L["Spell Text"]),
order = 98,
},
timetextcolor = {
type = "color",
name = L["Time Text"],
desc = L["Set the color of the %s"]:format(L["Time Text"]),
order = 98,
},
header = {
type = "header",
name = "",
order = 99,
},
castingcolor = {
type = "color",
name = L["Casting"],
desc = L["Set the color of the cast bar when %s"]:format(L["Casting"]),
},
channelingcolor = {
type = "color",
name = L["Channeling"],
desc = L["Set the color of the cast bar when %s"]:format(L["Channeling"]),
},
completecolor = {
type = "color",
name = L["Complete"],
desc = L["Set the color of the cast bar when %s"]:format(L["Complete"]),
},
failcolor = {
type = "color",
name = L["Failed"],
desc = L["Set the color of the cast bar when %s"]:format(L["Failed"]),
},
sparkcolor = {
type = "color",
name = L["Spark Color"],
desc = L["Set the color of the casting bar spark"],
hasAlpha = true,
},
nl1 = {
type = "description",
name = "",
order = 101,
},
backgroundcolor = {
type = "color",
name = L["Background"],
desc = L["Set the color of the casting bar background"],
order = 102,
},
backgroundalpha = {
type = "range",
name = L["Background Alpha"],
desc = L["Set the alpha of the casting bar background"],
isPercent = true,
min = 0, max = 1, bigStep = 0.025,
get = getOpt,
set = setOpt,
order = 103,
},
bordercolor = {
type = "color",
name = L["Border"],
desc = L["Set the color of the casting bar border"],
order = 104,
},
borderalpha = {
type = "range",
name = L["Border Alpha"],
desc = L["Set the alpha of the casting bar border"],
isPercent = true,
min = 0, max = 1, bigStep = 0.025,
get = getOpt,
set = setOpt,
order = 105,
},
},
},
},
},
},
}
for k,v in pairs(moduleOptions) do
options.args[k] = (type(v) == "function") and v() or v
end
end
return options
end
function Quartz3:ChatCommand(input)
if not input or input:trim() == "" then
if InterfaceOptionsFrame_OpenToCategory then
InterfaceOptionsFrame_OpenToCategory(Quartz3.optFrames.Profiles)
InterfaceOptionsFrame_OpenToCategory(Quartz3.optFrames.Quartz3)
else
LibStub("AceConfigDialog-3.0"):Open("Quartz3")
end
else
LibStub("AceConfigCmd-3.0").HandleCommand(Quartz3, "quartz", "Quartz3", input)
end
end
function Quartz3:SetupOptions()
self.optFrames = {}
LibStub("AceConfigRegistry-3.0"):RegisterOptionsTable("Quartz3", getOptions)
self.optFrames.Quartz3 = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Quartz3", "Quartz 3", nil, "general")
self:RegisterModuleOptions("Profiles", LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db), "Profiles")
self:RegisterChatCommand("quartz", "ChatCommand")
self:RegisterChatCommand("q3", "ChatCommand")
end
function Quartz3:RegisterModuleOptions(name, optTable, displayName)
moduleOptions[name] = optTable
self.optFrames[name] = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Quartz3", displayName or name, "Quartz 3", name)
end