241 lines
7.2 KiB
Lua
241 lines
7.2 KiB
Lua
-- TODO: Hide ignored quests on compass (currently effectively impossible)
|
|
-- TODO: Hide floating markers for ignored quests (currently effectively impossible)
|
|
--
|
|
-- TODO: Fix gamepad support
|
|
|
|
AO_IGNORED_QUESTS = {}
|
|
AO_ORIG_QUEST_CATEGORY_NAMES = {}
|
|
AO_ORIG_QUEST_CATEGORY_TYPES = {}
|
|
|
|
QUEST_CAT_AO_IGNORED = 4
|
|
|
|
--
|
|
-- GetQuestListData
|
|
--
|
|
|
|
__GetQuestListData = QUEST_JOURNAL_MANAGER.GetQuestListData
|
|
|
|
QUEST_JOURNAL_MANAGER.GetQuestListData = function(QUEST_JOURNAL_MANAGER)
|
|
local ignoredCategory = GetString(SI_AO_IGNORED_QUEST_CATEGORY)
|
|
|
|
local quests, _, _ = __GetQuestListData(QUEST_JOURNAL_MANAGER)
|
|
|
|
local categories = {}
|
|
local seenCategories = {}
|
|
|
|
for i, quest in ipairs(quests) do
|
|
if AO_IsQuestIgnored(quest) then
|
|
quests[i].categoryName = ignoredCategory
|
|
quests[i].categoryType = QUEST_CAT_AO_IGNORED
|
|
elseif quest.categoryName == ignoredCategory then
|
|
quests[i].categoryName = AO_ORIG_QUEST_CATEGORY_NAMES[quest.name]
|
|
quests[i].categoryType = AO_ORIG_QUEST_CATEGORY_TYPES[quest.name]
|
|
end
|
|
|
|
if not seenCategories[quest.categoryName] then
|
|
table.insert(categories, { name = quest.categoryName, type = quest.categoryType})
|
|
seenCategories[quest.categoryName] = true
|
|
end
|
|
end
|
|
|
|
table.sort(categories, AO_SortQuestCategories)
|
|
table.sort(quests, AO_SortQuestEntries)
|
|
|
|
return quests, categories, seenCategories
|
|
end
|
|
|
|
--
|
|
-- AddOn Functions
|
|
--
|
|
|
|
EVENT_MANAGER:RegisterForEvent("CleanJournal", EVENT_ADD_ON_LOADED,
|
|
function(eventCode, addOnName)
|
|
if addOnName ~= "CleanJournal" then
|
|
return
|
|
end
|
|
|
|
local defaults = {
|
|
AO_IGNORED_QUESTS = {},
|
|
AO_ORIG_QUEST_CATEGORY_NAMES = {},
|
|
AO_ORIG_QUEST_CATEGORY_TYPES = {}
|
|
}
|
|
|
|
local savedVars = ZO_SavedVars:New("CleanJournalData", 1, nil, defaults)
|
|
|
|
AO_IGNORED_QUESTS = savedVars.AO_IGNORED_QUESTS
|
|
AO_ORIG_QUEST_CATEGORY_NAMES = savedVars.AO_ORIG_QUEST_CATEGORY_NAMES
|
|
AO_ORIG_QUEST_CATEGORY_TYPES = savedVars.AO_ORIG_QUEST_CATEGORY_TYPES
|
|
|
|
SYSTEMS:GetObject("questJournal"):RefreshQuestMasterList()
|
|
SYSTEMS:GetObject("questJournal"):RefreshQuestList()
|
|
|
|
EVENT_MANAGER:UnregisterForEvent("CleanJournal", EVENT_ADD_ON_LOADED)
|
|
end
|
|
)
|
|
|
|
function AO_ToggleIgnoreQuest(questIndex)
|
|
local quests, categories, seenCategories = QUEST_JOURNAL_MANAGER:GetQuestListData()
|
|
|
|
local quest = AO_GetQuestByIndex(questIndex)
|
|
|
|
if AO_IsQuestIgnored(quest) then
|
|
AO_IGNORED_QUESTS[quest.name] = nil
|
|
|
|
WORLD_MAP_QUEST_BREADCRUMBS:OnQuestAdded(questIndex)
|
|
|
|
PlaySound(SOUNDS.QUEST_SHARE_ACCEPTED)
|
|
|
|
if FOCUSED_QUEST_TRACKER:GetNumTracked() == 0 then
|
|
FOCUSED_QUEST_TRACKER:ForceAssist(questIndex)
|
|
end
|
|
else
|
|
AO_IGNORED_QUESTS[quest.name] = true
|
|
|
|
AO_ORIG_QUEST_CATEGORY_NAMES[quest.name] = quest.categoryName
|
|
AO_ORIG_QUEST_CATEGORY_TYPES[quest.name] = quest.categoryType
|
|
|
|
WORLD_MAP_QUEST_BREADCRUMBS:OnQuestRemoved(false, questIndex)
|
|
|
|
PlaySound(SOUNDS.QUEST_SHARE_DECLINED)
|
|
|
|
local lastTracked = FOCUSED_QUEST_TRACKER:GetLastTracked()
|
|
if lastTracked.trackType == TRACK_TYPE_QUEST and lastTracked.arg1 == questIndex then
|
|
local unignoredQuest = AO_GetFirstUnignoredQuest()
|
|
|
|
if unignoredQuest then
|
|
FOCUSED_QUEST_TRACKER:ForceAssist(unignoredQuest.questIndex)
|
|
else
|
|
FOCUSED_QUEST_TRACKER:ClearTracker()
|
|
end
|
|
end
|
|
end
|
|
|
|
SYSTEMS:GetObject("questJournal"):OnQuestsUpdated()
|
|
end
|
|
|
|
function AO_GetQuestByIndex(questIndex)
|
|
local quests, _, _ = QUEST_JOURNAL_MANAGER:GetQuestListData()
|
|
|
|
for _, quest in ipairs(quests) do
|
|
if quest.questIndex == questIndex then
|
|
return quest
|
|
end
|
|
end
|
|
end
|
|
|
|
function AO_IsQuestIgnored(quest)
|
|
if not quest then
|
|
return nil
|
|
end
|
|
|
|
return AO_IGNORED_QUESTS[quest.name]
|
|
end
|
|
|
|
function AO_GetFirstUnignoredQuest()
|
|
local quests, categories, seenCategories = QUEST_JOURNAL_MANAGER:GetQuestListData()
|
|
|
|
for _, quest in ipairs(quests) do
|
|
if quest and not AO_IsQuestIgnored(quest) then
|
|
return quest
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function AO_SortQuestCategories(entry1, entry2)
|
|
if entry1.type == entry2.type then
|
|
return entry1.name < entry2.name
|
|
else
|
|
return entry1.type < entry2.type
|
|
end
|
|
end
|
|
|
|
function AO_SortQuestEntries(entry1, entry2)
|
|
if entry1.categoryType == entry2.categoryType then
|
|
if entry1.categoryType == QUEST_CAT_AO_IGNORED then
|
|
if AO_ORIG_QUEST_CATEGORY_TYPES[entry1.name] == AO_ORIG_QUEST_CATEGORY_TYPES[entry2.name] then
|
|
if AO_ORIG_QUEST_CATEGORY_NAMES[entry1.name] == AO_ORIG_QUEST_CATEGORY_NAMES[entry2.name] then
|
|
return entry1.name < entry2.name
|
|
end
|
|
|
|
return AO_ORIG_QUEST_CATEGORY_NAMES[entry1.name] < AO_ORIG_QUEST_CATEGORY_NAMES[entry2.name]
|
|
end
|
|
|
|
return AO_ORIG_QUEST_CATEGORY_TYPES[entry1.name] < AO_ORIG_QUEST_CATEGORY_TYPES[entry2.name]
|
|
elseif entry1.categoryName == entry2.categoryName then
|
|
return entry1.name < entry2.name
|
|
end
|
|
|
|
return entry1.categoryName < entry2.categoryName
|
|
end
|
|
|
|
return entry1.categoryType < entry2.categoryType
|
|
end
|
|
|
|
--
|
|
-- ZO_QuestJournalNavigationEntry_OnMouseUp
|
|
--
|
|
|
|
__ZO_QuestJournalNavigationEntry_OnMouseUp = ZO_QuestJournalNavigationEntry_OnMouseUp
|
|
|
|
function ZO_QuestJournalNavigationEntry_OnMouseUp(label, button, upInside)
|
|
__ZO_QuestJournalNavigationEntry_OnMouseUp(label, button, upInside)
|
|
|
|
if(button == MOUSE_BUTTON_INDEX_RIGHT and upInside) then
|
|
local quest = label.node.data
|
|
local questIndex = quest.questIndex
|
|
|
|
if questIndex then
|
|
local ignoreString = GetString(SI_AO_IGNORE_QUEST_TOOLTIP)
|
|
local unignoreString = GetString(SI_AO_UNIGNORE_QUEST_TOOLTIP)
|
|
|
|
AddMenuItem(AO_IsQuestIgnored(quest) and unignoreString or ignoreString, function() AO_ToggleIgnoreQuest(questIndex) end)
|
|
|
|
ShowMenu(label)
|
|
end
|
|
|
|
return
|
|
end
|
|
end
|
|
|
|
---
|
|
--- FOCUSED_QUEST_TRACKER.BeginTracking
|
|
---
|
|
|
|
__FOCUSED_QUEST_TRACKER_BeginTracking = FOCUSED_QUEST_TRACKER.BeginTracking
|
|
|
|
FOCUSED_QUEST_TRACKER.BeginTracking = function(self, trackType, arg1, arg2)
|
|
if trackType == TRACK_TYPE_QUEST then
|
|
local questIndex = arg1
|
|
|
|
if AO_IsQuestIgnored(AO_GetQuestByIndex(questIndex)) then
|
|
local unignoredQuest = AO_GetFirstUnignoredQuest()
|
|
|
|
if unignoredQuest then
|
|
FOCUSED_QUEST_TRACKER:ForceAssist(unignoredQuest.questIndex)
|
|
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
end
|
|
|
|
return __FOCUSED_QUEST_TRACKER_BeginTracking(self, trackType, arg1, arg2)
|
|
end
|
|
|
|
---
|
|
--- WORLD_MAP_QUEST_BREADCRUMBS.RefreshQuest
|
|
---
|
|
|
|
__WORLD_MAP_QUEST_BREADCRUMBS_RefreshQuest = WORLD_MAP_QUEST_BREADCRUMBS.RefreshQuest
|
|
|
|
WORLD_MAP_QUEST_BREADCRUMBS.RefreshQuest = function(self, questIndex)
|
|
__WORLD_MAP_QUEST_BREADCRUMBS_RefreshQuest(self, questIndex)
|
|
|
|
if AO_IsQuestIgnored(AO_GetQuestByIndex(questIndex)) then
|
|
WORLD_MAP_QUEST_BREADCRUMBS:OnQuestRemoved(false, questIndex)
|
|
end
|
|
end
|