view ObjectiveEvents.lua @ 16:880828018bf4

ObjectiveEvents - trim down the number of events that fire full updates - begin the general outline for determining which trackers need to refresh - handlers for accepting and completing auto-popup quests ObjectiveFrame - correct variables for money reward calculation - make sure everythign is scaling to the font strings and that the font strings aren't being pinned by SetSize ObjectiveInfo - implementation of autoquest popups - discern between internal and client bonus objective indexes - acquire the correct data set from bonus objective query ObjectiveStyle - look for a style table under the previously interpreted set before deferring standard options - horizontal/vertical options in gradient - remove height-fixing for font strings
author Nenue
date Tue, 05 Apr 2016 00:39:12 -0400
parents 7923243ae972
children 605e8f0e46db
line wrap: on
line source
--- ${PACKAGE_NAME}
-- @file-author@
-- @project-revision@ @project-hash@
-- @file-revision@ @file-hash@
-- Created: 3/30/2016 1:23 AM
local B = select(2,...).frame
local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
local print = B.print('ObjectiveEvent')

local isHooked
local SmallEvents = {
  QUEST_ACCEPTED = 'OnQuestAccepted',
  QUEST_REMOVED = 'OnQuestRemoved'
}

--- Using the same values as Blizzard_ObjectiveTracker for use in securehook
local OBJECTIVE_TRACKER_UPDATE_QUEST				        		= 0x0001;
local OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED		      		= 0x0002;
local OBJECTIVE_TRACKER_UPDATE_TASK_ADDED		    	  		= 0x0004;
local OBJECTIVE_TRACKER_UPDATE_SCENARIO			      	  	= 0x0008;
local OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE		  	= 0x0010;
local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT			      	= 0x0020;
local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED		  	= 0x0040;
local OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED		= 0x0080;

local OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST			      	= 0x0100;
local OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP	= 0x0200;
local OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE		= 0x0400;
local OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO	    		= 0x0800;
local OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT		  	= 0x1000;

local OBJECTIVE_TRACKER_UPDATE_STATIC					        	= 0x0000;
local OBJECTIVE_TRACKER_UPDATE_ALL				          		= 0xFFFF;

local OBJECTIVE_TRACKER_UPDATE_REASON                   = OBJECTIVE_TRACKER_UPDATE_ALL;		-- default
local OBJECTIVE_TRACKER_UPDATE_ID                       = 0;

local HandlerEvents = {
  QUEST_ACCEPTED = 0x0003,
  QUEST_WATCH_LIST_CHANGED = 0x0003,
  SUPER_TRACKED_QUEST_CHANGED = mod.Quest,
  QUEST_LOG_UPDATE = mod.Quest,
  TRACKED_ACHIEVEMENT_LIST_CHANGED = mod.Cheevs,
  TRACKED_ACHIEVEMENT_UPDATE = mod.Cheevs
}

local BlizzHooks = {
  ['AddQuestWatch'] = 'AddQuestWatch',
  ['RemoveQuestWatch'] = 'RemoveQuestWatch',
  ['AbandonQuest'] = 'AbandonQuest',
  ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest',
  ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp',
  ['RemoveAutoQuestPopUp'] = 'RemoveAutoQuestPopUp',
  ['RemoveTrackedAchievement'] = 'RemoveTrackedAchievement'
}

mod.SetEvents = function()

  for event, _ in pairs(SmallEvents) do
    mod:RegisterEvent(event)
  end

  for event, _ in pairs(HandlerEvents) do
    mod:RegisterEvent(event)
  end
  mod:SetScript('OnEvent', mod.OnEvent)


  if not isHooked then
    VeneerData.CallLog = {}
    isHooked = true
    for blizzFunc, veneerFunc in pairs(BlizzHooks) do
      if mod[veneerFunc] then
        hooksecurefunc(blizzFunc, mod[veneerFunc])
      else
        hooksecurefunc(blizzFunc, function(...)
          print('catching', blizzFunc, ...)
          tinsert(VeneerData.CallLog, {blizzFunc, ...})
        end)
      end
    end

  end
end

function mod:OnEvent (event, ...)
  local isHandled
  if SmallEvents[event] then
    print('|cFF00FF00'..SmallEvents[event]..'(' ..event..'|r', ...)
    mod[SmallEvents[event]](event, ...)
    isHandled = true
  end
  if HandlerEvents[event] then
    print('|cFF0088FF'..event..'|r wrapper update')
    mod.UpdateWrapper(event)
    isHandled = true
  end
  if not isHandled then
    print('|cFFFF4400'..event..'|r', ...)
  end
end

--------------------------------------------------------------------
--- Events that are handled by Blizzard_ObjectiveTracker
--------------------------------------------------------------------
print(mod:GetName())
mod.OnQuestAccepted = function(_, questLogIndex, questID)
  AddQuestWatch(questLogIndex)
  SetSuperTrackedQuestID(questID)
end

mod.OnQuestComplete = function(_, questLogIndex, questID)
  QuestPOIUpdateIcons()
end

mod.OnQuestFinished = function(_, questLogIndex, questID)
  mod.TrackClosest()
  RemoveQuestWatch(questLogIndex)
end


mod.OnQuestRemoved = function(_, questLogIndex, questID)

  mod.UpdateWrapper(0x00000003)

end

mod.OnQuestFromLocation = function(event) end

-------------------------------------------------------------------
--- Function hooks for BlizzUI compatibility
-------------------------------------------------------------------
mod.AddQuestWatch = function(questID)
  mod.UpdateWrapper(0x00000003)
end

mod.RemoveQuestWatch = function(questIndex, ...)
  print('|cFFFF8800RemoveQuestWatch', questIndex, ...)
  local info = mod.Quest.LogInfo[questIndex]

  -- remove quest refs
  mod.Quest.LogBlock[questIndex] = nil
  mod.Quest.QuestBlock[info.questID] = nil

  -- remove if they still match
  if mod.Quest.WatchInfo[info.watchIndex] == info then
    print('cleaning dead WatchInfo entry')
    mod.Quest.WatchInfo[info.watchIndex] = nil
  end

  mod.UpdateWrapper('RemovedQuestWatch' .. tostring(questIndex))
  QuestPOIUpdateIcons()
end

mod.RemoveTrackedAchievement = function(cheevID)
  print('|cFFFF8800UntrackAchievement', cheevID)
  mod.CleanWidgets()
end

mod.AcceptQuest = function()
end

mod.AbandonQuest = function()

  QuestPOIUpdateIcons()
end

mod.TurnInQuest = function()

  QuestPOIUpdateIcons()
end

mod.AddAutoQuestPopUp = function(...)
 print('|cFFFF8800AddAutoQuestPopUp|r', ...)
 mod.UpdateWrapper(OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP)
end
mod.RemoveAutoQuestPopUp = function(...)
  print('|cFFFF8800RemoveAutoQuestPopUp|r', ...)
  mod.UpdateWrapper(OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP)
end