fix: include CoA custom classes in portrait/totems/raid-grouping
portrait.lua: guard CLASS_ICON_TCOORDS[classToken] lookup. CoA custom classes (Witchdoctor, Templar, …) have no entry in the vanilla CLASS_ICON_TCOORDS table, so the old SetTexCoord call crashed with a nil-index whenever a custom-class unit was shown. Cache the lookup into a local and fall through to blank texture on miss. totems.lua: file-level class gate registered the totem bar only for SHAMAN (and a 1-slot DK guardian variant), locking out Witchdoctor and any future CoA totem class. Probe MAX_TOTEMS > 1 / HasMultiCastActionBar (Bartender's pattern) and register without a class filter when the player has the multi-cast totem bar, so any CoA totem class picks it up. units.lua: raid-header groupingOrder was the hardcoded 10-class vanilla string, which dumped the 11 CoA custom classes into an unsorted tail when GROUP BY CLASS was active. Build the order dynamically from RAID_CLASS_COLORS (CoA populates this with all 21 classes via the CUSTOM_CLASS_COLORS mechanism) at the call site.
This commit is contained in:
@@ -70,10 +70,12 @@ function Portrait:Update(frame, event)
|
|||||||
-- Use class thingy
|
-- Use class thingy
|
||||||
if( type == "class" ) then
|
if( type == "class" ) then
|
||||||
local classToken = select(2, UnitClass(frame.unitOwner))
|
local classToken = select(2, UnitClass(frame.unitOwner))
|
||||||
if( classToken ) then
|
local coords = classToken and CLASS_ICON_TCOORDS[classToken]
|
||||||
|
if( coords ) then
|
||||||
frame.portrait:SetTexture("Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes")
|
frame.portrait:SetTexture("Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes")
|
||||||
frame.portrait:SetTexCoord(CLASS_ICON_TCOORDS[classToken][1], CLASS_ICON_TCOORDS[classToken][2], CLASS_ICON_TCOORDS[classToken][3], CLASS_ICON_TCOORDS[classToken][4])
|
frame.portrait:SetTexCoord(coords[1], coords[2], coords[3], coords[4])
|
||||||
else
|
else
|
||||||
|
-- CoA custom classes (Witchdoctor/Templar/…) have no CLASS_ICON_TCOORDS entry; blank instead of crash
|
||||||
frame.portrait:SetTexture("")
|
frame.portrait:SetTexture("")
|
||||||
end
|
end
|
||||||
-- Use 2D character image
|
-- Use 2D character image
|
||||||
|
|||||||
@@ -3,11 +3,23 @@ local totemColors = {}
|
|||||||
local MAX_TOTEMS = MAX_TOTEMS
|
local MAX_TOTEMS = MAX_TOTEMS
|
||||||
|
|
||||||
-- Death Knights untalented ghouls are guardians and are considered totems........... so set it up for them
|
-- Death Knights untalented ghouls are guardians and are considered totems........... so set it up for them
|
||||||
if( select(2, UnitClass("player")) == "DEATHKNIGHT" ) then
|
local playerClass = select(2, UnitClass("player"))
|
||||||
|
if( playerClass == "DEATHKNIGHT" ) then
|
||||||
MAX_TOTEMS = 1
|
MAX_TOTEMS = 1
|
||||||
ShadowUF:RegisterModule(Totems, "totemBar", ShadowUF.L["Guardian bar"], true, "DEATHKNIGHT")
|
ShadowUF:RegisterModule(Totems, "totemBar", ShadowUF.L["Guardian bar"], true, "DEATHKNIGHT")
|
||||||
else
|
else
|
||||||
ShadowUF:RegisterModule(Totems, "totemBar", ShadowUF.L["Totem bar"], true, "SHAMAN")
|
-- CoA: SHAMAN is the vanilla totem class, but CoA custom classes (Witchdoctor, …) also use the
|
||||||
|
-- multi-cast totem bar. Detect via MAX_TOTEMS > 1 (set by FrameXML for totem classes) or the
|
||||||
|
-- HasMultiCastActionBar API (Bartender uses the same probe). Register with class=nil so the
|
||||||
|
-- module is available to any CoA totem class, not just SHAMAN.
|
||||||
|
local hasTotems = (MAX_TOTEMS and MAX_TOTEMS > 1)
|
||||||
|
or (type(HasMultiCastActionBar) == "function" and HasMultiCastActionBar())
|
||||||
|
or playerClass == "SHAMAN"
|
||||||
|
if( hasTotems ) then
|
||||||
|
ShadowUF:RegisterModule(Totems, "totemBar", ShadowUF.L["Totem bar"], true)
|
||||||
|
else
|
||||||
|
ShadowUF:RegisterModule(Totems, "totemBar", ShadowUF.L["Totem bar"], true, "SHAMAN")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Totems:OnEnable(frame)
|
function Totems:OnEnable(frame)
|
||||||
|
|||||||
@@ -753,7 +753,15 @@ function Units:SetHeaderAttributes(frame, type)
|
|||||||
frame:SetAttribute("groupFilter", filter or "1,2,3,4,5,6,7,8")
|
frame:SetAttribute("groupFilter", filter or "1,2,3,4,5,6,7,8")
|
||||||
|
|
||||||
if( config.groupBy == "CLASS" ) then
|
if( config.groupBy == "CLASS" ) then
|
||||||
frame:SetAttribute("groupingOrder", "DEATHKNIGHT,DRUID,HUNTER,MAGE,PALADIN,PRIEST,ROGUE,SHAMAN,WARLOCK,WARRIOR")
|
-- CoA: build groupingOrder dynamically from RAID_CLASS_COLORS so all 21 CoA custom
|
||||||
|
-- classes (populated via CUSTOM_CLASS_COLORS) are included. Hardcoding the 10
|
||||||
|
-- vanilla classes silently drops Witchdoctor/Templar/… into an unsorted tail.
|
||||||
|
local orderedClasses = {}
|
||||||
|
for classToken in pairs(RAID_CLASS_COLORS) do
|
||||||
|
table.insert(orderedClasses, classToken)
|
||||||
|
end
|
||||||
|
table.sort(orderedClasses)
|
||||||
|
frame:SetAttribute("groupingOrder", table.concat(orderedClasses, ","))
|
||||||
frame:SetAttribute("groupBy", "CLASS")
|
frame:SetAttribute("groupBy", "CLASS")
|
||||||
else
|
else
|
||||||
frame:SetAttribute("groupingOrder", "1,2,3,4,5,6,7,8")
|
frame:SetAttribute("groupingOrder", "1,2,3,4,5,6,7,8")
|
||||||
|
|||||||
Reference in New Issue
Block a user