I'm using this:
Code:
local frame = CreateFrame('Frame')
frame:Hide()
frame:SetScript('OnEvent', function(self, event, ...)
if event == 'GARRISON_MISSION_COMPLETE_RESPONSE' then
local missionID, canComplete, succeeded = ...
if canComplete and succeeded and C_Garrison.CanOpenMissionChest(missionID) then
C_Garrison.MissionBonusRoll(missionID)
end
elseif event == 'GARRISON_MISSION_FINISHED' or event == 'GARRISON_MISSION_NPC_OPENED' then
if not (GarrisonMissionFrame and GarrisonMissionFrame:IsShown()) then return end
local missions = C_Garrison.GetCompleteMissions()
for index = 1, #missions do
C_Garrison.MarkMissionComplete(missions[index].missionID)
end
GarrisonMissionFrame.MissionTab.MissionList.CompleteDialog:Hide()
GarrisonMissionFrameMissions.CompleteDialog:Hide()
self:Show()
else -- event == 'ADDON_LOADED'
if ... ~= 'Blizzard_GarrisonUI' then return end
self:UnregisterEvent(event)
GarrisonMissionFrame:UnregisterEvent('GARRISON_MISSION_FINISHED')
GarrisonMissionFrame.MissionComplete:UnregisterEvent('GARRISON_MISSION_COMPLETE_RESPONSE')
end
end)
frame:RegisterEvent('GARRISON_MISSION_COMPLETE_RESPONSE')
frame:RegisterEvent('GARRISON_MISSION_FINISHED')
frame:RegisterEvent('GARRISON_MISSION_NPC_OPENED')
frame:SetScript('OnUpdate', function(self)
self:Hide()
GarrisonMissionList_UpdateMissions()
end)
if GarrisonMissionFrame then
GarrisonMissionFrame:UnregisterEvent('GARRISON_MISSION_FINISHED')
GarrisonMissionFrame.MissionComplete:UnregisterEvent('GARRISON_MISSION_COMPLETE_RESPONSE')
else
frame:RegisterEvent('ADDON_LOADED')
end