Mercurial > wow > buffalo2
diff ObjectiveTracker/Achievements.lua @ 34:9856ebc63fa4
- half solution to Update being fired multiple times during load
- change securefunc handlers to dispense a reason code; catch that reason code in the enclosure passed to hooksecurefunc, and decide whether to update or not from there.
author | Nenue |
---|---|
date | Sun, 17 Apr 2016 00:21:45 -0400 |
parents | 7583684becf4 |
children | 69d03f8e293e |
line wrap: on
line diff
--- a/ObjectiveTracker/Achievements.lua Fri Apr 15 17:01:06 2016 -0400 +++ b/ObjectiveTracker/Achievements.lua Sun Apr 17 00:21:45 2016 -0400 @@ -21,46 +21,63 @@ Cheevs.trackedCheevs = {GetTrackedAchievements()} return GetNumTrackedAchievements() end -Cheevs.GetInfo = function(self, index) - local cheevID = Cheevs.trackedCheevs[index] +Cheevs.GetInfo = function(self, watchIndex) + --- step 1: confirm primary data and begin an entry if needed + local cheevID = Cheevs.trackedCheevs[watchIndex] local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID) + if not id then return false end - self.Info[cheevID] = {} + if not self.Info[cheevID] then self.Info[cheevID] = {} end local c = self.Info[cheevID] + local numObjectives = GetAchievementNumCriteria(cheevID) + + local tagInfo = {} + local objectives = c.objectives or {} + for i = 1, numObjectives do + local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i) + local line = objectives[i] or {} + line.objectiveIndex = i + line.cheevID = cheevID + line.text = description + line.type = type + line.finished = completed + line.value = quantity + line.maxValue = requiredQuantity + line.characterName = characterName + line.flags = flags + line.assetID = assetID + line.quantityString = quantityString + line.criteriaID = criteriaID + objectives[i] = line + end + + + local rewards = {} + print('Cheevs.|cFF0088FFGetInfo|r('..watchIndex..')', 'obj:', GetAchievementNumCriteria(cheevID), name, description) + + c.rewardInfo = rewards + c.numObjectives = numObjectives + c.objectives = objectives c.type = 'Cheevs' - c.watchIndex = index + c.title = name + c.points = points + c.completed = completed + c.month = month + c.day = day + c.year = year + c.description = description + c.flags = flags + c.icon = icon + c.rewardText = rewardText + c.isGuildAch = isGuildAch + c.wasEarnedByMe = wasEarnedByMe + c.earnedBy = earnedBy + + c.tagInfo = tagInfo + c.watchIndex = watchIndex c.id = cheevID 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) - - local tagInfo = {} - - - 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] = { - objectiveIndex = i, - cheevID = cheevID, - text = description, - type = type, - finished = completed, - value = quantity, - maxValue = requiredQuantity, - characterName = characterName, - flags = flags, - assetID = assetID, - quantityString = quantityString, - criteriaID = criteriaID, - } - end - print('Cheevs.|cFF0088FFGetInfo|r('..index..')', 'obj:', GetAchievementNumCriteria(cheevID), name, description) - - c.tagInfo = tagInfo - self.WatchInfo[index] = c + self.WatchInfo[watchIndex] = c return self.Info[cheevID] end