From 3fd8ece1ffbb3e8ac72eceacbb9584f2d01dc92d Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Thu, 28 May 2026 22:58:16 +0200 Subject: [PATCH 1/5] Surface 'Mute error sound' as a System-page checkbox Move the Sound_EnableErrorSpeech toggle out of the Faster Looting cog sub-panel into a top-level checkbox on the System page (Graphics and Sound). The handler is now standalone and applies on login + on click regardless of the Faster Looting feature, instead of only existing when faster auto loot was enabled. Removes the buried duplicate and stops the loot-panel reset from clobbering the setting. --- Leatrix_Plus/Leatrix_Plus.lua | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/Leatrix_Plus/Leatrix_Plus.lua b/Leatrix_Plus/Leatrix_Plus.lua index 96538b9..0a166c0 100644 --- a/Leatrix_Plus/Leatrix_Plus.lua +++ b/Leatrix_Plus/Leatrix_Plus.lua @@ -1761,6 +1761,22 @@ function LeaPlusLC:Isolated() end + ---------------------------------------------------------------------- + -- Mute error sound (standalone, independent of Faster Looting) + ---------------------------------------------------------------------- + + do + local function SetMuteErrorSpeech() + if LeaPlusLC["MuteErrorSpeech"] == "On" then + SetCVar("Sound_EnableErrorSpeech", 0) + else + SetCVar("Sound_EnableErrorSpeech", 1) + end + end + SetMuteErrorSpeech() + LeaPlusCB["MuteErrorSpeech"]:HookScript("OnClick", SetMuteErrorSpeech) + end + ---------------------------------------------------------------------- -- Faster looting ---------------------------------------------------------------------- @@ -1785,7 +1801,7 @@ function LeaPlusLC:Isolated() LeaPlusLC:MakeCB(FasterLootPanel, "FasterErrorFrame", "Faster Error Frame", 16, -112, false, "If checked, your red error text frame, will be faster to fade|n(1 second instead of 5).") LeaPlusLC:MakeCB(FasterLootPanel, "NoLootWorldforged", "Skip auto-loot for Worldforged items", 16, -132, false, "If checked, worldforged items will be left in the loot window instead of being auto-looted, so you can decide which ones to keep.") LeaPlusLC:MakeCB(FasterLootPanel, "HideCooldownErrors", "Hide 'Ability not ready' warnings", 16, -152, false, "If checked, the red 'Ability not ready', 'Spell is not ready' and 'Another action is in progress' messages are suppressed.|nOther errors (out of range, line of sight, etc.) still appear.") - LeaPlusLC:MakeCB(FasterLootPanel, "MuteErrorSpeech", "Mute error sound", 16, -172, false, "If checked, the spoken error sound (e.g. \"I can't do that yet\") is silenced.|nToggles the Sound_EnableErrorSpeech CVar.") + -- "Mute error sound" moved to its own checkbox on the System page (see MuteErrorSpeech on Page7) LeaPlusLC:MakeTx(FasterLootPanel, "Full Inventory Sound", 356, -72) LeaPlusLC:MakeSL(FasterLootPanel, "FullInvSound", "Drag to set the desired sound played when your inventory is Full. Set 0 to disable sound.", 0, 3, 1, 356, -92, "%.0f") @@ -1842,19 +1858,9 @@ function LeaPlusLC:Isolated() LeaPlusLC.cooldownErrorFilterInstalled = true end - local function SetMuteErrorSpeech() - if LeaPlusLC["MuteErrorSpeech"] == "On" then - SetCVar("Sound_EnableErrorSpeech", 0) - else - SetCVar("Sound_EnableErrorSpeech", 1) - end - end - SetMuteErrorSpeech() - LeaPlusCB["FullInvSound"]:HookScript("OnValueChanged", SetFullInvSliderText) LeaPlusCB["SmallerErrorFrame"]:HookScript("OnClick", SetErrorFrameHeight) LeaPlusCB["FasterErrorFrame"]:HookScript("OnClick", SetErroFrameFadeTime) - LeaPlusCB["MuteErrorSpeech"]:HookScript("OnClick", SetMuteErrorSpeech) @@ -1877,11 +1883,9 @@ function LeaPlusLC:Isolated() LeaPlusLC["FasterErrorFrame"] = "Off" LeaPlusLC["NoLootWorldforged"] = "Off" LeaPlusLC["HideCooldownErrors"] = "Off" - LeaPlusLC["MuteErrorSpeech"] = "Off" LeaPlusLC["FullInvSound"] = 1 UIErrorsFrame:SetHeight(60) UIErrorsFrame:SetTimeVisible(5) - SetCVar("Sound_EnableErrorSpeech", 1) -- Refresh panel FasterLootPanel:Hide(); FasterLootPanel:Show() @@ -20445,6 +20449,7 @@ LeaPlusLC:MakeCB(LeaPlusLC[pg], "SetWeatherDensity", "Set weather density", 146, LeaPlusLC:MakeCB(LeaPlusLC[pg], "MaxCameraZoom", "Max camera zoom", 146, -152, false, "If checked, you will be able to zoom out to a greater distance.") LeaPlusLC:MakeCB(LeaPlusLC[pg], "ViewPortEnable", "Enable viewport", 146, -172, true, "If checked, you will be able to create a viewport. A viewport adds adjustable black borders around the game world.|n|nThe borders are placed on top of the game world but under the UI so you can place UI elements over them.") LeaPlusLC:MakeCB(LeaPlusLC[pg], "NoRestedEmotes", "Silence rested emotes", 146, -192, true, "If checked, emote sounds will be silenced while your character is resting or at the Grim Guzzler.|n|nEmote sounds will be enabled at all other times.") +LeaPlusLC:MakeCB(LeaPlusLC[pg], "MuteErrorSpeech", "Mute error sound", 146, -212, false, "If checked, the spoken error sound (e.g. \"I can't do that yet\", \"Not enough rage\") is silenced for all failed casts, spells and attacks.|n|nToggles the Sound_EnableErrorSpeech CVar.") --LeaPlusLC:MakeCB(LeaPlusLC[pg], "MuteGameSounds" , "Mute game sounds" , 146, -212, false, "If checked, you will be able to mute a selection of game sounds.") --LeaPlusLC:MakeCB(LeaPlusLC[pg], "MuteCustomSounds" , "Mute custom sounds" , 146, -232, false, "If checked, you will be able to mute your own choice of sounds.") From d6395b3592ec4b3bd9b9a71c6fc3f5923ae8ff00 Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Fri, 29 May 2026 10:43:54 +0200 Subject: [PATCH 2/5] fix(minimap): correct stale right-click tooltip strings --- Leatrix_Plus/Leatrix_Plus.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Leatrix_Plus/Leatrix_Plus.lua b/Leatrix_Plus/Leatrix_Plus.lua index 0a166c0..abaa418 100644 --- a/Leatrix_Plus/Leatrix_Plus.lua +++ b/Leatrix_Plus/Leatrix_Plus.lua @@ -11398,7 +11398,7 @@ function LeaPlusLC:Player() end tooltip:AddLine("Leatrix Plus") tooltip:AddLine("|cffeda55fClick|r |cff99ff00to open Leatrix Plus options.|r") - tooltip:AddLine("|cffeda55fRight-Click|r |cff99ff00to reload the user interface.|r") + tooltip:AddLine("|cffeda55fRight-Click|r |cff99ff00to open Leatrix Plus options.|r") -- Toggle error message line color based on HideErrorMessages state if LeaPlusLC["HideErrorMessages"] == "On" then @@ -20478,7 +20478,7 @@ LeaPlusLC:CfgBtn("ModFasterLootingBtn", LeaPlusCB["FasterLooting"]) pg = "Page8"; LeaPlusLC:MakeTx(LeaPlusLC[pg], "Addon", 146, -72); -LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowMinimapIcon", "Show minimap button", 146, -92, false, "If checked, a minimap button will be available.|n|nClick - Toggle options panel.|n|nRight-Click - Reload UI.") +LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowMinimapIcon", "Show minimap button", 146, -92, false, "If checked, a minimap button will be available.|n|nClick - Toggle options panel.|n|nRight-Click - Toggle options panel.") -- todo: add more minimap button click functions --LeaPlusLC:MakeCB(LeaPlusLC[pg], "ShowMinimapIcon" , "Show minimap button" , 146, -92, false, "If checked, a minimap button will be available.|n|nClick - Toggle options panel.|n|nSHIFT-click - Toggle music.|n|nALT-click - Toggle errors (if enabled).|n|nCTRL/SHIFT-click - Toggle Zygor (if installed).|n|nCTRL/ALT-click - Toggle windowed mode.") From a671b0871f8f9474a3d5159a75beaa7696b07ef8 Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Fri, 29 May 2026 20:51:16 +0200 Subject: [PATCH 3/5] ci(release): hide auto-generated source archives (hide_archive_links) --- .gitea/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 709a7cd..1b1b66b 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -37,7 +37,7 @@ jobs: RID=$(curl -sf -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ "$API/repos/$REPO/releases" \ - -d "$(jq -nc --arg t "$TAG" '{tag_name:$t,name:$t,draft:false,prerelease:false}')" \ + -d "$(jq -nc --arg t "$TAG" '{tag_name:$t,name:$t,draft:false,prerelease:false,hide_archive_links:true}')" \ | jq -r '.id') fi echo "release id: $RID" From b459963a295dfb6e7e985fda9333c51ea9c70f1b Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Wed, 10 Jun 2026 02:11:46 +0200 Subject: [PATCH 4/5] ci(release): sync release.yml from coa-template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hide_archive_links is only honored by Gitea on release edit, not create — add the PATCH step after create/lookup so auto-generated source archive links actually stay hidden (coa-template 90874c5). --- .gitea/workflows/release.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 1b1b66b..2f93975 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -41,6 +41,10 @@ jobs: | jq -r '.id') fi echo "release id: $RID" + # Gitea honors hide_archive_links only on edit, not create — PATCH it + # so the auto-generated Source Code (zip/tar.gz) links stay hidden. + curl -sf -X PATCH -H "Authorization: token $GITEA_TOKEN" -H "Content-Type: application/json" \ + "$API/repos/$REPO/releases/$RID" -d '{"hide_archive_links":true}' >/dev/null || true # Upload every dist/*.zip. Per-asset failures don't fail the job — # we want partial releases to still publish rather than block the # whole pipeline on one big file. From 1b23a9179f705ff8eaa19db00cb6e7a36fefc063 Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Wed, 10 Jun 2026 02:15:23 +0200 Subject: [PATCH 5/5] fix: guard GetNumClasses in cooldown-table path with CLASS_SORT_ORDER fallback --- Leatrix_Plus/Leatrix_Plus.lua | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Leatrix_Plus/Leatrix_Plus.lua b/Leatrix_Plus/Leatrix_Plus.lua index abaa418..35b3081 100644 --- a/Leatrix_Plus/Leatrix_Plus.lua +++ b/Leatrix_Plus/Leatrix_Plus.lua @@ -20068,9 +20068,17 @@ function LeaPlusLC:SlashFunc(str) -- Create class tables (dynamic: covers DEATHKNIGHT and CoA custom classes) local classList = {} - for i = 1, GetNumClasses() do - local _, classFile = GetClassInfo(i) - if classFile then tinsert(classList, classFile) end + if GetNumClasses then + for i = 1, GetNumClasses() do + local _, classFile = GetClassInfo(i) + if classFile then tinsert(classList, classFile) end + end + elseif CLASS_SORT_ORDER then + -- CoA: GetNumClasses/GetClassInfo are FrameXML additions that may + -- be absent; fall back to the stock class token list + for i = 1, #CLASS_SORT_ORDER do + tinsert(classList, CLASS_SORT_ORDER[i]) + end end for index = 1, #classList do if LeaPlusDB["Cooldowns"][classList[index]] == nil then