--- Kaliel's Tracker --- Copyright (c) 2012-2025, Marouan Sabbagh --- All Rights Reserved. --- --- This file is part of addon Kaliel's Tracker. ---@type KT local _, KT = ... ---@class Help local M = KT:NewModule("Help") KT.Help = M local T = LibStub("MSA-Tutorials-1.0") local _DBG = function(...) if _DBG then _DBG("KT", ...) end end local db, dbChar local helpPath = KT.MEDIA_PATH.."Help\\" local helpName = "help" local helpNumPages = 12 local supportersName = "supporters" local supportersNumPages = 1 local cTitle = "|cffffd200" local cBold = "|cff00ffe3" local cWarning = "|cffff7f00" local cWarning2 = "|cffff4200" local cDots = "|cff808080" local offs = "\n|T:1:9|t" local offs2 = "\n|T:1:18|t" local beta = "|cffff7fff[Beta]|r" local new = "|cffff7fff[NEW]|r" local KTF = KT.frame -- Internal ------------------------------------------------------------------------------------------------------------ local function AddonInfo(name) local info = "\nAddon "..name if C_AddOns.IsAddOnLoaded(name) then info = info.." |cff00ff00is installed|r. Support you can enable/disable in Options." else info = info.." |cffff0000is not installed|r." end return info end local function SetFormatedPatronName(tier, name, realm, note) if realm then realm = " @"..realm else realm = "" end if note then note = " ... "..note else note = "" end return format("- |cff%s%s|r|cff7f7f7f%s%s|r\n", KT.QUALITY_COLORS[tier], name, realm, note) end local function SetFormatedPlayerName(name, realm, note) if realm then realm = " @"..realm else realm = "" end if note then note = " ... "..note else note = "" end return format("- %s|cff7f7f7f%s%s|r\n", name, realm, note) end local function SetupTutorials() T.RegisterTutorial(helpName, { savedvariable = KT.db.global, key = "helpTutorial", title = KT.title.." |cffffffff"..KT.version.."|r", icon = helpPath.."KT_logo", font = "Fonts\\FRIZQT__.TTF", width = 562, height = 576, imageWidth = 512, imageHeight = 256, { -- 1 image = helpPath.."help_kaliels-tracker", text = cTitle..KT.title.."|r is improved default Blizzard Objective Tracker.\n\n".. "Some features:\n".. "- Change tracker position\n".. "- Expand / Collapse tracker relative to selected position (direction)\n".. "- Auto set trackers height by content with max. height limit\n".. "- Scrolling when content is greater than max. height\n".. "- Remember collapsed tracker after logout/exit game\n\n".. "... and many other enhancements (see next pages).", shine = KTF.Background, shineTop = 5, shineBottom = -5, shineLeft = -6, shineRight = 6, }, { -- 2 image = helpPath.."help_header-buttons", imageHeight = 128, heading = "Header buttons", text = "Minimize button: Other buttons:\n".. "|T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:2:32:64:0:14:0:14:209:170:0|t "..cDots.."...|r Expand Tracker ".. "|T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:2:32:64:16:30:0:14:209:170:0|t "..cDots.."...|r Open Quest Log\n".. "|T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:2:32:64:0:14:16:30:209:170:0|t "..cDots.."...|r Collapse Tracker ".. "|T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:2:32:64:16:30:16:30:209:170:0|t "..cDots.."...|r Open Achievements\n".. "|T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:2:32:64:0:14:32:46:209:170:0|t "..cDots.."...|r when is tracker empty ".. "|T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:2:32:64:16:30:32:46:209:170:0|t "..cDots.."...|r Open Filters menu\n\n".. "Buttons |T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:2:32:64:16:30:0:14:209:170:0|t and ".. "|T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:2:32:64:16:30:16:30:209:170:0|t you can disable in Options.\n\n".. "You can set "..cBold.."[key bind]|r for Minimize button.\n".. cBold.."Right Click|r on Minimize button - Focus closest Quest.\n".. cBold.."Alt + Click|r on Minimize button - Open "..KT.title.." Options.", paddingBottom = 14, shine = KTF.MinimizeButton, shineTop = 13, shineBottom = -14, shineRight = 15, }, { -- 3 image = helpPath.."help_quest-title-tags", imageHeight = 128, heading = "Quest title tags", text = "At the start of quest titles you see tags like this |cffff8000[100|r|cff00b3ffhc!|r|cffff8000]|r.\n".. "Tags are also in quest titles inside Quest Log.\n\n".. "|cff00b3ff!|r|T:14:3|t "..cDots..".......|r Daily quest|T:14:121|t|cff00b3ffr|r "..cDots..".......|r Raid quest\n".. "|cff00b3ff!!|r "..cDots.."......|r Weekly quest|T:14:108|t|cff00b3ffr10|r "..cDots.."...|r 10-man raid quest\n".. "|cff00b3ffg3|r "..cDots..".....|r Group quest w/ group size|T:14:22|t|cff00b3ffr25|r "..cDots.."...|r 25-man raid quest\n".. "|cff00b3ffpvp|r "..cDots.."...|r PvP quest|T:14:133|t|cff00b3ffs|r "..cDots..".......|r Scenario quest\n".. "|cff00b3ffd|r "..cDots..".......|r Dungeon quest|T:14:97|t|cff00b3ffa|r "..cDots..".......|r Account quest\n".. "|cff00b3ffhc|r "..cDots..".....|r Heroic quest|T:14:113|t|cff00b3ffleg|r "..cDots.."....|r Legendary quest", paddingBottom = 10, shineTop = 11, shineBottom = -9, shineLeft = -11, shineRight = 13, }, { -- 4 image = helpPath.."help_tracker-filters", heading = "Tracker Filters", text = "For open Filters menu "..cBold.."Click|r on the button |T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:1:32:64:16:30:32:46:209:170:0|t.\n\n".. "There are two types of filters:\n".. cTitle.."Static filter|r - adds quests/achievements to tracker by criterion (e.g. \"Daily\") and then you can add/remove items by hand.\n".. cTitle.."Dynamic filter|r - automatically adding quests/achievements to tracker by criterion (e.g. \"|cff00ff00Auto|r Zone\") ".. "and continuously changing them. This type doesn't allow add/remove items by hand.".. "When is some Dynamic filter active, header button is green |T"..KT.MEDIA_PATH.."UI-KT-HeaderButtons:14:14:-1:1:32:64:16:30:32:46:0:255:0|t.\n\n".. "|cff009bffFavorites|r - Quests or Achievements now you can mark as favorites and then filter according to them.\n\n".. "For Achievements can change searched categories, it will affect the outcome of the filter.\n\n".. "This menu displays other options affecting the content of the tracker (e.g. options for addon PetTracker).", paddingBottom = 16, shine = KTF.FilterButton, shineTop = 9, shineBottom = -10, shineLeft = -10, shineRight = 11, }, { -- 5 image = helpPath.."help_quest-item-buttons", heading = "Quest Item buttons", text = "Buttons are out of the tracker, because Blizzard doesn't allow to work with the action buttons in the default UI.\n\n".. "|T"..helpPath.."help_quest-item-buttons_2:32:32:1:0:64:32:0:32:0:32|t "..cDots.."...|r This tag indicates quest item in quest. The number inside is for\n".. " identification moved quest item button.\n\n".. "|T"..helpPath.."help_quest-item-buttons_2:32:32:0:3:64:32:32:64:0:32|t "..cDots.."...|r Real quest item button is moved out of the tracker to the left/right\n".. " side (by selected anchor point). The number is the same as for the tag.\n\n".. cWarning.."Warning:|r\n".. "In some situation during combat, actions around the quest item buttons paused and carried it up after a player is out of combat.", paddingBottom = 18, shineTop = 3, shineBottom = -2, shineLeft = -4, shineRight = 3, }, { -- 6 image = helpPath.."help_active-button", heading = "Active Button", text = "Active Button is for a better use of quest items. Displays quest item button for CLOSEST quest as Extra Action Button (like Draenor zone ability).\n\n".. "Features:\n".. "- "..cBold.."Auto display|r of Active Button, when you approach the place of performance".. offs.."of the quest.\n".. "- "..cBold.."Manual display|r of Active Button, when selecting the quest using the POI".. offs.."button on the Map or in the Tracker.\n".. "- You can set "..cBold.."[key bind]|r to use quest item. Key set up in "..KT.title.. offs.."Options. Active Button uses the same key bind as the Extra Action Button.\n".. "- Button is movable using own mover. See Options > section \"Quest item".. offs.."buttons\" > button \"Unlock\".\n\n".. cWarning.."Warning:|r\n".. "- Active Button works only for tracked quests.\n".. "- When tracker is collapsed, Active Button feature is paused.", shineTop = 30, shineBottom = -30, shineLeft = -80, shineRight = 80, }, { -- 7 image = helpPath.."help_tracker-modules", heading = "Modules", text = cTitle.."Order of Modules|r\n\n".. "Allows to change the order of modules inside the tracker. Supports all modules including external (e.g. PetTracker).\n\n\n".. cTitle.."Collapsible Modules|r\n\n".. "All modules, including external ones, can be collapsed by clicking on the module header.", shine = KTF.Background, shineTop = 5, shineBottom = -5, shineLeft = -6, shineRight = 6, }, { -- 8 image = helpPath.."help_addon-masque", heading = "Support addon Masque", text = "Masque adds skinning support for Quest Item buttons. It also affects the Active Button (see prev page).\n".. AddonInfo("Masque"), }, { -- 9 image = helpPath.."help_addon-pettracker", heading = "Support addon PetTracker", text = "PetTracker support adjusts display of zone pet tracking inside "..KT.title..". It also fix some visual bugs.\n".. AddonInfo("PetTracker"), }, { -- 10 image = helpPath.."help_addon-tomtom", heading = "Support addon TomTom", text = "TomTom support combined Blizzard's POI and TomTom's Arrow.\n\n".. "|TInterface\\WorldMap\\UI-QuestPoi-NumberIcons:32:32:-2:0:256:256:128:160:96:128|t+".. "|T"..KT.MEDIA_PATH.."KT-TomTomTag:32:32:-8:0:32:16:0:16:0:16|t"..cDots.."...|r Active POI button with TomTom Waypoint.\n".. "|TInterface\\WorldMap\\UI-QuestPoi-NumberIcons:32:32:-2:0:256:256:128:160:96:128|t+".. "|T"..KT.MEDIA_PATH.."KT-TomTomTag:32:32:-8:0:32:16:16:32:0:16|t"..cDots.."...|r Active POI button without TomTom Waypoint (no data).\n\n".. "Features:\n".. "- Available for Quests and World Quests, but Quest waypoints are only for".. offs.."current zone!|r (TomTom and Blizzard limitations)\n".. "- "..cBold.."Click|r on POI button (inside the Tracker or World Map) add waypoint for".. offs.."the quest.\n".. "- The newly tracked or closest quest automatically gets a waypoint.\n".. "- Waypoint of untracked or abandoned quest will be removed.\n".. AddonInfo("TomTom"), paddingBottom = 18, shineTop = 10, shineBottom = -10, shineLeft = -11, shineRight = 11, }, { -- 11 heading = " Hacks", text = "All hacks are enabled by default, you can disable them in "..KT.title.." Options (section \"Hacks\").\n\n".. cWarning.."Warning:|r Hacks may affect other addons!\n\n".. cTitle.."LFG Hack|r\n\n".. cBold.."Affects the small Eye buttons|r for finding groups inside the tracker. When the hack is active, ".. "the buttons work without errors. When hack is inactive, the buttons are not available.\n\n".. cWarning2.."Negative impacts:|r\n".. "- Inside the dialog for create Premade Group is hidden item \"Goal\".\n".. "- Tooltips of items in the list of Premade Groups have a hidden 2nd (green) row".. offs.."with \"Goal\".\n".. "- Inside the dialog for create Premade Group, no automatically set the \"Title\",".. offs.."e.g. keystone level for Mythic+.\n\n".. cTitle.."World Map Hack|r "..beta.."\n\n".. cBold.."Affects World Map|r and removes taint errors. The hack removes call of restricted function ".. "SetPassThroughButtons. When the hack is inactive World Map display causes errors. It is not possible ".. "to get rid of these errors, since the tracker has a lot of interaction with the game frames.\n\n".. cWarning2.."Negative impacts:|r unknown in WoW 11.1.5", }, { -- 12 image = helpPath.."help_whats-new_logo", imageWidth = 512, imageHeight = 128, imageTexCoords = { 0, 1, 0, 1 }, imagePoint = "TOPRIGHT", imageX = -9, imageY = -26, imageAbsolute = true, heading = " What's New", headingFont = "Fonts\\MORPHEUS.ttf", headingSize = 26, text = cTitle.."Version 7.10.1|r\n".. "- CHANGED - addon support - PetTracker 11.1.10\n".. "- FIXED - error during profiles compatibility test\n".. "- FIXED - PetTracker - error during init\n".. "\n".. cTitle.."Version 7.10.0|r\n".. "- ADDED - support for WoW 11.1.5.60428\n".. "- ADDED - support for WoW 11.1.0.59347\n".. "- ADDED - support for WoW 11.0.7.58867\n".. "- ADDED - support for WoW 11.0.7.58238\n".. "- CHANGED - Libs\n".. "- CHANGED - addon support - ElvUI 13.89, Tukui 20.460\n".. "- CHANGED - addon support - Auctionator 275\n".. "- CHANGED - addon support - Masque 11.1.5\n".. "- CHANGED - addon support - TomTom 4.0.9\n".. "- CHANGED - addon support - PetTracker 11.1.5\n".. "- CHANGED - Bonus Objective - data retrieval for POI buttons (since 11.1.0)\n".. "- CHANGED - Quest Item Button – don't show Active Button for some Quest Items\n".. "- CHANGED - Bonus Objective – do not display Quest tags (level etc.)\n".. "- CHANGED - Quest Item Button – Active Button reworked (2) – re-added manual activation via POI button (focus)\n".. "- CHANGED - PetTracker - improve zone change detection\n".. "- FIXED - TomTom - waypoint tags on World Map are not updated 2 (Blizz bug)\n".. "- FIXED - Bonus Objective - no ping after click on Area POI\n".. "- FIXED - TomTom - waypoint tags on World Map are not updated (Blizz bug)\n".. "- FIXED - Quest Item button – Active Button frame level is lower than ExtraActionButton1\n".. "- REVERTED - Quest Item button – Active Button reworked\n".. "- REVERTED - Quest Item button – add glow when player is at relevant location\n".. "\n".. cTitle.."Issue reporting|r\n".. "For reporting please use "..cBold.."Tickets|r instead of Comments on CurseForge.\n\n\n\n".. cWarning.."Before reporting of error, please deactivate all other addons and make sure the bug is not caused by a collision with another addon.|r", editbox = { { text = "https://www.curseforge.com/wow/addons/kaliels-tracker/issues", width = 450, bottom = 42, } }, shine = KTF.Background, shineTop = 5, shineBottom = -5, shineLeft = -6, shineRight = 6, }, onShow = function(self, i) if dbChar.collapsed then KT:MinimizeButton_OnClick() end if i == 2 then if KTF.FilterButton then self[i].shineLeft = db.hdrOtherButtons and -74 or -34 else self[i].shineLeft = db.hdrOtherButtons and -54 or -14 end elseif i == 3 then local questID = C_QuestLog.GetQuestIDForQuestWatchIndex(1) local block = KT_QuestObjectiveTracker:GetExistingBlock(questID) if block then self[i].shine = block end elseif i == 5 then self[i].shine = KTF.Buttons elseif i == 10 then local superTrackedQuestID = C_SuperTrack.GetSuperTrackedQuestID() or 0 for j = 1, C_QuestLog.GetNumQuestWatches() do local questID = C_QuestLog.GetQuestIDForQuestWatchIndex(j) local block = KT_QuestObjectiveTracker:GetExistingBlock(questID) if block and block.poiButton then if superTrackedQuestID == 0 or superTrackedQuestID == questID then self[i].shine = block.poiButton break end end end end end, onHide = function() T.TriggerTutorial("supporters", 1) end }) T.RegisterTutorial("supporters", { savedvariable = KT.db.global, key = "supportersTutorial", title = KT.title.." |cffffffff"..KT.version.."|r", icon = helpPath.."KT_logo", font = "Fonts\\FRIZQT__.TTF", width = 562, height = 576, { -- 1 heading = " Become a Patron", text = "If you like "..KT.title..", support me on |cfff34a54Patreon|r.\n\n".. "Click on button |T"..helpPath.."help_patreon:20:173:0:0:256:32:0:173:0:20|t on CurseForge addon page.\n\n".. "After 10 years of working on an addon, I started Patreon. It's created as\na compensation for the amount ".. "of time that addon development requires.\n\n".. " Many thanks to all supporters |T"..helpPath.."help_patreon:16:16:0:0:256:32:174:190:0:16|t\n\n".. cTitle.."Active Patrons|r\n".. SetFormatedPatronName("Legendary", "Zayah", "Vek'nilash").. SetFormatedPatronName("Epic", "Haekwon", "Elune").. SetFormatedPatronName("Epic", "Liothen", "Emerald Dream").. SetFormatedPatronName("Rare", "A").. SetFormatedPatronName("Uncommon", "Anaara", "Auchindoun").. SetFormatedPatronName("Uncommon", "Charles Howarth").. SetFormatedPatronName("Uncommon", "Flex (drantor)").. SetFormatedPatronName("Uncommon", "Illidanclone", "Kazzak").. SetFormatedPatronName("Uncommon", "Mystekal").. SetFormatedPatronName("Uncommon", "Semy", "Ravencrest").. SetFormatedPatronName("Uncommon", "Sopleb").. SetFormatedPatronName("Uncommon", "Xeelee", "Razorfen").. SetFormatedPatronName("Common", "Darren Divecha").. "\n".. cTitle.."Testers|r\n".. SetFormatedPlayerName("Asimeria", "Drak'thul").. SetFormatedPlayerName("Torresman", "Drak'thul"), paddingBottom = 18, }, }) end -- External ------------------------------------------------------------------------------------------------------------ function M:OnInitialize() _DBG("|cffffff00Init|r - "..self:GetName(), true) db = KT.db.profile dbChar = KT.db.char end function M:OnEnable() _DBG("|cff00ff00Enable|r - "..self:GetName(), true) SetupTutorials() local last = false if KT.version ~= KT.db.global.version then local data = T.GetTutorial(helpName) local index = data.savedvariable[data.key] if index then last = index < helpNumPages and index or true T.ResetTutorial(helpName) end end T.TriggerTutorial(helpName, helpNumPages, last) end function M:ShowHelp(index) HideUIPanel(SettingsPanel) T.ResetTutorial(helpName) T.TriggerTutorial(helpName, helpNumPages, index or false) end function M:ShowSupporters() HideUIPanel(SettingsPanel) T.ResetTutorial(supportersName) T.TriggerTutorial(supportersName, supportersNumPages) end