local GetTime = QuestHelper_GetTime QuestHelper_File["collect_achievement.lua"] = "4.0.1.$svnversion$" QuestHelper_Loadtime["collect_achievement.lua"] = GetTime() local QHCA local GetLoc local Merger local cloc local function ScanAchievements(oldADB, newADB) --QuestHelper:TextOut("scanach") local changes = 0 for k, v in pairs(newADB.achievements) do if v.complete ~= oldADB.achievements[k].complete then changes = changes + 1 end end for k, v in pairs(newADB.criteria) do if v.complete and not oldADB.criteria[k].complete then changes = changes + 1 end end if changes < 10 then -- if someone gets 10 criteria at once, well, I guess that's just what happens for k, v in pairs(newADB.achievements) do if v.complete ~= oldADB.achievements[k].complete then QuestHelper: Assert(v.complete and not oldADB.achievements[k].complete) if not QHCA[k] then QHCA[k] = {} end if not QHCA[k].achieved then QHCA[k].achieved = {} end table.insert(QHCA[k].achieved, cloc) --QHCA[k].achieved = (QHCA[k].achieved or "") .. cloc --QuestHelper:TextOut(string.format("Achievement complete, %s", select(2, GetAchievementInfo(k)))) end end for k, v in pairs(newADB.criteria) do 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) --QuestHelper:TextOut(string.format("Criteria complete, %d", k)) --QuestHelper:TextOut(string.format("Criteria complete, %s", select(1, GetAchievementCriteriaInfo(k)))) if not QHCA[k] then QHCA[k] = {} end if not QHCA[k].parent then QHCA[k].parent = v.parent end if not QHCA[k].achieved then QHCA[k].achieved = {} end table.insert(QHCA[k].achieved, cloc) --QHCA[v.parent][k] = (QHCA[v.parent][k] or "") .. cloc elseif v.progress > oldADB.criteria[k].progress then --QuestHelper:TextOut(string.format("Criteria progress, %d", k)) --QuestHelper:TextOut(string.format("Criteria progress, %s", select(1, GetAchievementCriteriaInfo(k)))) end end end end function SetCloc() cloc = GetLoc() -- yoink end function QH_Collect_Achievement_FactionChange(QHCData) if not QHCData.achievement then QHCData.achievement = {} end QHCA = QHCData.achievement end function QH_Collect_Achievement_Init(QHCData, API) QH_Collect_Achievement_FactionChange(QHCData) GetLoc = API.Callback_LocationBolusCurrent QuestHelper: Assert(GetLoc) Merger = API.Utility_Merger QuestHelper: Assert(Merger) QH_AchievementManagerRegister(ScanAchievements) QH_AchievementManagerRegister_Prescan(SetCloc) QH_AchievementManager_Init() end