965e8589c9
I implemented a QuestHelper_GetTime function for the next time Blizzard decides to fiddle with the time functions. It returns debugprofilestop() / 1000, to exactly match the precision of GetTime(). I also re-removed references to Cartographer from the rollback.
83 lignes
2,3 Kio
Lua
83 lignes
2,3 Kio
Lua
|
|
local GetTime = QuestHelper_GetTime
|
|
|
|
QuestHelper_File["collect_merchant.lua"] = "4.0.1.$svnversion$"
|
|
QuestHelper_Loadtime["collect_merchant.lua"] = GetTime()
|
|
|
|
-- http://www.penny-arcade.com/comic/2005/01/05/
|
|
|
|
local debug_output = false
|
|
if QuestHelper_File["collect_merchant.lua"] == "Development Version" then debug_output = true end
|
|
|
|
local QHCM
|
|
|
|
local IsMonsterGUID
|
|
local GetMonsterType
|
|
local GetItemType
|
|
|
|
local function AddChatType(typ)
|
|
local target = UnitGUID("target")
|
|
if not target then return end
|
|
|
|
if not IsMonsterGUID(target) then return end
|
|
|
|
target = GetMonsterType(target)
|
|
|
|
if not QHCM[target] then QHCM[target] = {} end
|
|
QHCM[target]["chat_" .. typ] = (QHCM[target]["chat_" .. typ] or 0) + 1
|
|
return QHCM[target]
|
|
end
|
|
|
|
local function MerchantShow()
|
|
local ct = GetMerchantNumItems()
|
|
for i = 1, ct do if not GetMerchantItemLink(i) then return end end -- We want to make sure it's cached, otherwise we'll return wonky data. Technically this biases things away from "yes he's a shopkeeper", but honestly, it doesn't matter that much.
|
|
|
|
targ = AddChatType("shop")
|
|
if not targ then return end -- welllllp
|
|
|
|
local ct = GetMerchantNumItems()
|
|
--QuestHelper:TextOut(string.format("nitems %d", ct))
|
|
|
|
for i = 1, ct do
|
|
local itemid = GetMerchantItemLink(i)
|
|
QuestHelper: Assert(itemid)
|
|
itemid = GetItemType(itemid)
|
|
local _, _, price, quant, avail, _, _ = GetMerchantItemInfo(i)
|
|
local dstr = {}
|
|
dstr.quant = quant
|
|
dstr.avail = avail
|
|
dstr.price = price
|
|
--if debug_output then QuestHelper:TextOut(dstr) end
|
|
if not targ.shop then targ.shop = {} end
|
|
if not targ.shop[itemid] then
|
|
targ.shop[itemid] = dstr
|
|
end
|
|
|
|
targ.shop[itemid].count = (targ.shop[itemid].count or 0) + 1
|
|
end
|
|
end
|
|
|
|
local function GossipShow()
|
|
AddChatType("talk")
|
|
end
|
|
|
|
local function QuestGreeting()
|
|
AddChatType("quest")
|
|
end
|
|
|
|
|
|
function QH_Collect_Merchant_Init(QHCData, API)
|
|
if not QHCData.monster then QHCData.monster = {} end
|
|
QHCM = QHCData.monster
|
|
|
|
QH_Event("MERCHANT_SHOW", MerchantShow)
|
|
QH_Event("GOSSIP_SHOW", GossipShow)
|
|
QH_Event("QUEST_GREETING", QuestGreeting)
|
|
|
|
IsMonsterGUID = API.Utility_IsMonsterGUID
|
|
GetMonsterType = API.Utility_GetMonsterType
|
|
GetItemType = API.Utility_GetItemType
|
|
QuestHelper: Assert(IsMonsterGUID)
|
|
QuestHelper: Assert(GetMonsterType)
|
|
QuestHelper: Assert(GetItemType)
|
|
end
|