v9.7.2: Ebonhold Database integration and core logic refinements
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
---@type QuestieJourney
|
||||
local QuestieJourney = QuestieLoader:CreateModule("QuestieJourney")
|
||||
local _QuestieJourney = QuestieJourney.private
|
||||
-------------------------
|
||||
--Import modules.
|
||||
-------------------------
|
||||
---@type QuestieJourneyUtils
|
||||
local QuestieJourneyUtils = QuestieLoader:ImportModule("QuestieJourneyUtils")
|
||||
---@type QuestiePlayer
|
||||
local QuestiePlayer = QuestieLoader:ImportModule("QuestiePlayer")
|
||||
---@type QuestieProfessions
|
||||
local QuestieProfessions = QuestieLoader:ImportModule("QuestieProfessions")
|
||||
---@type QuestieDB
|
||||
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
|
||||
---@type l10n
|
||||
local l10n = QuestieLoader:ImportModule("l10n")
|
||||
|
||||
local AceGUI = LibStub("AceGUI-3.0")
|
||||
|
||||
local RESET = -1000
|
||||
|
||||
local _CreateContinentDropdown, _CreateZoneDropdown
|
||||
local _HandleContinentSelection, _HandleZoneSelection
|
||||
|
||||
local selectedContinentId
|
||||
local contDropdown, zoneDropdown, treegroup
|
||||
|
||||
-- function that draws the Tab for Zone Quests
|
||||
function _QuestieJourney.questsByZone:DrawTab(container)
|
||||
---@class AceSimpleGroup
|
||||
treegroup = AceGUI:Create("SimpleGroup")
|
||||
|
||||
-- Header
|
||||
local header = AceGUI:Create("Heading")
|
||||
header:SetText(l10n('Select Your Continent and Zone'))
|
||||
header:SetFullWidth(true)
|
||||
container:AddChild(header)
|
||||
|
||||
QuestieJourneyUtils:Spacer(container)
|
||||
|
||||
contDropdown = _CreateContinentDropdown()
|
||||
container:AddChild(contDropdown)
|
||||
|
||||
zoneDropdown = _CreateZoneDropdown()
|
||||
container:AddChild(zoneDropdown)
|
||||
|
||||
QuestieJourneyUtils:Spacer(container)
|
||||
|
||||
header = AceGUI:Create("Heading")
|
||||
header:SetText(l10n('Zone Quests'))
|
||||
header:SetFullWidth(true)
|
||||
container:AddChild(header)
|
||||
|
||||
QuestieJourneyUtils:Spacer(container)
|
||||
|
||||
treegroup:SetFullHeight(true)
|
||||
treegroup:SetFullWidth(true)
|
||||
treegroup:SetLayout("fill")
|
||||
container:AddChild(treegroup)
|
||||
end
|
||||
|
||||
_CreateContinentDropdown = function()
|
||||
local dropdown = AceGUI:Create("Dropdown")
|
||||
dropdown:SetList(QuestieJourney.continents)
|
||||
dropdown:SetText(l10n('Select Your Continent'))
|
||||
dropdown:SetCallback("OnValueChanged", _HandleContinentSelection)
|
||||
|
||||
local currentContinentId = QuestiePlayer:GetCurrentContinentId()
|
||||
|
||||
-- This mapping translates the actual continent ID to the keys of l10n.continentLookup
|
||||
if currentContinentId == 0 then -- Eastern Kingdom
|
||||
selectedContinentId = 1
|
||||
elseif currentContinentId == 1 then -- Kalimdor
|
||||
selectedContinentId = 2
|
||||
elseif currentContinentId == 530 then -- Outland
|
||||
selectedContinentId = 3
|
||||
elseif currentContinentId == 571 then -- Northrend
|
||||
selectedContinentId = 4
|
||||
elseif l10n.zoneLookup[currentContinentId] then -- Dungeon
|
||||
selectedContinentId = 5
|
||||
end
|
||||
|
||||
if _QuestieJourney.lastZoneSelection[1] then
|
||||
selectedContinentId = _QuestieJourney.lastZoneSelection[1]
|
||||
end
|
||||
|
||||
dropdown:SetValue(selectedContinentId)
|
||||
return dropdown
|
||||
end
|
||||
|
||||
_CreateZoneDropdown = function()
|
||||
local dropdown = AceGUI:Create("Dropdown")
|
||||
|
||||
local currentZoneId = QuestiePlayer:GetCurrentZoneId()
|
||||
if _QuestieJourney.lastZoneSelection[2] then
|
||||
currentZoneId = _QuestieJourney.lastZoneSelection[2]
|
||||
end
|
||||
|
||||
local zones = QuestieJourney.zones[selectedContinentId]
|
||||
if currentZoneId and currentZoneId > 0 and zones then
|
||||
local sortedZones = QuestieJourneyUtils:GetSortedZoneKeys(zones)
|
||||
dropdown:SetList(zones, sortedZones)
|
||||
dropdown:SetValue(currentZoneId)
|
||||
|
||||
local zoneTree = _QuestieJourney.questsByZone:CollectZoneQuests(currentZoneId)
|
||||
_QuestieJourney.questsByZone:ManageTree(treegroup, zoneTree)
|
||||
elseif currentZoneId == RESET and zones then
|
||||
dropdown:SetText(l10n('Select Your Zone'))
|
||||
local sortedZones = QuestieJourneyUtils:GetSortedZoneKeys(zones)
|
||||
dropdown:SetList(zones, sortedZones)
|
||||
else
|
||||
dropdown:SetDisabled(true)
|
||||
end
|
||||
|
||||
dropdown:SetCallback("OnValueChanged", _HandleZoneSelection)
|
||||
return dropdown
|
||||
end
|
||||
|
||||
_HandleContinentSelection = function(key, _)
|
||||
if (key.value == QuestieJourney.questCategoryKeys.CLASS) then
|
||||
local _, class, _ = UnitClass("player")
|
||||
local classKey = QuestieDB:GetZoneOrSortForClass(class)
|
||||
local zoneTree = _QuestieJourney.questsByZone:CollectZoneQuests(classKey)
|
||||
_QuestieJourney.questsByZone:ManageTree(treegroup, zoneTree)
|
||||
zoneDropdown.frame:Hide()
|
||||
elseif (key.value == QuestieJourney.questCategoryKeys.PROFESSIONS) then
|
||||
local professionList = QuestieJourney.zones[key.value]
|
||||
local playerProfessions = QuestieProfessions:GetPlayerProfessionNames()
|
||||
|
||||
local relevantProfessions = {}
|
||||
for id, possibleName in pairs(professionList) do
|
||||
for _, name in pairs(playerProfessions) do
|
||||
if possibleName == name then
|
||||
relevantProfessions[id] = professionList[id]
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
local text = l10n('Select Your Profession')
|
||||
if (not next(relevantProfessions)) then
|
||||
text = l10n('No Quests found')
|
||||
zoneDropdown:SetDisabled(true)
|
||||
else
|
||||
zoneDropdown:SetDisabled(false)
|
||||
end
|
||||
zoneDropdown:SetList(relevantProfessions)
|
||||
zoneDropdown:SetText(text)
|
||||
zoneDropdown.frame:Show()
|
||||
else
|
||||
local sortedZones = QuestieJourneyUtils:GetSortedZoneKeys(QuestieJourney.zones[key.value])
|
||||
zoneDropdown:SetList(QuestieJourney.zones[key.value], sortedZones)
|
||||
zoneDropdown:SetText(l10n("Select Your Zone"))
|
||||
zoneDropdown:SetDisabled(false)
|
||||
zoneDropdown.frame:Show()
|
||||
end
|
||||
|
||||
_QuestieJourney.lastZoneSelection[2] = RESET
|
||||
_QuestieJourney.lastZoneSelection[1] = key.value
|
||||
end
|
||||
|
||||
_HandleZoneSelection = function(key, _)
|
||||
local zoneTree = _QuestieJourney.questsByZone:CollectZoneQuests(key.value)
|
||||
_QuestieJourney.questsByZone:ManageTree(treegroup, zoneTree)
|
||||
_QuestieJourney.lastZoneSelection[2] = key.value
|
||||
end
|
||||
Reference in New Issue
Block a user