Fixed LostIsles coord issue. Restructured collectors to output tables only.
Cette révision appartient à :
Parent
f6710e075b
révision
e1f08c9146
|
@ -27,7 +27,9 @@ local function ScanAchievements(oldADB, newADB)
|
|||
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
|
||||
QHCA[k].achieved = (QHCA[k].achieved or "") .. cloc
|
||||
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
|
||||
|
@ -38,7 +40,9 @@ local function ScanAchievements(oldADB, newADB)
|
|||
--QuestHelper:TextOut(string.format("Criteria complete, %d", k))
|
||||
--QuestHelper:TextOut(string.format("Criteria complete, %s", select(1, GetAchievementCriteriaInfo(k))))
|
||||
if not QHCA[v.parent] then QHCA[v.parent] = {} end
|
||||
QHCA[v.parent][k] = (QHCA[v.parent][k] or "") .. cloc
|
||||
if not QHCA[v.parent][k] then QHCA[v.parent][k] = {} end
|
||||
table.insert(QHCA[v.parent][k], 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))))
|
||||
|
|
|
@ -6,6 +6,19 @@ if QuestHelper_File["collect_loot.lua"] == "Development Version" then debug_outp
|
|||
|
||||
local QHC
|
||||
|
||||
local PseudoIDs = {
|
||||
["gold"] = -1,
|
||||
["Dwarf"] = -2,
|
||||
["Troll"] = -3,
|
||||
["Fossil"] = -4,
|
||||
["Night Elf"] = -5,
|
||||
["Nerubian"] = -6,
|
||||
["Vrykul"] = -7,
|
||||
["Draenei"] = -8,
|
||||
["Orc"] = -9,
|
||||
["Tol'vir"] = -10,
|
||||
}
|
||||
|
||||
local GetMonsterUID
|
||||
local GetMonsterType
|
||||
|
||||
|
@ -446,9 +459,13 @@ local function LootOpened()
|
|||
if IsFishingLoot() then
|
||||
-- yaaaaay
|
||||
--if debug_output then QuestHelper:TextOut("Fishing loot") end
|
||||
local loc = "(" .. GetLoc() .. ")"
|
||||
if not QHC.fishing[loc] then QHC.fishing[loc] = {} end
|
||||
spot = QHC.fishing[loc]
|
||||
local loc = GetLoc()
|
||||
if not QHC.fishing[loc.delayed] then QHC.fishing[loc.delayed] = {} end
|
||||
if not QHC.fishing[loc.delayed][loc.c] then QHC.fishing[loc.delayed][loc.c] = {} end
|
||||
if not QHC.fishing[loc.delayed][loc.c][loc.z] then QHC.fishing[loc.delayed][loc.c][loc.z] = {} end
|
||||
if not QHC.fishing[loc.delayed][loc.c][loc.z][loc.x] then QHC.fishing[loc.delayed][loc.c][loc.z][loc.x] = {} end
|
||||
if not QHC.fishing[loc.delayed][loc.c][loc.z][loc.x][loc.y] then QHC.fishing[loc.delayed][loc.c][loc.z][loc.x][loc.y] = {} end
|
||||
spot = QHC.fishing[loc.delayed][loc.c][loc.z][loc.x][loc.y]
|
||||
prefix = "fish"
|
||||
|
||||
elseif pickpocket_phase == PP_PHASE_COMPLETE and pickpocket_timestamp and pickpocket_timestamp + 1 > GetTime() and targetguid == pickpocket_otarget_guid then
|
||||
|
@ -505,33 +522,36 @@ local function LootOpened()
|
|||
monsterrefresh[targetguid] = GetTime() + 2
|
||||
else
|
||||
--if debug_output then QuestHelper:TextOut("Who knows") end -- ugh
|
||||
local loc = "(" .. GetLoc() .. ")"
|
||||
if not QHC.worldloot[loc] then QHC.worldloot[loc] = {} end
|
||||
spot = QHC.worldloot[loc]
|
||||
local loc = GetLoc()
|
||||
if not QHC.worldloot[loc.delayed] then QHC.fishing[loc.delayed] = {} end
|
||||
if not QHC.worldloot[loc.delayed][loc.c] then QHC.fishing[loc.delayed][loc.c] = {} end
|
||||
if not QHC.worldloot[loc.delayed][loc.c][loc.z] then QHC.fishing[loc.delayed][loc.c][loc.z] = {} end
|
||||
if not QHC.worldloot[loc.delayed][loc.c][loc.z][loc.x] then QHC.fishing[loc.delayed][loc.c][loc.z][loc.x] = {} end
|
||||
if not QHC.worldloot[loc.delayed][loc.c][loc.z][loc.x][loc.y] then QHC.fishing[loc.delayed][loc.c][loc.z][loc.x][loc.y] = {} end
|
||||
spot = QHC.worldloot[loc.delayed][loc.c][loc.z][loc.x][loc.y]
|
||||
prefix = "loot"
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
local items = {}
|
||||
items.gold = 0
|
||||
items[pseudoIDs["gold"]] = 0
|
||||
for i = 1, GetNumLootItems() do
|
||||
_, name, quant, _ = GetLootSlotInfo(i)
|
||||
link = GetLootSlotLink(i)
|
||||
if quant == 0 then
|
||||
-- moneys
|
||||
local _, _, amount = string.find(name, Patterns.GOLD_AMOUNT)
|
||||
if amount then items.gold = items.gold + tonumber(amount) * 10000 end
|
||||
|
||||
local _, _, amount = string.find(name, Patterns.SILVER_AMOUNT)
|
||||
if amount then items.gold = items.gold + tonumber(amount) * 100 end
|
||||
|
||||
local _, _, amount = string.find(name, Patterns.COPPER_AMOUNT)
|
||||
if amount then items.gold = items.gold + tonumber(amount) * 1 end
|
||||
local tot = 0
|
||||
local _, _, gold = string.find(name, Patterns.GOLD_AMOUNT)
|
||||
local _, _, silver = string.find(name, Patterns.SILVER_AMOUNT)
|
||||
local _, _, copper = string.find(name, Patterns.COPPER_AMOUNT)
|
||||
tot = (tonumber(gold) or 0) * 10000 + (tonumber(silver) or 0) * 100 + (tonumber(copper) or 0) * 1
|
||||
items[pseudoIDs["gold"]] = tot
|
||||
else
|
||||
if string.find(name, "Archaeology Fragment") then
|
||||
items[name] = (items[name] or 0) + quant
|
||||
local _, _, match = string.find(name, "(.*) Archaeology Fragment")
|
||||
items[pseudoIDs[match]] = (items[pseudoIDs[match]] or 0) + quant
|
||||
else
|
||||
local itype = GetItemType(link)
|
||||
items[itype] = (items[itype] or 0) + quant
|
||||
|
@ -539,9 +559,10 @@ local function LootOpened()
|
|||
end
|
||||
end
|
||||
|
||||
spot[prefix .. "_count"] = (spot[prefix .. "_count"] or 0) + 1
|
||||
if not spot[prefix .. "_loot"] then spot[prefix .. "_loot"] = {} end
|
||||
local pt = spot[prefix .. "_loot"]
|
||||
if not spot[prefix] then spot[prefix] = {}
|
||||
spot[prefix]["count"] = (spot[prefix]["count"] or 0) + 1
|
||||
if not spot[prefix]["loot"] then spot[prefix]["loot"] = {} end
|
||||
local pt = spot[prefix]["loot"]
|
||||
for k, v in pairs(items) do
|
||||
if v > 0 then pt[k] = (pt[k] or 0) + v end
|
||||
end
|
||||
|
|
|
@ -80,7 +80,12 @@ local function MouseoverUnit()
|
|||
end
|
||||
end
|
||||
QuestHelper: Assert(minrange >= 0 and minrange < 256 and maxrange >= 0 and maxrange < 256)
|
||||
Merger.Add(critter, string.format("(%s %s %s),", GetLoc(), tostring(minrange), tostring(maxrange))) --strchar(minrange, maxrange))
|
||||
local data = {}
|
||||
data.loc = GetLoc()
|
||||
data.minrange = minrange
|
||||
data.maxrange = maxrange
|
||||
table.insert(critter, data)
|
||||
--Merger.Add(critter, string.format("(%s %s %s),", GetLoc(), tostring(minrange), tostring(maxrange))) --strchar(minrange, maxrange))
|
||||
|
||||
if #recentlySeenCritters_Recent >= 100 then
|
||||
for k, v in recentlySeenCritters_NextTrash do
|
||||
|
|
|
@ -88,7 +88,20 @@ local function Tooltipy(self)
|
|||
|
||||
-- We have no unique identifier, so I'm just going to record every position we see. That said, I wonder if it's a good idea to add a cooldown.
|
||||
-- Obviously, we also have no possible range data, so, welp.
|
||||
Merger.Add(qhci, "(" .. GetLoc() .. ")", true)
|
||||
local loc = GetLoc()
|
||||
local contained = false
|
||||
for _, v in pairs(qhci) do
|
||||
if v.delayed then
|
||||
if v.delayed == loc.delayed and
|
||||
v.c == loc.c and v.z == loc.z and
|
||||
v.x == loc.x and v.y == loc.y then
|
||||
contained = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if not contained then table.insert(qhci, loc)
|
||||
--Merger.Add(qhci, "(" .. GetLoc() .. ")", true)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -152,7 +152,7 @@ local function Looted(message)
|
|||
if type(ltype) ~= "number" then
|
||||
error(string.format("Expected a number but got a %s.", type(ltype)) .. "The value is:" .. ltype)
|
||||
end
|
||||
table.insert(eventy, {time = GetTime(), event = string.format("I%di", ltype)})
|
||||
table.insert(eventy, {time = GetTime(), event = {type = "item", value = ltype}})
|
||||
--if debug_output then QuestHelper:TextOut(string.format("Added event %s", string.format("I%di", ltype))) end
|
||||
end
|
||||
|
||||
|
@ -160,7 +160,7 @@ local function Combat(_, event, _, _, _, guid)
|
|||
if event ~= "UNIT_DIED" then return end
|
||||
if not IsMonsterGUID(guid) then return end
|
||||
local mtype = GetMonsterType(guid, true)
|
||||
table.insert(eventy, {time = GetTime(), event = string.format("M%dm", mtype)})
|
||||
table.insert(eventy, {time = GetTime(), event = { type = "monster", value = mtype}})
|
||||
--if debug_output then QuestHelper:TextOut(string.format("Added event %s", string.format("M%dm", mtype))) end
|
||||
end
|
||||
|
||||
|
@ -180,19 +180,25 @@ local function WatchUpdate() -- we're currently ignoring the ID of the quest th
|
|||
end
|
||||
|
||||
local function AppendMember(tab, key, dat)
|
||||
tab[key] = (tab[key] or "") .. dat
|
||||
if not tab[key] then tab[key] = {} end
|
||||
table.insert(tab[key], dat)
|
||||
--tab[key] = (tab[key] or "") .. dat
|
||||
end
|
||||
|
||||
local function StartOrEnd(se, id)
|
||||
local targuid = UnitGUID("target")
|
||||
local chunk = ""
|
||||
local chunk = {}
|
||||
if targuid and IsMonsterGUID(targuid) then
|
||||
chunk = string.format("M%dm", GetMonsterType(targuid))
|
||||
chunk.m = GetMonsterType(targuid)
|
||||
end
|
||||
chunk = chunk .. "(" .. GetLoc() ..")"
|
||||
chunk.loc = GetLoc()
|
||||
chunk.spec = GetSpecBolus()
|
||||
|
||||
AppendMember(QHCQ[id], se, chunk)
|
||||
AppendMember(QHCQ[id], se .. "_spec", GetSpecBolus())
|
||||
if not QHCQ[id][se] then QHCQ[id][se] = {} end
|
||||
|
||||
table.insert(QHCQ[id][se], chunk)
|
||||
--AppendMember(QHCQ[id], se, chunk)
|
||||
--AppendMember(QHCQ[id], se .. "_spec", GetSpecBolus())
|
||||
end
|
||||
|
||||
local abandoncomplete = ""
|
||||
|
@ -274,34 +280,27 @@ local function UpdateQuests()
|
|||
QuestHelper: Assert(#deebey[k] == #noobey[k], string.format("%d vs %d, %d", #deebey[k], #noobey[k], k))
|
||||
for i = 1, #deebey[k] do
|
||||
|
||||
--[[
|
||||
if not (noobey[k][i] >= deebey[k][i]) then
|
||||
QuestHelper:TextOut(string.format("%s, %s", type(noobey[k][i]), type(deebey[k][i])))
|
||||
QuestHelper:TextOut(string.format("%d, %d", noobey[k][i], deebey[k][i]))
|
||||
for index = 1, 100 do
|
||||
local qlink = GetQuestLink(index)
|
||||
if qlink then qlink = GetQuestType(qlink) end
|
||||
if qlink == k then
|
||||
QuestHelper:TextOut(GetQuestLogLeaderBoard(i, index))
|
||||
end
|
||||
end
|
||||
end
|
||||
QuestHelper: Assert(noobey[k][i] >= deebey[k][i]) -- man I hope this is true]] -- This entire section can fail if people throw away quest items, or if quest items have a duration that expires. Sigh.
|
||||
|
||||
if noobey[k][i] > deebey[k][i] then
|
||||
if not token then
|
||||
token = ""
|
||||
for k, v in pairs(eventy) do token = token .. v.event end
|
||||
token = {}
|
||||
token["events"] = {}
|
||||
for k, v in pairs(eventy) do table.insert(token.events, = v.event) end
|
||||
debugtok = token
|
||||
token = token .. "(" .. GetLoc() .. ")"
|
||||
token["loc"] = GetLoc()
|
||||
--token = token .. "(" .. GetLoc() .. ")"
|
||||
end
|
||||
|
||||
local ttok = token
|
||||
if noobey[k][i] - 1 ~= deebey[k][i] then
|
||||
ttok = string.format("C%dc", noobey[k][i] - deebey[k][i]) .. ttok
|
||||
--ttok = string.format("C%dc", noobey[k][i] - deebey[k][i]) .. ttok
|
||||
if not ttok["Cdc"] then ttok["Cdc"] = {} end
|
||||
table.insert(ttok["Cdc"], noobey[k][i] - deebey[k][i])
|
||||
end
|
||||
|
||||
AppendMember(QHCQ[k], string.format("criteria_%d_satisfied", i), ttok)
|
||||
if not QHCQ[k]["criteria_satisfied"] then QHCQ[k]["criteria_satisfied"] = {} end
|
||||
if not QHCQ[k]["criteria_satisfied"][i] then QHCQ[k]["criteria_satisfied"][i] = {} end
|
||||
table.insert(QHCQ[k]["criteria_satisfied"][i], ttok)
|
||||
--AppendMember(QHCQ[k], string.format("criteria_%d_satisfied", i), ttok)
|
||||
|
||||
if debug_output then QuestHelper:TextOut(string.format("Updated! Questid %d item %d count %d tok %s", k, i, noobey[k][i] - deebey[k][i], debugtok)) end
|
||||
diffs = diffs + 1
|
||||
|
|
|
@ -42,30 +42,27 @@ local function GetSpecBolus()
|
|||
--[[ assert(racelookup[race]) ]]
|
||||
|
||||
--local bso = Bitstream.Output(8)
|
||||
local talents = {}
|
||||
|
||||
for t = 1, GetNumTalentTabs() do -- come on. Is this ever not going to be 3? Seriously?
|
||||
if t == 1 then
|
||||
talstr = talstr .. "("
|
||||
else
|
||||
talstr = talstr .. ",("
|
||||
end
|
||||
talents[t] = {}
|
||||
for ta = 1, GetNumTalents(t) do
|
||||
local _, _, _, _, rank, _ = GetTalentInfo(t, ta)
|
||||
if ta == 1 then
|
||||
talstr = talstr .. rank
|
||||
else
|
||||
talstr = talstr .. "," .. rank
|
||||
end
|
||||
talents[t][ta] = rank
|
||||
--bso:append(rank, 3)
|
||||
end
|
||||
talstr = talstr .. ")"
|
||||
--bso:append(6, 3) -- no 6-point talents, so we use this as an end-of-tree market
|
||||
end
|
||||
talstr = talstr .. ")"
|
||||
--bso:append(7, 3) -- end-of-spec! because of *all of those 4-tree classes*
|
||||
|
||||
--return string.format("2%s%s%02d", classlookup[id], racelookup[race] or "", level) .. bso:finish()
|
||||
return string.format("(2%s,%s,%02d)", classlookup[id], racelookup[race] or "", level) .. talstr
|
||||
local spec = {}
|
||||
spec.talents = talents
|
||||
spec.class = classlookup[id]
|
||||
spec.race = racelookup[id] or ""
|
||||
spec.level = level
|
||||
--return string.format("(2%s,%s,%02d)", classlookup[id], racelookup[race] or "", level) .. talstr
|
||||
return spec
|
||||
end
|
||||
|
||||
function QH_Collect_Spec_Init(_, API)
|
||||
|
|
|
@ -49,15 +49,17 @@ local dy = {0, 1, 0, -1}
|
|||
|
||||
local function InitWorking()
|
||||
QHCT.working = {}
|
||||
QHCT.working.prefix = ""
|
||||
QHCT.working.prefix = {}
|
||||
end
|
||||
|
||||
local function AddDataPrefix(data)
|
||||
QHCT.working.prefix = QHCT.working.prefix .. data
|
||||
table.insert(QHCT.working.prefix, data)
|
||||
--QHCT.working.prefix = QHCT.working.prefix .. data
|
||||
end
|
||||
|
||||
local function AddData(data)
|
||||
Merger.Add(QHCT.working, data)
|
||||
table.insert(QHCT.working, data)
|
||||
--Merger.Add(QHCT.working, data)
|
||||
end
|
||||
|
||||
local function FinishData()
|
||||
|
@ -137,6 +139,8 @@ local function QH_Collect_Traveled_Point(c, x, y, rc, rz)
|
|||
|
||||
cc, cx, cy, cd = c, nx, ny, 1
|
||||
swim, mount, flying, taxi = false, false, false, false
|
||||
local b = Bolus(c, x, y, rc, rz)
|
||||
b.faction = QuestHelper:PlayerFaction()
|
||||
AddDataPrefix(Bolus(c, x, y, rc, rz) .. strchar(tostring(QuestHelper:PlayerFaction()))) -- The playerfaction can be removed, as it's now encoded in the collection shard. Not removing it for compatibility reasons.
|
||||
end
|
||||
|
||||
|
|
|
@ -43,7 +43,9 @@ local function OnUpdate()
|
|||
|
||||
if last_warp + 10 < GetTime() and leapy then
|
||||
if debug_output then QuestHelper:TextOut("REAL Warpy!") end
|
||||
Merger.Add(QHCW, "(" .. lastloc_bolus .. ")(" .. bolus .. ")")
|
||||
local warpy = { last = lastloc_bolus, current = bolus }
|
||||
table.insert(QHCW, warpy)
|
||||
--Merger.Add(QHCW, "(" .. lastloc_bolus .. ")(" .. bolus .. ")")
|
||||
last_warp = GetTime()
|
||||
end
|
||||
end
|
||||
|
|
|
@ -23,9 +23,12 @@ local function DoZoneUpdate(label, debugverbose)
|
|||
QHCZ[zname].mapname = GetMapInfo()
|
||||
|
||||
local loc = GetLoc()
|
||||
if loc == "€\000\000\000€\000\000\000€€€" then return end -- this is kind of the "null value"
|
||||
if loc.delayed == 128 and loc.c == 0 and loc.z == 0 and loc.x == -128 and loc.y == -128 then return end
|
||||
--if loc == "€\000\000\000€\000\000\000€€€" then return end -- this is kind of the "null value"
|
||||
local found = false
|
||||
|
||||
Merger.Add(znl, loc, true)
|
||||
-- Commented out, 'cause this module isn't really loaded anymore. I'll remove it after the next commit.
|
||||
--Merger.Add(znl, loc, true)
|
||||
end
|
||||
|
||||
local function OnEvent()
|
||||
|
|
|
@ -286,15 +286,20 @@ function load_graph_links()
|
|||
coord[1] = 198
|
||||
end
|
||||
|
||||
-- I hate Blizzard... They can't make up their mind weather we are on LostIsles or Hyjal_terrain1, but we only seem to be on one or the other.
|
||||
if (coord[1] == 208 or coord[1] == 209) and not QuestHelper_ZoneLookup[coord[1]] then
|
||||
coord[1] = 181
|
||||
elseif (coord[1] == 181 or coord[1] == 209) and not QuestHelper_ZoneLookup[coord[1]] then
|
||||
-- I hate Blizzard... They can't make up their mind weather we are on LostIsles, LostIsles_terrain1 or LostIsles_terrain2, but we only seem to be on one.
|
||||
-- Trust me when I say that unless there's more terrains for LostIsles, this does NOT loop back to coord[1] == 181.
|
||||
if not QuestHelper_ZoneLookup[coord[1]] and coord[1] == 181 then
|
||||
coord[1] = 208
|
||||
elseif (coord[1] == 181 or coord[1] == 208) and not QuestHelper_ZoneLookup[coord[1]] then
|
||||
end
|
||||
|
||||
if not QuestHelper_ZoneLookup[coord[1]] and coord[1] == 208 then
|
||||
coord[1] = 209
|
||||
end
|
||||
|
||||
if not QuestHelper_ZoneLookup[coord[1]] and coord[1] == 209 then
|
||||
coord[1] = 181
|
||||
end
|
||||
|
||||
QuestHelper: Assert(QuestHelper_ZoneLookup[coord[1]], string.format("Coord[1] = %d", coord[1]))
|
||||
local c, x, y = QuestHelper.Astrolabe:GetAbsoluteContinentPosition(QuestHelper_ZoneLookup[coord[1]][1], QuestHelper_ZoneLookup[coord[1]][2], coord[2], coord[3])
|
||||
QuestHelper: Assert(c)
|
||||
|
|
Référencer dans un nouveau ticket