73 lignes
2,6 Kio
Lua
73 lignes
2,6 Kio
Lua
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_Init(QHCData, API)
|
|
if not QHCData.achievement then QHCData.achievement = {} end
|
|
QHCA = QHCData.achievement
|
|
|
|
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
|