Merge branch 'master' of zorba@192.168.100.11:questhelper
[QuestHelper.git] / collect_achievement.lua
blob9d7247ae01503d42c3203b80322e2dd46082341d
1 QuestHelper_File["collect_achievement.lua"] = "Development Version"
2 QuestHelper_Loadtime["collect_achievement.lua"] = GetTime()
4 local QHCA
6 local GetLoc
7 local Merger
9 local cloc
11 local function ScanAchievements(oldADB, newADB)
12 --QuestHelper:TextOut("scanach")
13 local changes = 0
14 for k, v in pairs(newADB.achievements) do
15 if v.complete ~= oldADB.achievements[k].complete then
16 changes = changes + 1
17 end
18 end
19 for k, v in pairs(newADB.criteria) do
20 if v.complete and not oldADB.criteria[k].complete then
21 changes = changes + 1
22 end
23 end
25 if changes < 10 then -- if someone gets 10 criteria at once, well, I guess that's just what happens
26 for k, v in pairs(newADB.achievements) do
27 if v.complete ~= oldADB.achievements[k].complete then
28 QuestHelper: Assert(v.complete and not oldADB.achievements[k].complete)
29 if not QHCA[k] then QHCA[k] = {} end
30 QHCA[k].achieved = (QHCA[k].achieved or "") .. cloc
32 --QuestHelper:TextOut(string.format("Achievement complete, %s", select(2, GetAchievementInfo(k))))
33 end
34 end
36 for k, v in pairs(newADB.criteria) do
37 if v.complete and not oldADB.criteria[k].complete then -- Note that it's possible for objectives to be "uncompleted" when it's things like "do a bunch of shit in one run of this battleground" (see: isle of conquest)
38 --QuestHelper:TextOut(string.format("Criteria complete, %d", k))
39 --QuestHelper:TextOut(string.format("Criteria complete, %s", select(1, GetAchievementCriteriaInfo(k))))
40 if not QHCA[v.parent] then QHCA[v.parent] = {} end
41 QHCA[v.parent][k] = (QHCA[v.parent][k] or "") .. cloc
42 elseif v.progress > oldADB.criteria[k].progress then
43 --QuestHelper:TextOut(string.format("Criteria progress, %d", k))
44 --QuestHelper:TextOut(string.format("Criteria progress, %s", select(1, GetAchievementCriteriaInfo(k))))
45 end
46 end
47 end
49 AchievementDB = newADB
51 for k, v in pairs(oldADB.achievements) do QuestHelper:ReleaseTable(v) end
52 for k, v in pairs(oldADB.criteria) do QuestHelper:ReleaseTable(v) end
54 --QuestHelper:TextOut("Done scan")
55 end
57 function SetCloc()
58 cloc = GetLoc() -- yoink
59 end
61 function QH_Collect_Achievement_Init(QHCData, API)
62 if not QHCData.achievement then QHCData.achievement = {} end
63 QHCA = QHCData.achievement
65 GetLoc = API.Callback_LocationBolusCurrent
66 QuestHelper: Assert(GetLoc)
68 Merger = API.Utility_Merger
69 QuestHelper: Assert(Merger)
71 QH_AchievementManagerRegister(ScanAchievements)
72 QH_AchievementManagerRegister_Prescan(SetCloc)
74 QH_AchievementManager_Init()
75 end