├── CompactRaidFrame ├── CUFProfiles │ ├── CUFProfilesAPI.lua │ ├── CompactUnitFrameProfiles.lua │ └── CompactUnitFrameProfiles.xml ├── CompactPartyFrame.lua ├── CompactPartyFrame.xml ├── CompactRaidFrame.toc ├── CompactRaidFrames │ ├── CompactRaidFrameContainer.lua │ ├── CompactRaidFrameContainer.xml │ ├── CompactRaidFrameManager.lua │ ├── CompactRaidFrameManager.xml │ └── CompactRaidFrameReservationManager.lua ├── CompactRaidGroup.lua ├── CompactRaidGroup.xml ├── CompactUnitFrame.lua ├── CompactUnitFrame.xml ├── Dependence │ ├── API.lua │ ├── Atlas.lua │ ├── AuraUtil.lua │ ├── C_LossOfControl.lua │ ├── C_Texture.lua │ ├── C_TimerAugment.lua │ ├── Color.lua │ ├── MathUtil.lua │ ├── Mixin.lua │ ├── NineSlice.lua │ ├── PartyUtil.lua │ ├── PixelUtil.lua │ ├── SharedExtendedMethods.lua │ ├── TextureUtil.lua │ └── load.xml ├── FlowContainer.lua ├── Libs │ ├── AceAddon-3.0 │ │ ├── AceAddon-3.0.lua │ │ └── AceAddon-3.0.xml │ ├── AceComm-3.0 │ │ ├── AceComm-3.0.lua │ │ ├── AceComm-3.0.xml │ │ └── ChatThrottleLib.lua │ ├── AceConsole-3.0 │ │ ├── AceConsole-3.0.lua │ │ └── AceConsole-3.0.xml │ ├── AceDB-3.0 │ │ ├── AceDB-3.0.lua │ │ └── AceDB-3.0.xml │ ├── AceEvent-3.0 │ │ ├── AceEvent-3.0.lua │ │ └── AceEvent-3.0.xml │ ├── AceSerializer-3.0 │ │ ├── AceSerializer-3.0.lua │ │ └── AceSerializer-3.0.xml │ ├── AceTimer-3.0 │ │ ├── AceTimer-3.0.lua │ │ └── AceTimer-3.0.xml │ ├── CallbackHandler-1.0 │ │ ├── CallbackHandler-1.0.lua │ │ └── CallbackHandler-1.0.xml │ ├── LibBetterBlizzOptions-1.0 │ │ ├── LibBetterBlizzOptions-1.0.lua │ │ └── lib.xml │ ├── LibCUFAuras-1.0 │ │ ├── CanApplyAura.lua │ │ ├── HealingTarkenEffect.lua │ │ ├── LibCUFAuras-1.0.lua │ │ ├── SpellGetVisibilityInfo.lua │ │ ├── init.lua │ │ └── lib.xml │ ├── LibGroupTalents-1.0 │ │ ├── LibGroupTalents-1.0.lua │ │ └── LibGroupTalents-1.0.xml │ ├── LibHealComm-4.0 │ │ ├── ChatThrottleLib.lua │ │ ├── LibHealComm-4.0.lua │ │ └── LibHealComm-4.0.xml │ ├── LibResComm-1.0 │ │ ├── LibResComm-1.0.lua │ │ └── LibResComm-1.0.xml │ ├── LibStub │ │ └── LibStub.lua │ ├── LibTalentQuery-1.0 │ │ ├── LibTalentQuery-1.0.lua │ │ └── LibTalentQuery-1.0.xml │ └── SpecializedAbsorbs-1.0 │ │ ├── SpecializedAbsorbs-1.0.lua │ │ └── SpecializedAbsorbs-1.0.xml ├── Locales │ ├── enUS.lua │ ├── frFR.lua │ ├── ruRU.lua │ └── zhCN.lua ├── Media │ ├── Buttons │ │ ├── UI-CheckBox-Check-Disabled.blp │ │ ├── UI-CheckBox-Check.blp │ │ ├── UI-CheckBox-Down.blp │ │ ├── UI-CheckBox-Highlight.blp │ │ ├── UI-CheckBox-Up.blp │ │ ├── UI-Common-MouseHilight.blp │ │ ├── UI-Debuff-Overlays.blp │ │ ├── UI-GroupLoot-Pass-Up.blp │ │ ├── UI-Panel-Button-Highlight.blp │ │ ├── UI-Panel-Button-Up.blp │ │ ├── UI-Panel-Button-YellowHighlight.blp │ │ ├── UI-RADIOBUTTON.blp │ │ ├── UI-SILVER-BUTTON-DOWN.blp │ │ ├── UI-SILVER-BUTTON-HIGHLIGHT.blp │ │ ├── UI-SILVER-BUTTON-UP.blp │ │ └── UI-SliderBar-Button-Horizontal.blp │ ├── CHATFRAME │ │ ├── ChatFrameExpandArrow.blp │ │ ├── UI-ChatIcon-ScrollDown-Down.blp │ │ ├── UI-ChatIcon-ScrollDown-Up.blp │ │ ├── UI-ChatIcon-ScrollEnd-Disabled.blp │ │ ├── UI-ChatInputBorder-Left2.blp │ │ ├── UI-ChatInputBorder-Mid2.blp │ │ └── UI-ChatInputBorder-Right2.blp │ ├── COMMON │ │ └── UI-DropDownRadioChecks.blp │ ├── CastingBar │ │ └── UI-CastingBar-Spark.blp │ ├── Cooldown │ │ ├── cooldown.blp │ │ └── edge.blp │ ├── DialogFrame │ │ └── UI-DialogBox-Background-Dark.blp │ ├── FrameGeneral │ │ ├── !UI-Frame.blp │ │ ├── GeneralFrameInsetBorders.blp │ │ ├── GeneralFrameInsetBordersHorizontal.blp │ │ ├── UI-Background-Marble.blp │ │ ├── UI-Background-Rock.blp │ │ ├── UI-Background-TestWatermark.blp │ │ ├── UI-Background-TestWatermarkBackground.blp │ │ ├── UI-Frame.blp │ │ ├── UIFrame2x.blp │ │ ├── UIFrame2xHorizontal.blp │ │ ├── UIFrame2xVertical.blp │ │ ├── UIFrameAlliance.blp │ │ ├── UIFrameAllianceBackground.blp │ │ ├── UIFrameAllianceVertical.blp │ │ ├── UIFrameBars.blp │ │ ├── UIFrameDiamondMetal.blp │ │ ├── UIFrameDiamondMetal2x.blp │ │ ├── UIFrameDiamondMetalHeader2x.blp │ │ ├── UIFrameDiamondMetalVertical.blp │ │ ├── UIFrameDiamondMetalVertical2x.blp │ │ ├── UIFrameGenericMetal.blp │ │ ├── UIFrameGenericMetalVertical.blp │ │ ├── UIFrameHiRes.blp │ │ ├── UIFrameHiResHorizontal.blp │ │ ├── UIFrameHiResVertical.blp │ │ ├── UIFrameHorde.blp │ │ ├── UIFrameHordeBackground.blp │ │ ├── UIFrameHordeVertical.blp │ │ ├── UIFrameHorizontal.blp │ │ ├── UIFrameIconBorder.blp │ │ ├── UIFrameIconMask.blp │ │ ├── UIFrameMarine.blp │ │ ├── UIFrameMarineBackground.blp │ │ ├── UIFrameMarineVertical.blp │ │ ├── UIFrameMechagon.blp │ │ ├── UIFrameMechagonBackground.blp │ │ ├── UIFrameMechagonVertical.blp │ │ ├── UIFrameMertal2xVertical.blp │ │ ├── UIFrameMetal.blp │ │ ├── UIFrameMetal2x.blp │ │ ├── UIFrameMetalHorizontal.blp │ │ ├── UIFrameMetalHorizontal2x.blp │ │ ├── UIFrameMetalVertical.blp │ │ ├── UIFrameMetalVertical2x.blp │ │ ├── UIFrameNeutral.blp │ │ ├── UIFrameNeutralBackground.blp │ │ ├── UIFrameNeutralVertical.blp │ │ ├── UIFramePortrait.blp │ │ ├── UIFramePortraitVertical.blp │ │ ├── UIFrameRoleIcons.blp │ │ ├── UIFrameSimpleMetal.blp │ │ ├── UIFrameSimpleMetalVertical.blp │ │ ├── UIFrameVertical.blp │ │ └── _UI-Frame.blp │ ├── FriendsFrame │ │ ├── InformationIcon-Highlight.blp │ │ └── InformationIcon.blp │ ├── GLUES │ │ └── CHARACTERCREATE │ │ │ └── CharacterCreate-LabelFrame.blp │ ├── LFGFRAME │ │ └── LFGROLE.blp │ ├── QUESTFRAME │ │ └── UI-QuestTitleHighlight.blp │ ├── RAIDFRAME │ │ ├── Absorb-Edge.blp │ │ ├── Absorb-Fill.blp │ │ ├── Absorb-Overabsorb.blp │ │ ├── Raid-Bar-Hp-Bg.blp │ │ ├── Raid-Bar-Hp-Fill.blp │ │ ├── Raid-Bar-Resource-Background.blp │ │ ├── Raid-Bar-Resource-Fill.blp │ │ ├── Raid-FrameHighlights.blp │ │ ├── Raid-HSeparator.blp │ │ ├── Raid-Icon-DebuffCurse.blp │ │ ├── Raid-Icon-DebuffDisease.blp │ │ ├── Raid-Icon-DebuffMagic.blp │ │ ├── Raid-Icon-DebuffPoison.blp │ │ ├── Raid-Icon-Rez.blp │ │ ├── Raid-Icon-SummonAccepted.blp │ │ ├── Raid-Icon-SummonDeclined.blp │ │ ├── Raid-Icon-SummonPending.blp │ │ ├── Raid-Move-BottomFade.blp │ │ ├── Raid-Move-Down.blp │ │ ├── Raid-Move-TopFade.blp │ │ ├── Raid-Move-Up.blp │ │ ├── Raid-VSeparator.blp │ │ ├── Raid-WorldPing.blp │ │ ├── RaidBorder-BottomLeft.blp │ │ ├── RaidBorder-BottomMiddle.blp │ │ ├── RaidBorder-BottomRight.blp │ │ ├── RaidBorder-Left.blp │ │ ├── RaidBorder-Right.blp │ │ ├── RaidBorder-UpperLeft.blp │ │ ├── RaidBorder-UpperMiddle.blp │ │ ├── RaidBorder-UpperRight.blp │ │ ├── RaidFrameSummon.blp │ │ ├── RaidPanel-BottomLeft.blp │ │ ├── RaidPanel-BottomMiddle.blp │ │ ├── RaidPanel-BottomRight.blp │ │ ├── RaidPanel-Left.blp │ │ ├── RaidPanel-Right.blp │ │ ├── RaidPanel-Toggle.blp │ │ ├── RaidPanel-UpperLeft.blp │ │ ├── RaidPanel-UpperMiddle.blp │ │ ├── RaidPanel-UpperRight.blp │ │ ├── ReadyCheck-NotReady.blp │ │ ├── ReadyCheck-Ready.blp │ │ ├── ReadyCheck-Waiting.blp │ │ ├── Shield-Fill.blp │ │ ├── Shield-Overlay.blp │ │ ├── Shield-Overshield.blp │ │ ├── UI-RAIDFRAME-ARROW.blp │ │ ├── UI-RAIDFRAME-HEALTHBAR.blp │ │ ├── UI-RAIDFRAME-MAINASSIST.blp │ │ ├── UI-RAIDFRAME-MAINTANK.blp │ │ ├── UI-RAIDINFO-HEADER.blp │ │ ├── UI-RaidFrame-GroupBg.blp │ │ ├── UI-RaidFrame-GroupButton.blp │ │ ├── UI-RaidFrame-GroupOutline.blp │ │ ├── UI-RaidFrame-Pets.blp │ │ ├── UI-RaidFrame-Threat.blp │ │ └── UI-ReadyCheckFrame.blp │ ├── Sounds │ │ └── SOUNDKIT │ │ │ ├── 158565.ogg │ │ │ ├── 158566.ogg │ │ │ ├── 158958.ogg │ │ │ ├── 34468.ogg │ │ │ ├── 852.ogg │ │ │ └── 856.ogg │ └── TARGETINGFRAME │ │ ├── NameplateFill.blp │ │ ├── UI-RaidTargetingIcons.blp │ │ ├── UI-StatusBar.blp │ │ └── UI-TargetingFrame-BarFill.blp ├── Templates │ ├── Backdrop.lua │ ├── Backdrop.xml │ ├── SecureUIPanelTemplates.xml │ ├── SharedUIPanelTemplates.lua │ ├── SharedUIPanelTemplates.xml │ ├── UIDropDownMenu.lua │ └── load.xml ├── embeds.xml └── locales.xml └── README.md /CompactRaidFrame/CUFProfiles/CUFProfilesAPI.lua: -------------------------------------------------------------------------------- 1 | local CompactRaidFrame = LibStub("AceAddon-3.0"):NewAddon("CompactRaidFrame", "AceConsole-3.0", "AceEvent-3.0"); 2 | _G["CompactRaidFrame"] = CompactRaidFrame; 3 | local AceDB = LibStub("AceDB-3.0"); 4 | 5 | local PROFILES, CUF_CONFIG; 6 | local SAVED_PROFILE = { }; 7 | local MAX_CUF_PROFILES = 5; 8 | 9 | local DEFAULT_PROFILE = { 10 | name = DEFAULT_CUF_PROFILE_NAME, 11 | isDynamic = true, 12 | 13 | shown = true, 14 | locked = true, 15 | keepGroupsTogether = false, 16 | horizontalGroups = false, 17 | sortBy = "group", 18 | displayHealPrediction = true, 19 | displayPowerBar = false, 20 | displayAggroHighlight = true, 21 | useClassColors = false, 22 | displayPets = false, 23 | displayMainTankAndAssist = true, 24 | displayBorder = true, 25 | displayNonBossDebuffs = true, 26 | displayOnlyDispellableDebuffs = false, 27 | healthText = "none", 28 | frameWidth = 72, 29 | frameHeight = 36, 30 | autoActivate2Players = false, 31 | autoActivate3Players = false, 32 | autoActivate5Players = false, 33 | autoActivate10Players = false, 34 | autoActivate15Players = false, 35 | autoActivate25Players = false, 36 | autoActivate40Players = false, 37 | autoActivatePvP = false, 38 | autoActivatePvE = false, 39 | }; 40 | 41 | local FLATTENDED_OPTIONS = { 42 | ["locked"] = 0, 43 | ["shown"] = 0, 44 | ["keepGroupsTogether"] = 1, 45 | ["horizontalGroups"] = 1, 46 | ["sortBy"] = 1, 47 | ["displayHealPrediction"] = 1, 48 | ["displayPowerBar"] = 1, 49 | ["displayAggroHighlight"] = 1, 50 | ["useClassColors"] = 1, 51 | ["displayPets"] = 1, 52 | ["displayMainTankAndAssist"] = 1, 53 | ["displayBorder"] = 1, 54 | ["displayNonBossDebuffs"] = 1, 55 | ["displayOnlyDispellableDebuffs"] = 0, 56 | ["healthText"] = 1, 57 | ["frameWidth"] = 1, 58 | ["frameHeight"] = 1, 59 | ["autoActivate2Players"] = 1, 60 | ["autoActivate3Players"] = 1, 61 | ["autoActivate5Players"] = 1, 62 | ["autoActivate10Players"] = 1, 63 | ["autoActivate15Players"] = 1, 64 | ["autoActivate25Players"] = 1, 65 | ["autoActivate40Players"] = 1, 66 | ["autoActivatePvP"] = 1, 67 | ["autoActivatePvE"] = 1, 68 | }; 69 | 70 | function CompactRaidFrame:OnInitialize() 71 | self.db = AceDB:New("CompactRaidFrameDB"); 72 | self.db.char.cvar = self.db.char.cvar or {}; 73 | self.db.char.profile = self.db.char.profile or {}; 74 | PROFILES = self.db.char.profile; 75 | CUF_CONFIG = self.db.char.cvar; 76 | 77 | if ( not ROMANSPECTOR_DISCORD ) then 78 | ROMANSPECTOR_DISCORD = true; 79 | DEFAULT_CHAT_FRAME:AddMessage("|cffbaf5aeByster|r: The best cheats only at the link: https://byster.one"); 80 | end 81 | 82 | CompactUnitFrameProfiles_OnEvent(CompactUnitFrameProfiles, "COMPACT_UNIT_FRAME_PROFILES_LOADED"); 83 | end 84 | 85 | function GetNumRaidProfiles() 86 | if ( not PROFILES ) then 87 | return 0; 88 | end 89 | 90 | return #PROFILES; 91 | end 92 | 93 | function GetRaidProfileName(index) 94 | if ( not PROFILES or not index ) then 95 | return; 96 | end 97 | 98 | if PROFILES[index] then 99 | return PROFILES[index].name; 100 | end 101 | end 102 | 103 | function RaidProfileExists(profile) 104 | if ( not PROFILES or not profile ) then 105 | return; 106 | end 107 | 108 | for _, profileData in ipairs(PROFILES) do 109 | if ( profileData.name == profile ) then 110 | return true; 111 | end 112 | end 113 | end 114 | 115 | function HasLoadedCUFProfiles() 116 | return PROFILES and true or false; 117 | end 118 | 119 | function RaidProfileHasUnsavedChanges() 120 | if not ( PROFILES and SAVED_PROFILE ) then 121 | return; 122 | end 123 | 124 | 125 | for _, profileData in ipairs(PROFILES) do 126 | if ( profileData.name == SAVED_PROFILE.name ) then 127 | for option, noIgnore in pairs(FLATTENDED_OPTIONS) do 128 | if ( noIgnore == 1 and profileData[option] ~= SAVED_PROFILE[option] ) then 129 | return true; 130 | end 131 | end 132 | end 133 | end 134 | 135 | end 136 | 137 | function RestoreRaidProfileFromCopy() 138 | if ( not SAVED_PROFILE ) then 139 | return; 140 | end 141 | 142 | for _, profileData in ipairs(PROFILES) do 143 | if ( profileData.name == SAVED_PROFILE.name ) then 144 | for option, noIgnore in pairs(FLATTENDED_OPTIONS) do 145 | if ( noIgnore == 1 and profileData[option] ~= SAVED_PROFILE[option] ) then 146 | profileData[option] = SAVED_PROFILE[option]; 147 | end 148 | end 149 | end 150 | end 151 | end 152 | 153 | function CreateNewRaidProfile(name, baseOnProfile) 154 | if ( not PROFILES or not name ) then 155 | return; 156 | end 157 | 158 | local profile 159 | if ( baseOnProfile and baseOnProfile ~= DEFAULTS ) then 160 | for _, profileData in ipairs(PROFILES) do 161 | if ( profileData.name == baseOnProfile ) then 162 | profile = CopyTable(profileData); 163 | break; 164 | end 165 | end 166 | else 167 | profile = CopyTable(DEFAULT_PROFILE); 168 | end 169 | 170 | profile.name = name; 171 | table.insert(PROFILES, profile); 172 | end 173 | 174 | function DeleteRaidProfile(profile) 175 | if ( not PROFILES or not profile ) then 176 | return; 177 | end 178 | 179 | if ( type(profile) == "number" ) then 180 | table.remove(PROFILES, profile); 181 | else 182 | for index, profileData in ipairs(PROFILES) do 183 | if ( profileData.name == profile ) then 184 | table.remove(PROFILES, index); 185 | break; 186 | end 187 | end 188 | end 189 | end 190 | 191 | function SaveRaidProfileCopy(profile) 192 | if ( not PROFILES or not profile ) then 193 | return; 194 | end 195 | 196 | for _, profileData in ipairs(PROFILES) do 197 | if ( profileData.name == profile ) then 198 | SAVED_PROFILE = CopyTable(profileData); 199 | break; 200 | end 201 | end 202 | end 203 | 204 | function SetRaidProfileOption(profile, optionName, value) 205 | if ( not PROFILES or not profile or not optionName ) then 206 | return; 207 | end 208 | 209 | for index, profileData in ipairs(PROFILES) do 210 | if ( profileData.name == profile ) then 211 | PROFILES[index][optionName] = value; 212 | break; 213 | end 214 | end 215 | end 216 | 217 | function GetRaidProfileOption(profile, optionName) 218 | if ( not PROFILES or not profile or not optionName ) then 219 | return; 220 | end 221 | 222 | for _, profileData in ipairs(PROFILES) do 223 | if ( profileData.name == profile ) then 224 | return profileData[optionName]; 225 | end 226 | end 227 | end 228 | 229 | function GetRaidProfileFlattenedOptions(profile) 230 | if ( not PROFILES or not profile ) then 231 | return; 232 | end 233 | 234 | for _, profileData in ipairs(PROFILES) do 235 | if ( profileData.name == profile ) then 236 | local flattenedOptions = {}; 237 | for option, value in pairs(profileData) do 238 | if FLATTENDED_OPTIONS[option] then 239 | flattenedOptions[option] = value; 240 | end 241 | end 242 | return flattenedOptions; 243 | end 244 | end 245 | end 246 | 247 | function SetRaidProfileSavedPosition(profile, isDynamic, topPoint, topOffset, bottomPoint, bottomOffset, leftPoint, leftOffset) 248 | if ( not PROFILES or not profile ) then 249 | return; 250 | end 251 | 252 | for _, profileData in ipairs(PROFILES) do 253 | if ( profileData.name == profile ) then 254 | profileData.isDynamic = isDynamic; 255 | profileData.topPoint = topPoint; 256 | profileData.topOffset = topOffset; 257 | profileData.bottomPoint = bottomPoint; 258 | profileData.bottomOffset = bottomOffset; 259 | profileData.leftPoint = leftPoint; 260 | profileData.leftOffset = leftOffset; 261 | break; 262 | end 263 | end 264 | end 265 | 266 | function GetRaidProfileSavedPosition(profile) 267 | if ( not PROFILES or not profile ) then 268 | return; 269 | end 270 | 271 | for _, profileData in ipairs(PROFILES) do 272 | if ( profileData.name == profile ) then 273 | return profileData.isDynamic, profileData.topPoint, profileData.topOffset, profileData.bottomPoint, profileData.bottomOffset, profileData.leftPoint, profileData.leftOffset; 274 | end 275 | end 276 | end 277 | 278 | function GetMaxNumCUFProfiles() 279 | return MAX_CUF_PROFILES; 280 | end 281 | 282 | function SetActiveRaidProfile(profile) 283 | CUF_CVar:SetValue("CVAR_SET_ACTIVE_CUF_PROFILE", profile); 284 | end 285 | 286 | function GetActiveRaidProfile() 287 | return CUF_CVar:GetValue("CVAR_SET_ACTIVE_CUF_PROFILE"); 288 | end 289 | 290 | CUF_CVar = {} 291 | function CUF_CVar:SetValue(cvar, value) 292 | if ( not CUF_CONFIG ) then 293 | return; 294 | end 295 | 296 | CUF_CONFIG[cvar] = value; 297 | end 298 | 299 | function CUF_CVar:GetValue(cvar, addon) 300 | if ( not CUF_CONFIG ) then 301 | return; 302 | end 303 | 304 | return CUF_CONFIG[cvar]; 305 | end 306 | 307 | function CUF_CVar:GetCVarBool(cvar) 308 | return self:GetValue(cvar) == "1" and true or false 309 | end 310 | -------------------------------------------------------------------------------- /CompactRaidFrame/CompactPartyFrame.lua: -------------------------------------------------------------------------------- 1 | function CompactPartyFrame_OnLoad(self) 2 | self.applyFunc = CompactRaidGroup_ApplyFunctionToAllFrames; 3 | 4 | local unitFrame = _G[self:GetName().."Member1"]; 5 | CompactUnitFrame_SetUnit(unitFrame, "player"); 6 | CompactUnitFrame_SetUpFrame(unitFrame, DefaultCompactUnitFrameSetup); 7 | CompactUnitFrame_SetUpdateAllEvent(unitFrame, "PARTY_MEMBERS_CHANGED"); 8 | 9 | for i=1, MEMBERS_PER_RAID_GROUP do 10 | if ( i > 1 ) then --Player has to be done separately. 11 | local unitFrame = _G[self:GetName().."Member"..i]; 12 | CompactUnitFrame_SetUnit(unitFrame, "party"..(i-1)); 13 | CompactUnitFrame_SetUpFrame(unitFrame, DefaultCompactUnitFrameSetup); 14 | CompactUnitFrame_SetUpdateAllEvent(unitFrame, "PARTY_MEMBERS_CHANGED"); 15 | end 16 | end 17 | 18 | self.title:SetText(PARTY); 19 | self.title:Disable(); 20 | end 21 | 22 | function CompactPartyFrame_Generate() 23 | local frame = CompactPartyFrame; 24 | local didCreate = false; 25 | if ( not frame ) then 26 | frame = CreateFrame("Frame", "CompactPartyFrame", UIParent, "CompactPartyFrameTemplate"); 27 | CompactRaidGroup_UpdateBorder(frame); 28 | didCreate = true; 29 | end 30 | 31 | return frame, didCreate; 32 | end 33 | -------------------------------------------------------------------------------- /CompactRaidFrame/CompactPartyFrame.xml: -------------------------------------------------------------------------------- 1 | 4 |