Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .pkgmeta
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ externals:
tag: latest
Libs/LibKeystone:
url: https://github.com/BigWigsMods/LibKeystone.git/LibKeystone
Libs/LibDurability:
url: https://repos.wowace.com/wow/libdurability/trunk/LibDurability

enable-nolib-creation: no

Expand Down
46 changes: 46 additions & 0 deletions EllesmereUI.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4343,6 +4343,52 @@ function EllesmereUI.GetClassColor(classToken)
return EllesmereUI._colorCache.class[classToken] or EllesmereUI._COLOR_WHITE
end

-- Where durability stops being cosmetic: the point the tint reaches full red
-- and the point a check flags someone. One number, because a module that
-- paints "alarming" at one threshold and reports it at another is telling the
-- user two different things about the same gear.
EllesmereUI.DURABILITY_LOW = 20

-- Durability tint: white at full, fading to soft red over the range above
-- DURABILITY_LOW, and fully red at or below it.
--
-- The game exposes no colour scale for this, so the suite owns one, and it
-- lives here because more than one module shows durability: the DataBars block
-- and the Raid Tools consumable check must not drift apart on what "low" looks
-- like.
function EllesmereUI.GetDurabilityColor(pct)
local low = EllesmereUI.DURABILITY_LOW
local t = ((pct or 100) - low) * (100 / (100 - low))
if t < 0 then t = 0 elseif t > 100 then t = 100 end
local gb = 0.35 + 0.65 * (t / 100)
return 1, gb, gb
end

-- Weapon enchant summary in the legacy GetWeaponEnchantInfo tuple shape:
-- hasMH, mhExpireMs, mhCharges, mhEnchantID, hasOH, ohExpireMs, ohCharges,
-- ohEnchantID.
--
-- Prefers C_PaperDollInfo.GetTemporaryEnchantmentInfo where it exists: on 12.1
-- GetWeaponEnchantInfo is a deprecation-CVar shim. remainingTimeMs matches the
-- legacy ms expiration values one to one, so a call site written against the
-- old API reads the new one unchanged.
--
-- Here rather than in a module because two of them ask this question -- Aura
-- Buff Reminders nags you to re-oil, the Raid Tools consumable check reports it
-- to the raid -- and a second copy would mean the 12.1 workaround living in
-- only one of them. Same reasoning as EllesmereUI_RaidBuffs.lua.
function EllesmereUI.WeaponEnchants()
if C_PaperDollInfo and C_PaperDollInfo.GetTemporaryEnchantmentInfo then
local mh = C_PaperDollInfo.GetTemporaryEnchantmentInfo(INVSLOT_MAINHAND)
local oh = C_PaperDollInfo.GetTemporaryEnchantmentInfo(INVSLOT_OFFHAND)
return (mh and true or false), mh and mh.remainingTimeMs,
mh and mh.chargesRemaining, mh and mh.enchantID,
(oh and true or false), oh and oh.remainingTimeMs,
oh and oh.chargesRemaining, oh and oh.enchantID
end
return GetWeaponEnchantInfo()
end

-- Get power color (cached, darken baked in). Returns nil for unknown keys.
function EllesmereUI.GetPowerColor(powerKey)
if EllesmereUI._colorCacheDirty then EllesmereUI._RebuildColorCache() end
Expand Down
6 changes: 6 additions & 0 deletions EllesmereUI.toc
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua
Libs\LibSharedMedia-3.0\LibSharedMedia-3.0.lua
Libs\LibDeflate\LibDeflate.lua
Libs\LibKeystone\LibKeystone.lua
# Durability of other players is not readable locally; every addon that shows
# it speaks this library's channel, so embedding it means our users appear in
# other addons' raid checks and theirs appear in ours. Embedded unmodified.
Libs\LibDurability\LibDurability.lua

