1
0
Bifurcation 0
Ce dépôt a été archivé le 2020-03-15. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
questhelperredux/QuestHelper/collect_merchant.lua

141 lignes
3.9 KiB
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)
local ret = {}
ret.base_info = string.format("%d\t%s", target, typ)
table.insert(QHCM, ret)
return ret
end
local merchant_shown = {}
local session_currencies = {}
local function MerchantUpdate()
local ct = GetMerchantNumItems()
if merchant_shown[UnitGUID("target")] then return end -- don't collect again.
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.
-- now, we haven't collected and everything is ready to go.
merchant_shown[UnitGUID("target")] = true -- cache the shop keeper for the session. It is possible for the items to change, buy meh, we won't worry about it... they might come up in the next session.
targ = AddChatType("shop")
if not targ then return end -- welllllp
local ct = GetMerchantNumItems()
--QuestHelper:TextOut(string.format("nitems %d", ct))
local currency_list = { GetMerchantCurrencies() }
local currency_rev_list
if #currency_list ~= 0 then
for j = 1, #currency_list do
local id = currency_list[j]
if not session_currencies[id] then
session_currencies[id] = true
local name, _, icon = GetCurrencyInfo(currency_list[j])
table.insert(QHCC, string.format("%d\t%s\t%s", id, name, icon))
end
end
end
for i = 1, ct do
local itemid = GetMerchantItemLink(i)
QuestHelper: Assert(itemid)
itemid = GetItemType(itemid)
local _, _, price, quant, avail, _, ext_cost = GetMerchantItemInfo(i)
local shop_item = {}
shop_item.base_info = string.format("%d\t%d\t%d\t%d", itemid, quant, avail, price)
if ext_cost then
ext_costs = {}
for curr = 1, 3 do
local tex, val, link, name = GetMerchantItemCostItem(i, curr)
if tex then
local base_info = string.format("%s\t%s\t%d\t%s", name, tex, val, link or "NO LINK")
table.insert(ext_costs, base_info)
end
end
shop_item.ext_costs = ext_costs
end
--if debug_output then QuestHelper:TextOut(dstr) end
if not targ.shop then targ.shop = {} end
table.insert(targ.shop, shop_item)
end
end
local function GossipShow()
AddChatType("talk")
end
local function QuestGreeting()
AddChatType("quest_greet")
end
local function QuestComplete()
AddChatType("quest_complete")
end
local function QuestDetail()
AddChatType("quest_detail")
end
local function QuestFinished()
AddChatType("quest_finished")
end
local function QuestProgress()
AddChatType("quest_progress")
end
function QH_Collect_Merchant_Init(QHCData, API)
if not QHCData.merchant then QHCData.merchant = {} end
QHCM = QHCData.merchant
if not QHCData.currencies then QHCData.currencies = {} end
QHCC = QHCData.currencies
QH_Event("MERCHANT_SHOW", MerchantUpdate)
--QH_Event("MERCHANT_UPDATE", MerchantUpdate)
QH_Event("GOSSIP_SHOW", GossipShow)
QH_Event("QUEST_GREETING", QuestGreeting)
QH_Event("QUEST_COMPLETE", QuestComplete)
QH_Event("QUEST_DETAIL", QuestDetail)
QH_Event("QUEST_FINISHED", QuestFinished)
QH_Event("QUEST_PROGRESS", QuestProgress)
IsMonsterGUID = API.Utility_IsMonsterGUID
GetMonsterType = API.Utility_GetMonsterType
GetItemType = API.Utility_GetItemType
QuestHelper: Assert(IsMonsterGUID)
QuestHelper: Assert(GetMonsterType)
QuestHelper: Assert(GetItemType)
end