view ObjectiveInfo.lua @ 13:9455693fc290

Init - recall XML display state on reload ObjectiveFrame - quest coloring by relative level - quest coloring by daily/weekly/complete status - remember starting scroll value between reload - limit anchor points to edges for regions affected by style attributes ObjectiveInfo - AutoQuest outline definitions - Pull Quest title and tag data in addition to WatchInfo ObjectiveStyle - ensure consistent style table - hardcode certain attributes for sanity XML - ensure consistent naming conventions for heading and content elements - ensure hardcore anchors are based on edges - expansion of file structure to deal with complexities of dynamic widgets and style caching ObjectiveUI - determine primary style by block handler when restoring original style - moved framescript to 'ObjectiveWidgets' lua
author Nenue
date Sat, 02 Apr 2016 17:46:52 -0400
parents 7923243ae972
children ed642234f017
line wrap: on
line source
local B = select(2,...).frame
local wipe, pairs, ipairs, min, max, unpack = table.wipe, pairs, ipairs, min, max, unpack
local GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo = GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo
local GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo = GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo
local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
local print = B.print('Objectives')

local Tracker, AutoQuest, Quest, Cheevs = mod.Tracker, mod.AutoQuest, mod.Quest, mod.Cheevs
--------------------------------------------------------------------
--- Tracker-specific data retrieval functions
--------------------------------------------------------------------


-----------------------------
--- AUTO_QUEST
AutoQuest.name = "Remote Quests"
AutoQuest.GetNumWatched = GetNumAutoQuestPopUps
AutoQuest.GetInfo = function(watchIndex)
  return Quest.GetInfo(watchIndex)
end

-----------------------------
--- QUEST
Quest.name = "Quests"
Quest.itemButtons = {}
Quest.freeButtons = {}
Quest.POI = {}
Quest.QuestBlock = {}
Quest.GetNumWatched = function()
  return GetNumQuestWatches ()
end
Quest.GetInfo = function (self, watchIndex)
  print('|cFF00DDFFQuest|r.|cFF0088FFGetInfo(|r'.. tostring(watchIndex)..'|r)')
  local questID, title, questIndex, numObjectives, requiredMoney, isComplete,
  startEvent, isAutoComplete, failureTime, timeElapsed, questType, isTask, isStory, isOnMap, hasLocalPOI = GetQuestWatchInfo(watchIndex)

  local _, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(questIndex)
  local questTagID, tagName = GetQuestTagInfo(questID);

  if not questID then
    return
  end
  self.Info[questID] = self.Info[questID] or {}

  local q = self.Info[questID]
  q.watchIndex = watchIndex
  q.type = 'Quest'
  q.questID = questID
  q.title = title
  q.level = level
  q.questLogIndex = questIndex
  q.numObjectives = numObjectives
  q.requiredMoney = requiredMoney
  q.isComplete = isComplete
  q.startEvent = startEvent
  q.isAutoComplete = isAutoComplete
  q.failureTime = failureTime
  q.timeElapsed = timeElapsed
  q.questType = questType
  q.isTask = isTask
  q.isStory = isStory
  q.isOnMap = isOnMap
  q.hasLocalPOI = hasLocalPOI

  q.isDaily = ( frequency == LE_QUEST_FREQUENCY_DAILY and (not isComplete or isComplete == 0) )
  q.isWeekly = ( frequency == LE_QUEST_FREQUENCY_WEEKLY and (not isComplete or isComplete == 0) )
  q.isComplete = isComplete
  q.isStory = isStory
  q.isTask = isTask
  --q.isBreadCrumb = isBreadCrumb
  q.completionText= GetQuestLogCompletionText(questIndex)
  q.numObjectives = GetNumQuestLeaderBoards(questIndex)
  q.isWatched = IsQuestWatched(questIndex)
  q.isHardWatched = IsQuestHardWatched(questIndex)
  q.objectives = {}
  for i = 1, q.numObjectives do
    local text, type, finished = GetQuestLogLeaderBoard(i, questIndex)
    q.objectives[i] = {
      type = type,
      text = text,
      finished = finished
    }
    if type == 'event' then
    elseif type == 'monster' then
    elseif type == 'object' then
    elseif type == 'reputation' then
    elseif type == 'item' then
    end
  end

  local link, icon, charges = GetQuestLogSpecialItemInfo(questIndex)
  local start, duration, enable = GetQuestLogSpecialItemCooldown(questIndex)
  if link or icon or charges then
    q.specialItem = {
      questID = questID,
      questIndex = questIndex,
      link = link,
      charges = charges,
      icon = icon,
      start = start,
      duration = duration,
      enable = enable,
    }
  end


  if QuestHasPOIInfo(questID) then
    local distance, onContinent = GetDistanceSqToQuest(questIndex)
      if distance ~= nil and distance > 0 then
      self.POI[questIndex] = {
        questIndex = questIndex,
        questID = questID,
        distance = distance,
        onContinent = onContinent
      }
    end
  end

  q.superTracked =  (questID == GetSuperTrackedQuestID()) -- call directly so artifact data doesn't become an issue
  self.WatchInfo[watchIndex] = q
  self.LogInfo[questIndex] = q
  print('- logIndex =', questIndex, 'title =', title)
  return q
end

Quest.GetClosest = function()
  local minID
  local minDist = math.huge
  for i =  1, Quest.GetNumWatched() do
      local info = Quest.GetInfo(i)
      if info.hasLocalPOI then
        local distance, onContinent = GetDistanceSqToQuest(info.questIndex)
      end
  end
end


Cheevs.GetNumWatched = function(self)
  Cheevs.trackedCheevs = {GetTrackedAchievements()}
  return GetNumTrackedAchievements()
end
Cheevs.GetInfo = function(self, index)
  local cheevID = Cheevs.trackedCheevs[index]
  local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID)

  self.Info[cheevID] = {}
  local c = self.Info[cheevID]
  c.type = 'Cheevs'
  c.watchIndex = index
  c.cheevID = cheevID
  c.title = name
  c.points, c.completed, c.month, c.day, c.year, c.description, c.flags, c.icon, c.rewardText, c.isGuildAch, c.wasEarnedByMe, c.earnedBy =
  points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy
  c.numObjectives = GetAchievementNumCriteria(cheevID)
  c.objectives = {}
  for i = 1, c.numObjectives do
    local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i)
    c.objectives[i] = {
      cheevID = cheevID,
      text = description,
      type = type,
      finished = completed,
      quantity = quantity,
      requiredQuantity = requiredQuantity,
      characterName = characterName,
      flags = flags,
      assetID = assetID,
      quantityString = quantityString,
      criteriaID = criteriaID,
    }
  end
  print('Cheevs.|cFF0088FFGetInfo|r('..index..')', 'obj:', GetAchievementNumCriteria(cheevID), name, description)

  self.WatchInfo[index] = c
  return self.Info[cheevID]
end