# Lightweight addon framework (replaces Ace3)
EllesmereUI_Lite.lua
Expand Down Expand Up @@ -63,6 +67,8 @@ EUI_PartyMode_Options.lua
EllesmereUI_Glows.lua
EllesmereUI_Range.lua
EllesmereUI_AuraKit.lua
EllesmereUI_RaidBuffs.lua
EllesmereUI_Comms.lua
EllesmereUI_FirstInstall.lua
EllesmereUI_RaidFramesPopup.lua
EllesmereUI_PatchNotesPopup.lua
Expand Down
44 changes: 14 additions & 30 deletions EllesmereUIAuraBuffReminders/EllesmereUIAuraBuffReminders.lua
Original file line number Diff line number Diff line change
Expand Up @@ -874,36 +874,20 @@ _G._EABR_SpellName = function(spellID, fallback)
return n or fallback
end

-- Weapon enchant summary in the legacy GetWeaponEnchantInfo tuple shape:
-- hasMH, mhExpireMs, mhCharges, mhEnchantID, hasOH, ohExpireMs, ohCharges,
-- ohEnchantID. Prefers C_PaperDollInfo.GetTemporaryEnchantmentInfo where it
-- exists (12.1: GetWeaponEnchantInfo is a deprecation-CVar shim there);
-- remainingTimeMs matches the legacy ms expiration values one to one.
-- Stored on EABR, not a file local (this file runs at the 200-local cap).
EABR.WeaponEnchants = function()
if C_PaperDollInfo and C_PaperDollInfo.GetTemporaryEnchantmentInfo then
local mh = C_PaperDollInfo.GetTemporaryEnchantmentInfo(INVSLOT_MAINHAND)
local oh = C_PaperDollInfo.GetTemporaryEnchantmentInfo(INVSLOT_OFFHAND)
return (mh and true or false), mh and mh.remainingTimeMs,
mh and mh.chargesRemaining, mh and mh.enchantID,
(oh and true or false), oh and oh.remainingTimeMs,
oh and oh.chargesRemaining, oh and oh.enchantID
end
return GetWeaponEnchantInfo()
end

local RAID_BUFFS = {
{ key="motw", class="DRUID", name="Mark of the Wild", castSpell=1126, buffIDs={1126,432661}, check="raid" },
{ key="bshout", class="WARRIOR", name="Battle Shout", castSpell=6673, buffIDs={6673}, check="raid", benefit="attackPower" },
{ key="fort", class="PRIEST", name="Power Word: Fortitude", castSpell=21562, buffIDs={21562}, check="raid" },
{ key="ai", class="MAGE", name="Arcane Intellect", castSpell=1459, buffIDs={1459,432778}, check="raid", benefit="intellect" },
{ key="bronze", class="EVOKER", name="Blessing of the Bronze", castSpell=364342,
buffIDs={381732,381741,381746,381748,381749,381750,381751,381752,381753,381754,381756,381757,381758},
check="raid" },
{ key="sky", class="SHAMAN", name="Skyfury", castSpell=462854, buffIDs={462854}, check="raid" },
-- Hunter's Mark: disabled (under maintenance)
-- { key="hmark", class="HUNTER", name="Hunter's Mark", castSpell=257284, buffIDs={257284}, check="huntersMark" },
}
-- Moved to EllesmereUI.WeaponEnchants in the parent: the Raid Tools consumable
-- check asks the same question, and a second copy would mean the 12.1
-- deprecation workaround living in only one of the two. Same move, and same
-- reason, as RAID_BUFFS just below.
--
-- Still a field on EABR rather than a file local: the call sites below are
-- unchanged that way, and this file runs at the 200-local cap.
EABR.WeaponEnchants = EllesmereUI.WeaponEnchants

-- Moved to EllesmereUI_RaidBuffs.lua in the parent: the Raid Tools consumable
-- check needs the same answers, and a second copy would mean two lists to
-- update with one of them silently wrong. Every child has the parent, so
-- neither module now depends on the other being enabled.
local RAID_BUFFS = EllesmereUI.RaidBuffs

