comparison 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
comparison
equal deleted inserted replaced
33:64f2a9bbea79 34:9856ebc63fa4
19 Cheevs.GetNumWatched = function(self) 19 Cheevs.GetNumWatched = function(self)
20 print('|cFF00FF00' .. GetTime()) 20 print('|cFF00FF00' .. GetTime())
21 Cheevs.trackedCheevs = {GetTrackedAchievements()} 21 Cheevs.trackedCheevs = {GetTrackedAchievements()}
22 return GetNumTrackedAchievements() 22 return GetNumTrackedAchievements()
23 end 23 end
24 Cheevs.GetInfo = function(self, index) 24 Cheevs.GetInfo = function(self, watchIndex)
25 local cheevID = Cheevs.trackedCheevs[index] 25 --- step 1: confirm primary data and begin an entry if needed
26 local cheevID = Cheevs.trackedCheevs[watchIndex]
26 local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID) 27 local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID)
28 if not id then return false end
27 29
28 self.Info[cheevID] = {} 30 if not self.Info[cheevID] then self.Info[cheevID] = {} end
29 local c = self.Info[cheevID] 31 local c = self.Info[cheevID]
32 local numObjectives = GetAchievementNumCriteria(cheevID)
33
34 local tagInfo = {}
35 local objectives = c.objectives or {}
36 for i = 1, numObjectives do
37 local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i)
38 local line = objectives[i] or {}
39 line.objectiveIndex = i
40 line.cheevID = cheevID
41 line.text = description
42 line.type = type
43 line.finished = completed
44 line.value = quantity
45 line.maxValue = requiredQuantity
46 line.characterName = characterName
47 line.flags = flags
48 line.assetID = assetID
49 line.quantityString = quantityString
50 line.criteriaID = criteriaID
51 objectives[i] = line
52 end
53
54
55 local rewards = {}
56 print('Cheevs.|cFF0088FFGetInfo|r('..watchIndex..')', 'obj:', GetAchievementNumCriteria(cheevID), name, description)
57
58 c.rewardInfo = rewards
59 c.numObjectives = numObjectives
60 c.objectives = objectives
30 c.type = 'Cheevs' 61 c.type = 'Cheevs'
31 c.watchIndex = index 62 c.title = name
63 c.points = points
64 c.completed = completed
65 c.month = month
66 c.day = day
67 c.year = year
68 c.description = description
69 c.flags = flags
70 c.icon = icon
71 c.rewardText = rewardText
72 c.isGuildAch = isGuildAch
73 c.wasEarnedByMe = wasEarnedByMe
74 c.earnedBy = earnedBy
75
76 c.tagInfo = tagInfo
77 c.watchIndex = watchIndex
32 c.id = cheevID 78 c.id = cheevID
33 c.cheevID = cheevID 79 c.cheevID = cheevID
34 c.title = name 80 self.WatchInfo[watchIndex] = c
35 c.points, c.completed, c.month, c.day, c.year, c.description, c.flags, c.icon, c.rewardText, c.isGuildAch, c.wasEarnedByMe, c.earnedBy =
36 points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy
37 c.numObjectives = GetAchievementNumCriteria(cheevID)
38
39 local tagInfo = {}
40
41
42 c.objectives = {}
43 for i = 1, c.numObjectives do
44 local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i)
45 c.objectives[i] = {
46 objectiveIndex = i,
47 cheevID = cheevID,
48 text = description,
49 type = type,
50 finished = completed,
51 value = quantity,
52 maxValue = requiredQuantity,
53 characterName = characterName,
54 flags = flags,
55 assetID = assetID,
56 quantityString = quantityString,
57 criteriaID = criteriaID,
58 }
59 end
60 print('Cheevs.|cFF0088FFGetInfo|r('..index..')', 'obj:', GetAchievementNumCriteria(cheevID), name, description)
61
62 c.tagInfo = tagInfo
63 self.WatchInfo[index] = c
64 return self.Info[cheevID] 81 return self.Info[cheevID]
65 end 82 end
66 83
67 --- Content handlers 84 --- Content handlers
68 Cheevs.UpdateLine = function(handler, block, line, data) 85 Cheevs.UpdateLine = function(handler, block, line, data)