Nenue@135: Nenue@135: local print = DEVIAN_WORKSPACE and function(...) print('LFGFrame', ...) end or nop Nenue@135: Nenue@135: VeneerRosterKunMixin = { Nenue@135: anchorFrame = 'LFGListFrame', Nenue@135: anchorPoint = 'TOPLEFT', Nenue@135: Nenue@135: InvasionsDirty = true, Nenue@135: AchievementsDirty = true, Nenue@135: GuildInfoDirty = true, Nenue@135: blocks = {}, Nenue@135: } Nenue@135: Nenue@135: Nenue@135: local module = VeneerRosterKunMixin Nenue@135: Nenue@135: function module:OnLoad() Nenue@135: Veneer:AddHandler(self, self.anchorPoint) Nenue@135: self:RegisterEvent('ADDON_LOADED') Nenue@135: Nenue@135: hooksecurefunc("LFGListCategorySelection_StartFindGroup", function(panel, questID) Nenue@135: print('LFGListCategorySelection_StartFindGroup', panel:GetParent(), questID) Nenue@135: end) Nenue@135: hooksecurefunc("LFGListCategorySelection_SelectCategory", function(panel, categoryID, filters) Nenue@135: print('LFGListCategorySelection_SelectCategory', panel:GetParent(), categoryID, filters) Nenue@135: print('\n',debugstack(3)) Nenue@135: end) Nenue@135: hooksecurefunc("LFGListSearchPanel_SetCategory", function(panel, categoryID, filters, baseFilters) Nenue@135: print('LFGListSearchPanel_SetCategory', panel:GetParent(), categoryID, filters, baseFilters) Nenue@135: end) Nenue@135: end Nenue@135: Nenue@135: function module:Setup() Nenue@135: VeneerHandlerMixin.Setup(self) Nenue@135: self:SetParent(LFGListFrame) Nenue@135: self:SetPoint('TOPLEFT', LFGListFrame,'TOPRIGHT') Nenue@135: self:SetShown(true) Nenue@135: end Nenue@135: Nenue@135: function module:SetDirty() Nenue@135: if self:IsVisible() then Nenue@135: self:Update() Nenue@135: else Nenue@135: self.GuildInfoDirty = true Nenue@135: self.AchievementsDirty = true Nenue@135: self.InvasionsDirty = true Nenue@135: end Nenue@135: end Nenue@135: local firstLoad = true Nenue@135: function module:OnShow() Nenue@135: print('|cFF00FFFFOnShow()|r') Nenue@135: self:Update(firstLoad) Nenue@135: firstLoad = nil Nenue@135: Nenue@135: local locationName = GetRealZoneText() Nenue@135: Nenue@135: if not C_LFGList.GetActiveEntryInfo() and locationName and locationName:match('Invasion') and not InCombatLockdown() then Nenue@135: PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub); Nenue@135: local panel = LFGListFrame.CategorySelection Nenue@135: LFGListCategorySelection_SelectCategory(panel, 6, 0); Nenue@136: Nenue@136: local bossName = locationName:match('Greater Invasion Point: (.+)') Nenue@136: Nenue@136: LFGListCategorySelection_StartFindGroup(panel, bossName or locationName); Nenue@135: end Nenue@135: end Nenue@135: Nenue@135: function module:UpdateGuildInfo() Nenue@135: local numMembers = GetNumGuildMembers() Nenue@135: print(numMembers) Nenue@135: for i = 1, numMembers do Nenue@135: --print(GetGuildRosterInfo(i)) Nenue@135: end Nenue@135: self.GuildInfoDirty = nil Nenue@135: end Nenue@135: Nenue@135: -- cheevos to link Nenue@135: local overlaps = { Nenue@135: [11781] = 11875, Nenue@135: [12002] = 12111, Nenue@135: } Nenue@135: local cheevos = { Nenue@138: Nenue@138: -- mythic prog Nenue@135: { Nenue@138: 13314, -- Mythic: Lady Jaina Proudmoore Nenue@138: 13313, -- Mythic: Stormwall Blockade Nenue@138: 13312, -- Mythic: Mekkatorque Nenue@138: 13311, -- Mythic: King Rastakhan Nenue@138: 13300, -- Mythic: Conclave of the Chosen Nenue@138: 13299, -- Mythic: Opulence Nenue@138: 13298, -- Mythic: Jadefire Masters (Alliance Only) Nenue@138: 13295, -- Mythic: Jadefire Masters (Horde Only) Nenue@138: 13293, -- Mythic: Grong Nenue@138: 13292, -- Mythic: Champion of the Light Nenue@135: Nenue@138: 12533, -- Mythic: Ghuun Nenue@138: 12532, -- Mythic: Mythrax Nenue@138: 12531, -- Mythic: Zul Nenue@138: 12530, -- Mythic: Fetid Devourer Nenue@138: 12529, -- Nenue@138: 12527, Nenue@138: 12526, Nenue@138: 12524, Nenue@138: Nenue@135: }, Nenue@138: -- Completion BfA Nenue@138: { Nenue@138: 13323, -- Cutting Edge: Lady Jaina Proudmoore, Nenue@138: 13322, -- Ahead of the Curve: Lady Jaina Proudmoore, Nenue@138: 12535, -- Cutting Edge: Ghuun, Nenue@138: 12536, -- Ahead of the Curve: Ghuun, Nenue@138: Nenue@138: } Nenue@138: Nenue@138: , Nenue@138: -- Completion Legion Nenue@135: { Nenue@135: 12111, -- CE Argus, Nenue@135: 11875, -- CE KJ Nenue@135: 11790 -- Deceiver's Fall, Nenue@135: Nenue@135: Nenue@135: }, Nenue@135: -- Mythic+ Nenue@135: { Nenue@138: 13080, -- BfA Keystone Master 1 Nenue@135: } Nenue@135: } Nenue@135: Nenue@135: local invasion = {} Nenue@135: local cheev = {} Nenue@135: Nenue@135: function cheev:OnClick() Nenue@135: local resultID = LFGListFrame.SearchPanel.selectedResult or self:GetParent().selectedID Nenue@135: print('current selection = ', resultID) Nenue@135: if ACTIVE_CHAT_EDIT_BOX then Nenue@135: ChatEdit_InsertLink(self.link) Nenue@135: elseif resultID then Nenue@135: local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName = C_LFGList.GetSearchResultInfo(resultID); Nenue@135: --print(name, comment, leaderName) Nenue@135: ChatFrame_OpenChat("/w "..leaderName.." "..self.link, DEFAULT_CHAT_FRAME) Nenue@135: end Nenue@135: end Nenue@135: Nenue@135: function invasion:OnClick() Nenue@135: if not InCombatLockdown() then Nenue@135: PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub); Nenue@135: local panel = LFGListFrame.CategorySelection Nenue@135: LFGListCategorySelection_SelectCategory(panel, 6, 0); Nenue@135: LFGListCategorySelection_StartFindGroup(panel, self.searchText); Nenue@135: end Nenue@135: Nenue@135: end Nenue@135: Nenue@135: local listed = {} Nenue@135: Nenue@135: Nenue@135: function module:Update(forced) Nenue@135: if self.GuildInfoDirty or forced then Nenue@135: self:UpdateGuildInfo() Nenue@135: end Nenue@135: local numBlocks = 0 Nenue@135: if self.AchievementsDirty or forced then Nenue@135: numBlocks = self:UpdateAchievementLinks(numBlocks) Nenue@135: end Nenue@135: Nenue@135: Nenue@135: local lastBlock Nenue@135: local contentsHeight = 0 Nenue@135: for index, block in ipairs(self.blocks) do Nenue@135: if index > numBlocks then Nenue@135: block:Hide() Nenue@135: else Nenue@135: block:ClearAllPoints() Nenue@135: if lastBlock then Nenue@135: block:SetPoint('TOPLEFT', lastBlock, 'BOTTOMLEFT', 0, -2) Nenue@135: else Nenue@135: block:SetPoint('TOPLEFT', LFGListFrame, 'TOPRIGHT', 0, 0) Nenue@135: end Nenue@135: block:Show() Nenue@135: lastBlock = block Nenue@135: Nenue@135: contentsHeight = contentsHeight + block:GetHeight() Nenue@135: end Nenue@135: end Nenue@135: self:SetHeight(contentsHeight) Nenue@135: end Nenue@135: Nenue@135: Nenue@135: function module:GetBlock(index) Nenue@135: Nenue@135: local block =self.blocks[index] Nenue@135: if not block then Nenue@135: block = CreateFrame('Button', 'VeneerRosterKunBlock'..index, self, 'VeneerRosterKunBlock') Nenue@135: Nenue@135: block:SetID(index) Nenue@135: self.blocks[index] = block Nenue@135: end Nenue@135: return block Nenue@135: end Nenue@135: Nenue@135: function module:UpdateAchievementLinks(offset) Nenue@135: print('UpdateAchievementLinks()') Nenue@135: offset = offset or 0 Nenue@135: local resultID = LFGListFrame.SearchPanel.selectedResult or self.selectedID Nenue@135: self:Show() Nenue@135: Nenue@135: Nenue@135: local contentsHeight = 0 Nenue@135: for _, group in ipairs(cheevos) do Nenue@135: for _, id in ipairs(group) do Nenue@135: local _, name, points, completed, month, day, year, description, flags, icon = GetAchievementInfo(id) Nenue@138: print('checking', id, name) Nenue@135: if completed then Nenue@135: -- if the highest mythic kill Nenue@135: if listed[overlaps[id]] then Nenue@135: break Nenue@135: end Nenue@135: offset = offset + 1 Nenue@135: local block = self:GetBlock(offset) Nenue@135: block:SetScript('OnClick', cheev.OnClick) Nenue@135: --print(index) Nenue@135: Nenue@135: block.link = GetAchievementLink(id) Nenue@135: block.Icon:SetTexture(icon) Nenue@135: block.Label:SetText(name) Nenue@135: block.buttonType = 'cheevo' Nenue@135: Nenue@135: contentsHeight = contentsHeight + block:GetHeight() Nenue@135: Nenue@135: --print(index, name, icon) Nenue@135: listed[id] = true Nenue@135: break; Nenue@135: end Nenue@135: end Nenue@135: end Nenue@135: Nenue@135: self.lastAchievement = lastBlock Nenue@135: Nenue@135: return offset, contentsHeight Nenue@135: Nenue@135: --[[ Nenue@135: --]] Nenue@135: Nenue@135: Nenue@135: end Nenue@135: Nenue@135: function module:SetupGuildUI() Nenue@135: self:UnregisterEvent('ADDON_LOADED') Nenue@135: end Nenue@135: function module:OnEvent(event, ...) Nenue@135: print('|cFFFF0088OnEvent()|r', event, ...) Nenue@135: if event == 'ADDON_LOADED' then Nenue@135: local addon = ... Nenue@135: if addon == 'Blizzard_GuildUI' then Nenue@135: self:SetupGuildUI() Nenue@135: end Nenue@135: elseif event == 'LFG_LIST_SEARCH_RESULTS_RECEIVED' then Nenue@135: elseif event == 'LFG_LIST_SEARCH_RESULT_UPDATED' then Nenue@135: end Nenue@135: end