-------------------------------------------------------------------------------
-- SPELL DATA Auras (some non-secret, some still OOC-only)
Expand Down
12 changes: 4 additions & 8 deletions EllesmereUIDataBars/EllesmereUIDataBars_Blocks.lua
Original file line number Diff line number Diff line change
Expand Up @@ -302,14 +302,10 @@ function ns.BlockIconDefault(bType)
return ns.GetAccent()
end
if bType == "durability" then
-- White (100%) fading to soft red (1, 0.35, 0.35). The gradient
-- spans 20..100: at or below 20% durability the tint is already
-- fully red.
local pct = _lastDurabilityPct or 100
local t = (pct - 20) * (100 / 80)
if t < 0 then t = 0 elseif t > 100 then t = 100 end
local gb = 0.35 + 0.65 * (t / 100)
return 1, gb, gb
-- Shared with the Raid Tools consumable check, which shows the same
-- reading for everyone in the group: one ramp, so "low" looks the same
-- wherever the suite says it.
return EllesmereUI.GetDurabilityColor(_lastDurabilityPct)
end
local d = ICON_DEFAULTS[bType]
if d then return d[1], d[2], d[3] end
Expand Down
47 changes: 47 additions & 0 deletions EllesmereUIQoL/EUI_QoL_RaidTools_Options.lua
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,53 @@ initFrame:SetScript("OnEvent", function(self)
_, h = W:DualRow(parent, y, PullSlider(1), PullSlider(2)); y = y - h
_, h = W:DualRow(parent, y, PullSlider(3), { type="spacer" }); y = y - h

-- RAID CHECK
--
-- Its own feature in its own file and its own profile slice, but its
-- controls live here: it is triggered by a ready check, and the ready
-- check button is on this page. Page grouping is a UI decision, not a
-- DB one. Every read and write goes through the ns accessors the
-- feature publishes, so this page knows nothing about its slice.
_, h = W:SectionHeader(parent, "RAID CHECK", y); y = y - h

local function RCDisabled() return not ns.RaidCheckEnabled() end

_, h = W:DualRow(parent, y,
{ type = "toggle", text = "Show on Ready Check",
tooltip = "Lists every group member against the consumables a raid expects -- flask, food, augment rune, vantus -- whenever a ready check starts, whoever started it.",
getValue = ns.RaidCheckEnabled,
setValue = function(v)
ns.RaidCheckEnabled(v)
EllesmereUI:RefreshPage()
end },
{ type = "toggle", text = "Show Without Lead or Assist",
tooltip = "Shows the window even when you can do nothing about what it reports. Every column is read from your own client, so this view is complete rather than degraded.",
disabled = RCDisabled,
getValue = ns.RaidCheckShowWithoutRank,
setValue = ns.RaidCheckShowWithoutRank }
); y = y - h

_, h = W:DualRow(parent, y,
{ type = "slider", text = "Raid Check Window Scale", min = 0.5, max = 2.0, step = 0.05,
disabled = RCDisabled,
getValue = ns.RaidCheckScale,
setValue = ns.RaidCheckScale },
{ type = "toggle", text = "Hide Inapplicable Columns",
tooltip = "Drops columns nothing in this group can satisfy instead of greying them: no mage means no Intellect column, and a Mythic+ key means no Vantus. Turn off to keep every column in place whatever the group.",
disabled = RCDisabled,
getValue = ns.RaidCheckHideInapplicable,
setValue = ns.RaidCheckHideInapplicable }
); y = y - h

_, h = W:DualRow(parent, y,
{ type = "toggle", text = "Show Only Players Missing Something",
tooltip = "Lists only the people something is actually wrong with, so a thirty-man roster becomes the three names you need to whisper. Someone whose client has not reported yet is not counted as missing.",
disabled = RCDisabled,
getValue = ns.RaidCheckHideReady,
setValue = ns.RaidCheckHideReady },
{ type = "label", text = "" }
); y = y - h

return math.abs(y)
end

Expand Down
1 change: 1 addition & 0 deletions EllesmereUIQoL/EllesmereUIQoL.toc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ EllesmereUIQoL_TeleportPrompt.lua
EllesmereUIQoL_Shifter.lua
EllesmereUIQoL_MovementAlert.lua
EllesmereUIQoL_RaidTools.lua
EllesmereUIQoL_RaidCheck.lua
EUI_UpgradeCalc.lua

# Options
Expand Down
Loading
Loading