diff --git a/.gitattributes b/.gitattributes index 5093f96..6d6b2f9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,14 +4,34 @@ # Exclude dev/meta files from release archives .gitattributes export-ignore .gitignore export-ignore -.git_disabled/ export-ignore +.kilocode/ export-ignore +.idea/ export-ignore +.vscode/ export-ignore +*.iml export-ignore +*.zip export-ignore +*.log export-ignore +*.tmp export-ignore +*.bak export-ignore +*.old export-ignore +*.py export-ignore +*.js export-ignore +*.ps1 export-ignore +.coords.lua export-ignore +debug.lua export-ignore +debug_tooltip.lua export-ignore +verify_*.lua export-ignore +.history/ export-ignore +Research/ export-ignore Tools/ export-ignore -docs/ export-ignore +tests/ export-ignore +Tests/ export-ignore +workflow/ export-ignore +__pycache__/ export-ignore +.agents/ export-ignore +tmp_*.py export-ignore +release_notes.txt export-ignore +RELEASE_NOTES.md export-ignore README.md export-ignore CHANGELOG.md export-ignore -RELEASE_NOTES.md export-ignore changelog.html export-ignore -.agent/ export-ignore -*.json export-ignore -verify_*.lua export-ignore -.kilocode/ export-ignore \ No newline at end of file +docs/ export-ignore diff --git a/.gitignore b/.gitignore index fccaa95..1d03eb5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,31 @@ -workflow/ +# IDE .idea/ -*.iml .vscode/ +*.iml .DS_Store + +# Build artifacts *.zip +*.log +*.tmp +*.bak +*.old + +# Scripts *.py *.js *.ps1 -*.txt +tmp_*.py +release_notes.txt + +# Docs !README.md !CHANGELOG.md !RELEASE_NOTES.md !LICENSE !Icons/MIT.txt +# Dev files coords.lua debug.lua debug_tooltip.lua @@ -23,19 +35,10 @@ Research/ Tools/ tests/ Tests/ -!docs/changelog.html -tmp_*.py -release_notes.txt workflow/ __pycache__/ .agents/ -.idea/ -.vscode/ -*.zip -*.log -*.tmp -*.bak -*.old -.agent/ -*.json .kilocode/ + +# Assets that shouldn't be in source +# (Icons/* are needed for release) diff --git a/CHANGELOG.md b/CHANGELOG.md index f14765f..9d2fe8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,39 @@ # Changelog +## Questie-X - Arrow & Options Updates + +### New Features + +- Added new **Arrow** tab in Questie options with the following settings: + - Enable Arrow toggle + - Arrow Scale slider (0.5 - 2.0) + - Arrow Transparency slider (0.1 - 1.0) + - Auto-track Quests toggle + - Reset Arrow Position button + - Debug Arrow toggle (shows target info in chat) + - Print Current Target button + - Clear Target button + - Debug Print Arrow State button + +### Bug Fixes + +- **Arrow auto-tracking**: Fixed an issue where the zone filter was comparing zone IDs (e.g., 14) against area IDs (e.g., 1244), causing all spawns to be incorrectly filtered out. Zone filtering has been temporarily disabled until a proper fix can be implemented that correctly converts between zone ID systems. +- **Arrow transparency**: Added support for arrow transparency/opacity setting. +- **Debug output**: Fixed spam when debug arrow was enabled and no target was set. +- **Nil safety**: Added nil checks for TrackedQuests and AutoUntrackedQuests tables. +- **Options validation**: Fixed Spacer() function calls that were incorrectly passing 0.1 as hidden parameter. + +### Known Issues + +- Zone filtering is disabled for auto-tracking, which means the arrow may show objectives on other continents. A proper continent-based filter will be implemented in a future update. + +## v1.5.6 (2026-04-01) + +### Stability & Initialization + +- **[Fix — Options Crash]** Resolved a critical runtime error on WotLK 3.3.5a: `attempt to call method 'AddToBlizOptions' (a nil value)`. This was caused by the modern `AceConfigDialog-3.0` library attempting to use the Retail-only `Settings` API. A compatibility shim has been implemented in `!X-Libs` to bridge this call back to the native `InterfaceOptions_AddCategory` API. +- **[Fix — Library Load Order]** Updated core library package to `!X-Libs` to ensure it loads before all other addons. This guarantees that `LibStub` is initialized and available for addons like `BugSack` that load very early in the sequence. + ## v1.5.5 (2026-03-29) ### Performance — Profiler-Driven Optimizations @@ -29,6 +63,7 @@ Addressed micro-stutters and FPS drops (190 → sub-100) reported during high-fr - **[Perf — Tracker Cooldown Throttling]** Added a 5Hz (0.2s) execution throttle to the tracker quest item button `btn.OnUpdate` frame handler, dropping baseline `GetItemCooldown` API polls from ~6000+ checks every few minutes down to a fraction of that load. - **[Fix — Tooltip Duplicates]** Added aggressive regex filtering to automatically strip Ascension's duplicate native custom quest text lines from appearing twice in unit and item tooltips (Before Questie seamlessly injects its own higher-fidelity formatted data). + ## v1.5.4 (2026-03-29) ### Ascension Custom Zone Support @@ -134,21 +169,24 @@ Addressed micro-stutters and FPS drops (190 → sub-100) reported during high-fr - **[Map Pin Gating]** Learned map pins (sword icons) now only appear after reaching a configurable confidence threshold (default: 2). - **[Confidence in Tooltips]** NPC and Object tooltips now display their confidence level (e.g., `(Learned - Confidence: 2)`). - **[Timestamp Tracking]** Added `lastSeen` (`ls`) timestamps to all learned entries to track data freshness. - + ### QuestieLearnerComms.lua — Global Data Sharing + - **[Community Reinforcement]** Expanded data sharing from Party/Guild to a global hidden channel. Confidence values (`mc`) now increment when identical data is received from other Questie users, allowing the community to verify spawns collectively. - **[Network Freshness]** Receiving data over the network now refreshes the `lastSeen` timestamp, keeping active community spawns from being pruned. - + ### QuestieLearnerExport.lua — Tiered Stale Data Cleanup + - **[Tiered Pruning]** Implemented a robust cleanup system that protects "Verified" (high-confidence) data from age-based deletion. - **[Age-Based Pruning]** "Unconfirmed" data is now automatically pruned if it hasn't been seen within a configurable timeframe (default: 90 days). - **[Redundancy Pruning]** Logic to remove data already present in the official Questie database now respects the `pruneVerified` toggle, allowing users to keep verified personal data even if it overlaps with the core DB. - + ### QuestieOptionsDatabase.lua — Advanced Cleanup Controls + - **[Stale Data Threshold]** Added a slider to control the age-pruning threshold (1-180 days) for unconfirmed data. - **[Verified Data Protection]** Added a toggle to include or exclude verified data from redundancy pruning. - **[UI Reorganization]** Refactored the Database tab's cleanup section for better logical flow and clarity. - + --- ## v1.2.9 — QuestieLearner Cross-Link Engine + Tracker Zone Fix + Untrack Fix diff --git a/Libs/HereBeDragons/CHANGELOG.md b/Libs/HereBeDragons/CHANGELOG.md deleted file mode 100644 index 483e9e9..0000000 --- a/Libs/HereBeDragons/CHANGELOG.md +++ /dev/null @@ -1,15 +0,0 @@ -# Lib: HereBeDragons - -## [2.09-release](https://github.com/Nevcairiel/HereBeDragons/tree/2.09-release) (2022-08-29) -[Full Changelog](https://github.com/Nevcairiel/HereBeDragons/compare/2.08-release...2.09-release) [Previous Releases](https://github.com/Nevcairiel/HereBeDragons/releases) - -- Unify WoW version checks -- Update TOC -- Move DK starting area override into transforms - The instance ID overrides were meant for dynamic phasing, not - permanently instanced zones, which the transform was designed for - instead, even if the map coordinates are not transformed. - This should make the behavior more consistent for users. -- Don't use expansion level checks, they may not be present in all clients -- Fix handling of pins from phased sub maps -- Add Wrath Classic support diff --git a/Modules/Arrow/QuestieArrow.lua b/Modules/Arrow/QuestieArrow.lua index 4264242..bc4d5ff 100644 --- a/Modules/Arrow/QuestieArrow.lua +++ b/Modules/Arrow/QuestieArrow.lua @@ -67,6 +67,13 @@ local function _GetArrowScale() return Questie.db.profile.arrowScale or 1 end +local function _GetArrowAlpha() + if not Questie or not Questie.db or not Questie.db.profile then + return 1.0 + end + return Questie.db.profile.arrowAlpha or 1.0 +end + local function _SetArrowScale(scale) if not Questie or not Questie.db or not Questie.db.profile then return @@ -424,7 +431,8 @@ local function _CollectFinisherSpawns(finisher, quest) local zone = value[1] local x = value[2] local y = value[3] - if not (autoLogic and zone ~= pZone and zone ~= pMap) then + -- Zone filtering disabled (zone ID vs area ID mismatch) + if true then local uiMapId = ZoneDB:GetUiMapIdByAreaId(zone) if uiMapId and x and y then local tX, tY, tInst = HBD:GetWorldCoordinatesFromZone(x / 100.0, y / 100.0, uiMapId) @@ -442,7 +450,8 @@ local function _CollectFinisherSpawns(finisher, quest) end end else - if not (autoLogic and finisherZone ~= pZone and finisherZone ~= pMap) then + -- Zone filtering disabled (same zone ID vs area ID mismatch issue) + if true then local x = coords[1] local y = coords[2] local uiMapId = ZoneDB:GetUiMapIdByAreaId(finisherZone) @@ -467,7 +476,8 @@ local function _CollectFinisherSpawns(finisher, quest) end if finisher.waypoints then for zone, waypoints in pairs(finisher.waypoints) do - if not (autoLogic and zone ~= pZone and zone ~= pMap) then + -- Zone filtering disabled (same zone ID vs area ID mismatch issue) + if true then if waypoints and waypoints[1] and waypoints[1][1] and waypoints[1][1][1] then local x = waypoints[1][1][1] local y = waypoints[1][1][2] @@ -501,18 +511,39 @@ local function _CollectObjective(objective, quest) end local pX, pY, pInst = _arrow_playerX, _arrow_playerY, _arrow_playerInstance local autoLogic, pZone, pMap = _arrow_usingAutoLogic, _arrow_playerZoneId, _arrow_playerUiMapId + local debugCollect = Questie and Questie.db and Questie.db.profile and Questie.db.profile.debugArrow + if debugCollect then + print(string.format(" _CollectObjective: spawnList=%s", objective.spawnList and "yes" or "nil")) + end + if not objective.spawnList then return end for _, spawnData in pairs(objective.spawnList) do + if debugCollect then + print(string.format(" spawnData=%s Spawns=%s", spawnData and "yes" or "nil", spawnData and spawnData.Spawns and "yes" or "nil")) + end if spawnData and spawnData.Spawns then for zone, spawns in pairs(spawnData.Spawns) do - if not (autoLogic and zone ~= pZone and zone ~= pMap) then + -- Zone filtering is disabled in auto mode because zone IDs and area IDs + -- are different systems that don't directly compare. The distance + -- calculation handles instance mismatches. + local zoneFiltered = false -- Disabled: autoLogic and zone ~= pZone and zone ~= pMap + if debugCollect then + print(string.format(" zone=%s filtered=%s (pZone=%s pMap=%s)", tostring(zone), tostring(zoneFiltered), tostring(pZone), tostring(pMap))) + end + if not zoneFiltered then for _, spawn in pairs(spawns) do local uiMapId = ZoneDB:GetUiMapIdByAreaId(zone) + if debugCollect then + print(string.format(" spawn=(%.1f,%.1f) uiMapId=%s", spawn[1], spawn[2], tostring(uiMapId))) + end if uiMapId then local tX, tY, tInst = HBD:GetWorldCoordinatesFromZone(spawn[1] / 100.0, spawn[2] / 100.0, uiMapId) if tX and tY and tInst then local dist = HBD:GetWorldDistance(tInst, pX, pY, tX, tY) if dist then if tInst ~= pInst then dist = 500000 + dist * 100 end + if debugCollect then + print(string.format(" ADDED dist=%.0f", dist)) + end table.insert(sortedTargets, { x = spawn[1], y = spawn[2], uiMapId = uiMapId, title = quest.name, questLevel = quest.level, @@ -563,6 +594,8 @@ function QuestieArrow:UpdateNearestTargets() local function _CollectQuestTargets(quest) if not quest then return end + local debugCollect = Questie and Questie.db and Questie.db.profile and Questie.db.profile.debugArrow + -- Avoid spamming QuestieQuest:PopulateQuestLogInfo (it can trigger marker rebuilds and flicker). -- Only populate when objective completion flags are missing, and throttle per quest id. if QuestieQuest and QuestieQuest.PopulateQuestLogInfo and quest.Id then @@ -585,6 +618,14 @@ function QuestieArrow:UpdateNearestTargets() local isComplete = quest.isComplete or (QuestieDB.IsComplete(quest.Id) == 1) if isComplete then quest.isComplete = true end + if debugCollect then + print(string.format(" _CollectQuestTargets: %s isComplete=%s hasObjectives=%s hasSpecialObjectives=%s hasFinisher=%s", + tostring(quest.name), tostring(isComplete), + tostring(quest.Objectives ~= nil), + tostring(quest.SpecialObjectives ~= nil), + tostring(quest.Finisher ~= nil))) + end + -- _GetCompleteIconType, _CollectFinisherSpawns, _CollectObjective are hoisted -- to module level above; no closures are created here. @@ -604,11 +645,15 @@ function QuestieArrow:UpdateNearestTargets() end if quest.Objectives then + if debugCollect then print(string.format(" Collecting %d objectives", #quest.Objectives)) end for _, objective in pairs(quest.Objectives) do _CollectObjective(objective, quest) end + else + if debugCollect then print(" No Objectives") end end if quest.SpecialObjectives then + if debugCollect then print(string.format(" Collecting %d special objectives", #quest.SpecialObjectives)) end for _, objective in pairs(quest.SpecialObjectives) do _CollectObjective(objective, quest) end @@ -616,22 +661,36 @@ function QuestieArrow:UpdateNearestTargets() end if QuestiePlayer and QuestiePlayer.currentQuestlog then + local debugCollect = Questie and Questie.db and Questie.db.profile and Questie.db.profile.debugArrow for questId, quest in pairs(QuestiePlayer.currentQuestlog) do + if debugCollect then + print(string.format("Processing questId=%d type=%s", questId, type(quest))) + end + if type(quest) == "number" then + if QuestieDB and QuestieDB.GetQuest then + quest = QuestieDB.GetQuest(questId) + end + end if type(quest) == "table" then local shouldTrack = false if usingAutoLogic then - -- If using auto logic (implicit or explicit), verify not explicitly hidden - if not Questie.db.char.AutoUntrackedQuests[questId] then + if not Questie.db.char.AutoUntrackedQuests or not Questie.db.char.AutoUntrackedQuests[questId] then shouldTrack = true end else - -- Strict manual tracking - if Questie.db.char.TrackedQuests[questId] then + if Questie.db.char.TrackedQuests and Questie.db.char.TrackedQuests[questId] then shouldTrack = true end end + if debugCollect then + print(string.format(" questId=%d shouldTrack=%s usingAutoLogic=%s", questId, tostring(shouldTrack), tostring(usingAutoLogic))) + end + if shouldTrack then + if debugCollect then + print(string.format(" Calling _CollectQuestTargets for %s", tostring(quest.name))) + end _CollectQuestTargets(quest) end end @@ -650,16 +709,13 @@ function QuestieArrow:Refresh() return end - if hasManualTarget then - EnsureArrowFrame() - arrowFrame:Show() - return - end - QuestieArrow:UpdateNearestTargets() EnsureArrowFrame() + + local alpha = _GetArrowAlpha() if sortedTargets[1] then + arrowFrame:SetAlpha(alpha) arrowFrame:Show() else arrowFrame:Hide() @@ -688,6 +744,7 @@ function QuestieArrow:SetTarget(title, zoneOrUiMapId, x, y) } } EnsureArrowFrame() + arrowFrame:SetAlpha(_GetArrowAlpha()) arrowFrame:Show() end @@ -741,6 +798,43 @@ function QuestieArrow:PrintTargetCoords() print(" Distance: " .. string.format("%.0f", target.distance)) end +function QuestieArrow:DebugPrint() + print("=== Questie Arrow Debug ===") + print("sortedTargets count: " .. tostring(#sortedTargets)) + print("hasManualTarget: " .. tostring(hasManualTarget)) + print("_arrow_usingAutoLogic: " .. tostring(_arrow_usingAutoLogic)) + print("_arrow_playerX: " .. tostring(_arrow_playerX)) + print("_arrow_playerY: " .. tostring(_arrow_playerY)) + print("_arrow_playerZoneId: " .. tostring(_arrow_playerZoneId)) + print("_arrow_playerUiMapId: " .. tostring(_arrow_playerUiMapId)) + if Questie and Questie.db and Questie.db.profile then + print("autoTrackQuests: " .. tostring(Questie.db.profile.autoTrackQuests)) + end + if Questie and Questie.db and Questie.db.char then + local tracked = Questie.db.char.TrackedQuests or {} + local autoUntracked = Questie.db.char.AutoUntrackedQuests or {} + local trackedCount = 0 + for _ in pairs(tracked) do trackedCount = trackedCount + 1 end + local autoUntrackedCount = 0 + for _ in pairs(autoUntracked) do autoUntrackedCount = autoUntrackedCount + 1 end + print("TrackedQuests count: " .. tostring(trackedCount)) + print("AutoUntrackedQuests count: " .. tostring(autoUntrackedCount)) + end + if QuestiePlayer and QuestiePlayer.currentQuestlog then + local count = 0 + for _ in pairs(QuestiePlayer.currentQuestlog) do count = count + 1 end + print("currentQuestlog count: " .. tostring(count)) + end + if sortedTargets and #sortedTargets > 0 then + print("First 3 targets:") + for i = 1, math.min(3, #sortedTargets) do + local t = sortedTargets[i] + print(string.format(" [%d] %s (%.1f, %.1f) dist=%.0f", i, tostring(t.title), t.x, t.y, t.distance)) + end + end + print("========================") +end + -- Also expose sortedTargets for external access function QuestieArrow:GetTargets() return sortedTargets @@ -750,6 +844,9 @@ end local _OriginalRefresh = QuestieArrow.Refresh QuestieArrow.Refresh = function(self, ...) _OriginalRefresh(self, ...) - -- You can uncomment the line below to see debug output every refresh: - -- QuestieArrow:PrintTargetCoords() + if Questie and Questie.db and Questie.db.profile and Questie.db.profile.debugArrow then + if sortedTargets and sortedTargets[1] then + QuestieArrow:PrintTargetCoords() + end + end end diff --git a/Modules/Options/ArrowTab/QuestieOptionsArrow.lua b/Modules/Options/ArrowTab/QuestieOptionsArrow.lua new file mode 100644 index 0000000..562228f --- /dev/null +++ b/Modules/Options/ArrowTab/QuestieOptionsArrow.lua @@ -0,0 +1,164 @@ +------------------------- +--Import modules. +------------------------- +---@type QuestieOptions +local QuestieOptions = QuestieLoader:ImportModule("QuestieOptions") +---@type QuestieOptionsUtils +local QuestieOptionsUtils = QuestieLoader:ImportModule("QuestieOptionsUtils") +---@type QuestieArrow +local QuestieArrow = QuestieLoader:ImportModule("QuestieArrow") +---@type QuestieTracker +local QuestieTracker = QuestieLoader:ImportModule("QuestieTracker") + +---@type l10n +local l10n = QuestieLoader:ImportModule("l10n") + +QuestieOptions.tabs.arrow = { ... } + +function QuestieOptions.tabs.arrow:Initialize() + return { + name = function() return l10n('Arrow') end, + type = "group", + order = 2.5, + args = { + arrow_header = { + type = "header", + order = 1, + name = function() return l10n('Arrow Options') end, + }, + arrowEnabled = { + type = "toggle", + order = 2, + width = 1.5, + name = function() return l10n("Enable Arrow") end, + desc = function() return l10n("Show the Questie arrow and auto-track the nearest objective or turn-in location.") end, + get = function() return Questie.db.profile.arrowEnabled ~= false end, + set = function(_, value) + Questie.db.profile.arrowEnabled = value + if QuestieArrow and QuestieArrow.Refresh then + if not value and QuestieArrow.ClearTarget then + QuestieArrow:ClearTarget() + end + QuestieArrow:Refresh() + end + end, + }, + arrow_spacer_1 = QuestieOptionsUtils:Spacer(3), + arrow_scale = { + type = "range", + order = 4, + width = 1.5, + name = function() return l10n("Arrow Scale") end, + desc = function() return l10n("Change the size of the arrow") end, + min = 0.5, + max = 2.0, + step = 0.05, + get = function() return Questie.db.profile.arrowScale or 1 end, + set = function(_, value) + Questie.db.profile.arrowScale = value + if QuestieArrow and QuestieArrow.Refresh then + QuestieArrow:Refresh() + end + end, + }, + arrow_alpha = { + type = "range", + order = 5, + width = 1.5, + name = function() return l10n("Arrow Transparency") end, + desc = function() return l10n("Change the transparency of the arrow") end, + min = 0.1, + max = 1.0, + step = 0.05, + get = function() return Questie.db.profile.arrowAlpha or 1.0 end, + set = function(_, value) + Questie.db.profile.arrowAlpha = value + if QuestieArrow and QuestieArrow.Refresh then + QuestieArrow:Refresh() + end + end, + }, + arrow_spacer_2 = QuestieOptionsUtils:Spacer(6), + autoTrackQuests = { + type = "toggle", + order = 7, + width = 1.5, + name = function() return l10n("Auto-track Quests") end, + desc = function() return l10n("Automatically track all quests in your quest log. If disabled, only manually tracked quests will show on the arrow.") end, + get = function() return Questie.db.profile.autoTrackQuests end, + set = function(_, value) + Questie.db.profile.autoTrackQuests = value + if QuestieTracker and QuestieTracker.Update then + QuestieTracker:Update() + end + if QuestieArrow and QuestieArrow.Refresh then + QuestieArrow:Refresh() + end + end, + }, + arrow_spacer_3 = QuestieOptionsUtils:Spacer(8), + resetArrowPosition = { + type = "execute", + order = 9, + width = 1.0, + name = function() return l10n("Reset Arrow Position") end, + desc = function() return l10n("Reset the arrow position to the center of the screen") end, + func = function() + Questie.db.profile.arrowPosition = nil + if QuestieArrow and QuestieArrow.Refresh then + QuestieArrow:Refresh() + end + end, + }, + arrow_spacer_4 = QuestieOptionsUtils:Spacer(10), + debugArrow = { + type = "toggle", + order = 11, + width = 1.5, + name = function() return l10n("Debug Arrow") end, + desc = function() return l10n("Show debug information about the arrow target in chat") end, + get = function() return Questie.db.profile.debugArrow end, + set = function(_, value) + Questie.db.profile.debugArrow = value + end, + }, + printArrowTarget = { + type = "execute", + order = 12, + width = 1.0, + name = function() return l10n("Print Current Target") end, + desc = function() return l10n("Print the current arrow target coordinates to chat") end, + func = function() + if QuestieArrow and QuestieArrow.PrintTargetCoords then + QuestieArrow:PrintTargetCoords() + end + end, + }, + debugPrintArrow = { + type = "execute", + order = 12.5, + width = 1.0, + name = function() return l10n("Debug Print Arrow State") end, + desc = function() return l10n("Print detailed debug info about arrow state to chat") end, + func = function() + if QuestieArrow and QuestieArrow.DebugPrint then + QuestieArrow:DebugPrint() + end + end, + }, + clearArrowTarget = { + type = "execute", + order = 13, + width = 1.0, + name = function() return l10n("Clear Target") end, + desc = function() return l10n("Clear the current arrow target and resume auto-tracking") end, + func = function() + if QuestieArrow and QuestieArrow.ClearTarget then + QuestieArrow:ClearTarget() + QuestieArrow:Refresh() + end + end, + }, + }, + } +end diff --git a/Modules/Options/QuestieOptions.lua b/Modules/Options/QuestieOptions.lua index 767b1c5..208d936 100644 --- a/Modules/Options/QuestieOptions.lua +++ b/Modules/Options/QuestieOptions.lua @@ -123,6 +123,8 @@ _CreateOptionsTable = function() --coroutine.yield() local icons_tab = QuestieOptions.tabs.icons:Initialize() coroutine.yield() + local arrow_tab = QuestieOptions.tabs.arrow:Initialize() + coroutine.yield() local tracker_tab = QuestieOptions.tabs.tracker:Initialize() coroutine.yield() local auto_tab = QuestieOptions.tabs.auto:Initialize() @@ -154,6 +156,7 @@ _CreateOptionsTable = function() --minimap_tab = minimap_tab, --map_tab = map_tab, icons_tab = icons_tab, + arrow_tab = arrow_tab, tracker_tab = tracker_tab, auto_tab = auto_tab, --tooltip_tab = tooltip_tab, diff --git a/Modules/Options/QuestieOptionsDefaults.lua b/Modules/Options/QuestieOptionsDefaults.lua index 4410dae..e0b5586 100644 --- a/Modules/Options/QuestieOptionsDefaults.lua +++ b/Modules/Options/QuestieOptionsDefaults.lua @@ -51,6 +51,8 @@ function QuestieOptionsDefaults:Load() questMinimapObjectiveColors = false, arrowEnabled = true, arrowScale = 1, + arrowAlpha = 1.0, + debugArrow = false, enableObjectives = true, enableTurnins = true, enableAvailable = true, diff --git a/Questie-X-Classic.toc b/Questie-X-Classic.toc index 65577e9..492484e 100644 --- a/Questie-X-Classic.toc +++ b/Questie-X-Classic.toc @@ -188,6 +188,7 @@ Modules\Options\AutoTab\QuestieOptionsAuto.lua Modules\Options\DBMTab\QuestieOptionsDBM.lua Modules\Options\GeneralTab\QuestieOptionsGeneral.lua Modules\Options\IconsTab\QuestieOptionsIcons.lua +Modules\Options\ArrowTab\QuestieOptionsArrow.lua Modules\Options\NameplateTab\QuestieOptionsNameplate.lua Modules\Options\TrackerTab\QuestieOptionsTracker.lua Modules\Options\KeybindsTab\QuestieOptionsKeybinds.lua diff --git a/Questie-X-TBC.toc b/Questie-X-TBC.toc index e1cc6db..13996a4 100644 --- a/Questie-X-TBC.toc +++ b/Questie-X-TBC.toc @@ -180,6 +180,7 @@ Modules\Options\AutoTab\QuestieOptionsAuto.lua Modules\Options\DBMTab\QuestieOptionsDBM.lua Modules\Options\GeneralTab\QuestieOptionsGeneral.lua Modules\Options\IconsTab\QuestieOptionsIcons.lua +Modules\Options\ArrowTab\QuestieOptionsArrow.lua Modules\Options\NameplateTab\QuestieOptionsNameplate.lua Modules\Options\TrackerTab\QuestieOptionsTracker.lua Modules\Options\KeybindsTab\QuestieOptionsKeybinds.lua diff --git a/Questie-X-Turtle.toc b/Questie-X-Turtle.toc index 8d1de96..39e4dc4 100644 --- a/Questie-X-Turtle.toc +++ b/Questie-X-Turtle.toc @@ -185,6 +185,7 @@ Modules\Options\AutoTab\QuestieOptionsAuto.lua Modules\Options\DBMTab\QuestieOptionsDBM.lua Modules\Options\GeneralTab\QuestieOptionsGeneral.lua Modules\Options\IconsTab\QuestieOptionsIcons.lua +Modules\Options\ArrowTab\QuestieOptionsArrow.lua Modules\Options\NameplateTab\QuestieOptionsNameplate.lua Modules\Options\TrackerTab\QuestieOptionsTracker.lua Modules\Options\KeybindsTab\QuestieOptionsKeybinds.lua diff --git a/Questie-X.toc b/Questie-X.toc index 76e5ad4..94f53c6 100644 --- a/Questie-X.toc +++ b/Questie-X.toc @@ -190,6 +190,7 @@ Modules\Options\AutoTab\QuestieOptionsAuto.lua Modules\Options\DBMTab\QuestieOptionsDBM.lua Modules\Options\GeneralTab\QuestieOptionsGeneral.lua Modules\Options\IconsTab\QuestieOptionsIcons.lua +Modules\Options\ArrowTab\QuestieOptionsArrow.lua Modules\Options\NameplateTab\QuestieOptionsNameplate.lua Modules\Options\TrackerTab\QuestieOptionsTracker.lua # Cleanup