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.

119 lines
4.4 KiB

-- ========================================================================= --
-- SylingTracker --
-- https://www.curseforge.com/wow/addons/sylingtracker --
-- --
-- Repository: --
-- https://github.com/Skamer/SylingTracker --
-- --
-- ========================================================================= --
Syling "SylingTracker.AutoQuests" ""
-- ========================================================================= --
import "SLT"
-- ========================================================================= --
-- TODO: Need to make test later
RegisterContentType = API.RegisterContentType
RegisterModel = API.RegisterModel
-- ========================================================================= --
_AutoQuestModel = RegisterModel(QuestModel, "auto-quests-data")
-- ========================================================================= --
GetNumAutoQuestPopUps = GetNumAutoQuestPopUps
GetAutoQuestPopUp = GetAutoQuestPopUp
IsQuestBounty = C_QuestLog.IsQuestBounty
RequestLoadQuestByID = C_QuestLog.RequestLoadQuestByID
GetQuestName = QuestUtils_GetQuestName
AddAutoQuestPopUp = AddAutoQuestPopUp
-- ========================================================================= --
RegisterContentType({
ID = "auto-quests",
DisplayName = "Auto Quests PopUp",
Description = "The auto quests are quests which are automatically accepeted or completed from notication PopUp",
DefaultOrder = 1,
DefaultModel = _AutoQuestModel,
DefaultViewClass = AutoQuestsContentView,
Events = { "PLAYER_ENTERING_WORLD", "SLT_AUTOQUEST_ADDED", "SLT_AUTOQUEST_REMOVED", "QUEST_AUTOCOMPLETE" },
Status = function() return GetNumAutoQuestPopUps() > 0 end
})
-- ========================================================================= --
-- This is here for knowing which quest has been requested by this module, as
-- QUEST_DATA_LOAD_RESULT event may be used by anothers modules.
_QUESTS_ID_REQUESTED = {}
function LoadAutoQuests()
for i = 1, GetNumAutoQuestPopUps() do
local questID, popupType = GetAutoQuestPopUp(i)
if not IsQuestBounty(questID) then
_M:AddAutoQuest(questID, popupType)
end
end
_AutoQuestModel:Flush()
end
function AddAutoQuest(self, questID, type)
_QUESTS_ID_REQUESTED[questID] = true
RequestLoadQuestByID(questID)
_AutoQuestModel:AddQuestData(questID, {
questID = questID,
type = type
})
_M:FireSystemEvent("SLT_AUTOQUEST_ADDED")
end
function RemoveAutoQuest(self, questID)
RemoveAutoQuestPopUp(questID)
_AutoQuestModel:RemoveQuestData(questID)
_M:FireSystemEvent("SLT_AUTOQUEST_REMOVED")
end
__SystemEvent__()
function PLAYER_ENTERING_WORLD()
_M:LoadAutoQuests()
end
__SystemEvent__()
function QUEST_DATA_LOAD_RESULT(questID, success)
if success and _QUESTS_ID_REQUESTED[questID] then
local name = GetQuestName(questID)
_AutoQuestModel:AddQuestData(questID, {
name = name,
title = title,
})
_QUESTS_ID_REQUESTED[questID] = nil
_AutoQuestModel:Flush()
end
end
__SystemEvent__()
function QUEST_AUTOCOMPLETE(questID)
-- Important ! Don't forget adding the auto quest popup when it's autocomplate
-- else it will be ignored by GetNumAutoQuestPopUps
AddAutoQuestPopUp(questID, "COMPLETE")
_M:AddAutoQuest(questID, "COMPLETE")
_AutoQuestModel:Flush()
end
-- For these below hooks, don't need calling AddAutoQuestPopUp or RemoveAutoQuestPopUp
-- as it's already done by original function.
__SecureHook__()
function AutoQuestPopupTracker_AddPopUp(questID, popupType)
_M:AddAutoQuest(questID, popupType)
_AutoQuestModel:Flush()
end
__SecureHook__()
function AutoQuestPopupTracker_RemovePopUp(questID)
_M:RemoveAutoQuest(questID)
_AutoQuestModel:Flush()
end
-- ========================================================================= --
-- Debug Utils Tools
-- ========================================================================= --
if ViragDevTool_AddData then
ViragDevTool_AddData(_AutoQuestModel, "SLT Auto Quest Model")
end