You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
5.0 KiB

local SI, L = unpack((select(2, ...)))
local Module = SI:NewModule('Emissary', 'AceEvent-3.0')
-- Lua functions
local time, pairs, ipairs, tonumber, floor = time, pairs, ipairs, tonumber, floor
-- WoW API / Variables
local C_QuestLog_GetBountiesForMapID = C_QuestLog.GetBountiesForMapID
local C_QuestLog_GetTitleForQuestID = C_QuestLog.GetTitleForQuestID
local C_QuestLog_IsQuestFlaggedCompleted = C_QuestLog.IsQuestFlaggedCompleted
local C_TaskQuest_GetQuestTimeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes
local GetNumQuestLogRewardCurrencies = GetNumQuestLogRewardCurrencies
local GetNumQuestLogRewards = GetNumQuestLogRewards
local GetQuestLogRewardCurrencyInfo = GetQuestLogRewardCurrencyInfo
local GetQuestLogRewardInfo = GetQuestLogRewardInfo
local GetQuestLogRewardMoney = GetQuestLogRewardMoney
local GetQuestObjectiveInfo = GetQuestObjectiveInfo
local QuestUtils_GetBestQualityItemRewardIndex = QuestUtils_GetBestQualityItemRewardIndex
local Emissaries = {
[6] = {
UiMapID = 627,
questID = 43341,
},
[7] = {
UiMapID = 876,
questID = 51722,
},
}
SI.Emissaries = Emissaries
-- [Alliance] = Horde
local _switching = {
[50605] = 50606, -- Alliance War Effort / Horde War Effort
[50601] = 50602, -- Storm's Wake / Talanji's Expedition
[50599] = 50598, -- Proudmoore Admiralty / Zandalari Empire
[50600] = 50603, -- Order of Embers / Voldunai
[56119] = 56120, -- The Waveblade Ankoan / The Unshackled
}
-- Switching Table
-- [questID] = { ["Alliance"] = questID, ["Horde"] = questID }
local switching = {}
for k, v in pairs(_switching) do
local tbl = {
Alliance = k,
Horde = v,
}
switching[k] = tbl
switching[v] = tbl
end
function Module:OnEnable()
self:RegisterEvent("QUEST_LOG_UPDATE")
end
function Module:QUEST_LOG_UPDATE()
if SI.db.DailyResetTime < time() then return end -- daliy reset not run yet
local t = SI.db.Toons[SI.thisToon]
if not t.Emissary then t.Emissary = {} end
local expansionLevel, tbl
for expansionLevel, tbl in pairs(Emissaries) do
if not SI.db.Emissary.Expansion[expansionLevel] then SI.db.Emissary.Expansion[expansionLevel] = {} end
local currExpansion = SI.db.Emissary.Expansion[expansionLevel]
if not t.Emissary[expansionLevel] then t.Emissary[expansionLevel] = {} end
if C_QuestLog_IsQuestFlaggedCompleted(tbl.questID) then
t.Emissary[expansionLevel].unlocked = true
if not t.Emissary[expansionLevel].days then t.Emissary[expansionLevel].days = {} end
local BountyQuest = C_QuestLog_GetBountiesForMapID(tbl.UiMapID)
for i = 1, 3 do
if not t.Emissary[expansionLevel].days[i] then t.Emissary[expansionLevel].days[i] = {} end
t.Emissary[expansionLevel].days[i].isComplete = true
end
for i, info in ipairs(BountyQuest) do
local title = C_QuestLog_GetTitleForQuestID(info.questID)
local timeleft = C_TaskQuest_GetQuestTimeLeftMinutes(info.questID)
local _, _, isFinish, questDone, questNeed = GetQuestObjectiveInfo(info.questID, 1, false)
local money = GetQuestLogRewardMoney(info.questID)
local numQuestRewards = GetNumQuestLogRewards(info.questID)
local numCurrencyRewards = GetNumQuestLogRewardCurrencies(info.questID)
if title then
SI.db.Emissary.Cache[info.questID] = title -- cache quest name
local day = tonumber(floor(timeleft / 1440) + 1) -- [1, 2, 3]
if not currExpansion[day] then currExpansion[day] = {} end
if switching[info.questID] then
currExpansion[day].questID = switching[info.questID]
else
currExpansion[day].questID = {
Alliance = info.questID,
Horde = info.questID,
}
end
currExpansion[day].questNeed = questNeed
currExpansion[day].expiredTime = timeleft * 60 + time()
local tbl = t.Emissary[expansionLevel].days[day] or {}
tbl.isComplete = false
tbl.isFinish = isFinish
tbl.questDone = questDone
-- Update Emissary Reward
if money > 0 or numQuestRewards > 0 or numCurrencyRewards > 0 then
tbl.questReward = {}
if money > 0 then
tbl.questReward.money = money
elseif numQuestRewards > 0 then
local itemIndex = QuestUtils_GetBestQualityItemRewardIndex(info.questID)
local itemName, _, _, quality, _, _, itemLvl = GetQuestLogRewardInfo(itemIndex, info.questID)
tbl.questReward.itemName = itemName
tbl.questReward.quality = quality
tbl.questReward.itemLvl = itemLvl
else
local _, _, quantity, currencyID = GetQuestLogRewardCurrencyInfo(1, info.questID)
tbl.questReward.currencyID = currencyID
tbl.questReward.quantity = quantity
end
end
end
end
else
t.Emissary[expansionLevel] = nil
end
end
end