From d12176cac9be7878266b91ea96ed9cf08bf93ce8 Mon Sep 17 00:00:00 2001 From: Vempz Date: Wed, 27 Jun 2018 20:48:43 -0700 Subject: [PATCH] pull latest changes from upstream (#1) * Senjin Village & load next guide fixes * Improve the GameTooltip hide methods Avoid GameTooltip.SetPoint on unnamed frames for Status frame, rely on SetOwner anchor instead (fixes empty mouseover tooltips) * Improved localization, addon tooltips, buying items detection guide fixes * Warrior class quests added, 1-15 Horde updates * pfQuest moved to Gitlab, add level detection to a step * Added die tag & auto logic, fixed optional and town tags * Renamed addon folder to TourGuideVanilla, removed professions guide to be an optional download * Remove embedded professions guide * Update README.md * TOC cleanup and initial addon load error fixed * Warrior Whirlwind + Fixes Some small quest fixes Added level 30 Warrior quest chain to separate copy, need input on how to go about making it work well with the current path. * Fix Fixes Fixed previous fixes Merged Warrior version of Hillsbrad Foothills, single file now Removed: |NORAF| tags |RAF| quests * many updates: see description * Implemented Sol Lua 5.0/WoW API shim library * Converted Dongle to submodule library * Fixed coord mapping when the quest is accepted from a object * Fixed using a presented item with the provided icon when you don't actually have the item * Removed unused guides * Horde updates from 40-44 * Silly fixes Tags, spelling, titles. * 40-50 Update * Minor fixes Added |LVL| tag in Badlands Removed double spacing across the entire project * Spelling * line endings: fixed to LF * libraries: removed submodules, reverted to previous Dongle version * Improve compat shims, rename and move the file with other support files in libs. Remove Sol and dependencies. * Cleanup frame code. Hide all child frames of the status frame when dragging to have consistent behavior. Fixes #18 as well as similar issues with the options frame and title. * quest updates: and a few more things * Added grind objective w/ auto level up detection * Added ability to toggle quest log open/close with click of Status Frame * Updated Horde guide lvl 40-50 * media: create folder * also, Grind objectives will require |LV| tag to function * compat: added shim functions into TourGuide namespace for deconfliction * Dongle: missed a rename * compat: fixing select issues * compat: refactor select functions * new feature: skip follow-up tag * Fixed icon paths for Set Hearth and Die icons * Guide updates to make use of new tag * guides: Optional tag cleanup, remove redundant files * Removed Felwood and Ungoro Crater Alliance guides as they were old versions not used * Fixed the EPL/WPL ending guides pointing towards the removed Hellfire TBC zone * config: cleaned up config code * Added option to toggle auto-skipping select followups * Remove Dongle and compat in favor of Ace2 framework. Minimap / Fubar plugin (can optionally be completely hidden) for toggling status frame and setting options. Basic command-line options. (/tourguide or /tg) Improvements to frame code and .toc * Add missed GetItemCount utility method * Update Locale.lua * Update StatusFrame.lua * Update Locale.lua * line endings: support LF & CRLF guide endings * Fix IsDebugging() function reference * remove file * bug fix: use our own select function always * Also added Fresh Start detection to initialize the Level 1 guide based on Race * bug fixes: use of self --- .gitattributes | 4 + .gitignore | 37 + Config.lua | 29 - Dongle.lua | 1292 -------- GuideListFrame.lua | 69 +- Locale.lua | 142 +- Mapping.lua | 48 +- NilGuide.lua | 6 +- ObjectivesFrame.lua | 49 +- OptionsFrame.lua | 104 +- Parser.lua | 55 +- QuestTracking.lua | 36 +- README.md | 4 +- StatusFrame.lua | 124 +- TourGuide.lua | 325 +- TourGuide.toc | 34 - TourGuideVanilla.toc | 47 + TourGuide_Alliance/01_11_Dun_Morogh.lua | 2 +- TourGuide_Alliance/01_12_Elwynn_Forest.lua | 10 +- TourGuide_Alliance/01_12_Teldrassil.lua | 17 +- TourGuide_Alliance/12_17_Darkshore.lua | 86 +- TourGuide_Alliance/17_18_Loch_Modan.lua | 86 +- .../18_20_Redridge_Mountains.lua | 102 +- TourGuide_Alliance/20_21_Darkshore.lua | 10 +- .../20_21_Darkshore_Draenei.lua | 64 - TourGuide_Alliance/22_24_Ashenvale.lua | 59 +- TourGuide_Alliance/25_27_Wetlands.lua | 43 +- .../27_28_Redridge_Mountains.lua | 44 +- TourGuide_Alliance/28_29_Duskwood.lua | 8 +- TourGuide_Alliance/29_30_Ashenvale.lua | 42 +- TourGuide_Alliance/30_31_Wetlands.lua | 4 +- .../31_32_Hillsbrad_Foothills.lua | 57 +- TourGuide_Alliance/33_35_Desolace.lua | 36 +- TourGuide_Alliance/36_37_Stranglethorn.lua | 4 +- TourGuide_Alliance/37_38_Dustwallow_Marsh.lua | 18 +- TourGuide_Alliance/38_40_Stranglethorn.lua | 18 +- TourGuide_Alliance/40_41_Badlands.lua | 11 +- TourGuide_Alliance/41_42_Stranglethorn.lua | 8 +- TourGuide_Alliance/43_45_Feralas.lua | 15 +- TourGuide_Alliance/43_Tanaris.lua | 3 +- TourGuide_Alliance/46_47_Hinterlands.lua | 10 +- TourGuide_Alliance/47_48_Tanaris.lua | 39 +- TourGuide_Alliance/47_Feralas.lua | 7 +- TourGuide_Alliance/48_49_Stranglethorn.lua | 11 +- TourGuide_Alliance/49_50_Blasted_Lands.lua | 7 +- TourGuide_Alliance/50_51_Searing_Gorge.lua | 10 +- TourGuide_Alliance/51_52_UnGoro_Crater.lua | 24 +- TourGuide_Alliance/51_Kalimdor.lua | 5 +- TourGuide_Alliance/52_53_Azshara.lua | 4 +- TourGuide_Alliance/53_54_Felwood.lua | 20 +- TourGuide_Alliance/54_55_Winterspring.lua | 29 +- TourGuide_Alliance/54_Felwood.lua | 23 - TourGuide_Alliance/54_Ungoro_Crater.lua | 36 - TourGuide_Alliance/55_56_Burning_Steppes.lua | 8 +- .../56_57_Western_Plaguelands.lua | 16 +- TourGuide_Alliance/56_Silithus.lua | 26 +- .../57_58_Eastern_Plaguelands.lua | 6 +- .../58_59_Western_Plaguelands.lua | 12 +- TourGuide_Alliance/58_Eastern_Plaguelands.lua | 9 +- TourGuide_Alliance/58_Western_Plaguelands.lua | 4 +- TourGuide_Alliance/Guides.xml | 2 - TourGuide_Alliance/TourGuide_Alliance.toc | 11 +- TourGuide_Horde/01_12_Durotar.lua | 73 +- TourGuide_Horde/01_12_Mulgore.lua | 24 +- TourGuide_Horde/01_12_TirisfalGlades.lua | 10 +- TourGuide_Horde/12_15_Barrens.lua | 21 +- TourGuide_Horde/16_20_Barrens.lua | 22 +- .../20_21_Stonetalon_Mountains.lua | 10 +- TourGuide_Horde/20_Barrens.lua | 37 - TourGuide_Horde/21_22_Ashenvale.lua | 10 +- TourGuide_Horde/22_23_Southern_Barrens.lua | 12 +- .../23_25_Stonetalon_Mountains.lua | 2 +- TourGuide_Horde/25_26_Thousand_Needles.lua | 16 +- TourGuide_Horde/25_Southern_Barrens.lua | 6 +- TourGuide_Horde/26_27_Ashenvale.lua | 79 - TourGuide_Horde/26_28_Ashenvale.lua | 8 +- TourGuide_Horde/27_29_ThousandNeedles.lua | 58 - TourGuide_Horde/27_StonetalonMountains.lua | 19 - TourGuide_Horde/28_29_ThousandNeedles.lua | 4 +- TourGuide_Horde/28_StonetalonMountains.lua | 2 +- TourGuide_Horde/29_30_HillsbradFoothills.lua | 58 +- TourGuide_Horde/30_31_StranglethornVale.lua | 2 +- TourGuide_Horde/30_ArathiHighlands.lua | 5 +- TourGuide_Horde/31_32_ThousandNeedles.lua | 6 +- TourGuide_Horde/32_34_Desolace.lua | 20 +- TourGuide_Horde/34_36_StranglethornVale.lua | 50 +- TourGuide_Horde/36_37_Arathi_Highlands.lua | 4 +- TourGuide_Horde/37_38_Thousand_Needles.lua | 10 +- TourGuide_Horde/37_Alterac_Mountains.lua | 10 +- TourGuide_Horde/38_40_Stranglethorn_Vale.lua | 30 +- TourGuide_Horde/38_Dustwallow_Marsh.lua | 6 +- TourGuide_Horde/40_41_Badlands.lua | 54 +- TourGuide_Horde/41_42_Swamp_of_Sorrows.lua | 86 +- TourGuide_Horde/42_43_Stranglethorn_Vale.lua | 70 +- TourGuide_Horde/43_44_Dustwallow_Marsh.lua | 104 +- TourGuide_Horde/43_Desolace.lua | 24 + TourGuide_Horde/44_45_Tanaris.lua | 62 +- TourGuide_Horde/45_46_Feralas.lua | 129 +- TourGuide_Horde/46_47_Azshara.lua | 38 +- TourGuide_Horde/47_48_Searing_Gorge.lua | 116 +- TourGuide_Horde/47_Hinterlands.lua | 67 + TourGuide_Horde/47_StranglethornVale.lua | 50 +- TourGuide_Horde/48_49_Swamp_of_Sorrows.lua | 80 +- TourGuide_Horde/49_50_Tanaris.lua | 83 +- TourGuide_Horde/49_Feralas.lua | 56 + TourGuide_Horde/50_51_Hinterlands.lua | 33 +- TourGuide_Horde/50_Azshara.lua | 60 +- TourGuide_Horde/51_53_Un'Goro_Crater.lua | 20 +- TourGuide_Horde/53_54_Burning_Steppes.lua | 54 +- TourGuide_Horde/54_55_Winterspring.lua | 26 +- TourGuide_Horde/54_Felwood.lua | 7 +- TourGuide_Horde/56_57_Eastern_Plaguelands.lua | 47 +- TourGuide_Horde/56_Western_Plaguelands.lua | 14 +- TourGuide_Horde/57_59_Western_Plaguelands.lua | 16 +- TourGuide_Horde/TourGuide_Horde.toc | 11 +- TourGuide_Professions/Alchemy.lua | 18 - TourGuide_Professions/Blacksmithing.lua | 32 - TourGuide_Professions/Cooking_Alliance.lua | 52 - TourGuide_Professions/Cooking_Horde.lua | 45 - TourGuide_Professions/Enchanting.lua | 32 - TourGuide_Professions/Engineering.lua | 30 - TourGuide_Professions/Guides.xml | 12 - TourGuide_Professions/Leatherworking.lua | 40 - TourGuide_Professions/Tailoring.lua | 26 - .../TourGuide_Professions.toc | 17 - WidgetWarlock.lua | 11 +- libs/AceAddon-2.0/AceAddon-2.0.lua | 1129 +++++++ libs/AceConsole-2.0/AceConsole-2.0.lua | 1920 +++++++++++ libs/AceDB-2.0/AceDB-2.0.lua | 1539 +++++++++ libs/AceDebug-2.0/AceDebug-2.0.lua | 245 ++ libs/AceEvent-2.0/AceEvent-2.0.lua | 973 ++++++ libs/AceHook-2.1/AceHook-2.1.lua | 569 ++++ libs/AceLibrary/AceLibrary.lua | 751 +++++ libs/AceOO-2.0/AceOO-2.0.lua | 1004 ++++++ libs/Deformat-2.0/Deformat-2.0.lua | 343 ++ libs/Dewdrop-2.0/Dewdrop-2.0.lua | 2542 +++++++++++++++ libs/FuBarPlugin-2.0/FuBarPlugin-2.0.lua | 1480 +++++++++ libs/Gratuity-2.0/Gratuity-2.0.lua | 220 ++ libs/Tablet-2.0/Tablet-2.0.lua | 2822 +++++++++++++++++ lua52to50compat.lua | 92 - media/dead.tga | Bin 0 -> 666 bytes resting.tga => media/resting.tga | Bin 142 files changed, 17740 insertions(+), 3596 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore delete mode 100644 Config.lua delete mode 100644 Dongle.lua delete mode 100644 TourGuide.toc create mode 100644 TourGuideVanilla.toc delete mode 100644 TourGuide_Alliance/20_21_Darkshore_Draenei.lua delete mode 100644 TourGuide_Alliance/54_Felwood.lua delete mode 100644 TourGuide_Alliance/54_Ungoro_Crater.lua delete mode 100644 TourGuide_Horde/20_Barrens.lua delete mode 100644 TourGuide_Horde/26_27_Ashenvale.lua delete mode 100644 TourGuide_Horde/27_29_ThousandNeedles.lua delete mode 100644 TourGuide_Horde/27_StonetalonMountains.lua create mode 100644 TourGuide_Horde/43_Desolace.lua create mode 100644 TourGuide_Horde/47_Hinterlands.lua create mode 100644 TourGuide_Horde/49_Feralas.lua delete mode 100644 TourGuide_Professions/Alchemy.lua delete mode 100644 TourGuide_Professions/Blacksmithing.lua delete mode 100644 TourGuide_Professions/Cooking_Alliance.lua delete mode 100644 TourGuide_Professions/Cooking_Horde.lua delete mode 100644 TourGuide_Professions/Enchanting.lua delete mode 100644 TourGuide_Professions/Engineering.lua delete mode 100644 TourGuide_Professions/Guides.xml delete mode 100644 TourGuide_Professions/Leatherworking.lua delete mode 100644 TourGuide_Professions/Tailoring.lua delete mode 100644 TourGuide_Professions/TourGuide_Professions.toc create mode 100644 libs/AceAddon-2.0/AceAddon-2.0.lua create mode 100644 libs/AceConsole-2.0/AceConsole-2.0.lua create mode 100644 libs/AceDB-2.0/AceDB-2.0.lua create mode 100644 libs/AceDebug-2.0/AceDebug-2.0.lua create mode 100644 libs/AceEvent-2.0/AceEvent-2.0.lua create mode 100644 libs/AceHook-2.1/AceHook-2.1.lua create mode 100644 libs/AceLibrary/AceLibrary.lua create mode 100644 libs/AceOO-2.0/AceOO-2.0.lua create mode 100644 libs/Deformat-2.0/Deformat-2.0.lua create mode 100644 libs/Dewdrop-2.0/Dewdrop-2.0.lua create mode 100644 libs/FuBarPlugin-2.0/FuBarPlugin-2.0.lua create mode 100644 libs/Gratuity-2.0/Gratuity-2.0.lua create mode 100644 libs/Tablet-2.0/Tablet-2.0.lua delete mode 100644 lua52to50compat.lua create mode 100644 media/dead.tga rename resting.tga => media/resting.tga (100%) diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1787e38 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +.gitattributes export-ignore +.gitignore export-ignore +.gitmodules export-ignore +README.md export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..773bfd6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/Config.lua b/Config.lua deleted file mode 100644 index 10cf108..0000000 --- a/Config.lua +++ /dev/null @@ -1,29 +0,0 @@ - - -local TourGuide = TourGuide -local L = TourGuide.Locale -local ww = WidgetWarlock - - -function TourGuide:CreateConfigPanel() - local frame = CreateFrame("Frame", nil, UIParent) - frame:SetFrameStrata("DIALOG") - - local qtrack = ww.SummonCheckBox(22, frame, "TOPLEFT", 5, -5) - ww.SummonFontString(qtrack, "OVERLAY", "GameFontNormalSmall", "Automatically track quests", "LEFT", qtrack, "RIGHT", 5, 0) - qtrack:SetScript("OnClick", function() self.db.char.trackquests = not self.db.char.trackquests end) - - - local function OnShow(f) - f = f or this - qtrack:SetChecked(self.db.char.trackquests) - - f:SetAlpha(0) - f:SetScript("OnUpdate", ww.FadeIn) - end - - frame:SetScript("OnShow", OnShow) - ww.SetFadeTime(frame, 0.5) - OnShow(frame) - return frame -end diff --git a/Dongle.lua b/Dongle.lua deleted file mode 100644 index 72b37e4..0000000 --- a/Dongle.lua +++ /dev/null @@ -1,1292 +0,0 @@ ---[[------------------------------------------------------------------------- - Copyright (c) 2006-2007, Dongle Development Team - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of the Dongle Development Team nor the names of - its contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------]] -local major = "DongleStub" -local s,e,found = string.find("$Revision: 313 $", "(%d+)") -local minor = s and tonumber(found) or 1 - -local g = getfenv(0) - -if not g.DongleStub or g.DongleStub:IsNewerVersion(major, minor) then - local lib = setmetatable({}, { - __call = function(t,k) - if type(t.versions) == "table" and t.versions[k] then - return t.versions[k].instance - else - error("Cannot find a library with name '"..tostring(k).."'", 2) - end - end - }) - - function lib:IsNewerVersion(major, minor) - local versionData = self.versions and self.versions[major] - - -- If DongleStub versions have differing major version names - -- such as DongleStub-Beta0 and DongleStub-1.0-RC2 then a second - -- instance will be loaded, with older logic. This code attempts - -- to compensate for that by matching the major version against - -- "^DongleStub", and handling the version check correctly. - - local s,e,found = string.find(major,"^DongleStub") - if s then - local oldmajor,oldminor = self:GetVersion() - if self.versions and self.versions[oldmajor] then - return minor > oldminor - else - return true - end - end - - if not versionData then return true end - local oldmajor,oldminor = versionData.instance:GetVersion() - return minor > oldminor - end - - local function NilCopyTable(src, dest) - for k,v in pairs(dest) do dest[k] = nil end - for k,v in pairs(src) do dest[k] = v end - end - - function lib:Register(newInstance, activate, deactivate) - assert(type(newInstance.GetVersion) == "function", - "Attempt to register a library with DongleStub that does not have a 'GetVersion' method.") - - local major,minor = newInstance:GetVersion() - assert(type(major) == "string", - "Attempt to register a library with DongleStub that does not have a proper major version.") - assert(type(minor) == "number", - "Attempt to register a library with DongleStub that does not have a proper minor version.") - - -- Generate a log of all library registrations - if not self.log then self.log = {} end - table.insert(self.log, string.format("Register: %s, %s", major, minor)) - - if not self:IsNewerVersion(major, minor) then return false end - if not self.versions then self.versions = {} end - - local versionData = self.versions[major] - if not versionData then - -- New major version - versionData = { - ["instance"] = newInstance, - ["deactivate"] = deactivate, - } - - self.versions[major] = versionData - if type(activate) == "function" then - table.insert(self.log, string.format("Activate: %s, %s", major, minor)) - activate(newInstance) - end - return newInstance - end - - local oldDeactivate = versionData.deactivate - local oldInstance = versionData.instance - - versionData.deactivate = deactivate - - local skipCopy - if type(activate) == "function" then - table.insert(self.log, string.format("Activate: %s, %s", major, minor)) - skipCopy = activate(newInstance, oldInstance) - end - - -- Deactivate the old libary if necessary - if type(oldDeactivate) == "function" then - local major, minor = oldInstance:GetVersion() - table.insert(self.log, string.format("Deactivate: %s, %s", major, minor)) - oldDeactivate(oldInstance, newInstance) - end - - -- Re-use the old table, and discard the new one - if not skipCopy then - NilCopyTable(newInstance, oldInstance) - end - return oldInstance - end - - function lib:GetVersion() return major,minor end - - local function Activate(new, old) - -- This code ensures that we'll move the versions table even - -- if the major version names are different, in the case of - -- DongleStub - if not old then old = g.DongleStub end - - if old then - new.versions = old.versions - new.log = old.log - end - g.DongleStub = new - end - - -- Actually trigger libary activation here - local stub = g.DongleStub or lib - lib = stub:Register(lib, Activate) -end - ---[[------------------------------------------------------------------------- - Begin Library Implementation ----------------------------------------------------------------------------]] - -local major = "Dongle-1.0" -local s,e,found = string.find("$Revision: 612 $", "(%d+)") -local minor = tonumber(s and found or 1) + 500 --- ** IMPORTANT NOTE ** --- Due to some issues we had previously with Dongle revision numbers --- we need to artificially inflate the minor revision number, to ensure --- we load sequentially. - -assert(DongleStub, string.format("%s requires DongleStub.", major)) - -if not DongleStub:IsNewerVersion(major, minor) then return end - -local Dongle = {} -local methods = { - "RegisterEvent", "UnregisterEvent", "UnregisterAllEvents", "IsEventRegistered", - "RegisterMessage", "UnregisterMessage", "UnregisterAllMessages", "TriggerMessage", "IsMessageRegistered", - "EnableDebug", "IsDebugEnabled", "Print", "PrintF", "Debug", "DebugF", "Echo", "EchoF", - "InitializeDB", - "InitializeSlashCommand", - "NewModule", "HasModule", "IterateModules", -} - -local registry = {} -local lookup = {} -local loadqueue = {} -local loadorder = {} -local events = {} -local databases = {} -local commands = {} -local messages = {} - -local frame - ---[[------------------------------------------------------------------------- - Message Localization ----------------------------------------------------------------------------]] - -local L = { - ["ADDMESSAGE_REQUIRED"] = "The frame you specify must have an 'AddMessage' method.", - ["ALREADY_REGISTERED"] = "A Dongle with the name '%s' is already registered.", - ["BAD_ARGUMENT"] = "bad argument #%d to '%s' (%s expected, got %s)", - ["BAD_ARGUMENT_DB"] = "bad argument #%d to '%s' (DongleDB expected)", - ["CANNOT_DELETE_ACTIVE_PROFILE"] = "You cannot delete your active profile. Change profiles, then attempt to delete.", - ["DELETE_NONEXISTANT_PROFILE"] = "You cannot delete a non-existant profile.", - ["MUST_CALLFROM_DBOBJECT"] = "You must call '%s' from a Dongle database object.", - ["MUST_CALLFROM_REGISTERED"] = "You must call '%s' from a registered Dongle.", - ["MUST_CALLFROM_SLASH"] = "You must call '%s' from a Dongle slash command object.", - ["PROFILE_DOES_NOT_EXIST"] = "Profile '%s' doesn't exist.", - ["REPLACE_DEFAULTS"] = "You are attempting to register defaults with a database that already contains defaults.", - ["SAME_SOURCE_DEST"] = "Source/Destination profile cannot be the same profile.", - ["EVENT_REGISTER_SPECIAL"] = "You cannot register for the '%s' event. Use the '%s' method instead.", - ["Unknown"] = "Unknown", - ["INJECTDB_USAGE"] = "Usage: DongleCmd:InjectDBCommands(db, ['copy', 'delete', 'list', 'reset', 'set'])", - ["DBSLASH_PROFILE_COPY_DESC"] = "profile copy - Copies profile into your current profile.", - ["DBSLASH_PROFILE_COPY_PATTERN"] = "^profile copy (.+)$", - ["DBSLASH_PROFILE_DELETE_DESC"] = "profile delete - Deletes the profile .", - ["DBSLASH_PROFILE_DELETE_PATTERN"] = "^profile delete (.+)$", - ["DBSLASH_PROFILE_LIST_DESC"] = "profile list - Lists all valid profiles.", - ["DBSLASH_PROFILE_LIST_PATTERN"] = "^profile list$", - ["DBSLASH_PROFILE_RESET_DESC"] = "profile reset - Resets the current profile.", - ["DBSLASH_PROFILE_RESET_PATTERN"] = "^profile reset$", - ["DBSLASH_PROFILE_SET_DESC"] = "profile set - Sets the current profile to .", - ["DBSLASH_PROFILE_SET_PATTERN"] = "^profile set (.+)$", - ["DBSLASH_PROFILE_LIST_OUT"] = "Profile List:", -} - ---[[------------------------------------------------------------------------- - Utility functions for Dongle use ----------------------------------------------------------------------------]] - -local function assert(level,condition,message) - if not condition then - error(message,level) - end -end - -local function argcheck(value, num, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - if type(num) ~= "number" then - error(string.format(L["BAD_ARGUMENT"],2, "argcheck", "number", type(num)), 1) - end - - for i=1,select("#", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) do - if type(value) == select(i, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) then return end - end - - local types = table.concat({a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20}, ", ") - local s,e,found = string.find(debugstack(2,2,0), ": in function [`<](.-)['>]") - local name = s and found - error(string.format(L["BAD_ARGUMENT"],num, name, types, type(value)), 3) -end - -local function safecall(func,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local success,err = pcall(func,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - if not success then - geterrorhandler()(err) - end -end - ---[[------------------------------------------------------------------------- - Dongle constructor, and DongleModule system ----------------------------------------------------------------------------]] - -function Dongle:New(name, obj) - argcheck(name, 1, "string") - argcheck(obj, 2, "table", "nil") - - if not obj then - obj = {} - end - - if registry[name] then - error(string.format(L["ALREADY_REGISTERED"], name)) - end - - local reg = {["obj"] = obj, ["name"] = name} - - registry[name] = reg - lookup[obj] = reg - lookup[name] = reg - - for k,v in pairs(methods) do - obj[v] = self[v] - end - - -- Add this Dongle to the end of the queue - table.insert(loadqueue, obj) - return obj,name -end - -function Dongle:NewModule(name, obj) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "NewModule")) - argcheck(name, 1, "string") - argcheck(obj, 2, "table", "nil") - - obj,name = Dongle:New(name, obj) - - if not reg.modules then reg.modules = {} end - reg.modules[obj] = obj - reg.modules[name] = obj - - return obj,name -end - -function Dongle:HasModule(module) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "HasModule")) - argcheck(module, 1, "string", "table") - - return reg.modules and reg.modules[module] -end - -local function ModuleIterator(t, name) - if not t then return end - local obj - repeat - name,obj = next(t, name) - until type(name) == "string" or not name - - return name,obj -end - -function Dongle:IterateModules() - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "IterateModules")) - - return ModuleIterator, reg.modules -end - ---[[------------------------------------------------------------------------- - Event registration system ----------------------------------------------------------------------------]] - -local function OnEvent(frame, event, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local eventTbl = events[event] - if eventTbl then - for obj,func in pairs(eventTbl) do - if type(func) == "string" then - if type(obj[func]) == "function" then - safecall(obj[func], obj, event, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - end - else - safecall(func, event, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - end - end - end -end - -local specialEvents = { - ["PLAYER_LOGIN"] = "Enable", - ["PLAYER_LOGOUT"] = "Disable", -} - -function Dongle:RegisterEvent(event, func) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "RegisterEvent")) - argcheck(event, 1, "string") - argcheck(func, 2, "string", "function", "nil") - - local special = (self ~= Dongle) and specialEvents[event] - if special then - error(string.format(L["EVENT_REGISTER_SPECIAL"], event, special), 3) - end - - -- Name the method the same as the event if necessary - if not func then func = event end - - if not events[event] then - events[event] = {} - frame:RegisterEvent(event) - end - events[event][self] = func -end - -function Dongle:UnregisterEvent(event) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "UnregisterEvent")) - argcheck(event, 1, "string") - - local tbl = events[event] - if tbl then - tbl[self] = nil - if not next(tbl) then - events[event] = nil - frame:UnregisterEvent(event) - end - end -end - -function Dongle:UnregisterAllEvents() - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "UnregisterAllEvents")) - - for event,tbl in pairs(events) do - tbl[self] = nil - if not next(tbl) then - events[event] = nil - frame:UnregisterEvent(event) - end - end -end - -function Dongle:IsEventRegistered(event) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "IsEventRegistered")) - argcheck(event, 1, "string") - - local tbl = events[event] - return tbl -end - ---[[------------------------------------------------------------------------- - Inter-Addon Messaging System ----------------------------------------------------------------------------]] - -function Dongle:RegisterMessage(msg, func) - argcheck(self, 1, "table") - argcheck(msg, 1, "string") - argcheck(func, 2, "string", "function", "nil") - - -- Name the method the same as the message if necessary - if not func then func = msg end - - if not messages[msg] then - messages[msg] = {} - end - messages[msg][self] = func -end - -function Dongle:UnregisterMessage(msg) - argcheck(self, 1, "table") - argcheck(msg, 1, "string") - - local tbl = messages[msg] - if tbl then - tbl[self] = nil - if not next(tbl) then - messages[msg] = nil - end - end -end - -function Dongle:UnregisterAllMessages() - argcheck(self, 1, "table") - - for msg,tbl in pairs(messages) do - tbl[self] = nil - if not next(tbl) then - messages[msg] = nil - end - end -end - -function Dongle:TriggerMessage(msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - argcheck(self, 1, "table") - argcheck(msg, 1, "string") - local msgTbl = messages[msg] - if not msgTbl then return end - - for obj,func in pairs(msgTbl) do - if type(func) == "string" then - if type(obj[func]) == "function" then - safecall(obj[func], obj, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - end - else - safecall(func, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - end - end -end - -function Dongle:IsMessageRegistered(msg) - argcheck(self, 1, "table") - argcheck(msg, 2, "string") - - local tbl = messages[msg] - return tbl[self] -end - ---[[------------------------------------------------------------------------- - Debug and Print utility functions ----------------------------------------------------------------------------]] - -function Dongle:EnableDebug(level, frame) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "EnableDebug")) - argcheck(level, 1, "number", "nil") - argcheck(frame, 2, "table", "nil") - - assert(3, type(frame) == "nil" or type(frame.AddMessage) == "function", L["ADDMESSAGE_REQUIRED"]) - reg.debugFrame = frame or ChatFrame1 - reg.debugLevel = level -end - -function Dongle:IsDebugEnabled() - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "EnableDebug")) - - return reg.debugLevel, reg.debugFrame -end - -local function argsToStrings(a1, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - if select("#", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) > 0 then - return tostring(a1), argsToStrings(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - else - return tostring(a1) - end -end - -local function printHelp(obj, method, header, frame, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[obj] - assert(4, reg, string.format(L["MUST_CALLFROM_REGISTERED"], method)) - - local name = reg.name - - if header then - msg = "|cFF33FF99"..name.."|r: "..tostring(msg) - end - - if select("#", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) > 0 then - msg = string.join(", ", {msg, argsToStrings(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20)}) - end - - frame:AddMessage(msg) -end - -local function printFHelp(obj, method, header, frame, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[obj] - assert(4, reg, string.format(L["MUST_CALLFROM_REGISTERED"], method)) - - local name = reg.name - local success,txt - - if header then - msg = "|cFF33FF99%s|r: " .. msg - success,txt = pcall(string.format, msg, name, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - else - success,txt = pcall(string.format, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - end - - if success then - frame:AddMessage(txt) - else - error(string.gsub(txt, "'%?'", string.format("'%s'", method)), 3) - end -end - -function Dongle:Print(msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[self] - assert(1, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "Print")) - argcheck(msg, 1, "number", "string", "boolean", "table", "function", "thread", "userdata") - return printHelp(self, "Print", true, DEFAULT_CHAT_FRAME, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) -end - -function Dongle:PrintF(msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[self] - assert(1, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "PrintF")) - argcheck(msg, 1, "number", "string", "boolean", "table", "function", "thread", "userdata") - return printFHelp(self, "PrintF", true, DEFAULT_CHAT_FRAME, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) -end - -function Dongle:Echo(msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[self] - assert(1, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "Echo")) - argcheck(msg, 1, "number", "string", "boolean", "table", "function", "thread", "userdata") - return printHelp(self, "Echo", false, DEFAULT_CHAT_FRAME, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) -end - -function Dongle:EchoF(msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[self] - assert(1, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "EchoF")) - argcheck(msg, 1, "number", "string", "boolean", "table", "function", "thread", "userdata") - return printFHelp(self, "EchoF", false, DEFAULT_CHAT_FRAME, msg, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) -end - -function Dongle:Debug(level, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "Debug")) - argcheck(level, 1, "number") - - if reg.debugLevel and level <= reg.debugLevel then - printHelp(self, "Debug", true, reg.debugFrame, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - end -end - -function Dongle:DebugF(level, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "DebugF")) - argcheck(level, 1, "number") - - if reg.debugLevel and level <= reg.debugLevel then - printFHelp(self, "DebugF", true, reg.debugFrame, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - end -end - ---[[------------------------------------------------------------------------- - Database System ----------------------------------------------------------------------------]] - -local dbMethods = { - "RegisterDefaults", "SetProfile", "GetProfiles", "DeleteProfile", "CopyProfile", - "GetCurrentProfile", "ResetProfile", "ResetDB", - "RegisterNamespace", -} - -local function copyTable(src) - local dest = {} - for k,v in pairs(src) do - if type(k) == "table" then - k = copyTable(k) - end - if type(v) == "table" then - v = copyTable(v) - end - dest[k] = v - end - return dest -end - -local function copyDefaults(dest, src, force) - for k,v in pairs(src) do - if k == "*" then - if type(v) == "table" then - -- Values are tables, need some magic here - local mt = { - __cache = {}, - __index = function(t,k) - local mt = getmetatable(dest) - local cache = rawget(mt, "__cache") - local tbl = rawget(cache, k) - if not tbl then - local parent = t - local parentkey = k - tbl = copyTable(v) - rawset(cache, k, tbl) - local mt = getmetatable(tbl) - if not mt then - mt = {} - setmetatable(tbl, mt) - end - local newindex = function(t,k,v) - rawset(parent, parentkey, t) - rawset(t, k, v) - end - rawset(mt, "__newindex", newindex) - end - return tbl - end, - } - setmetatable(dest, mt) - -- Now need to set the metatable on any child tables - for dkey,dval in pairs(dest) do - copyDefaults(dval, v) - end - else - -- Values are not tables, so this is just a simple return - local mt = {__index = function() return v end} - setmetatable(dest, mt) - end - elseif type(v) == "table" then - if not dest[k] then dest[k] = {} end - copyDefaults(dest[k], v, force) - else - if (dest[k] == nil) or force then - dest[k] = v - end - end - end -end - -local function removeDefaults(db, defaults) - if not db then return end - for k,v in pairs(defaults) do - if k == "*" and type(v) == "table" then - -- check for any defaults that have been changed - local mt = getmetatable(db) - local cache = rawget(mt, "__cache") - - for cacheKey,cacheValue in pairs(cache) do - removeDefaults(cacheValue, v) - if next(cacheValue) ~= nil then - -- Something's changed - rawset(db, cacheKey, cacheValue) - end - end - -- Now loop through all the actual k,v pairs and remove - for key,value in pairs(db) do - removeDefaults(value, v) - end - elseif type(v) == "table" and db[k] then - removeDefaults(db[k], v) - if not next(db[k]) then - db[k] = nil - end - else - if db[k] == defaults[k] then - db[k] = nil - end - end - end -end - -local function initSection(db, section, svstore, key, defaults) - local sv = rawget(db, "sv") - - local tableCreated - if not sv[svstore] then sv[svstore] = {} end - if not sv[svstore][key] then - sv[svstore][key] = {} - tableCreated = true - end - - local tbl = sv[svstore][key] - - if defaults then - copyDefaults(tbl, defaults) - end - rawset(db, section, tbl) - - return tableCreated, tbl -end - -local dbmt = { - __index = function(t, section) - local keys = rawget(t, "keys") - local key = keys[section] - if key then - local defaultTbl = rawget(t, "defaults") - local defaults = defaultTbl and defaultTbl[section] - - if section == "profile" then - local new = initSection(t, section, "profiles", key, defaults) - if new then - Dongle:TriggerMessage("DONGLE_PROFILE_CREATED", t, rawget(t, "parent"), rawget(t, "sv_name"), key) - end - elseif section == "profiles" then - local sv = rawget(t, "sv") - if not sv.profiles then sv.profiles = {} end - rawset(t, "profiles", sv.profiles) - elseif section == "global" then - local sv = rawget(t, "sv") - if not sv.global then sv.global = {} end - if defaults then - copyDefaults(sv.global, defaults) - end - rawset(t, section, sv.global) - else - initSection(t, section, section, key, defaults) - end - end - - return rawget(t, section) - end -} - -local function initdb(parent, name, defaults, defaultProfile, olddb) - -- This allows us to use an arbitrary table as base instead of saved variable name - local sv - if type(name) == "string" then - sv = getglobal(name) - if not sv then - sv = {} - setglobal(name, sv) - end - elseif type(name) == "table" then - sv = name - end - - -- Generate the database keys for each section - local player = UnitName("player") - local realm = GetRealmName()~=nil and GetRealmName() or GetCVar("realmName") - local char = string.format("%s - %s", player, realm) - local class = select(2, UnitClass("player")) - local race = select(2, UnitRace("player")) - local faction = UnitFactionGroup("player") or false - local factionrealm = faction and string.format("%s - %s", faction, realm) or false - - -- Make a container for profile keys - if not sv.profileKeys then sv.profileKeys = {} end - - -- Try to get the profile selected from the char db - local profileKey = sv.profileKeys[char] or defaultProfile or char - sv.profileKeys[char] = profileKey - - local keyTbl= { - ["char"] = char, - ["realm"] = realm, - ["class"] = class, - ["race"] = race, - ["faction"] = faction, - ["factionrealm"] = factionrealm, - ["global"] = true, - ["profile"] = profileKey, - ["profiles"] = true, -- Don't create until we need - } - - -- If we've been passed an old database, clear it out - if olddb then - for k,v in pairs(olddb) do olddb[k] = nil end - end - - -- Give this database the metatable so it initializes dynamically - local db = setmetatable(olddb or {}, dbmt) - - -- Copy methods locally - for idx,method in pairs(dbMethods) do - db[method] = Dongle[method] - end - - -- Set some properties in the object we're returning - db.profiles = sv.profiles - db.keys = keyTbl - db.sv = sv - db.sv_name = name - db.defaults = defaults - db.parent = parent - - databases[db] = true - - return db -end - -function Dongle:InitializeDB(name, defaults, defaultProfile) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "InitializeDB")) - argcheck(name, 1, "string", "table") - argcheck(defaults, 2, "table", "nil") - argcheck(defaultProfile, 3, "string", "nil") - - return initdb(self, name, defaults, defaultProfile) -end - --- This function operates on a Dongle DB object -function Dongle.RegisterDefaults(db, defaults) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "RegisterDefaults")) - assert(3, db.defaults == nil, L["REPLACE_DEFAUTS"]) - argcheck(defaults, 2, "table") - - for section,key in pairs(db.keys) do - if defaults[section] and rawget(db, section) then - copyDefaults(db[section], defaults[section]) - end - end - - db.defaults = defaults -end - -function Dongle:ClearDBDefaults() - for db in pairs(databases) do - local defaults = db.defaults - local sv = db.sv - - if db and defaults then - for section,key in pairs(db.keys) do - if defaults[section] and rawget(db, section) then - removeDefaults(db[section], defaults[section]) - end - end - - for section,key in pairs(db.keys) do - local tbl = rawget(db, section) - if tbl and not next(tbl) then - if sv[section] then - if type(key) == "string" then - sv[section][key] = nil - else - sv[section] = nil - end - end - end - end - end - end -end - -function Dongle.SetProfile(db, name) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "SetProfile")) - argcheck(name, 2, "string") - - local old = db.profile - local defaults = db.defaults and db.defaults.profile - - if defaults then - -- Remove the defaults from the old profile - removeDefaults(old, defaults) - end - - db.profile = nil - db.keys["profile"] = name - db.sv.profileKeys[db.keys.char] = name - - Dongle:TriggerMessage("DONGLE_PROFILE_CHANGED", db, db.parent, db.sv_name, db.keys.profile) -end - -function Dongle.GetProfiles(db, t) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "GetProfiles")) - argcheck(t, 2, "table", "nil") - - t = t or {} - local i = 1 - for profileKey in pairs(db.sv.profiles) do - t[i] = profileKey - i = i + 1 - end - return t, i - 1 -end - -function Dongle.GetCurrentProfile(db) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "GetCurrentProfile")) - return db.keys.profile -end - -function Dongle.DeleteProfile(db, name) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "DeleteProfile")) - argcheck(name, 2, "string") - - if db.keys.profile == name then - error(L["CANNOT_DELETE_ACTIVE_PROFILE"], 2) - end - - assert(type(db.sv.profiles[name]) == "table", L["DELETE_NONEXISTANT_PROFILE"]) - - db.sv.profiles[name] = nil - Dongle:TriggerMessage("DONGLE_PROFILE_DELETED", db, db.parent, db.sv_name, name) -end - -function Dongle.CopyProfile(db, name) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "CopyProfile")) - argcheck(name, 2, "string") - - assert(3, db.keys.profile ~= name, L["SAME_SOURCE_DEST"]) - assert(3, type(db.sv.profiles[name]) == "table", string.format(L["PROFILE_DOES_NOT_EXIST"], name)) - - local profile = db.profile - local source = db.sv.profiles[name] - - copyDefaults(profile, source, true) - Dongle:TriggerMessage("DONGLE_PROFILE_COPIED", db, db.parent, db.sv_name, name, db.keys.profile) -end - -function Dongle.ResetProfile(db) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "ResetProfile")) - - local profile = db.profile - - for k,v in pairs(profile) do - profile[k] = nil - end - - local defaults = db.defaults and db.defaults.profile - if defaults then - copyDefaults(profile, defaults) - end - Dongle:TriggerMessage("DONGLE_PROFILE_RESET", db, db.parent, db.sv_name, db.keys.profile) -end - - -function Dongle.ResetDB(db, defaultProfile) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "ResetDB")) - argcheck(defaultProfile, 2, "nil", "string") - - local sv = db.sv - for k,v in pairs(sv) do - sv[k] = nil - end - - local parent = db.parent - - initdb(parent, db.sv_name, db.defaults, defaultProfile, db) - Dongle:TriggerMessage("DONGLE_DATABASE_RESET", db, parent, db.sv_name, db.keys.profile) - Dongle:TriggerMessage("DONGLE_PROFILE_CHANGED", db, db.parent, db.sv_name, db.keys.profile) - return db -end - -function Dongle.RegisterNamespace(db, name, defaults) - assert(3, databases[db], string.format(L["MUST_CALLFROM_DBOBJECT"], "RegisterNamespace")) - argcheck(name, 2, "string") - argcheck(defaults, 3, "nil", "string") - - local sv = db.sv - if not sv.namespaces then sv.namespaces = {} end - if not sv.namespaces[name] then - sv.namespaces[name] = {} - end - - local newDB = initdb(db, sv.namespaces[name], defaults, db.keys.profile) - -- Remove the :SetProfile method from newDB - newDB.SetProfile = nil - - if not db.children then db.children = {} end - table.insert(db.children, newDB) - return newDB -end - ---[[------------------------------------------------------------------------- - Slash Command System ----------------------------------------------------------------------------]] - -local slashCmdMethods = { - "InjectDBCommands", - "RegisterSlashHandler", - "PrintUsage", -} - -local function OnSlashCommand(cmd, cmd_line) - if cmd.patterns then - for idx,tbl in pairs(cmd.patterns) do - local pattern = tbl.pattern - local s,e,found = string.find(cmd_line, pattern) - if s and found then - local handler = tbl.handler - if type(tbl.handler) == "string" then - local obj - -- Look in the command object before we look at the parent object - if cmd[handler] then obj = cmd end - if cmd.parent[handler] then obj = cmd.parent end - if obj then - obj[handler](obj, found) - end - else - handler(found) - end - return - end - end - end - cmd:PrintUsage() -end - -function Dongle:InitializeSlashCommand(desc, name, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local reg = lookup[self] - assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "InitializeSlashCommand")) - argcheck(desc, 1, "string") - argcheck(name, 2, "string") - argcheck(select(1, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20), 3, "string") - for i = 2,select("#", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) do - argcheck(select(i, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20), i+1, "string") - end - - local cmd = {} - cmd.desc = desc - cmd.name = name - cmd.parent = self - cmd.slashes = { a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20 } - for idx,method in pairs(slashCmdMethods) do - cmd[method] = Dongle[method] - end - - local genv = getfenv(0) - - for i = 1,select("#", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) do - genv["SLASH_"..name..tostring(i)] = "/"..select(i, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - end - - genv.SlashCmdList[name] = function(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) OnSlashCommand(cmd, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) end - - commands[cmd] = true - - return cmd -end - -function Dongle.RegisterSlashHandler(cmd, desc, pattern, handler) - assert(3, commands[cmd], string.format(L["MUST_CALLFROM_SLASH"], "RegisterSlashHandler")) - - argcheck(desc, 2, "string") - argcheck(pattern, 3, "string") - argcheck(handler, 4, "function", "string") - - if not cmd.patterns then - cmd.patterns = {} - end - - table.insert(cmd.patterns, { - ["desc"] = desc, - ["handler"] = handler, - ["pattern"] = pattern, - }) -end - -function Dongle.PrintUsage(cmd) - assert(3, commands[cmd], string.format(L["MUST_CALLFROM_SLASH"], "PrintUsage")) - local parent = cmd.parent - - parent:Echo(cmd.desc.."\n".."/"..table.concat(cmd.slashes, ", /")..":\n") - if cmd.patterns then - for idx,tbl in ipairs(cmd.patterns) do - parent:Echo(" - " .. tbl.desc) - end - end -end - -local dbcommands = { - ["copy"] = { - L["DBSLASH_PROFILE_COPY_DESC"], - L["DBSLASH_PROFILE_COPY_PATTERN"], - "CopyProfile", - }, - ["delete"] = { - L["DBSLASH_PROFILE_DELETE_DESC"], - L["DBSLASH_PROFILE_DELETE_PATTERN"], - "DeleteProfile", - }, - ["list"] = { - L["DBSLASH_PROFILE_LIST_DESC"], - L["DBSLASH_PROFILE_LIST_PATTERN"], - }, - ["reset"] = { - L["DBSLASH_PROFILE_RESET_DESC"], - L["DBSLASH_PROFILE_RESET_PATTERN"], - "ResetProfile", - }, - ["set"] = { - L["DBSLASH_PROFILE_SET_DESC"], - L["DBSLASH_PROFILE_SET_PATTERN"], - "SetProfile", - }, -} - -function Dongle.InjectDBCommands(cmd, db, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - assert(3, commands[cmd], string.format(L["MUST_CALLFROM_SLASH"], "InjectDBCommands")) - assert(3, databases[db], string.format(L["BAD_ARGUMENT_DB"], 2, "InjectDBCommands")) - local argc = select("#", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - assert(3, argc > 0, L["INJECTDB_USAGE"]) - - for i=1,argc do - local cmdname = string.lower(select(i, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20)) - local entry = dbcommands[cmdname] - assert(entry, L["INJECTDB_USAGE"]) - local func = entry[3] - - local handler - if cmdname == "list" then - handler = function(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - local profiles = db:GetProfiles() - db.parent:Print(L["DBSLASH_PROFILE_LIST_OUT"] .. "\n" .. table.concat(profiles,"\n")) - end - else - handler = function(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) db[entry[3]](db, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) end - end - - cmd:RegisterSlashHandler(entry[1], entry[2], handler) - end -end - ---[[------------------------------------------------------------------------- - Internal Message/Event Handlers ----------------------------------------------------------------------------]] - -local function PLAYER_LOGOUT(event) - Dongle:ClearDBDefaults() - for k,v in pairs(registry) do - local obj = v.obj - if type(obj["Disable"]) == "function" then - safecall(obj["Disable"], obj) - end - end -end - -local function PLAYER_LOGIN() - Dongle.initialized = true - for i=1, table.getn(loadorder) do - local obj = loadorder[i] - if type(obj.Enable) == "function" then - safecall(obj.Enable, obj) - end - loadorder[i] = nil - end -end - -local function VARIABLES_LOADED(event, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) - for i=1, table.getn(loadqueue) do - local obj = loadqueue[i] - table.insert(loadorder, obj) - - if type(obj.Initialize) == "function" then - safecall(obj.Initialize, obj) - end - loadqueue[i] = nil - end - - if not Dongle.initialized then - if type(IsLoggedIn) == "function" then - Dongle.initialized = IsLoggedIn() - else - Dongle.initialized = ChatFrame1.defaultLanguage - end - end - - if Dongle.initialized then - for i=1, table.getn(loadorder) do - local obj = loadorder[i] - if type(obj.Enable) == "function" then - safecall(obj.Enable, obj) - end - loadorder[i] = nil - end - end -end - -local function DONGLE_PROFILE_CHANGED(msg, db, parent, sv_name, profileKey) - local children = db.children - if children then - for i,namespace in ipairs(children) do - local old = namespace.profile - local defaults = namespace.defaults and namespace.defaults.profile - - if defaults then - -- Remove the defaults from the old profile - removeDefaults(old, defaults) - end - - namespace.profile = nil - namespace.keys["profile"] = profileKey - end - end -end - ---[[------------------------------------------------------------------------- - DongleStub required functions and registration ----------------------------------------------------------------------------]] - -function Dongle:GetVersion() return major,minor end - -local function Activate(self, old) - if old then - registry = old.registry or registry - lookup = old.lookup or lookup - loadqueue = old.loadqueue or loadqueue - loadorder = old.loadorder or loadorder - events = old.events or events - databases = old.databases or databases - commands = old.commands or commands - messages = old.messages or messages - frame = old.frame or CreateFrame("Frame") - else - frame = CreateFrame("Frame") - local reg = {obj = self, name = "Dongle"} - registry[major] = reg - lookup[self] = reg - lookup[major] = reg - end - - self.registry = registry - self.lookup = lookup - self.loadqueue = loadqueue - self.loadorder = loadorder - self.events = events - self.databases = databases - self.commands = commands - self.messages = messages - self.frame = frame - - frame:SetScript("OnEvent", function() OnEvent(this,event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20) end) - - local lib = old or self - - -- Lets make sure the lookup table has us. - lookup[lib] = lookup[major] - - -- Register for events using Dongle itself - lib:RegisterEvent("VARIABLES_LOADED", VARIABLES_LOADED) - lib:RegisterEvent("PLAYER_LOGIN", PLAYER_LOGIN) - lib:RegisterEvent("PLAYER_LOGOUT", PLAYER_LOGOUT) - lib:RegisterMessage("DONGLE_PROFILE_CHANGED", DONGLE_PROFILE_CHANGED) - - -- Convert all the modules handles - for name,obj in pairs(registry) do - for k,v in ipairs(methods) do - obj[k] = self[v] - end - end - - -- Convert all database methods - for db in pairs(databases) do - for idx,method in ipairs(dbMethods) do - db[method] = self[method] - end - end - - -- Convert all slash command methods - for cmd in pairs(commands) do - for idx,method in ipairs(slashCmdMethods) do - cmd[method] = self[method] - end - end -end - --- Lets nuke any Dongle deactivate functions, please --- I hate nasty hacks. -if DongleStub.versions and DongleStub.versions[major] then - local reg = DongleStub.versions[major] - reg.deactivate = nil -end - -Dongle = DongleStub:Register(Dongle, Activate) diff --git a/GuideListFrame.lua b/GuideListFrame.lua index b5bd718..60e7a51 100644 --- a/GuideListFrame.lua +++ b/GuideListFrame.lua @@ -11,14 +11,18 @@ local ROWHEIGHT = 305/NUMROWS local offset = 0 local rows = {} -local function HideTooltip() GameTooltip:Hide() end +local function HideTooltip() + if GameTooltip:IsOwned(this) then + GameTooltip:Hide() + end +end local function ShowTooltip() local f = this if TourGuide.db.char.completion[f.guide] ~= 1 then return end GameTooltip:SetOwner(f, "ANCHOR_RIGHT") - GameTooltip:SetText("This guide has been completed. Shift-click to reset it.", nil, nil, nil, nil, true) + GameTooltip:SetText("This guide has been completed. Shift-click to reset it.", nil, nil, nil, nil, true) end local function OnClick() @@ -44,13 +48,7 @@ TourGuide.guidelistframe = frame frame:SetFrameStrata("DIALOG") frame:SetWidth(660) frame:SetHeight(320+28) frame:SetPoint("TOPRIGHT", TourGuide.statusframe, "BOTTOMRIGHT") -frame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - edgeSize = 16, - insets = {left = 5, right = 5, top = 5, bottom = 5}, - tile = true, tileSize = 16, -}) +frame:SetBackdrop(ww.TooltipBorderBG) frame:SetBackdropColor(0.09, 0.09, 0.19, 1) frame:SetBackdropBorderColor(0.5, 0.5, 0.5, 0.5) frame:Hide() @@ -59,7 +57,7 @@ local closebutton = CreateFrame("Button", nil, frame, "UIPanelCloseButton") closebutton:SetPoint("TOPRIGHT", frame, "TOPRIGHT") frame.closebutton = closebutton -local title = ww.SummonFontString(frame, nil, "SubZoneTextFont", nil, "BOTTOMLEFT", frame, "TOPLEFT", 5, 0) +local title = ww.SummonFontString(frame, nil, "SubZoneTextFont", nil, "BOTTOM", frame, "TOP") local fontname, fontheight, fontflags = title:GetFont() title:SetFont(fontname, 18, fontflags) title:SetText("Guide List") @@ -97,8 +95,11 @@ frame.title = title rows[i] = row end ---frame:SetScript("OnShow", OnShow) frame:SetScript("OnShow", function() + local quad, vhalf, hhalf = TourGuide.GetQuadrant(TourGuide.statusframe) + local anchpoint = (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf + this:ClearAllPoints() + this:SetPoint(quad, TourGuide.statusframe, anchpoint) TourGuide:UpdateGuideListPanel() this:SetAlpha(0) this:SetScript("OnUpdate", ww.FadeIn) @@ -116,52 +117,6 @@ end) ww.SetFadeTime(frame, 0.7) table.insert(UISpecialFrames, "TourGuideGuideList") ---[[ -function TourGuide:CreateGuideListPanel() - frame = CreateFrame("Frame", nil, UIParent) - rows = {} - for i=1,NUMROWS*3 do - local anchor, point = rows[i-1], "BOTTOMLEFT" - if i == 1 then anchor, point = frame, "TOPLEFT" - elseif i == (NUMROWS + 1) then anchor, point = rows[1], "TOPRIGHT" - elseif i == (NUMROWS*2 + 1) then anchor, point = rows[NUMROWS + 1], "TOPRIGHT" end - - local row = CreateFrame("CheckButton", nil, frame) - row:SetPoint("TOPLEFT", anchor, point) - row:SetHeight(ROWHEIGHT) - row:SetWidth(COLWIDTH) - - local highlight = ww.SummonTexture(row, nil, nil, nil, "Interface\\HelpFrame\\HelpFrameButton-Highlight") - highlight:SetTexCoord(0, 1, 0, 0.578125) - highlight:SetAllPoints() - row:SetHighlightTexture(highlight) - row:SetCheckedTexture(highlight) - - local text = ww.SummonFontString(row, nil, "GameFontWhite", nil, "LEFT", 6, 0) - - --row:SetScript("OnClick", OnClick) - row:SetScript("OnEnter", ShowTooltip) - row:SetScript("OnLeave", HideTooltip) - - row.text = text - rows[i] = row - end - - frame:EnableMouseWheel() - frame:SetScript("OnMouseWheel", function() - local f,val = this,arg1 - offset = offset - val*NUMROWS - if (offset + NUMROWS*2) > table.getn(self.guidelistframe) then offset = offset - NUMROWS end - if offset < 0 then offset = 0 end - self:UpdateGuidePanel() - end) - - frame:SetScript("OnShow", OnShow) - ww.SetFadeTime(frame, 0.5) - OnShow(frame) - return frame -end -]] function TourGuide:UpdateGuideListPanel() if not frame or not frame:IsVisible() then return end diff --git a/Locale.lua b/Locale.lua index 4983817..f667d52 100644 --- a/Locale.lua +++ b/Locale.lua @@ -27,6 +27,39 @@ if loc == "deDE" then localized = { ["Quest accepted: (.*)"] = "Quest angenommen: (.*)", ["^You .*Hitem:(%d+).*(%[.+%])"] = "^Ihr .*Hitem:(%d+).*(%[.+%])", ["|cffff4500This quest is not listed in your current guide"] = "|cffff4500Diese Quest ist nicht in deinem Guide", + ["This panel lets you choose a guide to load. Upon completion the next guide will load automatically. Completed guides can be reset by shift-clicking."] = "Hier kannst Du einen Guide ausw\195\164hlen. Nach dessen Beendigung wird der n\195\164chste Guide automatisch geladen. Beendete Guides k\195\182nnen mit Umschalt-Klick zur\195\188ckgesetzt werden.", + ["These settings are saved on a per-char basis."] = "Diese Einstellungen werden pro Charakter gespeichert.", + ["Guides"] = "Guides", + ["Config"] = "Einstellungen", + ["|cff%02x%02x%02x%d%% complete"] = "|cff%02x%02x%02x%d%% abgeschlossen", + ["No Guide Loaded"] = "Kein Guide ausgew\195\164hlt", + ["Accept quest"] = "Quest annehmen", + ["Complete quest"] = "Quest abschlie\195\159en", + ["Turn in quest"] = "Quest abgeben", + ["Kill mob"] = "Gegner t\195\182ten", + ["Run to"] = "Gehe zu", + ["Fly to"] = "Fliege zu", + ["Set hearth"] = "Ruhestein setzen", + ["Use hearth"] = "Ruhestein benutzen", + ["Note"] = "Hinweis", + ["Use item"] = "Gegenstand benutzen", + ["Buy item"] = "Gegenstand kaufen", + ["Boat to"] = "Schiff nach", + ["Get flight point"] = "Flugpunkt holen", + ["Tour Guide - Help"] = "Tour Guide - Hilfe", + ["Confused? GOOD! Okey, fine... here's a few hints."] = "Verwirrt? Okay, gut... hier sind ein paar Tipps.", + ["Automatically track quests"] = "Automatische Questverfolgung", + ["Automatically toggle the default quest tracker for current 'complete quest' objectives."] = "Standard-Questverfolgung f\195\188r die aktuellen 'Quest abschlie\195\159en'-Ziele aktivieren.", + ["Show status frame"] = "Questziele anzeigen", + ["Display the status frame with current quest objective."] = "Anzeige mit den aktuellen Questzielen aktivieren", + ["Map note coords"] = "Koordinaten anzeigen", + ["Map coordinates found in tooltip notes (requires TomTom)."] = "Guide-Koordinaten auf der Karte anzeigen (ben\195\182tigt TomTom)", + ["Automatically map questgivers"] = "Questgeber anzeigen", + ["Automatically map questgivers for accept and turnin objectives (requires LightHeaded and TomTom)."] = "Automatisch Questgeber zum Annehmen und Abgeben auf der Karte anzeigen (erfordert LightHeaded und TomTom.)", + ["Always map coords from notes"] = "Koordinaten immer aus Guide", + ["Map note coords even when LightHeaded provides coords."] = "Verwende Guide-Koordinaten auch dann, wenn LightHeaded Koordinaten anbietet.", + ["Help"] = "Hilfe", + ["Hide minimap icon"] = "Hide minimap icon", } end @@ -38,12 +71,117 @@ if loc == "frFR" then localized = { PART_GSUB = "%s%(Partie %d+%)", PART_FIND = "(.+)%s%(Partie %d+%)", ["(.*) is now your home."] = "(.*) est maintenant votre foyer.", - ["Quest accepted: (.*)"] = "Quête acceptée: (.*)", + ["Quest accepted: (.*)"] = "Qu\195\170te accept\195\169e: (.*)", ["^You .*Hitem:(%d+).*(%[.+%])"] = "^Vous .*Hitem:(%d+).*(%[.+%])", - ["|cffff4500This quest is not listed in your current guide"] = "|cffff4500Cette quête n'est pas listé dans votre guide actuel", + ["|cffff4500This quest is not listed in your current guide"] = "|cffff4500Cette qu\195\170te n'est pas list\195\169e dans votre guide actuel", + ["This panel lets you choose a guide to load. Upon completion the next guide will load automatically. Completed guides can be reset by shift-clicking."] = "Ce panneau vous permet de choisir le guide que vous souhaitez suivre. Lorsqu'il sera termin\195\169, le prochain guide sera charg\195\169 automatiquement. Shift-Clic r\195\169initialisera un guide d\195\169j\195\160 termin\195\169.", + ["These settings are saved on a per-char basis."] = "Ces r\195\169glages sont sp\195\169cifiques pour chaque personnage.", + ["Guides"] = "Guides", + ["Config"] = "R\195\169glages", + ["|cff%02x%02x%02x%d%% complete"] = "|cff%02x%02x%02x%d%% termin\195\169e", + ["No Guide Loaded"] = "Aucun guide charg\195\169", + ["Accept quest"] = "Acceptez la qu\195\170te", + ["Complete quest"] = "Terminez la qu\195\170te", + ["Turn in quest"] = "Validez la qu\195\170te", + ["Kill mob"] = "Tuez la cr\195\169ature", + ["Run to"] = "Allez \195\160", + ["Fly to"] = "Envolez-vous \195\160", + ["Set hearth"] = "Fixez votre foyer", + ["Use hearth"] = "Utilisez votre pierre de foyer", + ["Note"] = "Note", + ["Use item"] = "Utilisez l'objet", + ["Buy item"] = "Achetz l'objet", + ["Boat to"] = "Prenez le bateau pour", + ["Get flight point"] = "Apprenez une destination", + ["Tour Guide - Help"] = "Tour Guide - Aide", + ["Confused? GOOD! Okey, fine... here's a few hints."] = "Vous \195\170tes perdu? BIEN! Bon, d'accord... voici quelques indices.", + ["Automatically track quests"] = "Suivi des qu\195\170tes automatique", + ["Automatically toggle the default quest tracker for current 'complete quest' objectives."] = "Affiche automatiquement le suivi des qu\195\170tes pour les objectifs des 'qu\195\170tes en cours'.", + ["Show status frame"] = "Montrer la fen\195\170tre d'\195\169tat", + ["Display the status frame with current quest objective."] = "Montrer la fen\195\170tre d'\195\169tat avec les objectifs courant", + ["Map note coords"] = "Montre les coordonn\195\169es des notes", + ["Map coordinates found in tooltip notes (requires TomTom)."] = "Montre les coordonn\195\169es trouv\195\169es dans le 'tooltip' des notes (n\195\169cessite TomTom)", + ["Automatically map questgivers"] = "Montre automatiquement les donneurs de qu\195\170tes", + ["Automatically map questgivers for accept and turnin objectives (requires LightHeaded and TomTom)."] = "Montre automatiquement les donneurs de qu\195\170tes pour les \195\169tapes de prise de qu\195\170tes det de validation de qu\195\170tes (n\195\169cessite LightHeaded et TomTom.)", + ["Always map coords from notes"] = "Toujours montrer les coordonn\195\169es trouv\195\169es dans les notes", + ["Map note coords even when LightHeaded provides coords."] = "Montrer les coordonn\195\169es trouv\195\169es dans les notes m\195\170me si LightHeaded les fournit.", + ["Help"] = "Aide", + ["Hide minimap icon"] = "Hide minimap icon", } end +---------------------- +-- Russian -- +---------------------- + +if loc == "ruRU" then localized = { + PART_GSUB = "%s%(\208\167\208\176\209\129\209\130\209\140 %d+%)", + PART_FIND = "(.+)%s%(\208\167\208\176\209\129\209\130\209\140 %d+%)", + ["(.*) is now your home."] = "\208\146\208\176\209\136 \208\189\208\190\208\178\209\139\208\185 \208\180\208\190\208\188 - (.*).", + ["Quest accepted: (.*)"] = "\208\159\208\190\208\187\209\131\209\135\208\181\208\189\208\190 \208\183\208\176\208\180\208\176\208\189\208\184\208\181: (.*)", + ["^You .*Hitem:(%d+).*(%[.+%])"] = "^\208\146\208\176\209\136\208\176 .*H\208\180\208\190\208\177\209\139\209\135\208\176:(%d+).*(%[.+%])", + ["|cffff4500This quest is not listed in your current guide"] = "|cffff4500\208\173\209\130\208\190\208\179\208\190 \208\183\208\176\208\180\208\176\208\189\208\184\209\143 \208\189\208\181\209\130 \208\178 \208\178\209\139\208\177\209\128\208\176\208\189\208\189\208\190\208\188 \209\128\209\131\208\186\208\190\208\178\208\190\208\180\209\129\209\130\208\178\208\181", +} end + + +---------------------- +-- Korean -- +---------------------- + +if loc == "koKR" then localized = { + PART_GSUB = "%s%(파트 %d+%)", + PART_FIND = "(.+)%s%(파트 %d+%)", + ["(.*) is now your home."] = "ì´ì œë¶€í„° (.*) ì—¬ê´€ì— ë¨¸ë¬´ë¦…ë‹ˆë‹¤.", + ["Quest accepted: (.*)"] = "퀘스트를 수ë½í–ˆìŠµë‹ˆë‹¤: (.*)", + ["^You .*Hitem:(%d+).*(%[.+%])"] = "^ì•„ì´í…œì„ íšë“했습니다: .*Hitem:(%d+).*(%[.+%])", + ["|cffff4500This quest is not listed in your current guide"] = "|cffff4500ì´ í€˜ìŠ¤íŠ¸ëŠ” 현재 ê°€ì´ë“œ 목ë¡ì— 없습니다.", + ["This panel lets you choose a guide to load. Upon completion the next guide will load automatically. Completed guides can be reset by shift-clicking."] = "ì´ íŒ¨ë„ì—ì„œ ê°€ì´ë“œë¥¼ ì„ íƒí•˜ì—¬ 불러오세요. 완료를 하면 ë‹¤ìŒ ê°€ì´ë“œë¥¼ ìžë™ìœ¼ë¡œ 불러 올 것입니다. ì™„ë£Œëœ ê°€ì´ë“œë¥¼ 초기화 하려면 Shift-í´ë¦­ì„ 하세요.", + ["These settings are saved on a per-char basis."] = "ì´ ì„¤ì •ì€ ê¸°ë³¸ì ìœ¼ë¡œ ìºë¦­í„° 마다 ë”°ë¡œ 저장ë©ë‹ˆë‹¤.", + ["Guides"] = "ê°€ì´ë“œ", + ["Config"] = "설정", + ["|cff%02x%02x%02x%d%% complete"] = "|cff%02x%02x%02x%d%% 완료", + ["No Guide Loaded"] = "불러온 ê°€ì´ë“œ ì—†ìŒ", + ["Accept quest"] = "퀘스트 수ë½", + ["Complete quest"] = "퀘스트 진행", + ["Turn in quest"] = "퀘스트 제출", + ["Kill mob"] = "몹 죽ì´ê¸°", + ["Run to"] = "달려서", + ["Fly to"] = "ë‚ ì•„ì„œ", + ["Set hearth"] = "ê·€í™˜ì„ ì„¤ì •", + ["Use hearth"] = "ê·€í™˜ì„ ì‚¬ìš©", + ["Note"] = "노트", + ["Use item"] = "ì•„ì´í…œ 사용", + ["Buy item"] = "ì•„ì´í…œ 구입", + ["Boat to"] = "배를 타고", + ["Get flight point"] = "비행 경로 발견", + ["Tour Guide - Help"] = "Tour Guide - ë„움ë§", + ["Confused? GOOD! Okey, fine... here's a few hints."] = "ë­ê°€ 뭔지 어리둥절했다구요? 좋군요! 그래요, 알겠습니다... ì•½ê°„ì˜ ížŒíŠ¸ë¥¼ 드리죠.", + ["Automatically track quests"] = "ìžë™ìœ¼ë¡œ 퀘스트 추ì ", + ["Automatically toggle the default quest tracker for current 'complete quest' objectives."] = "현재 '퀘스트 진행' 목표를 위해서 ìžë™ìœ¼ë¡œ 기본 퀘스트 추ì ì„ 토글합니다.", + ["Show status frame"] = "ìƒíƒœ 프레임 ë³´ì´ê¸°", + ["Display the status frame with current quest objective."] = "현재 퀘스트 목표를 ìƒíƒœ í”„ë ˆìž„ì— í‘œì‹œí•©ë‹ˆë‹¤.", + ["Map note coords"] = "ì§€ë„ ë…¸íŠ¸ 좌표", + ["Map coordinates found in tooltip notes (requires TomTom)."] = "íˆ´íŒ ë…¸íŠ¸ì˜ ì§€ë„ ì¢Œí‘œë¥¼ ì´ìš©í•´ì„œ 목표를 찾습니다. (TomTom í•„ìš”).", + ["Automatically map questgivers"] = "ìžë™ìœ¼ë¡œ 지ë„ì— í€˜ìŠ¤íŠ¸ ì œê³µìž í‘œì‹œ", + ["Automatically map questgivers for accept and turnin objectives (requires LightHeaded and TomTom)."] = "퀘스트를 수ë½í•˜ê±°ë‚˜ 목표 ì œì¶œì„ ìœ„í•´ì„œ ìžë™ìœ¼ë¡œ 지ë„ì— í€˜ìŠ¤íŠ¸ 제공ìžë¥¼ 표시합니다. (LightHeaded와 TomTom í•„ìš”).", + ["Always map coords from notes"] = "í•­ìƒ ë…¸íŠ¸ì— ì§€ë„ ì¢Œí‘œ 표시", + ["Map note coords even when LightHeaded provides coords."] = "LightHeadedê°€ 제공하는 좌표가 있ë”ë¼ë„ ë…¸íŠ¸ì˜ ì§€ë„ ì¢Œí‘œë¡œ 표시합니다.", + ["Help"] = "ë„움ë§", + ["Reset"] = "초기화", + ["Reset the status frame to the default position"] = "ìƒíƒœ í”„ë ˆìž„ì„ ê¸°ë³¸ 위치로 초기화합니다.", + ["Reset the item button to the default position"] = "ì•„ì´í…œ ë²„íŠ¼ì„ ê¸°ë³¸ 위치로 초기화합니다.", + ["Show item button"] = "ì•„ì´í…œ 버튼 ë³´ì´ê¸°", + ["Display a button when you must use an item to start or complete a quest."] = "퀘스트를 시작 ë˜ëŠ” 완료를 하기 위해서 반드시 사용해야 하는 ì•„ì´í…œì„ 버튼으로 표시합니다.", + ["Show buttom for 'complete' objectives"] = "'퀘스트 진행' 목표를 위한 버튼 ë³´ì´ê¸°", + ["The advanced quest tracker in the default UI will show these items. Enable this if you would rather have TourGuide's button."] = "기본 UIì˜ ê³ ê¸‰ 퀘스트 추ì ì— 해당 ì•„ì´í…œì´ ë³´ì´ë„ë¡ í•©ë‹ˆë‹¤. 만약 TourGuideì˜ ë²„íŠ¼ì„ ì„ í˜¸í•œë‹¤ë©´ 활성화하세요.", + ["Tour Guide - Guides"] = "Tour Guide - ê°€ì´ë“œ", + ["K No guide loaded... |N|Click to select a guide|"] = "K 불러온 ê°€ì´ë“œ ì—†ìŒ... |N|ê°€ì´ë“œë¥¼ ì„ íƒí•˜ë ¤ë©´ í´ë¦­í•˜ì„¸ìš”|", + [" |cff808080(Optional)"] = " |cff808080(ìž„ì˜ ì„ íƒ)", + ["Cannot find zone %q, using current zone."] = "%q ì§€ì—­ì„ ì°¾ì„ ìˆ˜ 없습니다. 현재 ì§€ì—­ì˜ ê°€ì´ë“œë¥¼ 사용하세요.", + ["No zone provided, using current zone."] = "제공ë˜ëŠ” ì§€ì—­ì´ ì—†ìŠµë‹ˆë‹¤. 현재 ì§€ì—­ì˜ ì‚¬ìš©í•˜ì„¸ìš”.", + ["Hide minimap icon"] = "Hide minimap icon", +} end + -- Metatable majicks... makes localized table fallback to engrish, or fallback to the index requested. -- This ensures we ALWAYS get a value back, even if it's the index we requested originally TOURGUIDE_LOCALE = localized and setmetatable(localized, {__index = function(t,i) return engrish[i] or i end}) diff --git a/Mapping.lua b/Mapping.lua index f10fd98..e0ac212 100644 --- a/Mapping.lua +++ b/Mapping.lua @@ -11,18 +11,18 @@ end local cache = {} local function MapPoint(zone, x, y, desc) - TourGuide:DebugF(1, "Mapping %q - %s (%.2f, %.2f)", desc, zone, x, y) + TourGuide:Debug( string.format("Mapping %q - %s (%.2f, %.2f)", desc, zone, x, y)) local zi, zc = zone and zonei[zone], zone and zonec[zone] if not zi then - if zone then TourGuide:PrintF("Cannot find zone %q, using current zone.", zone) - else TourGuide:Print("No zone provided, using current zone.") end + if zone then TourGuide:PrintF(L["Cannot find zone %q, using current zone."], zone) + else TourGuide:Print(L["No zone provided, using current zone."]) end zi, zc = GetCurrentMapZone(), GetCurrentMapContinent() zone = zonenames[zc][zi] end local opts = { title = "[TG] "..desc } - if TomTom then TomTom:AddMFWaypoint(zc, zi, x/100, y/100, opts) --AddZWaypoint(c,z,x,y,desc) select(z, GetMapZones(c)) + if TomTom then TomTom:AddMFWaypoint(zc, zi, x/100, y/100, opts) elseif Cartographer_Waypoints then local pt = NotePoint:new(zone, x/100, y/100, "[TG] "..desc) Cartographer_Waypoints:AddWaypoint(pt) @@ -41,27 +41,31 @@ function TourGuide:MapPfQuestNPC(qid, action) local qLookup = pfDB["quests"]["data"] if qLookup[qid] then if action == "ACCEPT" then - if qLookup[qid]["start"]["U"] then -- NPC - for _, uid in pairs(qLookup[qid]["start"]["U"]) do - unitId = uid - end - elseif qLookup[qid]["start"]["O"] then -- Object - for _, oid in pairs(qLookup[qid]["start"]["O"]) do - objectId = oid + if qLookup[qid]["start"] then + if qLookup[qid]["start"]["U"] then -- NPC + for _, uid in pairs(qLookup[qid]["start"]["U"]) do + unitId = uid + end + elseif qLookup[qid]["start"]["O"] then -- Object + for _, oid in pairs(qLookup[qid]["start"]["O"]) do + objectId = oid + end end end else - if qLookup[qid]["end"]["U"] then -- NPC - for _, uid in pairs(qLookup[qid]["end"]["U"]) do - unitId = uid - end - elseif qLookup[qid]["end"]["O"] then -- Object - for _, oid in pairs(qLookup[qid]["end"]["O"]) do - objectId = oid + if qLookup[qid]["end"] then + if qLookup[qid]["end"]["U"] then -- NPC + for _, uid in pairs(qLookup[qid]["end"]["U"]) do + unitId = uid + end + elseif qLookup[qid]["end"]["O"] then -- Object + for _, oid in pairs(qLookup[qid]["end"]["O"]) do + objectId = oid + end end end end - self:DebugF(1, "pfQuest lookup A:%s U:%s O:%s", action, unitId, objectId) + self:Debug( string.format("pfQuest lookup A:%s U:%s O:%s", action, unitId, objectId)) if unitId ~= "UNKNOWN" then local unitLookup = pfDB["units"]["data"] @@ -82,7 +86,7 @@ function TourGuide:MapPfQuestNPC(qid, action) end end end - self:DebugF(1, "%s: No NPC or Object information found for %s!", action, title) + self:Debug( string.format("%s: No NPC or Object information found for %s!", action, title)) end end @@ -94,7 +98,7 @@ function TourGuide:MapLightHeadedNPC(qid, action) local title, level = LightHeaded:QIDToTitleLevel(qid) if action == "ACCEPT" then _, _, _, _, stype, npcname, npcid = LightHeaded:GetQuestInfo(title, level) else _, _, _, _, _, _, _, stype, npcname, npcid = LightHeaded:GetQuestInfo(title, level) end - self:DebugF(1, "LightHeaded lookup %s %s %s %s %s", action, qid, stype, npcname, npcid) + self:Debug( string.format("LightHeaded lookup %s %s %s %s %s", action, qid, stype, npcname, npcid)) if stype ~= "npc" then return end local data = LightHeaded:LoadNPCData(tonumber(npcid)) @@ -111,7 +115,7 @@ function TourGuide:ParseAndMapCoords(qid, action, note, desc, zone) if TomTom.waypoints then for k,wp in ipairs(TomTom.waypoints) do if wp.title and string.sub(wp.title, 1, 5) == "[TG] " then - self:DebugF(1, "Removing %q from TomTom", wp.title) + self:Debug( string.format("Removing %q from TomTom", wp.title)) TomTom:RemoveWaypoint(wp, true) end end diff --git a/NilGuide.lua b/NilGuide.lua index 8ece6dd..92100c1 100644 --- a/NilGuide.lua +++ b/NilGuide.lua @@ -1,2 +1,4 @@ -TourGuide:RegisterGuide("No Guide", nil, "Alliance", function() return "A No guide loaded... |N|Click to select a guide|" end) -TourGuide:RegisterGuide("No Guide", nil, "Horde", function() return "A No guide loaded... |N|Click to select a guide|" end) +local L = TourGuide.Locale + +TourGuide:RegisterGuide("No Guide", nil, "Alliance", function() return L["K No guide loaded... |N|Click to select a guide|"] end) +TourGuide:RegisterGuide("No Guide", nil, "Horde", function() return L["K No guide loaded... |N|Click to select a guide|"] end) diff --git a/ObjectivesFrame.lua b/ObjectivesFrame.lua index d7af304..5c3474c 100644 --- a/ObjectivesFrame.lua +++ b/ObjectivesFrame.lua @@ -19,21 +19,15 @@ TourGuide.objectiveframe = frame frame:SetFrameStrata("DIALOG") frame:SetWidth(630) frame:SetHeight(305+28) frame:SetPoint("TOPRIGHT", TourGuide.statusframe, "BOTTOMRIGHT") -frame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - edgeSize = 16, - insets = {left = 5, right = 5, top = 5, bottom = 5}, - tile = true, tileSize = 16, -}) +frame:SetBackdrop(ww.TooltipBorderBG) frame:SetBackdropColor(0.09, 0.09, 0.19, 1) frame:SetBackdropBorderColor(0.5, 0.5, 0.5, 0.5) frame:Hide() -frame:SetScript("OnShow", function() TourGuide:CreateObjectivePanel() end) +frame:SetScript("OnShow", function() TourGuide:UpdateObjectivePanel() end) table.insert(UISpecialFrames, "TourGuideObjectives") -local function OnShow() +local function ResetScrollbar() local f = this local newval = math.max(0, (TourGuide.current or 0) - NUMROWS/2 - 1) @@ -41,18 +35,24 @@ local function OnShow() scrollbar:SetValue(newval) TourGuide:UpdateOHPanel() +end +local function OnShow(f) + local f = f or this + ResetScrollbar() f:SetAlpha(0) f:SetScript("OnUpdate", ww.FadeIn) - f = TourGuide.optionsframe - if f:IsVisible() then f:Hide() end - f = TourGuide.guidelistframe - if f:IsVisible() then f:Hide() end + if TourGuide.optionsframe:IsVisible() then HideUIPanel(TourGuide.optionsframe) end + if TourGuide.guidelistframe:IsVisible() then HideUIPanel(TourGuide.guidelistframe) end end -local function HideTooltip() GameTooltip:Hide() end +local function HideTooltip() + if GameTooltip:IsOwned(this) then + GameTooltip:Hide() + end +end local function ShowTooltip() local f = this @@ -62,10 +62,9 @@ local function ShowTooltip() GameTooltip:SetText(f.text:GetText(), nil, nil, nil, nil, true) end - local function CreateButton(parent, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) local b = CreateFrame("Button", nil, parent) - if select("#", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) > 0 then b:SetPoint(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) end + if TourGuide.select("#", a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) > 0 then b:SetPoint(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) end b:SetWidth(80) b:SetHeight(22) -- Fonts -- @@ -88,13 +87,14 @@ local function CreateButton(parent, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a end -function TourGuide:CreateObjectivePanel() +function TourGuide:UpdateObjectivePanel() + frame:SetScript("OnShow", nil) local guidebutton = CreateButton(frame, "BOTTOMRIGHT", -6, 6) guidebutton:SetText("Guides") guidebutton:SetScript("OnClick", function() frame:Hide(); TourGuide.guidelistframe:Show() end) local configbutton = CreateButton(frame, "RIGHT", guidebutton, "LEFT") - configbutton:SetText("Config") + configbutton:SetText(L["Config"]) configbutton:SetScript("OnClick", function() frame:Hide(); TourGuide.optionsframe:Show() end) if TourGuide.db.char.debug then @@ -179,11 +179,15 @@ end local accepted = {} function TourGuide:UpdateOHPanel(value) if not frame or not frame:IsVisible() then return end - title:SetText(self.db.char.currentguide or "No Guide Loaded") + title:SetText(self.db.char.currentguide or L["No Guide Loaded"]) local r,g,b = self.ColorGradient((self.current-1)/table.getn(self.actions)) - completed:SetText(string.format("|cff%02x%02x%02x%d%% complete", r*255, g*255, b*255, (self.current-1)/table.getn(self.actions)*100)) + completed:SetText(string.format(L["|cff%02x%02x%02x%d%% complete"], r*255, g*255, b*255, (self.current-1)/table.getn(self.actions)*100)) + + if self.guidechanged then + self.guidechanged = nil + ResetScrollbar() + end - self.guidechanged = nil if value then offset = math.floor(value) end if (offset + NUMROWS) > table.getn(self.actions) then offset = table.getn(self.actions) - NUMROWS end if offset < 0 then offset = 0 end @@ -219,13 +223,12 @@ function TourGuide:UpdateOHPanel(value) row.icon:SetTexture(self.icons[action]) if action ~= "ACCEPT" and action ~= "TURNIN" then row.icon:SetTexCoord(4/48, 44/48, 4/48, 44/48) end - row.text:SetText(name..(optional and " |cff808080(Optional)" or "")) + row.text:SetText(name..(optional and L[" |cff808080(Optional)"] or "")) row.detail:SetText(self:GetObjectiveTag("N", i + offset)) row.check:SetChecked(checked) if (TourGuide.current > (i + offset)) and optional and not checked then row.text:SetTextColor(0.5, 0.5, 0.5) ---~ row.check:SetChecked(true) row.check:Disable() else row.text:SetTextColor(1, 0.82, 0) diff --git a/OptionsFrame.lua b/OptionsFrame.lua index 80d10dd..9484e77 100644 --- a/OptionsFrame.lua +++ b/OptionsFrame.lua @@ -1,55 +1,61 @@ local TourGuide = TourGuide +local L = TourGuide.Locale local ww = WidgetWarlock -local closebutton, title, trackquestcheck - -local frame = CreateFrame("Frame", "TourGuideOptions", UIParent) -TourGuide.optionsframe = frame -frame:SetFrameStrata("DIALOG") -frame:SetWidth(300) frame:SetHeight(16+28) -frame:SetPoint("TOPRIGHT", TourGuide.statusframe, "BOTTOMRIGHT") -frame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - edgeSize = 16, - insets = {left = 5, right = 5, top = 5, bottom = 5}, - tile = true, tileSize = 16, -}) -frame:SetBackdropColor(0.09, 0.09, 0.19, 1) -frame:SetBackdropBorderColor(0.5, 0.5, 0.5, 0.5) -frame:Hide() - -frame:SetScript("OnShow", function() - this:SetAlpha(0) - this:SetScript("OnUpdate", ww.FadeIn) -end) - -closebutton = CreateFrame("Button", nil, frame, "UIPanelCloseButton") -closebutton:SetPoint("TOPRIGHT", frame, "TOPRIGHT") - -title = ww.SummonFontString(frame, nil, "SubZoneTextFont", nil, "BOTTOMLEFT", frame, "TOPLEFT", 5, 0) -local fontname, fontheight, fontflags = title:GetFont() -title:SetFont(fontname, 18, fontflags) -title:SetText("Options") - -trackquestcheck = CreateFrame("CheckButton", "TourGuideOptionsTrackQuestCheck", frame, "UICheckButtonTemplate") -trackquestcheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 10, -10) -trackquestcheck:SetWidth(24) trackquestcheck:SetHeight(24) -trackquestcheck.text = getglobal("TourGuideOptionsTrackQuestCheckText") -trackquestcheck.text:SetText("Automatically Track Quests") - -ww.SetFadeTime(frame, 0.7) - -trackquestcheck:SetScript("OnClick", function() - TourGuide.db.char.trackquests = not TourGuide.db.char.trackquests -end) - -trackquestcheck:SetScript("OnShow", function() - f = f or this - f:SetChecked(TourGuide.db.char.trackquests) - f:SetAlpha(0) - f:SetScript("OnUpdate", ww.FadeIn) -end) +function TourGuide:CreateConfigPanel() + local frame = CreateFrame("Frame", "TourGuideOptions", UIParent) + TourGuide.optionsframe = frame + frame:SetFrameStrata("DIALOG") + frame:SetWidth(300) frame:SetHeight(16+28*2) + frame:SetPoint("TOPRIGHT", TourGuide.statusframe, "BOTTOMRIGHT") + frame:SetBackdrop(ww.TooltipBorderBG) + frame:SetBackdropColor(0.09, 0.09, 0.19, 1) + frame:SetBackdropBorderColor(0.5, 0.5, 0.5, 0.5) + frame:Hide() + + closebutton = CreateFrame("Button", nil, frame, "UIPanelCloseButton") + closebutton:SetPoint("TOPRIGHT", frame, "TOPRIGHT") + + title = ww.SummonFontString(frame, nil, "SubZoneTextFont", nil, "BOTTOMLEFT", frame, "TOPLEFT", 5, 0) + local fontname, fontheight, fontflags = title:GetFont() + title:SetFont(fontname, 18, fontflags) + title:SetText("Options") + + local qtrack = ww.SummonCheckBox(22, frame, "TOPLEFT", 5, -5) + ww.SummonFontString(qtrack, "OVERLAY", "GameFontNormalSmall", L["Automatically track quests"], "LEFT", qtrack, "RIGHT", 5, 0) + qtrack:SetScript("OnClick", function() self.db.char.trackquests = not self.db.char.trackquests end) + + local qskipfollowups = ww.SummonCheckBox(22, qtrack, "TOPLEFT", 0, -20) + ww.SummonFontString(qskipfollowups, "OVERLAY", "GameFontNormalSmall", L["Automatically skip suggested follow-ups"], "LEFT", qskipfollowups, "RIGHT", 5, 0) + qskipfollowups:SetScript("OnClick", function() self.db.char.skipfollowups = not self.db.char.skipfollowups end) + frame.qtrack = qtrack + frame.qskipfollowups = qskipfollowups + + local function OnShow(f) + f = f or this + local quad, vhalf, hhalf = self.GetQuadrant(self.statusframe) + local anchpoint = (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf + f:ClearAllPoints() + f:SetPoint(quad, self.statusframe, anchpoint) + local title_point,title_anchor,title_x,title_y + if quad == "TOPLEFT" then + title_point,title_anchor,title_x,title_y = "BOTTOMRIGHT", "TOPRIGHT", -5, 0 + else + title_point,title_anchor,title_x,title_y = "BOTTOMLEFT", "TOPLEFT", 5, 0 + end + title:ClearAllPoints() + title:SetPoint(title_point,f,title_anchor,title_x,title_y) + + f.qtrack:SetChecked(self.db.char.trackquests) + f.qskipfollowups:SetChecked(self.db.char.skipfollowups) + f:SetAlpha(0) + f:SetScript("OnUpdate", ww.FadeIn) + end + + frame:SetScript("OnShow", OnShow) + ww.SetFadeTime(frame, 0.5) + OnShow(frame) +end table.insert(UISpecialFrames, "TourGuideOptions") diff --git a/Parser.lua b/Parser.lua index 64b0298..6caba22 100644 --- a/Parser.lua +++ b/Parser.lua @@ -7,6 +7,7 @@ local actiontypes = { R = "RUN", H = "HEARTH", h = "SETHEARTH", + G = "GRIND", F = "FLY", f = "GETFLIGHTPOINT", N = "NOTE", @@ -14,18 +15,20 @@ local actiontypes = { b = "BOAT", U = "USE", P = "PET", + D = "DIE", } function TourGuide:GetObjectiveTag(tag, i) - self:Debug(11, "GetObjectiveTag", tag, i) + --self:Debug( "GetObjectiveTag", tag, i) i = i or self.current local tags = self.tags[i] if not tags then return end - if tag == "O" then return select(3, string.find(tags,"|O|")) - elseif tag == "T" then return select(3, string.find(tags,"|T|")) - elseif tag == "QID" then return select(3, string.find(tags, "|QID|(%d+)|")) + if tag == "O" then return string.find(tags,"|O|") + elseif tag == "T" then return string.find(tags,"|T|") + elseif tag == "S" then return string.find(tags,"|S|") + elseif tag == "QID" then return self.select(3, string.find(tags, "|QID|(%d+)|")) elseif tag == "L" then local _, _, lootitem, lootqty = string.find(tags,"|L|(%d+)%s?(%d*)|") lootqty = tonumber(lootqty) or 1 @@ -33,14 +36,14 @@ function TourGuide:GetObjectiveTag(tag, i) return lootitem, lootqty end - return select(3, string.find(tags,"|"..tag.."|([^|]*)|?")) + return self.select(3, string.find(tags,"|"..tag.."|([^|]*)|?")) end local function DumpQuestDebug(accepts, turnins, completes) - for quest in pairs(accepts) do if not turnins[quest] then TourGuide:DebugF(1, "Quest has no 'turnin' objective: %s", quest) end end - for quest in pairs(turnins) do if not accepts[quest] then TourGuide:DebugF(1, "Quest has no 'accept' objective: %s", quest) end end - for quest in pairs(completes) do if not accepts[quest] and not turnins[quest] then TourGuide:DebugF(1, "Quest has no 'accept' and 'turnin' objectives: %s", quest) end end + for quest in pairs(accepts) do if not turnins[quest] then TourGuide:Debug( string.format("Quest has no 'turnin' objective: %s", quest)) end end + for quest in pairs(turnins) do if not accepts[quest] then TourGuide:Debug( string.format("Quest has no 'accept' objective: %s", quest)) end end + for quest in pairs(completes) do if not accepts[quest] and not turnins[quest] then TourGuide:Debug( string.format("Quest has no 'accept' and 'turnin' objectives: %s", quest)) end end end @@ -49,7 +52,7 @@ local function DebugQuestObjective(text, action, quest, accepts, turnins, comple local haserrors if (action == "A" and accepts[quest] or action == "T" and turnins[quest] or action == "C" and completes[quest]) and not string.find(text, "|NODEBUG|") then - TourGuide:DebugF(1, "%s %s -- Duplicate objective", action, quest) + TourGuide:Debug( string.format("%s %s -- Duplicate objective", action, quest)) haserrors = true end @@ -63,20 +66,20 @@ local function DebugQuestObjective(text, action, quest, accepts, turnins, comple -- Catch bad Title Case for _,word in pairs(titlematches) do if string.find(quest,"[^:]%s"..word.."%s") or string.find(quest,"[^:]%s"..word.."$") or string.find(quest,"[^:]%s"..word.."@") then - TourGuide:DebugF(1, "%s %s -- Contains bad title case", action, quest) + TourGuide:Debug( string.format("%s %s -- Contains bad title case", action, quest)) haserrors = true end end end if string.find(text,"[���]") then - TourGuide:DebugF(1, "%s %s -- Contains bad char", action, quest) + TourGuide:Debug( string.format("%s %s -- Contains bad char", action, quest)) haserrors = true end local _, _, comment = string.find(text, "(|[NLUC]V?|[^|]+)$") or string.find(text, "(|[NLUC]V?|[^|]+) |[NLUC]V?|") if comment then - TourGuide:Debug(1, "Unclosed comment: ".. comment) + TourGuide:Debug( "Unclosed comment: ".. comment) haserrors = true end @@ -90,7 +93,7 @@ local function StepParse(guide) local uniqueid = 1 local actions, quests, tags = {}, {}, {} local i, haserrors = 1, false - local guidet = string.split("\n", guide) + local guidet = TourGuide.split("\r\n", guide) for _,text in pairs(guidet) do local _, _, class = string.find(text,"|C|([^|]+)|") @@ -98,7 +101,7 @@ local function StepParse(guide) if text ~= "" and (not class or string.find(class, myclass)) and (not race or string.find(race,myrace)) then local _, _, action, quest, tag = string.find(text,"^(%a) ([^|]*)(.*)") assert(actiontypes[action], "Unknown action: "..text) - quest = string.trim(quest) + quest = TourGuide.trim(quest) if not (action == "A" or action =="C" or action =="T") then quest = quest.."@"..uniqueid.."@" uniqueid = uniqueid + 1 @@ -109,7 +112,7 @@ local function StepParse(guide) end end DumpQuestDebug(accepts, turnins, completes) - if haserrors and TourGuide:IsDebugEnabled() then TourGuide:Print("This guide contains errors") end + if haserrors and TourGuide:IsDebugging() then TourGuide:Print("This guide contains errors") end return actions, quests, tags end @@ -122,7 +125,7 @@ function TourGuide:LoadGuide(name, complete) self.db.char.currentguide = self.guides[name] and name or self.guidelist[1] - self:DebugF(1, "Loading guide: %s", name) + self:Debug( string.format("Loading guide: %s", name)) self.guidechanged = true local _, _, zonename = string.find(name,"^(.*) %(.*%)$") self.zonename = zonename @@ -137,12 +140,12 @@ function TourGuide:DebugGuideSequence(dumpquests) local accepts, turnins, completes = {}, {}, {} local function DebugParse(guide) local uniqueid, haserrors = 1 - local guidet = string.split("\n", guide) + local guidet = TourGuide.split("\n", guide) for _,text in pairs(guidet) do if text ~= "" then local _, _, action, quest, tag = string.find(text,"^(%a) ([^|]*)(.*)") - if not actiontypes[action] then TourGuide:Debug(1, "Unknown action: "..text) end - quest = string.trim(quest) + if not actiontypes[action] then TourGuide:Debug( "Unknown action: "..text) end + quest = TourGuide.trim(quest) if not (action == "A" or action =="C" or action =="T") then quest = quest.."@"..uniqueid.."@" uniqueid = uniqueid + 1 @@ -154,24 +157,24 @@ function TourGuide:DebugGuideSequence(dumpquests) return haserrors end - self:Debug(1, "------ Begin Full Debug ------") + self:Debug( "------ Begin Full Debug ------") local name, lastzone = self.db.char.currentguide repeat if not self.guides[name] then - self:DebugF(1, "Cannot find guide %q", name) + self:Debug( string.format("Cannot find guide %q", name)) name, lastzone = nil, name elseif DebugParse(self.guides[name]()) then - self:DebugF(1, "Errors in guide: %s", name) - self:Debug(1, "---------------------------") + self:Debug( string.format("Errors in guide: %s", name)) + self:Debug( "---------------------------") end name, lastzone = self.nextzones[name], name until not name if dumpquests then - self:Debug(1, "------ Quest Continuity Debug ------") + self:Debug( "------ Quest Continuity Debug ------") DumpQuestDebug(accepts, turnins, completes) end - self:Debug(1, "Last zone loaded:", lastzone) - self:Debug(1, "------ End Full Debug ------") + self:Debug( "Last zone loaded:", lastzone) + self:Debug( "------ End Full Debug ------") end diff --git a/QuestTracking.lua b/QuestTracking.lua index 990366a..f9fcfe1 100644 --- a/QuestTracking.lua +++ b/QuestTracking.lua @@ -6,7 +6,7 @@ local hadquest TourGuide.TrackEvents = {"UI_INFO_MESSAGE", "CHAT_MSG_LOOT", "CHAT_MSG_SYSTEM", "QUEST_WATCH_UPDATE", "QUEST_LOG_UPDATE", "ZONE_CHANGED", "ZONE_CHANGED_INDOORS", - "MINIMAP_ZONE_CHANGED", "ZONE_CHANGED_NEW_AREA", "PLAYER_LEVEL_UP", "ADDON_LOADED", "CRAFT_SHOW"} + "MINIMAP_ZONE_CHANGED", "ZONE_CHANGED_NEW_AREA", "PLAYER_LEVEL_UP", "ADDON_LOADED", "CRAFT_SHOW", "PLAYER_DEAD"} function TourGuide:ADDON_LOADED(event, addon) @@ -21,7 +21,7 @@ end function TourGuide:PLAYER_LEVEL_UP(event, newlevel) local level = tonumber((self:GetObjectiveTag("LV"))) - self:Debug(1, "PLAYER_LEVEL_UP", newlevel, level) + self:Debug( "PLAYER_LEVEL_UP", newlevel, level) if level and newlevel >= level then self:SetTurnedIn() end end @@ -29,7 +29,7 @@ end function TourGuide:ZONE_CHANGED(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) local zonetext, subzonetext, subzonetag, action, quest = GetZoneText(), GetSubZoneText(), self:GetObjectiveTag("SZ"), self:GetObjectiveInfo() if (action == "RUN" or action == "FLY" or action == "HEARTH" or action == "BOAT") and (subzonetext == quest or subzonetext == subzonetag or zonetext == quest or zonetext == subzonetag) then - self:DebugF(1, "Detected zone change %q - %q", action, quest) + self:Debug( string.format("Detected zone change %q - %q", action, quest)) self:SetTurnedIn() end end @@ -43,7 +43,7 @@ function TourGuide:CHAT_MSG_SYSTEM(event, msg) local _, _, loc = string.find(msg,L["(.*) is now your home."]) if loc then - self:DebugF(1, "Detected setting hearth to %q", loc) + self:Debug( string.format("Detected setting hearth to %q", loc)) self.db.char.hearth = loc return action == "SETHEARTH" and loc == quest and self:SetTurnedIn() end @@ -51,7 +51,7 @@ function TourGuide:CHAT_MSG_SYSTEM(event, msg) if action == "ACCEPT" then local _, _, text = string.find(msg,L["Quest accepted: (.*)"]) if text and string.gsub(quest,L.PART_GSUB, "") == text then - self:DebugF(1, "Detected quest accept %q", quest) + self:Debug( string.format("Detected quest accept %q", quest)) return self:UpdateStatusFrame() end end @@ -61,7 +61,7 @@ function TourGuide:CHAT_MSG_SYSTEM(event, msg) local nextEntry = table.getn(self.db.char.petskills) + 1 self.db.char.petskills[nextEntry] = text if text and quest == text then - self:DebugF(1, "Detected pet skill train %q", quest) + self:Debug( string.format("Detected pet skill train %q", quest)) return self:SetTurnedIn() end end @@ -77,7 +77,7 @@ function TourGuide:QUEST_LOG_UPDATE(event) local action = self:GetObjectiveInfo() local _, logi, complete = self:GetObjectiveStatus() - self:Debug(10, "QUEST_LOG_UPDATE", action, logi, complete) + self:Debug( "QUEST_LOG_UPDATE", action, logi, complete) if (self.updatedelay and not logi) or action == "ACCEPT" or action == "COMPLETE" and complete then self:UpdateStatusFrame() end @@ -89,6 +89,12 @@ function TourGuide:QUEST_LOG_UPDATE(event) for i=1,GetNumQuestLeaderBoards(qi) do if GetQuestLogLeaderBoard(i, qi) == questtext then self:SetTurnedIn() end end + elseif action == "COMPLETE" then + local skipNext = self:GetObjectiveTag("S") + if self.db.char.skipfollowups and skipNext and QuestFrame:IsVisible() then + CloseQuest() + TourGuide:Print(L["Automatically skipping the follow-up"]) + end end end @@ -97,18 +103,26 @@ function TourGuide:CHAT_MSG_LOOT(event, msg) local action, quest = self:GetObjectiveInfo() local lootitem, lootqty = self:GetObjectiveTag("L") local _, _, itemid, name = string.find(msg,L["^You .*Hitem:(%d+).*(%[.+%])"]) - self:Debug(10, event, action, quest, lootitem, lootqty, itemid, name) + self:Debug( event, action, quest, lootitem, lootqty, itemid, name) if action == "BUY" and name and name == quest - or (action == "BUY" or action == "KILL" or action == "NOTE") and lootitem and itemid == lootitem and (GetItemCount(lootitem) + 1) >= lootqty then + or (action == "BUY" or action == "KILL" or action == "NOTE") and lootitem and itemid == lootitem and (self.GetItemCount(lootitem) + 1) >= lootqty then return self:SetTurnedIn() end end +function TourGuide:PLAYER_DEAD() + if self:GetObjectiveInfo() == "DIE" then + self:Debug( "Player has died") + self:SetTurnedIn() + end +end + + function TourGuide:UI_INFO_MESSAGE(event, msg) if msg == ERR_NEWTAXIPATH and self:GetObjectiveInfo() == "GETFLIGHTPOINT" then - self:Debug(1, "Discovered flight point") + self:Debug( "Discovered flight point") self:SetTurnedIn() end end @@ -127,7 +141,7 @@ end local orig = GetQuestReward GetQuestReward = function(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) local quest = string.gsub(GetTitleText(), "%[%d*%??%]%s", "") - TourGuide:Debug(10, "GetQuestReward", quest) + TourGuide:Debug( "GetQuestReward", quest) TourGuide:CompleteQuest(quest, true) return orig(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) diff --git a/README.md b/README.md index b37fb2b..fe07d16 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ [**Download Latest Version**](https://github.com/cralor/TourGuideVanilla/releases/latest) -Highly Recommended Downloads: [**pfQuest**](https://github.com/shagu/pfQuest/releases/latest) | [**TomTomVanilla**](https://github.com/cralor/TomTomVanilla/releases/latest) +Highly Recommended Downloads: [**pfQuest**](https://gitlab.com/shagu/pfQuest#downloads) | [**TomTomVanilla**](https://github.com/cralor/TomTomVanilla/releases/latest) + +Optional Downloads: [TourGuide_Professions](https://github.com/cralor/TourGuide_Professions/releases/latest) **Features** * Automatic detection of objective completion diff --git a/StatusFrame.lua b/StatusFrame.lua index 4fba883..2d2ad2a 100644 --- a/StatusFrame.lua +++ b/StatusFrame.lua @@ -1,28 +1,9 @@ - -local bg = { - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - edgeSize = 16, - insets = {left = 5, right = 5, top = 5, bottom = 5}, - tile = true, tileSize = 16, -} - local ICONSIZE, CHECKSIZE, GAP = 16, 16, 8 local FIXEDWIDTH = ICONSIZE + CHECKSIZE + GAP*4 - 4 local TourGuide = TourGuide local ww = WidgetWarlock - -local function GetQuadrant(frame) - local x,y = frame:GetCenter() - if not x or not y then return "BOTTOMLEFT", "BOTTOM", "LEFT" end - local hhalf = (x > UIParent:GetWidth()/2) and "RIGHT" or "LEFT" - local vhalf = (y > UIParent:GetHeight()/2) and "TOP" or "BOTTOM" - return vhalf..hhalf, vhalf, hhalf -end - - local f = CreateFrame("Button", nil, UIParent) TourGuide.statusframe = f f:SetPoint("BOTTOMRIGHT", QuestWatchFrame, "TOPRIGHT", -60, -15) @@ -30,7 +11,7 @@ f:SetHeight(24) f:SetFrameStrata("LOW") f:EnableMouse(true) f:RegisterForClicks("LeftButtonUp","RightButtonUp") -f:SetBackdrop(bg) +f:SetBackdrop(ww.TooltipBorderBG) f:SetBackdropColor(0.09, 0.09, 0.19, 0.5) f:SetBackdropBorderColor(0.5, 0.5, 0.5, 0.5) @@ -39,7 +20,7 @@ local icon = ww.SummonTexture(f, "ARTWORK", ICONSIZE, ICONSIZE, nil, "LEFT", che local text = ww.SummonFontString(f, "OVERLAY", "GameFontNormalSmall", nil, "RIGHT", -GAP-4, 0) text:SetPoint("LEFT", icon, "RIGHT", GAP-4, 0) -local item = CreateFrame("Button", nil, UIParent)--, "SecureActionButtonTemplate") +local item = CreateFrame("Button", nil, UIParent) item:SetFrameStrata("LOW") item:SetHeight(36) item:SetWidth(36) @@ -78,6 +59,11 @@ f2:SetScript("OnUpdate", function() end end) +function TourGuide:HideStatusFrameChildren() + if TourGuide.objectiveframe:IsVisible() then HideUIPanel(TourGuide.objectiveframe) end + if TourGuide.optionsframe:IsVisible() then HideUIPanel(TourGuide.optionsframe) end + if TourGuide.guidelistframe:IsVisible() then HideUIPanel(TourGuide.guidelistframe) end +end function TourGuide:PositionStatusFrame() if self.db.profile.statusframepoint then @@ -92,7 +78,7 @@ function TourGuide:PositionStatusFrame() end -function TourGuide:SetText(i) +function TourGuide:SetStatusText(i) self.current = i local action, quest = self:GetObjectiveInfo(i) local note = self:GetObjectiveTag("N") @@ -104,7 +90,7 @@ function TourGuide:SetText(i) text:SetAlpha(0) elapsed = 0 f2:SetWidth(f:GetWidth()) - f2anchor = select(3, GetQuadrant(f)) + f2anchor = self.select(3, self.GetQuadrant(f)) f2:ClearAllPoints() f2:SetPoint(f2anchor, f, f2anchor, 0, 0) f2:SetAlpha(1) @@ -130,11 +116,11 @@ end local lastmapped, lastmappedaction, tex, uitem function TourGuide:UpdateStatusFrame() - self:Debug(1, "UpdateStatusFrame", self.current) + self:Debug( "UpdateStatusFrame", self.current) if self.updatedelay then local _, logi = self:GetObjectiveStatus(self.updatedelay) - self:Debug(1, "Delayed update", self.updatedelay, logi) + self:Debug( "Delayed update", self.updatedelay, logi) if logi then return end end @@ -147,9 +133,11 @@ function TourGuide:UpdateStatusFrame() local action, name, quest = self:GetObjectiveInfo(i) local turnedin, logi, complete = self:GetObjectiveStatus(i) local note, useitem, optional, prereq, lootitem, lootqty = self:GetObjectiveTag("N", i), self:GetObjectiveTag("U", i), self:GetObjectiveTag("O", i), self:GetObjectiveTag("PRE", i), self:GetObjectiveTag("L", i) - self:Debug(11, "UpdateStatusFrame", i, action, name, note, logi, complete, turnedin, quest, useitem, optional, lootitem, lootqty, lootitem and GetItemCount(lootitem) or 0) + self:Debug( "UpdateStatusFrame", i, action, name, note, logi, complete, turnedin, quest, useitem, optional, lootitem, lootqty, lootitem and self.GetItemCount(lootitem) or 0) + local level = tonumber((self:GetObjectiveTag("LV", i))) + local needlevel = level and level > UnitLevel("player") local hasuseitem = useitem and self:FindBagSlot(useitem) - local haslootitem = lootitem and GetItemCount(lootitem) >= lootqty + local haslootitem = lootitem and self.GetItemCount(lootitem) >= lootqty local prereqturnedin = prereq and self.turnedin[prereq] -- Test for completed objectives and mark them done @@ -165,7 +153,7 @@ function TourGuide:UpdateStatusFrame() if quest and questtext then local qi = self:GetQuestLogIndexByName(quest) for lbi=1,GetNumQuestLeaderBoards(qi) do - self:Debug(1, quest, questtext, qi, GetQuestLogLeaderBoard(lbi, qi)) + self:Debug( quest, questtext, qi, GetQuestLogLeaderBoard(lbi, qi)) if GetQuestLogLeaderBoard(lbi, qi) == questtext then return self:SetTurnedIn(i, true) end end end @@ -178,6 +166,7 @@ function TourGuide:UpdateStatusFrame() elseif action == "TURNIN" then incomplete = not optional or logi elseif action == "COMPLETE" then incomplete = not complete and (not optional or logi) elseif action == "NOTE" or action == "KILL" then incomplete = not optional or haslootitem + elseif action == "GRIND" then incomplete = needlevel else incomplete = not logi end if incomplete then nextstep = i end @@ -201,13 +190,13 @@ function TourGuide:UpdateStatusFrame() if not nextstep then return end - self:SetText(nextstep) + self:SetStatusText(nextstep) self.current = nextstep local action, quest, fullquest = self:GetObjectiveInfo(nextstep) local turnedin, logi, complete = self:GetObjectiveStatus(nextstep) local note, useitem, optional, qid = self:GetObjectiveTag("N", nextstep), self:GetObjectiveTag("U", nextstep), self:GetObjectiveTag("O", nextstep), self:GetObjectiveTag("QID", nextstep) local zonename = self:GetObjectiveTag("Z", nextstep) or self.zonename - self:DebugF(1, "Progressing to objective \"%s %s\"", action, quest) + self:Debug( string.format("Progressing to objective \"%s %s\"", action, quest)) -- Mapping if (TomTom or Cartographer_Waypoints) and (lastmapped ~= quest or lastmappedaction ~= action) then @@ -224,7 +213,7 @@ function TourGuide:UpdateStatusFrame() text:SetAlpha(0) elapsed = 0 f2:SetWidth(f:GetWidth()) - f2anchor = select(3, GetQuadrant(f)) + f2anchor = self.select(3, self.GetQuadrant(f)) f2:ClearAllPoints() f2:SetPoint(f2anchor, f, f2anchor, 0, 0) f2:SetAlpha(1) @@ -239,10 +228,10 @@ function TourGuide:UpdateStatusFrame() if not f2:IsVisible() then f:SetWidth(FIXEDWIDTH + text:GetWidth()) end newsize = FIXEDWIDTH + text:GetWidth() - tex = useitem and select(9, GetItemInfo(tonumber(useitem))) + tex = useitem and self.select(9, GetItemInfo(tonumber(useitem))) uitem = useitem item.uitem = tex and uitem or nil - if InCombatLockdown() then self:RegisterEvent("PLAYER_REGEN_ENABLED") + if UnitAffectingCombat("player") then self:RegisterEvent("PLAYER_REGEN_ENABLED") else self:PLAYER_REGEN_ENABLED() end self:UpdateOHPanel() @@ -252,13 +241,12 @@ end function TourGuide:PLAYER_REGEN_ENABLED() if tex then itemicon:SetTexture(tex) - -- SetAttribute applies only to SecureFrames, not in Vanilla yet... - --item:SetAttribute("type1", "item") - --item:SetAttribute("item1", "item:"..uitem) item:Show() tex = nil else item:Hide() end - self:UnregisterEvent("PLAYER_REGEN_ENABLED") + if self:IsEventRegistered("PLAYER_REGEN_ENABLED") then + self:UnregisterEvent("PLAYER_REGEN_ENABLED") + end end @@ -271,16 +259,21 @@ f:SetScript("OnClick", function() if TourGuide.objectiveframe:IsVisible() then HideUIPanel(TourGuide.objectiveframe) else - local quad, vhalf, hhalf = GetQuadrant(self) + local quad, vhalf, hhalf = TourGuide.GetQuadrant(self) local anchpoint = (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf TourGuide.objectiveframe:ClearAllPoints() TourGuide.objectiveframe:SetPoint(quad, self, anchpoint) ShowUIPanel(TourGuide.objectiveframe) end else - local i = TourGuide:GetQuestLogIndexByName() - if i then SelectQuestLogEntry(i) end - ShowUIPanel(QuestLogFrame) + if QuestLogFrame:IsVisible() or (EQL3_QuestLogFrame and EQL3_QuestLogFrame:IsVisible()) then + HideUIPanel(QuestLogFrame) + HideUIPanel(EQL3_QuestLogFrame) + else + local i = TourGuide:GetQuestLogIndexByName() + if i then SelectQuestLogEntry(i) end + ShowUIPanel(QuestLogFrame) + end end end end) @@ -291,53 +284,50 @@ check:SetScript("OnClick", function(self, btn) TourGuide:SetTurnedIn() end) item:SetScript("OnClick", function() if TourGuide:GetObjectiveInfo() == "USE" then TourGuide:SetTurnedIn() end - if item.uitem then UseContainerItem(TourGuide:FindBagSlot(item.uitem)) end + if item.uitem then + local bag, slot = TourGuide:FindBagSlot(item.uitem) + if bag and slot then UseContainerItem(bag, slot) else TourGuide:Print("Item not found") end + end end) local function ShowTooltip() local self = this local tip = TourGuide:GetObjectiveTag("N") - if not tip then return end - - GameTooltip:SetOwner(self, "ANCHOR_NONE") - local quad, vhalf, hhalf = GetQuadrant(self) - local anchpoint = (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf - TourGuide:Debug(11, "Setting tooltip anchor", anchpoint, quad, hhalf, vhalf) - GameTooltip:SetPoint(quad, self, anchpoint) - GameTooltip:SetText(tip, nil, nil, nil, nil, true) + if not tip or tip == "" then return end + tip = tostring(tip) + local quad, vhalf, hhalf = TourGuide.GetQuadrant(self) + --local anchpoint = (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf + local anchpoint = "ANCHOR_TOP"..hhalf + TourGuide:Debug( "Setting tooltip anchor", anchpoint) + GameTooltip:SetOwner(self, anchpoint) + GameTooltip:SetText(tip,nil,nil,nil,nil,1) + GameTooltip:Show() end - -f:SetScript("OnLeave", function() GameTooltip:Hide() end) -f:SetScript("OnEnter", ShowTooltip) - - -local function GetUIParentAnchor(frame) - local w, h, x, y = UIParent:GetWidth(), UIParent:GetHeight(), frame:GetCenter() - local hhalf, vhalf = (x > w/2) and "RIGHT" or "LEFT", (y > h/2) and "TOP" or "BOTTOM" - local dx = hhalf == "RIGHT" and math.floor(frame:GetRight() + 0.5) - w or math.floor(frame:GetLeft() + 0.5) - local dy = vhalf == "TOP" and math.floor(frame:GetTop() + 0.5) - h or math.floor(frame:GetBottom() + 0.5) - return vhalf..hhalf, dx, dy +local function HideTooltip() + if GameTooltip:IsOwned(this) then + GameTooltip:Hide() + end end +f:SetScript("OnLeave", HideTooltip) +f:SetScript("OnEnter", ShowTooltip) f:RegisterForDrag("LeftButton") f:SetMovable(true) f:SetClampedToScreen(true) f:SetScript("OnDragStart", function() local frame = this - if TourGuide.objectiveframe:IsVisible() then HideUIPanel(TourGuide.objectiveframe) end + TourGuide:HideStatusFrameChildren() GameTooltip:Hide() frame:StartMoving() end) f:SetScript("OnDragStop", function() local frame = this frame:StopMovingOrSizing() - TourGuide:Debug(1, "Status frame moved", GetUIParentAnchor(frame)) local _ TourGuide.db.profile.statusframepoint, _, _, TourGuide.db.profile.statusframex, TourGuide.db.profile.statusframey = frame:GetPoint() - --TourGuide.db.profile.statusframepoint, TourGuide.db.profile.statusframex, TourGuide.db.profile.statusframey = GetUIParentAnchor(frame) frame:ClearAllPoints() frame:SetPoint(TourGuide.db.profile.statusframepoint, TourGuide.db.profile.statusframex, TourGuide.db.profile.statusframey) ShowTooltip(frame) @@ -351,8 +341,10 @@ item:SetScript("OnDragStart", function() local frame = this frame:StartMoving() item:SetScript("OnDragStop", function() local frame = this frame:StopMovingOrSizing() - TourGuide:Debug(1, "Item frame moved", GetUIParentAnchor(frame)) local _ TourGuide.db.profile.itemframepoint, _, _, TourGuide.db.profile.itemframex, TourGuide.db.profile.itemframey = frame:GetPoint() - --TourGuide.db.profile.itemframepoint, TourGuide.db.profile.itemframex, TourGuide.db.profile.itemframey = GetUIParentAnchor(frame) +end) + +f:SetScript("OnHide", function() + TourGuide:HideStatusFrameChildren() end) diff --git a/TourGuide.lua b/TourGuide.lua index 1f29219..97bc1ea 100644 --- a/TourGuide.lua +++ b/TourGuide.lua @@ -1,14 +1,17 @@ - -local myfaction = UnitFactionGroup("player") local L = TOURGUIDE_LOCALE TOURGUIDE_LOCALE = nil -TourGuide = DongleStub("Dongle-1.0"):New("TourGuide") +TourGuide = AceLibrary("AceAddon-2.0"):new("AceConsole-2.0", "AceDB-2.0", "AceDebug-2.0", "AceEvent-2.0", "AceHook-2.1", "FuBarPlugin-2.0") +local D = AceLibrary("Dewdrop-2.0") +local DF = AceLibrary("Deformat-2.0") +local T = AceLibrary("Tablet-2.0") +local gratuity = AceLibrary("Gratuity-2.0") TourGuide.guides = {} TourGuide.guidelist = {} TourGuide.nextzones = {} TourGuide.Locale = L +TourGuide.myfaction = UnitFactionGroup("player") TourGuide.icons = setmetatable({ ACCEPT = "Interface\\GossipFrame\\AvailableQuestIcon", @@ -18,23 +21,174 @@ TourGuide.icons = setmetatable({ RUN = "Interface\\Icons\\Ability_Tracking", MAP = "Interface\\Icons\\Ability_Spy", FLY = "Interface\\Icons\\Ability_Rogue_Sprint", - SETHEARTH = "Interface\\AddOns\\TourGuide\\resting.tga", + SETHEARTH = "Interface\\AddOns\\TourGuideVanilla\\media\\resting.tga", HEARTH = "Interface\\Icons\\INV_Misc_Rune_01", NOTE = "Interface\\Icons\\INV_Misc_Note_01", + GRIND = "Interface\\Icons\\INV_Stone_GrindingStone_05", USE = "Interface\\Icons\\INV_Misc_Bag_08", BUY = "Interface\\Icons\\INV_Misc_Coin_01", BOAT = "Interface\\Icons\\Ability_Druid_AquaticForm", GETFLIGHTPOINT = "Interface\\Icons\\Ability_Hunter_EagleEye", PET = "Interface\\Icons\\Ability_Hunter_BeastCall02", + DIE = "Interface\\AddOns\\TourGuideVanilla\\media\\dead.tga", }, {__index = function() return "Interface\\Icons\\INV_Misc_QuestionMark" end}) +local defaults = { + debug = false, + hearth = UNKNOWN, + turnins = {}, + cachedturnins = {}, + trackquests = true, + completion = {}, + currentguide = "No Guide", + mapquestgivers = true, + mapnotecoords = true, + showstatusframe = true, + showuseitem = true, + showuseitemcomplete = true, + skipfollowups = true, + petskills = {}, +} + +local options = { + type = "group", + handler = TourGuide, + args = + { + TrackQuests = + { + name = "Auto Track", + desc = L["Automatically Track Quests"], + type = "toggle", + get = function() return TourGuide.db.char.trackquests end, + set = function(newValue) + TourGuide.db.char.trackquests = newValue + TourGuide.optionsframe.qtrack:SetChecked(TourGuide.db.char.trackquests) + end, + order = 1, + }, + SkipFollowUps = + { + name = "Auto Skip Followups", + desc = L["Automatically skip suggested follow-ups"], + type = "toggle", + get = function() return TourGuide.db.char.skipfollowups end, + set = function(newValue) + TourGuide.db.char.skipfollowups = newValue + TourGuide.optionsframe.qskipfollowups:SetChecked(TourGuide.db.char.skipfollowups) + end, + order = 2, + }, + StatusFrame = + { + name = "Toggle Status", + desc = "Show/Hide Status Frame", + type = "toggle", + get = function() return TourGuide.statusframe:IsVisible() end, + set = "OnClick", + order = 3, + }, + }, +} + +--------- +-- FuBar +--------- +TourGuide.hasIcon = [[Interface\QuestFrame\UI-QuestLog-BookIcon]] +TourGuide.title = "TourGuide" +TourGuide.defaultMinimapPosition = 215 +TourGuide.defaultPosition = "CENTER" +TourGuide.cannotDetachTooltip = true +TourGuide.tooltipHiddenWhenEmpty = false +TourGuide.hideWithoutStandby = true +TourGuide.independentProfile = true + +function TourGuide:OnInitialize() -- ADDON_LOADED (1) + self:RegisterDB("TourGuideAlphaDB") + self:RegisterDefaults("char", defaults ) + self:RegisterChatCommand( { "/tg", "/tourguide" }, options ) + self.OnMenuRequest = options + if not FuBar then + self.OnMenuRequest.args.hide.guiName = L["Hide minimap icon"] + self.OnMenuRequest.args.hide.desc = L["Hide minimap icon"] + end + self:MigrateDongle() + self.cachedturnins = self.db.char.cachedturnins + if self.myfaction == nil then + self:RegisterEvent("PLAYER_ENTERING_WORLD") + end + self:PositionStatusFrame() + self:CreateConfigPanel() +end + +function TourGuide:OnEnable() -- PLAYER_LOGIN (2) + local _, title = GetAddOnInfo("TourGuide") + local author, version = GetAddOnMetadata("TourGuide", "Author"), GetAddOnMetadata("TourGuide", "Version") + + if self.db.char.debug then self:SetDebugging(true) + else self:SetDebugging(false) end + + if self.db.char.currentguide == "No Guide" and UnitLevel("player") == 1 and UnitXP("player") == 0 then + local startguides = {Orc = "Durotar (1-12)", Troll = "Durotar (1-12)", Tauren = "Mulgore (1-12)", Undead = "Tirisfal Glades (1-12)", + Dwarf = "Dun Morogh (1-11)", Gnome = "Dun Morogh (1-11)", Human = "Elwynn Forest (1-12)", NightElf = "Teldrassil (1-12)"} + self.db.char.currentguide = startguides[self.select(2, UnitRace("player"))] or self.guidelist[1] + end + + if self.myfaction == nil then + self:RegisterEvent("PLAYER_ENTERING_WORLD") + else + self.db.char.currentguide = self.db.char.currentguide or self.guidelist[1] + self:LoadGuide(self.db.char.currentguide) + self.initializeDone = true + for _,event in pairs(self.TrackEvents) do self:RegisterEvent(event) end + self:RegisterEvent("QUEST_COMPLETE", "UpdateStatusFrame") + self:RegisterEvent("QUEST_DETAIL", "UpdateStatusFrame") + self.TrackEvents = nil + self:UpdateStatusFrame() + self.enableDone = true + end +end + +function TourGuide:MigrateDongle() + if type(TourGuideAlphaDB.char)=="table" then + for name, data in pairs(TourGuideAlphaDB.char) do + local name = string.gsub(name,"-", "of") + TourGuideAlphaDB.chars = TourGuideAlphaDB.chars or {} + TourGuideAlphaDB.chars[name] = data + end + TourGuideAlphaDB.char = nil + if TourGuideAlphaDB.profiles then TourGuideAlphaDB.profiles = {} end + if TourGuideAlphaDB.profileKeys then TourGuideAlphaDB.profileKeys = nil end + end +end + +function TourGuide:OnDisable() + self:UnregisterAllEvents() +end + +function TourGuide:OnTooltipUpdate() + local hint = "\nClick to show/hide the Status\nRight-click for Options" + T:SetHint(hint) +end + +function TourGuide:OnTextUpdate() + self:SetText("TourGuide") +end + +function TourGuide:OnClick() + if TourGuide.statusframe:IsVisible() then + HideUIPanel(TourGuide.statusframe) + else + ShowUIPanel(TourGuide.statusframe) + end +end function TourGuide:PLAYER_ENTERING_WORLD() - myfaction = UnitFactionGroup("player") + self.myfaction = UnitFactionGroup("player") -- load static guides for i,t in ipairs(self.deferguides) do local name,nextzone,faction,sequencefunc = t[1], t[2], t[3], t[4] - if faction == myfaction or faction == "Both" then + if faction == self.myfaction or faction == "Both" then self.guides[name] = sequencefunc self.nextzones[name] = nextzone table.insert(self.guidelist, name) @@ -58,68 +212,13 @@ function TourGuide:PLAYER_ENTERING_WORLD() self:UnregisterEvent("PLAYER_ENTERING_WORLD") end -function TourGuide:Initialize() - self.db = self:InitializeDB("TourGuideAlphaDB", { - char = { - debug = false, - hearth = "Unknown", - turnedin = {}, - turnins = {}, - cachedturnins = {}, - trackquests = true, - completion = {}, - currentguide = "No Guide", - mapquestgivers = true, - mapnotecoords = true, - showstatusframe = true, - showuseitem = true, - showuseitemcomplete = true, - petskills = {}, - }, - }) - if self.db.char.turnedin then self.db.char.turnedin = nil end -- Purge old table if present - self.cachedturnins = self.db.char.cachedturnins - - if myfaction == nil then - self:RegisterEvent("PLAYER_ENTERING_WORLD") - else - self.db.char.currentguide = self.db.char.currentguide or self.guidelist[1] - self:LoadGuide(self.db.char.currentguide) - self.initializeDone = true - end - self:PositionStatusFrame() -end - - -function TourGuide:Enable() - local _, title = GetAddOnInfo("TourGuide") - local author, version = GetAddOnMetadata("TourGuide", "Author"), GetAddOnMetadata("TourGuide", "Version") - - if TourGuide.db.char.debug then - self:EnableDebug(1) - else - self:EnableDebug() - end - - if myfaction == nil then - self:RegisterEvent("PLAYER_ENTERING_WORLD") - else - for _,event in pairs(self.TrackEvents) do self:RegisterEvent(event) end - self:RegisterEvent("QUEST_COMPLETE", "UpdateStatusFrame") - self:RegisterEvent("QUEST_DETAIL", "UpdateStatusFrame") - self.TrackEvents = nil - self:UpdateStatusFrame() - self.enableDone = true - end -end - function TourGuide:RegisterGuide(name, nextzone, faction, sequencefunc) - if myfaction == nil then + if self.myfaction == nil then self.deferguides = self.deferguides or {} table.insert(self.deferguides,{name,nextzone,faction,sequencefunc}) else - if faction ~= "Both" then if faction ~= myfaction then return end end + if faction ~= "Both" then if faction ~= self.myfaction then return end end self.guides[name] = sequencefunc self.nextzones[name] = nextzone table.insert(self.guidelist, name) @@ -129,7 +228,7 @@ end function TourGuide:LoadNextGuide() self:LoadGuide(self.nextzones[self.db.char.currentguide] or "No Guide", true) - self:UpdateGuidesPanel() + self:UpdateGuideListPanel() return true end @@ -152,11 +251,8 @@ function TourGuide:GetQuestDetails(name) if not name then return end local i = self:GetQuestLogIndexByName(name) if not i or i < 1 then return end - - --local complete = i and select(7, GetQuestLogTitle(i)) == 1 local _, _, _, _, _, isComplete = GetQuestLogTitle(i) local complete = i and isComplete == 1 - --local complete = i and select(5, GetQuestLogTitle(i)) == 1 return i, complete end @@ -169,6 +265,7 @@ function TourGuide:FindBagSlot(itemid) if item and string.find(item, "item:"..itemid) then return bag, slot end end end + return false end @@ -197,7 +294,7 @@ function TourGuide:SetTurnedIn(i, value, noupdate) if value then value = true else value = nil end -- Cleanup to minimize savedvar data self.turnedin[self.quests[i]] = value - self:DebugF(1, "Set turned in %q = %s", self.quests[i], tostring(value)) + self:Debug( string.format("Set turned in %q = %s", self.quests[i], tostring(value))) if not noupdate then self:UpdateStatusFrame() else self.updatedelay = i end end @@ -205,7 +302,7 @@ end function TourGuide:CompleteQuest(name, noupdate) if not self.current then - self:DebugF(1, "Cannot complete %q, no guide loaded", name) + self:Debug( string.format("Cannot complete %q, no guide loaded", name)) return end @@ -213,14 +310,14 @@ function TourGuide:CompleteQuest(name, noupdate) local action, quest while not action do action, quest = self:GetObjectiveInfo(i) - self:DebugF(1, "Action %q Quest %q",action,quest) + self:Debug( string.format("Action %q Quest %q",action,quest)) if action == "TURNIN" and not self:GetObjectiveStatus(i) and name == string.gsub(quest,L.PART_GSUB, "") then - self:DebugF(1, "Saving quest turnin %q", quest) + self:Debug( string.format("Saving quest turnin %q", quest)) return self:SetTurnedIn(i, true, noupdate) end i = i + 1 end - self:DebugF(1, "Quest %q not found!", name) + self:Debug( string.format("Quest %q not found!", name)) end @@ -228,15 +325,95 @@ end -- Utility Functions -- --------------------------------- +function TourGuide.select(index,...) + assert(tonumber(index) or index=="#","Invalid argument #1 to select(). Usage: select(\"#\"|int,...)") + if index == "#" then + return tonumber(arg.n) or 0 + end + for i=1,index-1 do + table.remove(arg,1) + end + return unpack(arg) +end + +function TourGuide.join(delimiter, list) + assert(type(delimiter)=="string" and type(list)=="table", "Invalid arguments to join(). Usage: string.join(delimiter, list)") + local len = getn(list) + if len == 0 then + return "" + end + local s = list[1] + for i = 2, len do + s = string.format("%s%s%s",s,delimiter,list[i]) + end + return s +end + +function TourGuide.trim(s) + return (string.gsub(s,"^%s*(.-)%s*$", "%1")) +end + +function TourGuide.split(...) -- separator, string + assert(arg.n>0 and type(arg[1])=="string", "Invalid arguments to split(). Usage: string.split([separator], subject)") + local sep, s = arg[1], arg[2] + if s == nil then + s, sep = sep, ":" + end + local fields = {} + local pattern = string.format("([^%s]+)", sep) + string.gsub(s, pattern, function(c) fields[table.getn(fields)+1] = c end) + return fields +end + +function TourGuide.modf(f) + if f > 0 then + return math.floor(f), math.mod(f,1) + end + return math.ceil(f), math.mod(f,1) +end + +function TourGuide.GetItemCount(itemID) + local itemInfoTexture = TourGuide.select(9, GetItemInfo(itemID)) + if itemInfoTexture == nil then return 0 end + local totalItemCount = 0 + for i=0,NUM_BAG_FRAMES do + local numSlots = GetContainerNumSlots(i) + if numSlots > 0 then + for k=1,numSlots do + local itemTexture, itemCount = GetContainerItemInfo(i, k) + if itemInfoTexture == itemTexture then + totalItemCount = totalItemCount + itemCount + end + end + end + end + return totalItemCount +end + function TourGuide.ColorGradient(perc) if perc >= 1 then return 0,1,0 elseif perc <= 0 then return 1,0,0 end - local segment, relperc = math.modf(perc*2) - local r1, g1, b1, r2, g2, b2 = select((segment*3)+1, 1,0,0, 1,0.82,0, 0,1,0) + local segment, relperc = TourGuide.modf(perc*2) + local r1, g1, b1, r2, g2, b2 = TourGuide.select((segment*3)+1, 1,0,0, 1,0.82,0, 0,1,0) return r1 + (r2-r1)*relperc, g1 + (g2-g1)*relperc, b1 + (b2-b1)*relperc end +function TourGuide.GetQuadrant(frame) + local x,y = frame:GetCenter() + if not x or not y then return "BOTTOMLEFT", "BOTTOM", "LEFT" end + local hhalf = (x > UIParent:GetWidth()/2) and "RIGHT" or "LEFT" + local vhalf = (y > UIParent:GetHeight()/2) and "TOP" or "BOTTOM" + return vhalf..hhalf, vhalf, hhalf +end + +function TourGuide.GetUIParentAnchor(frame) + local w, h, x, y = UIParent:GetWidth(), UIParent:GetHeight(), frame:GetCenter() + local hhalf, vhalf = (x > w/2) and "RIGHT" or "LEFT", (y > h/2) and "TOP" or "BOTTOM" + local dx = hhalf == "RIGHT" and math.floor(frame:GetRight() + 0.5) - w or math.floor(frame:GetLeft() + 0.5) + local dy = vhalf == "TOP" and math.floor(frame:GetTop() + 0.5) - h or math.floor(frame:GetBottom() + 0.5) + return vhalf..hhalf, dx, dy +end function TourGuide:DumpLoc() if IsShiftKeyDown() then diff --git a/TourGuide.toc b/TourGuide.toc deleted file mode 100644 index c576243..0000000 --- a/TourGuide.toc +++ /dev/null @@ -1,34 +0,0 @@ -## Interface: 11200 - -## Title: TourGuide -## Notes: Powerleveling guide framework -## Author: Tekkub Stoutwrithe -## Credits: Road-block, rsheep, cralor -## Version: 1.0 -## X-Category: Quest - -## SavedVariables: TourGuideAlphaDB - -## OptionalDeps: Dongle, TomTom, pfQuest, LightHeaded - -lua52to50compat.lua -Dongle.lua -WidgetWarlock.lua - -Locale.lua -TourGuide.lua -Parser.lua -Mapping.lua -StatusFrame.lua -Config.lua -OptionsFrame.lua -GuideListFrame.lua -ObjectivesFrame.lua -UnlistedQuest.lua -QuestTracking.lua - -NilGuide.lua - -TourGuide_Alliance\Guides.xml -TourGuide_Horde\Guides.xml -TourGuide_Professions\Guides.xml diff --git a/TourGuideVanilla.toc b/TourGuideVanilla.toc new file mode 100644 index 0000000..8d3962a --- /dev/null +++ b/TourGuideVanilla.toc @@ -0,0 +1,47 @@ +## Interface: 11200 + +## Title: TourGuide |cff7fff7f -Ace2-|r +## Notes: Powerleveling guide framework +## Author: cralor +## Version: 1.0 +## X-Credits: Tekkub, Road-block, rsheep +## X-Category: Quest +## X-Website: https://github.com/cralor/TourGuideVanilla + +## SavedVariables: TourGuideAlphaDB + +## OptionalDeps: TomTom, pfQuest, Ace2, FuBar, FuBarPlugin-2.0, Deformat, TabletLib, DewdropLib, GratuityLib + +# libs Core +libs\AceLibrary\AceLibrary.lua +libs\AceOO-2.0\AceOO-2.0.lua +libs\AceConsole-2.0\AceConsole-2.0.lua +libs\AceEvent-2.0\AceEvent-2.0.lua +libs\AceDebug-2.0\AceDebug-2.0.lua +libs\AceDB-2.0\AceDB-2.0.lua +libs\AceAddon-2.0\AceAddon-2.0.lua +libs\AceHook-2.1\AceHook-2.1.lua +# libs Extra +libs\Deformat-2.0\Deformat-2.0.lua +libs\Gratuity-2.0\Gratuity-2.0.lua +libs\Dewdrop-2.0\Dewdrop-2.0.lua +libs\Tablet-2.0\Tablet-2.0.lua +libs\FuBarPlugin-2.0\FuBarPlugin-2.0.lua + +# Addon files +Locale.lua +TourGuide.lua +WidgetWarlock.lua +Parser.lua +Mapping.lua +StatusFrame.lua +OptionsFrame.lua +GuideListFrame.lua +ObjectivesFrame.lua +UnlistedQuest.lua +QuestTracking.lua + +NilGuide.lua + +TourGuide_Alliance\Guides.xml +TourGuide_Horde\Guides.xml diff --git a/TourGuide_Alliance/01_11_Dun_Morogh.lua b/TourGuide_Alliance/01_11_Dun_Morogh.lua index 6f2d352..9b3887b 100644 --- a/TourGuide_Alliance/01_11_Dun_Morogh.lua +++ b/TourGuide_Alliance/01_11_Dun_Morogh.lua @@ -50,7 +50,7 @@ C Beginnings |N|(27.5,80)| |C|Warlock| |QID|1599| T Beginnings |C|Warlock| |QID|1599| T Bring Back the Mug |QID|3365| -C A Refugee's Quandary |N|At the troll camps to the southwest. Bucket (26.3, 79.3), Chest (22.8, 78), Box (20.9, 76.1)| |QID|3361| +C A Refugee's Quandary |N|At the troll camps to the southwest. Bucket (26.3, 79.3), Chest (22.8, 78), Box (20.9, 76.1)| |QID|3361| C The Troll Cave |QID|182| T The Troll Cave |QID|182| A The Stolen Journal |QID|218| diff --git a/TourGuide_Alliance/01_12_Elwynn_Forest.lua b/TourGuide_Alliance/01_12_Elwynn_Forest.lua index 4aa50c0..7e5c370 100644 --- a/TourGuide_Alliance/01_12_Elwynn_Forest.lua +++ b/TourGuide_Alliance/01_12_Elwynn_Forest.lua @@ -85,7 +85,7 @@ A Note to William |QID|107| T Back to Billy |QID|84| A Goldtooth |QID|87| -C Goldtooth |N|Deep inside the Fargodeep Mine (41.60, 77.90). Take the upper entrance to the mine then head left in the first room.| |QID|87| +C Goldtooth |N|Deep inside the Fargodeep Mine (41.60, 77.90). Take the upper entrance to the mine then head left in the first room.| |QID|87| C Gold Dust Exchange |QID|47| C Kobold Candles |QID|60| C The Fargodeep Mine |QID|62| @@ -112,11 +112,11 @@ A Red Linen Goods |N|To the northeast at Eastvale Logging Camp (79.5, 68.7)| |QI A A Bundle of Trouble |QID|5545| N Kill any bears you find -C The Jasperlode Mine |N|To the northwest (60.5, 50.1). You only need to run in halfway or so, then hightail it out!| |QID|76| +C The Jasperlode Mine |N|To the northwest (60.5, 50.1). You only need to run in halfway or so, then hightail it out!| |QID|76| T Find the Lost Guards |N|Northwest on the southren shore of Stone Cairn Lake (72.7, 60.3)| |QID|37| A Discover Rolf's Fate |QID|45| -T Discover Rolf's Fate |N|On the east shore of Stone Cairn Lake in the middle of a murloc village (79.8, 55.6). Approach from the east for best results.| |QID|45| +T Discover Rolf's Fate |N|On the east shore of Stone Cairn Lake in the middle of a murloc village (79.8, 55.6). Approach from the east for best results.| |QID|45| A Report to Thomas |QID|71| C A Bundle of Trouble |N|North of the camp| |QID|5545| @@ -166,7 +166,7 @@ A Continue to Stormwind |R|Human| |QID|6281| F Stormwind City T Shipment to Stormwind |N|In the Trade District (56,64)| |Z|Stormwind City| |QID|61| -A Wine Shop Advert |N|In front of the Apothecary. He won't have a '!' because this is a "Low Level" quest... but hey, free EXP| |QID|332| +A Wine Shop Advert |N|In front of the Apothecary. He won't have a '!' because this is a "Low Level" quest... but hey, free EXP| |QID|332| A Harlan Needs a Resupply |N|North of Weller's Arsenal (55.10, 56.22)| |Z|Stormwind City| |QID|333| h Stormwind City T Wine Shop Advert |N|Outside the Trade District along the Canals (52.41, 67.65)| |Z|Stormwind City| |QID|332| @@ -272,5 +272,5 @@ T In Defense of the King's Lands |QID|263| T The Trogg Threat |QID|267| T Stormpike's Delivery |N|Follow the road north to Algaz Station (24.7, 18.3)| |Z|Loch Modan| |QID|353| -R Darkshore |N|Follow the road to the Wetlands, then west to Menethil Harbor. Take the north boat to Auberdine. Don't forget to get the flight point in Menethil Harbor. Fun trick: if you die, run all the way to the boat as a ghost, you can spirit heal on the other side. Gravyard is northeast of Auberdine (41.91, 36.45)| |Z|Darkshore| +R Darkshore |N|Follow the road to the Wetlands, then west to Menethil Harbor. Take the north boat to Auberdine. Don't forget to get the flight point in Menethil Harbor. Fun trick: if you die, run all the way to the boat as a ghost, you can spirit heal on the other side. Gravyard is northeast of Auberdine (41.91, 36.45)| |Z|Darkshore| ]] diff --git a/TourGuide_Alliance/01_12_Teldrassil.lua b/TourGuide_Alliance/01_12_Teldrassil.lua index ec8e0ca..f72acff 100644 --- a/TourGuide_Alliance/01_12_Teldrassil.lua +++ b/TourGuide_Alliance/01_12_Teldrassil.lua @@ -69,7 +69,7 @@ A Gnarlpine Corruption |QID|476| C The Emerald Dreamcatcher |N|East of the questgiver in a house is a Dresser (68.01, 59.66)| |QID|2438| T Zenn's Bidding |QID|488| A Seek Redemption! |N|In front of the tower at Dolanaar| |QID|489| -N Keep an eye out for Fel Cones |N|Needed for "Seek Redemption!". Found at the bases of trees| +N Keep an eye out for Fel Cones |N|Needed for "Seek Redemption!". Found at the bases of trees| T Denalan's Earth |N|South at the lake (60.90, 68.49)| |QID|997| A Timberling Seeds |QID|918| @@ -89,29 +89,29 @@ A Ferocitas the Dream Eater |QID|2459| C Seek Redemption! |QID|489| T Seek Redemption! |N|East at Zenn Foulhoof| |QID|489| -C Ferocitas the Dream Eater |N|North of Starbreeze. Kill Ferocitas (69.37, 53.41) and open the necklace he drops for the jewel.| |U|8049| |QID|2459| +C Ferocitas the Dream Eater |N|North of Starbreeze. Kill Ferocitas (69.37, 53.41) and open the necklace he drops for the jewel.| |U|8049| |QID|2459| -C Twisted Hatred |N|North of Dolanaar (51.23, 50.79). You can also wait until you're 10 to do this.| |QID|932| +C Twisted Hatred |N|North of Dolanaar (51.23, 50.79). You can also wait until you're 10 to do this.| |QID|932| T Ferocitas the Dream Eater |QID|2459| T Twisted Hatred |QID|932| A The Road to Darnassus |N|From a mounted patrol on the road west of town| |QID|487| C The Road to Darnassus |N|Outside of Ban'ethil Hollow (46,52), south of the road where the NPC partrols.| |QID|487| -N Rune of Nesting |N|Head down into the Ban'ethil Barrow Den (44.41, 57.87). At the first set of bridges take the left bridge (44.40, 60.67).| |QID|483| |QO|Rune of Nesting: 1/1| +N Rune of Nesting |N|Head down into the Ban'ethil Barrow Den (44.41, 57.87). At the first set of bridges take the left bridge (44.40, 60.67).| |QID|483| |QO|Rune of Nesting: 1/1| N Black Feather Quill |N|Across the other bridge (43.70, 61.22).| |QID|483| |QO|Black Feather Quill: 1/1| A The Sleeping Druid |N|Jump down and take the passage to the west, run across the bridge to Oben Rageclaw (44.94, 61,60).| |QID|2541| N Sapphire of Sky |N|Jump down and go south (44.70, 62.44).| |QID|483| |QO|Sapphire of Sky: 1/1| -C The Relics of Wakening |N|The Raven Claw Talisman is north in the next room (the one with Rageclaw's body). Run up onto the center pilar, take the bridge to the right and follow the path around to the left (45.65, 57.44).| |QID|483| +C The Relics of Wakening |N|The Raven Claw Talisman is north in the next room (the one with Rageclaw's body). Run up onto the center pilar, take the bridge to the right and follow the path around to the left (45.65, 57.44).| |QID|483| C The Sleeping Druid |N|If the item didn't drop while you are collecting the relics, skip this and "Druid of the Claw"| |QID|2541| T The Sleeping Druid |QID|2541| A Druid of the Claw |QID|2561| -C Druid of the Claw |N|Back in the room to the north. Kill him, target his body and use the charm.| |U|8149| |QID|2561| +C Druid of the Claw |N|Back in the room to the north. Kill him, target his body and use the charm.| |U|8149| |QID|2561| T Druid of the Claw |QID|2561| C Crown of the Earth (Part 4) |N|Moonwell at the Pools of Arlithrien (42.42, 67.08)| |U|5621| |QID|933| -T Crown of the Earth (Part 4) |N|Back at Dolanaar, you can die and spirit rez. Down by the moonwell.| |QID|933| +T Crown of the Earth (Part 4) |N|Back at Dolanaar, you can die and spirit rez. Down by the moonwell.| |QID|933| A Crown of the Earth (Part 5) |QID|7383| T The Relics of Wakening |QID|483| A Ursal the Mauler |QID|486| @@ -172,7 +172,7 @@ T Mist |QID|938| T The Enchanted Glade |QID|937| A Teldrassil |QID|940| -C Tears of the Moon |N|North-northeast, near the edge of the tree. Spawns in a few different spots (39,25) (41,25) (47,25)| |QID|2518| +C Tears of the Moon |N|North-northeast, near the edge of the tree. Spawns in a few different spots (39,25) (41,25) (47,25)| |QID|2518| T Tumors |N|Back in Cenarion Enclave, Darnassus| |QID|923| A Return to Denalan |QID|2498| @@ -207,4 +207,3 @@ T The Bounty of Teldrassil |N|At the hippogryph master| |R|Night Elf| |QID|6341| A Flight to Auberdine |R|Night Elf| |QID|6342| ]] end) - diff --git a/TourGuide_Alliance/12_17_Darkshore.lua b/TourGuide_Alliance/12_17_Darkshore.lua index ffe8134..3918654 100644 --- a/TourGuide_Alliance/12_17_Darkshore.lua +++ b/TourGuide_Alliance/12_17_Darkshore.lua @@ -13,43 +13,43 @@ T Return to Nessa |R|Night Elf| |QID|6343| F Auberdine |R|Night Elf| A For Love Eternal |N|On the docks, west of Inn| |QID|963| -A Buzzbox 827 |N|Inn, upstairs| |QID|983| |NORAF| -A Bashal'Aran (Part 1) |QID|954| |NORAF| |N|Big house at north| -A Tools of the Highborne |QID|958| |NORAF| +A Buzzbox 827 |N|Inn, upstairs| |QID|983| +A Bashal'Aran (Part 1) |QID|954| |N|Big house at north| +A Tools of the Highborne |QID|958| A Plagued Lands |N|Southeast over the bridge| |QID|2118| A How Big a Threat? (Part 1) |N|Inside| |QID|984| C Washed Ashore (Part 1) |N|On the beach, south of Auberdine (36.42, 50.86)| |QID|3524| -C Buzzbox 827 |QID|983| |NORAF| -T Buzzbox 827 |QID|983| |NORAF| |N|Near the Auberdine flight platform (36.66, 46.25)| -A Buzzbox 411 |QID|1001| |NORAF| +C Buzzbox 827 |QID|983| +T Buzzbox 827 |QID|983| |N|Near the Auberdine flight platform (36.66, 46.25)| +A Buzzbox 411 |QID|1001| T Washed Ashore (Part 1) |QID|3524| A Washed Ashore (Part 2) |QID|4681| -C Washed Ashore (Part 2) |QID|4681| |N|Run out onto the dock and jump off the south pier (the one that goes to Menethil). Find the turtle northeast of the small island, underwater (31.82, 46.28)| -C Buzzbox 411 |QID|1001| |NORAF| |N|Threshers are in the sea around the pier| +C Washed Ashore (Part 2) |QID|4681| |N|Run out onto the dock and jump off the south pier (the one that goes to Menethil). Find the turtle northeast of the small island, underwater (31.82, 46.28)| +C Buzzbox 411 |QID|1001| |N|Threshers are in the sea around the pier| T Washed Ashore (Part 2) |QID|4681| A The Red Crystal |QID|4811| -T Buzzbox 411 |QID|1001| |NORAF| |N|Follow the road north out of Auberdine. When you reach Bashal'Aran, head northwest above the cove. Buzzbox is on the beach north of the cove (41.96, 28.62)| -A Buzzbox 323 |QID|1002| |NORAF| +T Buzzbox 411 |QID|1001| |N|Follow the road north out of Auberdine. When you reach Bashal'Aran, head northwest above the cove. Buzzbox is on the beach north of the cove (41.96, 28.62)| +A Buzzbox 323 |QID|1002| -A Beached Sea Creature (Part 1) |QID|4723| |N|You will see many Beached Sea Creatures and Beached Sea Turtles on the beach while doing Darkshore. Gather them all if possible! The first is south of the Buzzbox 411 at the cove (42.05, 32.02)| +A Beached Sea Creature (Part 1) |QID|4723| |N|You will see many Beached Sea Creatures and Beached Sea Turtles on the beach while doing Darkshore. Gather them all if possible! The first is south of the Buzzbox 411 at the cove (42.05, 32.02)| -T Bashal'Aran (Part 1) |QID|954| |NORAF| |N|Grind your way south to Bashal'Aran (44.18, 36.30)| -A Bashal'Aran (Part 2) |QID|955| |NORAF| -C Bashal'Aran (Part 2) |QID|955| |NORAF| -T Bashal'Aran (Part 2) |QID|955| |NORAF| -A Bashal'Aran (Part 3) |QID|956| |NORAF| -C Bashal'Aran (Part 3) |QID|956| |NORAF| -T Bashal'Aran (Part 3) |QID|956| |NORAF| -A Bashal'Aran (Part 4) |QID|957| |NORAF| +T Bashal'Aran (Part 1) |QID|954| |N|Grind your way south to Bashal'Aran (44.18, 36.30)| +A Bashal'Aran (Part 2) |QID|955| +C Bashal'Aran (Part 2) |QID|955| +T Bashal'Aran (Part 2) |QID|955| +A Bashal'Aran (Part 3) |QID|956| +C Bashal'Aran (Part 3) |QID|956| +T Bashal'Aran (Part 3) |QID|956| +A Bashal'Aran (Part 4) |QID|957| C The Red Crystal |N|In the mountains east of Auberdine (47.32, 48.70)| |QID|4811| C How Big a Threat? (Part 1) |N|West at the furblog camp by the road south of Auberdine (40.35, 53.46)| |QID|984| A The Fall of Ameth'Aran |N|Follow the road south to Twilight Vale| |QID|953| C The Fall of Ameth'Aran |N|Look for the big white tablets on the ground (43.31, 58.70) (42.65, 63.13)| |QID|953| C For Love Eternal |N|Patrols around near the southern tablet| |QID|963| -C Bashal'Aran (Part 4) |QID|957| |NORAF| |N|Also near the southern tablet in a gazebo (42.37, 61.85)| -C Tools of the Highborne |QID|958| |NORAF| +C Bashal'Aran (Part 4) |QID|957| |N|Also near the southern tablet in a gazebo (42.37, 61.85)| +C Tools of the Highborne |QID|958| C Plagued Lands |N|Find a Rabid Thistle Bear (try to the east) and use the "hope" on it.| |U|7586| |QID|2118| T The Fall of Ameth'Aran |QID|953| @@ -59,8 +59,8 @@ A Cleansing of the Infected |QID|2138| T How Big a Threat? (Part 1) |QID|984| A How Big a Threat? (Part 2) |QID|985| A Thundris Windweaver |QID|4761| -A The Tower of Althalaxx (Part 1) |N|Upstairs| |QID|965| |NORAF| -T Tools of the Highborne |N|In the lodge to the northwest| |QID|958| |NORAF| +A The Tower of Althalaxx (Part 1) |N|Upstairs| |QID|965| +T Tools of the Highborne |N|In the lodge to the northwest| |QID|958| T Thundris Windweaver |QID|4761| A The Cliffspring River |QID|4762| T The Red Crystal |QID|4811| @@ -70,16 +70,15 @@ A Cave Mushrooms |QID|947| T For Love Eternal |N|Out on the pier| |QID|963| T Beached Sea Creature (Part 1) |QID|4723| -T Bashal'Aran (Part 4) |QID|957| |NORAF| |N|Follow the road north out of Auberdine| +T Bashal'Aran (Part 4) |QID|957| |N|Follow the road north out of Auberdine| C Cleansing of the Infected |N|To the northeast, there are many more bears south of the road than north of it.| |QID|2138| A Beached Sea Turtle (Part 1) |N|North on the coast (44.17, 20.65)| |QID|4725| -C Buzzbox 323 |QID|1002| |NORAF| |N|Both Moonstalkers and Moonstalker Runts drop this item.| +C Buzzbox 323 |QID|1002| |N|Both Moonstalkers and Moonstalker Runts drop this item.| -C The Cliffspring River |N|Follow the road east to the Cliffspring River. Go under the bridge into the water at waterfall to get the sample| |U|12350| |QID|4762| -T Buzzbox 323 |QID|1002| |NORAF| |N|Buzzbox is on the other side of the bridge, left side| -A Buzzbox 525 |QID|1003| |NORAF| -A Beached Sea Turtle (Part 3) |N|To the northwest on the shore (53.15, 18.13)| |QID|4727| |RAF| -C Cave Mushrooms |N|Follow the east shore of the river south to the waterfall. Enter the cave above waterfall (55,33).| |QID|947| +C The Cliffspring River |N|Follow the road east to the Cliffspring River. Go under the bridge into the water at waterfall to get the sample| |U|12350| |QID|4762| +T Buzzbox 323 |QID|1002| |N|Buzzbox is on the other side of the bridge, left side| +A Buzzbox 525 |QID|1003| +C Cave Mushrooms |N|Follow the east shore of the river south to the waterfall. Enter the cave above waterfall (55,33).| |QID|947| T As Water Cascades |N|Back at the red crystal (47.32, 48.70)| |QID|4812| A The Fragments Within |QID|4813| C How Big a Threat? (Part 2) |N|Grind your way west across the road to Blackwood camp| |QID|985| @@ -87,8 +86,8 @@ A Beached Sea Turtle (Part 2) |N|To the west on the shore (37.14, 62.17)| |QID|4 A Beached Sea Creature (Part 2) |N|Further south down the shore (36.05, 70.78)| |QID|4728| T Grove of the Ancients |N|East at Grove of the Ancients (43,76), of course| |R|Night Elf| |QID|952| -C Buzzbox 525 |QID|1003| |NORAF| |N|Head south across the road from the Grove of the Ancients, kill Grizzled Thistle Bears| -T Buzzbox 525 |QID|1003| |NORAF| |N|Back on the road, near the path to the digsite, opposite the white bear Grimclaw (41.42, 80.59).| +C Buzzbox 525 |QID|1003| |N|Head south across the road from the Grove of the Ancients, kill Grizzled Thistle Bears| +T Buzzbox 525 |QID|1003| |N|Back on the road, near the path to the digsite, opposite the white bear Grimclaw (41.42, 80.59).| A Beached Sea Creature (Part 3) |N|On the shore northwest of the dig site (32.75, 80.69)| |QID|4730| H Auberdine @@ -96,8 +95,7 @@ T Beached Sea Creature (Part 2) |QID|4728| T Beached Sea Creature (Part 3) |QID|4730| T Beached Sea Turtle (Part 1) |QID|4725| T Beached Sea Turtle (Part 2) |QID|4722| -T Beached Sea Turtle (Part 3) |QID|4727| |RAF| -A Fruit of the Sea |N|On the shore below the flightpath| |QID|1138| |NORAF| +A Fruit of the Sea |N|On the shore below the flightpath| |QID|1138| A WANTED: Murkdeep! |N|The Wanted poster infront of Inn| |QID|4740| T Cave Mushrooms |QID|947| A Onu |QID|948| @@ -111,18 +109,18 @@ T How Big a Threat? (Part 2) |QID|985| N Fill the [Empty Cleansing Bowl] in the Moonwell |U|12346| |L|12347| C The Blackwood Corrupted |N|Blackwood camps are east of Bashal'Aran. Gather grain (50.65, 34.99), nuts (51.83, 33.56) and fruit (52.87, 33.38). Use the cleansing bowl near the bonfire. Kill Xabraxxis when he spawns.| |U|12347| |QID|4763| -C Tharnariun's Hope |N|To south between the two camps, up the hill is a cave (51.55, 37.50). Kill the adds, run away and reset the Den Mother. Return and kill her.| |QID|2139| -T The Tower of Althalaxx (Part 1) |QID|965| |NORAF| |N|Go north, over the river until you are at the road to ruins. the NPC is next to two rocks (55.00, 24.89).| -A The Tower of Althalaxx (Part 2) |QID|966| |NORAF| -C The Tower of Althalaxx (Part 2) |QID|966| |NORAF| |N|Mobs around the tower, not inside| -T The Tower of Althalaxx (Part 2) |QID|966| |NORAF| -A The Tower of Althalaxx (Part 3) |QID|967| |NORAF| -A Beached Sea Turtle (Part 3) |N|To the northwest on the shore (53.15, 18.13)| |QID|4727| |NORAF| -C Fruit of the Sea |QID|1138| |NORAF| |N|Kill Encrusted Tide Crawlers between here and the river to the west, or Reef Crawlers west of the river. DOES NOT DROP from Raging Reef Crawlers to the north.| +C Tharnariun's Hope |N|To south between the two camps, up the hill is a cave (51.55, 37.50). Kill the adds, run away and reset the Den Mother. Return and kill her.| |QID|2139| +T The Tower of Althalaxx (Part 1) |QID|965| |N|Go north, over the river until you are at the road to ruins. the NPC is next to two rocks (55.00, 24.89).| +A The Tower of Althalaxx (Part 2) |QID|966| +C The Tower of Althalaxx (Part 2) |QID|966| |N|Mobs around the tower, not inside| +T The Tower of Althalaxx (Part 2) |QID|966| +A The Tower of Althalaxx (Part 3) |QID|967| +A Beached Sea Turtle (Part 3) |N|To the northwest on the shore (53.15, 18.13)| |QID|4727| +C Fruit of the Sea |QID|1138| |N|Kill Encrusted Tide Crawlers between here and the river to the west, or Reef Crawlers west of the river. DOES NOT DROP from Raging Reef Crawlers to the north.| H Auberdine -T Beached Sea Turtle (Part 3) |QID|4727| |NORAF| -T Fruit of the Sea |QID|1138| |NORAF| +T Beached Sea Turtle (Part 3) |QID|4727| +T Fruit of the Sea |QID|1138| T The Blackwood Corrupted |QID|4763| T Tharnariun's Hope |QID|2139| ]] diff --git a/TourGuide_Alliance/17_18_Loch_Modan.lua b/TourGuide_Alliance/17_18_Loch_Modan.lua index fc38f08..7d2ceb0 100644 --- a/TourGuide_Alliance/17_18_Loch_Modan.lua +++ b/TourGuide_Alliance/17_18_Loch_Modan.lua @@ -1,54 +1,54 @@ TourGuide:RegisterGuide("Loch Modan (17-18)", "Redridge Mountains (18-20)", "Alliance", function() return [[ -F Loch Modan |N|Boat to Stormwind, then fly there!| |R|Dwarf, Gnome| |NORAF| -R Loch Modan |N|Boat to Stormwind, take the tram to IF, then run to Loch. Make sure you grab flight points along the way.| |R|Human, Night Elf, Draenei| |NORAF| -R Algaz Station |N|In the north of Loch Modan.| |NORAF| +F Loch Modan |N|Boat to Stormwind, then fly there!| |R|Dwarf, Gnome| +R Loch Modan |N|Boat to Stormwind, take the tram to IF, then run to Loch. Make sure you grab flight points along the way.| |R|Human, Night Elf, Draenei| +R Algaz Station |N|In the north of Loch Modan.| -A Filthy Paws |N|Upstairs, inside the tower| |QID|307| |NORAF| -A Stormpike's Order |QID|1338| |NORAF| -C Filthy Paws |N|In the mine east of the tower| |QID|307| |NORAF| -T Filthy Paws |QID|307| |NORAF| -R Thelsamar |NORAF| -A Ironband's Excavation |N|Last house| |QID|436| |NORAF| -T Stout to Kadrell |QID|414| |O| |NORAF| +A Filthy Paws |N|Upstairs, inside the tower| |QID|307| +A Stormpike's Order |QID|1338| +C Filthy Paws |N|In the mine east of the tower| |QID|307| +T Filthy Paws |QID|307| +R Thelsamar +A Ironband's Excavation |N|Last house| |QID|436| +T Stout to Kadrell |QID|414| |O| -T Ironband's Excavation |N|Along the south shore of the loch (64.9, 66.6)| |QID|436| |NORAF| -A Gathering Idols |QID|297| |NORAF| -A Excavation Progress Report |QID|298| |NORAF| -C Gathering Idols |QID|297| |NORAF| -T Gathering Idols |QID|297| |NORAF| +T Ironband's Excavation |N|Along the south shore of the loch (64.9, 66.6)| |QID|436| +A Gathering Idols |QID|297| +A Excavation Progress Report |QID|298| +C Gathering Idols |QID|297| +T Gathering Idols |QID|297| -R The Farstrider Lodge |N|East of Excavation site (83.8, 62.4)| |NORAF| -A Crocolisk Hunting |QID|385| |NORAF| -A A Hunter's Boast |QID|257| |NORAF| -C A Hunter's Boast |QID|257| |NORAF| -T A Hunter's Boast |QID|257| |NORAF| -A A Hunter's Challenge |QID|258| |NORAF| -C A Hunter's Challenge |QID|258| |NORAF| -T A Hunter's Challenge |QID|258| |NORAF| -A Vyrin's Revenge (Part 1) |QID|271| |NORAF| -A Bingles' Missing Supplies |N|The NPC can be found at the easternmost shore of The Loch (63.5, 47.9)| |QID|2038| |NORAF| -C Crocolisk Hunting |N|Lots on the islands (55,55) (54,40)| |QID|385| |NORAF| -C Bingles' Missing Supplies |N|The supplies are scattered around northernmost islands. Blastencapper (54.21, 26.61), Hammer (51.78, 24.09), Screwdriver (48.37, 20.50), Wrench (48.73, 30.10)| |QID|2038| |NORAF| +R The Farstrider Lodge |N|East of Excavation site (83.8, 62.4)| +A Crocolisk Hunting |QID|385| +A A Hunter's Boast |QID|257| +C A Hunter's Boast |QID|257| +T A Hunter's Boast |QID|257| +A A Hunter's Challenge |QID|258| +C A Hunter's Challenge |QID|258| +T A Hunter's Challenge |QID|258| +A Vyrin's Revenge (Part 1) |QID|271| +A Bingles' Missing Supplies |N|The NPC can be found at the easternmost shore of The Loch (63.5, 47.9)| |QID|2038| +C Crocolisk Hunting |N|Lots on the islands (55,55) (54,40)| |QID|385| +C Bingles' Missing Supplies |N|The supplies are scattered around northernmost islands. Blastencapper (54.21, 26.61), Hammer (51.78, 24.09), Screwdriver (48.37, 20.50), Wrench (48.73, 30.10)| |QID|2038| -A A Dark Threat Looms (Part 1) |N|Middle of the Stonewrought Dam| |QID|250| |NORAF| -T A Dark Threat Looms (Part 1) |N|Barrel at the east of dam| |QID|250| |NORAF| -A A Dark Threat Looms (Part 2) |QID|199| |NORAF| -T A Dark Threat Looms (Part 2) |QID|199| |NORAF| +A A Dark Threat Looms (Part 1) |N|Middle of the Stonewrought Dam| |QID|250| +T A Dark Threat Looms (Part 1) |N|Barrel at the east of dam| |QID|250| +A A Dark Threat Looms (Part 2) |QID|199| +T A Dark Threat Looms (Part 2) |QID|199| -T Excavation Progress Report |N|Back at Thelsamar| |QID|298| |NORAF| -A Report to Ironforge |QID|301| |NORAF| -C Vyrin's Revenge (Part 1) |N|Cave top of the mountain south of Thelsamar (39.7, 66.6)| |QID|271| |NORAF| +T Excavation Progress Report |N|Back at Thelsamar| |QID|298| +A Report to Ironforge |QID|301| +C Vyrin's Revenge (Part 1) |N|Cave top of the mountain south of Thelsamar (39.7, 66.6)| |QID|271| -T Crocolisk Hunting |N|Back at Farstrider Lodge| |QID|385| |NORAF| -T Vyrin's Revenge (Part 1) |QID|271| |NORAF| -A Vyrin's Revenge (Part 2) |QID|531| |NORAF| -T Vyrin's Revenge (Part 2) |QID|531| |NORAF| -T Bingles' Missing Supplies |N|Remember Bingles at the shore?| |QID|2038| |NORAF| +T Crocolisk Hunting |N|Back at Farstrider Lodge| |QID|385| +T Vyrin's Revenge (Part 1) |QID|271| +A Vyrin's Revenge (Part 2) |QID|531| +T Vyrin's Revenge (Part 2) |QID|531| +T Bingles' Missing Supplies |N|Remember Bingles at the shore?| |QID|2038| -F City of Ironforge |R|Human, Dwarf, Gnome| |NORAF| -R City of Ironforge |R|Night Elf, Draenei| |NORAF| -f Grab flight point |R|Night Elf, Draenei| |NORAF| -T Report to Ironforge |N|Hall of Explorers. Skip the follow-up.| |QID|301| |NORAF| +F City of Ironforge |R|Human, Dwarf, Gnome| +R City of Ironforge |R|Night Elf, Draenei| +f Grab flight point |R|Night Elf, Draenei| +T Report to Ironforge |N|Hall of Explorers. Skip the follow-up.| |QID|301| ]] end) diff --git a/TourGuide_Alliance/18_20_Redridge_Mountains.lua b/TourGuide_Alliance/18_20_Redridge_Mountains.lua index 9863ae5..4c69d1c 100644 --- a/TourGuide_Alliance/18_20_Redridge_Mountains.lua +++ b/TourGuide_Alliance/18_20_Redridge_Mountains.lua @@ -1,69 +1,69 @@ TourGuide:RegisterGuide("Redridge Mountains (18-20)", "Darkshore (20-21)", "Alliance", function() return [[ -R Stormwind City |N|Use the Deeprun Tram| |NORAF| -T Stormpike's Order |QID|1338| |NORAF| -f Grab flight point |R|Dwarf, Night Elf, Gnome, Draenei| |NORAF| +R Stormwind City |N|Use the Deeprun Tram| +T Stormpike's Order |QID|1338| +f Grab flight point |R|Dwarf, Night Elf, Gnome, Draenei| -R Redridge Mountains |NORAF| -A Encroaching Gnolls |QID|244| |NORAF| -T Encroaching Gnolls |QID|244| |NORAF| |N|Follow the road east until you are at the bridge| -A Assessing the Threat |QID|246| |NORAF| -A The Lost Tools |QID|125| |NORAF| -A Hilary's Necklace |N|On the dock| |QID|3741| |NORAF| -A Selling Fish |N|Man next to the shed| |QID|127| |NORAF| -A A Free Lunch |N|Inside the inn| |QID|129| |NORAF| -A Redridge Goulash |N|West of Lakeshire, inside the big house| |QID|92| |NORAF| +R Redridge Mountains +A Encroaching Gnolls |QID|244| +T Encroaching Gnolls |QID|244| |N|Follow the road east until you are at the bridge| +A Assessing the Threat |QID|246| +A The Lost Tools |QID|125| +A Hilary's Necklace |N|On the dock| |QID|3741| +A Selling Fish |N|Man next to the shed| |QID|127| +A A Free Lunch |N|Inside the inn| |QID|129| +A Redridge Goulash |N|West of Lakeshire, inside the big house| |QID|92| -K Great Goretusks |N|West of the lake, need [Great Goretusk Snout] x5 for "Redridge Goulash"| |L|2296 5| |NORAF| -C Hilary's Necklace |N|Glinting Mud, underwater| |QID|3741| |NORAF| -C The Lost Tools |N|Box is east of the bridge, underwater| |QID|125| |NORAF| -C Selling Fish |N|Kill the murlocks| |QID|127| |NORAF| -K Murlocs |N|Need [Murloc Fin] x8 for later| |L|1468 8| |NORAF| +K Great Goretusks |N|West of the lake, need [Great Goretusk Snout] x5 for "Redridge Goulash"| |L|2296 5| +C Hilary's Necklace |N|Glinting Mud, underwater| |QID|3741| +C The Lost Tools |N|Box is east of the bridge, underwater| |QID|125| +C Selling Fish |N|Kill the murlocks| |QID|127| +K Murlocs |N|Need [Murloc Fin] x8 for later| |L|1468 8| -T The Lost Tools |QID|125| |NORAF| -A The Everstill Bridge |QID|89| |NORAF| -T Hilary's Necklace |QID|3741| |NORAF| -T Selling Fish |QID|127| |NORAF| -T A Free Lunch |N|Return to the guard at Three Corners, South of Lakeshire| |QID|129| |NORAF| -A Visit the Herbalist |QID|130| |NORAF| +T The Lost Tools |QID|125| +A The Everstill Bridge |QID|89| +T Hilary's Necklace |QID|3741| +T Selling Fish |QID|127| +T A Free Lunch |N|Return to the guard at Three Corners, South of Lakeshire| |QID|129| +A Visit the Herbalist |QID|130| -K Spiders |N|Around the Three Corners. Need [Crisp Spider Meat] x5 for "Redridge Goulash"| |L|1081 5| |NORAF| -C Assessing the Threat |QID|246| |NORAF| -C Redridge Goulash |N|Condors are east from the gnoll camps| |L|1080 5| |QID|92| |NORAF| +K Spiders |N|Around the Three Corners. Need [Crisp Spider Meat] x5 for "Redridge Goulash"| |L|1081 5| +C Assessing the Threat |QID|246| +C Redridge Goulash |N|Condors are east from the gnoll camps| |L|1080 5| |QID|92| -T Assessing the Threat |N|South of Lakeshire, next the the bridge| |QID|246| |NORAF| -T Visit the Herbalist |N|West of Lakeshire| |QID|130| |NORAF| -A Delivering Daffodils |QID|131| |NORAF| -T Redridge Goulash |QID|92| |NORAF| -T Delivering Daffodils |QID|131| |NORAF| |N|Inside the inn| -C The Everstill Bridge |QID|89| |NORAF| |N|Camps are north of Lakeshire| -T The Everstill Bridge |QID|89| |NORAF| +T Assessing the Threat |N|South of Lakeshire, next the the bridge| |QID|246| +T Visit the Herbalist |N|West of Lakeshire| |QID|130| +A Delivering Daffodils |QID|131| +T Redridge Goulash |QID|92| +T Delivering Daffodils |QID|131| |N|Inside the inn| +C The Everstill Bridge |QID|89| |N|Camps are north of Lakeshire| +T The Everstill Bridge |QID|89| -A Murloc Poachers |N|Man next to the shed. This quest requires level 20!| |QID|150| |NORAF| -C Murloc Poachers |N|Northern part of Lake Everstill (40,45) (56,53)| |QID|150| |NORAF| -T Murloc Poachers |QID|150| |NORAF| +A Murloc Poachers |N|Man next to the shed. This quest requires level 20!| |QID|150| +C Murloc Poachers |N|Northern part of Lake Everstill (40,45) (56,53)| |QID|150| +T Murloc Poachers |QID|150| -A Messenger to Stormwind (Part 1) |N|In the town hall| |QID|120| |NORAF| -F Stormwind City |NORAF| -T Messenger to Stormwind (Part 1) |N|At the entrance to Stormwind| |QID|120| |NORAF| -A Messenger to Stormwind (Part 2) |QID|121| |NORAF| +A Messenger to Stormwind (Part 1) |N|In the town hall| |QID|120| +F Stormwind City +T Messenger to Stormwind (Part 1) |N|At the entrance to Stormwind| |QID|120| +A Messenger to Stormwind (Part 2) |QID|121| -A The Tome of Valor (Part 1) |N|You must Speak with Duthorian Rall in the Cathedral of Light and he will give you the Tome of Valor, use it to start the quest.| |C|Paladin| |QID|1649| |NORAF| -T The Tome of Valor (Part 1) |C|Paladin| |QID|1649| |NORAF| -A The Tome of Valor (Part 2) |C|Paladin| |QID|1650| |NORAF| +A The Tome of Valor (Part 1) |N|You must Speak with Duthorian Rall in the Cathedral of Light and he will give you the Tome of Valor, use it to start the quest.| |C|Paladin| |QID|1649| +T The Tome of Valor (Part 1) |C|Paladin| |QID|1649| +A The Tome of Valor (Part 2) |C|Paladin| |QID|1650| -F Sentinel Hill |C|Paladin| |NORAF| -T The Tome of Valor (Part 2) |N|Southwest of Moonbrook (41.3, 88.5)| |C|Paladin| |Z|Westfall| |QID|1650| |NORAF| -A The Tome of Valor (Part 3) |C|Paladin| |QID|1651| |NORAF| -C The Tome of Valor (Part 3) |C|Paladin| |QID|1651| |NORAF| -T The Tome of Valor (Part 3) |C|Paladin| |QID|1651| |NORAF| -A The Tome of Valor (Part 4) |C|Paladin| |QID|1652| |NORAF| -T The Tome of Valor (Part 4) |N|Back in the Cathedral of Light, Stormwind| |C|Paladin| |QID|1652| |NORAF| +F Sentinel Hill |C|Paladin| +T The Tome of Valor (Part 2) |N|Southwest of Moonbrook (41.3, 88.5)| |C|Paladin| |Z|Westfall| |QID|1650| +A The Tome of Valor (Part 3) |C|Paladin| |QID|1651| +C The Tome of Valor (Part 3) |C|Paladin| |QID|1651| +T The Tome of Valor (Part 3) |C|Paladin| |QID|1651| +A The Tome of Valor (Part 4) |C|Paladin| |QID|1652| +T The Tome of Valor (Part 4) |N|Back in the Cathedral of Light, Stormwind| |C|Paladin| |QID|1652| A Devourer of Souls |N|Mage Quarter in Stormwind| |C|Warlock| |QID|1716| b Theramore Isle |N|Fly to Menethil Harbor, take the boat on the south dock| |C|Warlock| T Devourer of Souls |N|Follow the road west into the Barrens, then north (49.3, 57.1) | |C|Warlock| |Z|The Barrens| |QID|1716| A Heartswood |C|Warlock| |QID|1738| -f Get the Ratchet flightpoint |N|You'll need it later. Take the road north, then east before the Crossroads (62,37)| |C|Warlock| |Z|The Barrens| +f Get the Ratchet flightpoint |N|You'll need it later. Take the road north, then east before the Crossroads (62,37)| |C|Warlock| |Z|The Barrens| ]] end) diff --git a/TourGuide_Alliance/20_21_Darkshore.lua b/TourGuide_Alliance/20_21_Darkshore.lua index 1b8113b..e8e6781 100644 --- a/TourGuide_Alliance/20_21_Darkshore.lua +++ b/TourGuide_Alliance/20_21_Darkshore.lua @@ -14,13 +14,13 @@ A Therylune's Escape |N|Escort near the Twilight Tome, southeast from it at the C Therylune's Escape |QID|945| T The Absent Minded Prospector (Part 1) |N|West from The Twilight Camp at Remtravel's Excavation| |QID|729| -A The Absent Minded Prospector (Part 2) |N|Pain in the ass escort around the excavation. You might want to just abandon this (and skip the follow-up quests in the upcoming guides).| |QID|731| +A The Absent Minded Prospector (Part 2) |N|Pain in the ass escort around the excavation. You might want to just abandon this (and skip the follow-up quests in the upcoming guides).| |QID|731| C The Absent Minded Prospector (Part 2) |QID|731| -C WANTED: Murkdeep! |N|Follow the shore north to the murloc camp (36.56, 76.65). Clear the camp, after that there's 3 waves of murlocs. Murkdeep is in the last wave.| |QID|4740| +C WANTED: Murkdeep! |N|Follow the shore north to the murloc camp (36.56, 76.65). Clear the camp, after that there's 3 waves of murlocs. Murkdeep is in the last wave.| |QID|4740| T Return to Onu |N|Back at Grove of the Ancients| |QID|950| -A The Sleeper Has Awakened |N|Escort quest| |QID|5321| |NORAF| -N Get his horn |N|In the box near where he was sleeping| |L|13536| |NORAF| -C The Sleeper Has Awakened |N|Escort him south. Use the [Horn of Awakening] when he falls asleep.| |U|13536| |QID|5321| |NORAF| +A The Sleeper Has Awakened |N|Escort quest| |QID|5321| +N Get his horn |N|In the box near where he was sleeping| |L|13536| +C The Sleeper Has Awakened |N|Escort him south. Use the [Horn of Awakening] when he falls asleep.| |U|13536| |QID|5321| ]] end) diff --git a/TourGuide_Alliance/20_21_Darkshore_Draenei.lua b/TourGuide_Alliance/20_21_Darkshore_Draenei.lua deleted file mode 100644 index f6fdcc5..0000000 --- a/TourGuide_Alliance/20_21_Darkshore_Draenei.lua +++ /dev/null @@ -1,64 +0,0 @@ - -TourGuide:RegisterGuide("Darkshore (20-21 Draenei)", "Ashenvale (22-24)", "Alliance", function() -return [[ -b Darkshore |QID|9633| -A Journey to Astranaar |QID|1133| - -h Auberdine |QID|4723| -A Washed Ashore (Part 1) |QID|3524| -A Fruit of the Sea |QID|1138| -A Cave Mushrooms |QID|947| -T The Way to Auberdine |QID|9633| -A The Tower of Althalaxx (Part 1) |QID|965| - -C Washed Ashore (Part 1) |N|On the beach, south of Auberdine (36.42, 50.86)| |QID|3524| -T Washed Ashore (Part 1) |QID|3524| -A Washed Ashore (Part 2) |QID|4681| -C Washed Ashore (Part 2) |N|Run out onto the dock and jump off the south pier (the one that goes to Menethil). Find the turtle northeast of the small island, underwater (31.82, 46.28)| |QID|4681| -T Washed Ashore (Part 2) |QID|4681| - -C Cave Mushrooms |N|Follow the road out of town to the northeast. When you reach the river, follow it south. Mushrooms are in the cave behind the waterfall (54,32).| |QID|947| - -T The Tower of Althalaxx (Part 1) |N|Follow the road east to the tower (55.00, 24.89)| |QID|965| -A The Tower of Althalaxx (Part 2) |QID|966| -C The Tower of Althalaxx (Part 2) |N|Mobs around the tower, not inside| |QID|966| -T The Tower of Althalaxx (Part 2) |QID|966| -A The Tower of Althalaxx (Part 3) |QID|967| -A Beached Sea Turtle (Part 1) |N|To the northwest on the shore (53.15, 18.13)| |QID|4727| -C Fruit of the Sea |N|Kill Encrusted Tide Crawlers between here and the river to the west, or Reef Crawlers west of the river. DOES NOT DROP from Raging Reef Crawlers to the north.| |QID|1138| - -A Beached Sea Turtle (Part 2) |N|Continue down the coast towards Auberdine (44.17, 20.65)| |QID|4725| -A Beached Sea Creature |N|Continue down the coast towards Auberdine (42,32)| |QID|4723| - -H Auberdine |QID|4723| -T Fruit of the Sea |QID|1138| -T Cave Mushrooms |QID|947| -T Beached Sea Creature |QID|4723| -T Beached Sea Turtle (Part 1) |QID|4727| -T Beached Sea Turtle (Part 2) |QID|4725| -A Onu |QID|948| -A WANTED: Murkdeep! |QID|4740| -A The Absent Minded Prospector (Part 1) |QID|943| -A Onward to Ashenvale |N|Northernmost building in Auberdine| |QID|10752| - -T Onu |N|South at Grove of the Ancients| |QID|948| -A The Master's Glaive |QID|944| -C The Master's Glaive |N|Southwest from Grove of the Ancients| |QID|944| -T The Master's Glaive |N|Use the [Phial of Scrying]| |U|5251| |QID|944| -A The Twilight Camp |QID|949| -T The Twilight Camp |N|Click the Twilight Tome in the middle of island| |QID|949| -A Return to Onu |QID|950| -A Therylune's Escape |N|Escort near the Twilight Tome, southeast from it at the same island (45.26, 33.75).| |QID|945| -C Therylune's Escape |QID|945| - -T The Absent Minded Prospector (Part 1) |N|West from The Twilight Camp at Remtravel's Excavation| |QID|729| -A The Absent Minded Prospector (Part 2) |N|Pain in the ass escort around the excavation. You might want to just abandon this (and skip the follow-up quests in the upcoming guides).| |QID|731| -C The Absent Minded Prospector (Part 2) |QID|731| -C WANTED: Murkdeep! |N|Follow the shore north to the murloc camp (36.56, 76.65). Clear the camp, after that there's 3 waves of murlocs. Murkdeep is in the last wave.| |QID|4740| - -T Return to Onu |N|Back at Grove of the Ancients| |QID|950| -A The Sleeper Has Awakened |N|Escort quest| |QID|5321| -N Get his horn |N|In the box near where he was sleeping| |L|13536| |QID|5321| -C The Sleeper Has Awakened |N|Escort him south. Use the [Horn of Awakening] when he falls asleep.| |U|13536| |QID|5321| -]] -end) diff --git a/TourGuide_Alliance/22_24_Ashenvale.lua b/TourGuide_Alliance/22_24_Ashenvale.lua index 18923c3..cd2d210 100644 --- a/TourGuide_Alliance/22_24_Ashenvale.lua +++ b/TourGuide_Alliance/22_24_Ashenvale.lua @@ -1,23 +1,16 @@ TourGuide:RegisterGuide("Ashenvale (22-24)", "Wetlands (25-27)", "Alliance", function() return [[ -T The Sleeper Has Awakened |QID|5321| |NORAF| |N|You need to talk to the NPC in Maestra's Post before quest completes.| -T The Tower of Althalaxx (Part 3) |QID|967| |NORAF| -A The Tower of Althalaxx (Part 4) |QID|970| |NORAF| +T The Sleeper Has Awakened |QID|5321| |N|You need to talk to the NPC in Maestra's Post before quest completes.| +T The Tower of Althalaxx (Part 3) |QID|967| +A The Tower of Althalaxx (Part 4) |QID|970| A Bathran's Hair |QID|1010| C Heartswood |N|Heartswood in Ashenvale (31.5, 31.5)| |L|6912| |C|Warlock| |QID|1738| -C The Tower of Althalaxx (Part 4) |QID|970| |NORAF| |N|Northeast of Maestra's Post at the Ruins of Ordil'Aran| -C Bathran's Hair |QID|1010| |N|North at Bathran's Haunt (31,21). Look for little brown plant bundles.| +C The Tower of Althalaxx (Part 4) |QID|970| |N|Northeast of Maestra's Post at the Ruins of Ordil'Aran| +C Bathran's Hair |QID|1010| |N|North at Bathran's Haunt (31,21). Look for little brown plant bundles.| -A The Ancient Statuette |QID|1007| |RAF| |N|NPC at the small camp south of the Zoram Strand (14.8, 31.2)| -C The Ancient Statuette |QID|1007| |RAF| |N|Follow the shoreline north until you find the statue near the small rowboat (14.20, 20.64)| -T The Ancient Statuette |QID|1007| |RAF| -A Ruuzel |QID|1009| |RAF| -C Ruuzel |QID|1009| |RAF| |N|On the island in the northwest corner of the zone. No need to kill Ruuzel if you find the Rare mob named 'Lady Vespia', she drops the same item.| -T Ruuzel |QID|1009| |RAF| - -T The Tower of Althalaxx (Part 4) |QID|970| |NORAF| -A The Tower of Althalaxx (Part 5) |QID|973| |NORAF| +T The Tower of Althalaxx (Part 4) |QID|970| +A The Tower of Althalaxx (Part 5) |QID|973| T Bathran's Hair |QID|1010| A Orendil's Cure |QID|1020| T Therylune's Escape |QID|945| @@ -27,16 +20,16 @@ A Raene's Cleansing (Part 1) |T| |QID|991| h Astranaar |T| |QID|1054| T Orendil's Cure |T| |QID|1020| A Elune's Tear |T| |QID|1033| -A The Zoram Strand |T| |QID|1008| |NORAF| +A The Zoram Strand |T| |QID|1008| -A The Ancient Statuette |QID|1007| |NORAF| |N|NPC at the small camp south of the Zoram Strand (14.8, 31.2)| +A The Ancient Statuette |QID|1007| |N|NPC at the small camp south of the Zoram Strand (14.8, 31.2)| -C The Ancient Statuette |QID|1007| |NORAF| |N|Follow the shoreline north until you find the statue near the small rowboat (14.20, 20.64)| -T The Ancient Statuette |QID|1007| |NORAF| -A Ruuzel |QID|1009| |NORAF| -C Ruuzel |QID|1009| |NORAF| |N|On the island in the northwest corner of the zone. No need to kill Ruuzel if you find the Rare mob named 'Lady Vespia', she drops the same item.| -C The Zoram Strand |QID|1008| |NORAF| -T Ruuzel |QID|1009| |NORAF| +C The Ancient Statuette |QID|1007| |N|Follow the shoreline north until you find the statue near the small rowboat (14.20, 20.64)| +T The Ancient Statuette |QID|1007| +A Ruuzel |QID|1009| +C Ruuzel |QID|1009| |N|On the island in the northwest corner of the zone. No need to kill Ruuzel if you find the Rare mob named 'Lady Vespia', she drops the same item.| +C The Zoram Strand |QID|1008| +T Ruuzel |QID|1009| T Raene's Cleansing (Part 1) |QID|991| A Raene's Cleansing (Part 2) |QID|1023| C Raene's Cleansing (Part 2) |QID|1023| |N|Kill murlocs, huzzah!| @@ -45,17 +38,17 @@ H Astranaar |QID|1054| T Raene's Cleansing (Part 2) |T| |QID|1023| A Raene's Cleansing (Part 3) |T| |QID|1024| A An Aggressive Defense |T| |QID|1025| -T The Zoram Strand |T| |QID|1008| |NORAF| +T The Zoram Strand |T| |QID|1008| C Elune's Tear |QID|1033| T Raene's Cleansing (Part 3) |QID|1024| A Raene's Cleansing (Part 4) |QID|1026| C An Aggressive Defense |QID|1025| -A Elemental Bracers |QID|1016| |N|At Silverwind Refuge| |NORAF| -K Befouled Water Elementals |QID|1016| |NORAF| |L|12220 5| |N|In the lake south of Silverwind Refuge. Need [Intact Elemental Bracers] x5 for "Elemental Bracers"| -C Elemental Bracers |QID|1016| |NORAF| |U|5456| -T Elemental Bracers |QID|1016| |NORAF| +A Elemental Bracers |QID|1016| |N|At Silverwind Refuge| +K Befouled Water Elementals |QID|1016| |L|12220 5| |N|In the lake south of Silverwind Refuge. Need [Intact Elemental Bracers] x5 for "Elemental Bracers"| +C Elemental Bracers |QID|1016| |U|5456| +T Elemental Bracers |QID|1016| T Elune's Tear |QID|1033| |T| |N|Back at Astranaar| A The Ruins of Stardust |QID|1034| |T| @@ -67,15 +60,15 @@ T The Ruins of Stardust |QID|1034| |T| A Fallen Sky Lake |QID|1035| |T| A Culling the Threat |QID|1054| |T| -C The Tower of Althalaxx (Part 5) |QID|973| |NORAF| +C The Tower of Althalaxx (Part 5) |QID|973| C Culling the Threat |QID|1054| -T The Tower of Althalaxx (Part 5) |QID|973| |NORAF| -A The Tower of Althalaxx (Part 6) |QID|1140| |NORAF| +T The Tower of Althalaxx (Part 5) |QID|973| +A The Tower of Althalaxx (Part 6) |QID|1140| -A Supplies to Auberdine |QID|976| |NORAF| |N|Escort. As with all oldworld escorts it kinda sucks a fat one. If you fail, abandon it.| -C Supplies to Auberdine |QID|976| |NORAF| -T Supplies to Auberdine |QID|976| |NORAF| |N|Back at Maestra's Post| +A Supplies to Auberdine |QID|976| |N|Escort. As with all oldworld escorts it kinda sucks a fat one. If you fail, abandon it.| +C Supplies to Auberdine |QID|976| +T Supplies to Auberdine |QID|976| |N|Back at Maestra's Post| T Culling the Threat |QID|1054| |T| ]] end) diff --git a/TourGuide_Alliance/25_27_Wetlands.lua b/TourGuide_Alliance/25_27_Wetlands.lua index f3821da..33684cb 100644 --- a/TourGuide_Alliance/25_27_Wetlands.lua +++ b/TourGuide_Alliance/25_27_Wetlands.lua @@ -8,16 +8,15 @@ F Darnassus |QID|741| T The Absent Minded Prospector (Part 3) |T| |QID|741| |N|Outside the Temple of the Moon, Darnassus (31.41, 84.18)| |Z|Darnassus| A The Absent Minded Prospector (Part 4) |T| |QID|942| -F Loch Modan |QID|455| |NORAF| |N|Boat to Stormwind, then fly to Loch Modan.| -R Loch Modan |QID|455| |RAF| |N|Boat to Stormwind, take the tram to Ironforge, then run to Loch Modan. Don't forget to grab flight points in the cities.| +F Loch Modan |QID|455| |N|Boat to Stormwind, then fly to Loch Modan.| A The Alagaz Gauntlet |QID|455| |N|North at North Gate Pass (25.35, 10.43)| C The Alagaz Gauntlet |QID|455| R Menethil Harbor |QID|455| A Claws from the Deep |T| |QID|279| -A Young Crocolisk Skins |T| |QID|484| |NORAF| +A Young Crocolisk Skins |T| |QID|484| T The Alagaz Gauntlet |QID|455| |T| |N|In the keep| -A War Banners |N|Upstairs| |T| |QID|464| |NORAF| +A War Banners |N|Upstairs| |T| |QID|464| A Digging Through the Ooze |T| |QID|470| A The Third Fleet |T| |QID|288| A The Greenwarden |T| |QID|463| @@ -29,7 +28,7 @@ T The Third Fleet |T| |QID|288| A The Cursed Crew |T| |QID|289| A In Search of The Excavation Team (Part 1) |NODEBUG| |N|On your way out of town| |QID|305| -N Kill young crocs... |N|Kill any Young Crocolisks you come across for "Young Crocolisk Skins"| |QID|484| |NORAF| +N Kill young crocs... |N|Kill any Young Crocolisks you come across for "Young Crocolisk Skins"| |QID|484| C Claws from the Deep |QID|279| T In Search of The Excavation Team (Part 1) |NODEBUG| |N|At Whelgar's Excavation Site (38.8, 52.3)| |QID|305| @@ -42,7 +41,7 @@ T Ormer's Revenge (Part 1) |QID|294| A Ormer's Revenge (Part 2) |QID|295| A Uncovering the Past |QID|299| N Keep an eye out for relics |QID|299| -C Uncovering the Past |QID|299| |N|If you can't find the Neru Fragment (loose dirt), check the tree near the ramp up to the questgiver. If you can't find the Modr Fragment (tall vase), check up on the ledge to the west-southwest side of the dig.| +C Uncovering the Past |QID|299| |N|If you can't find the Neru Fragment (loose dirt), check the tree near the ramp up to the questgiver. If you can't find the Modr Fragment (tall vase), check up on the ledge to the west-southwest side of the dig.| C Ormer's Revenge (Part 2) |QID|295| T Ormer's Revenge (Part 2) |QID|295| A Ormer's Revenge (Part 3) |QID|296| @@ -52,30 +51,30 @@ T Ormer's Revenge (Part 3) |QID|296| C The Absent Minded Prospector (Part 5) |N|Keep killing raptors| |QID|943| -C War Banners |N|East of Excavation Site (42.9, 41.1)| |QID|464| |NORAF| +C War Banners |N|East of Excavation Site (42.9, 41.1)| |QID|464| A Daily Delivery |N|North of the Angerfang Encampment at the fork in the road (49.88, 39.42)| |QID|469| T The Greenwarden |N|East of the fork (56.3, 40.3)| |QID|463| A Tramping Paws |QID|276| C Tramping Paws |N|Camps far south near Dun Algaz (56,74) (61,75)| |QID|276| T Tramping Paws |QID|276| -A Fire Taboo |QID|277| |NORAF| -C Fire Taboo |QID|277| |NORAF| -C Young Crocolisk Skins |QID|484| |NORAF| -T Fire Taboo |QID|277| |NORAF| -A Blisters on The Land |NODEBUG| |QID|275| |NORAF| +A Fire Taboo |QID|277| +C Fire Taboo |QID|277| +C Young Crocolisk Skins |QID|484| +T Fire Taboo |QID|277| +A Blisters on The Land |NODEBUG| |QID|275| H Menethil Harbor |SZ|Deepwater Tavern| |QID|286| T The Absent Minded Prospector (Part 5) |N|Inn, upstairs| |T| |QID|943| T Claws from the Deep |T| |QID|279| A Reclaiming Goods |T| |QID|281| -T Young Crocolisk Skins |T| |QID|484| |NORAF| -A Apprentice's Duties |T| |QID|471| |NORAF| +T Young Crocolisk Skins |T| |QID|484| +A Apprentice's Duties |T| |QID|471| T Daily Delivery |T| |QID|469| -T War Banners |N|In the keep| |T| |QID|464| |NORAF| -A Nek'rosh's Gambit |T| |QID|465| |NORAF| +T War Banners |N|In the keep| |T| |QID|464| +A Nek'rosh's Gambit |T| |QID|465| T In Search of The Excavation Team (Part 2) |NODEBUG| |N|On your way out of town| |QID|306| -N Kill stealth elementals... |QID|275| |N|Kill any Fen Creepers you come across for "Blisters on The Land". They stealth and follow the shallow waters in the west half of the zone.| |NORAF| +N Kill stealth elementals... |QID|275| |N|Kill any Fen Creepers you come across for "Blisters on The Land". They stealth and follow the shallow waters in the west half of the zone.| T Reclaiming Goods |N|Damaged Crate at the murloc camp north of Menethil Harbor (13.51, 41.37)| |QID|281| A The Search Continues |QID|284| @@ -84,18 +83,18 @@ A Search More Hovels |QID|285| T Search More Hovels |N|Half-buried Barrel at the next murloc camp to the north| |QID|285| A Return the Statuette |QID|286| -C The Cursed Crew |N|On the southern shipwreck (13,30). Snellig is in the bottom of the ship, you can enter thru a hole on the side nearest the shore.| |QID|289| -C Apprentice's Duties |N|North of the murloc camps and east of Menethil Harbor (19,59) (25,22). Kill giant crocs near the shore, normal ones don't drop the item.| |QID|471| |NORAF| -C Blisters on The Land |N|Just run around in the water, they stealth.| |NODEBUG| |QID|275| |NORAF| +C The Cursed Crew |N|On the southern shipwreck (13,30). Snellig is in the bottom of the ship, you can enter thru a hole on the side nearest the shore.| |QID|289| +C Apprentice's Duties |N|North of the murloc camps and east of Menethil Harbor (19,59) (25,22). Kill giant crocs near the shore, normal ones don't drop the item.| |QID|471| +C Blisters on The Land |N|Just run around in the water, they stealth.| |NODEBUG| |QID|275| C Digging Through the Ooze |N|Around Ironbeard's Tomb (44,25)| |QID|470| -T Blisters on The Land |NODEBUG| |QID|275| |NORAF| +T Blisters on The Land |NODEBUG| |QID|275| H Menethil Harbor |SZ|Deepwater Tavern| |QID|286| T The Cursed Crew |T| |QID|289| A Lifting the Curse |T| |QID|290| T Digging Through the Ooze |T| |QID|470| -T Apprentice's Duties |T| |QID|471| |NORAF| +T Apprentice's Duties |T| |QID|471| T Return the Statuette |T| |QID|286| ]] end) diff --git a/TourGuide_Alliance/27_28_Redridge_Mountains.lua b/TourGuide_Alliance/27_28_Redridge_Mountains.lua index d80fdee..8f43147 100644 --- a/TourGuide_Alliance/27_28_Redridge_Mountains.lua +++ b/TourGuide_Alliance/27_28_Redridge_Mountains.lua @@ -7,31 +7,31 @@ A The Binding |C|Warlock| |NODEBUG| |QID|1795| C The Binding |C|Warlock| |NODEBUG| |QID|1795| |U|6913| T The Binding |C|Warlock| |NODEBUG| |QID|1795| -F Redridge Mountains |QID|34| |NORAF| -A Blackrock Bounty |QID|128| |NORAF| -A Blackrock Menace |QID|20| |NORAF| |N|From Marshal Marris across the bridge, he probably won't have an ! over his head.| -T Messenger to Stormwind (Part 2) |QID|121| |NORAF| |O| -A Solomon's Law |QID|91| |NORAF| |N|In the town hall| -A Wanted: Lieutenant Fangore |QID|180| |NORAF| |N|Poster in front of the inn| -h Lakeshire |QID|180| |NORAF| +F Redridge Mountains |QID|34| +A Blackrock Bounty |QID|128| +A Blackrock Menace |QID|20| |N|From Marshal Marris across the bridge, he probably won't have an ! over his head.| +T Messenger to Stormwind (Part 2) |QID|121| +A Solomon's Law |QID|91| |N|In the town hall| +A Wanted: Lieutenant Fangore |QID|180| |N|Poster in front of the inn| +h Lakeshire |QID|180| -A An Unwelcome Guest |QID|34| |NORAF| |N|West of lakeshire| -C An Unwelcome Guest |QID|34| |NORAF| -T An Unwelcome Guest |QID|34| |NORAF| +A An Unwelcome Guest |QID|34| |N|West of lakeshire| +C An Unwelcome Guest |QID|34| +T An Unwelcome Guest |QID|34| -C Blackrock Menace |QID|20| |NORAF| |N|Follow the road north to Render's Camp (36,10)| -C Blackrock Bounty |QID|128| |NORAF| -A Missing In Action |NODEBUG| |QID|219| |NORAF| |N|Escort in the cave (28.39, 12.56)| -C Missing In Action |NODEBUG| |QID|219| |NORAF| +C Blackrock Menace |QID|20| |N|Follow the road north to Render's Camp (36,10)| +C Blackrock Bounty |QID|128| +A Missing In Action |NODEBUG| |QID|219| |N|Escort in the cave (28.39, 12.56)| +C Missing In Action |NODEBUG| |QID|219| -T Missing In Action |NODEBUG| |QID|219| |NORAF| -T Blackrock Menace |QID|20| |NORAF| -T Blackrock Bounty |QID|128| |NORAF| +T Missing In Action |NODEBUG| |QID|219| +T Blackrock Menace |QID|20| +T Blackrock Bounty |QID|128| -C Wanted: Lieutenant Fangore |QID|180| |NORAF| |N|Far east, in a gnoll camp in Galardell Valley (79,39)| -C Solomon's Law |QID|91| |NORAF| +C Wanted: Lieutenant Fangore |QID|180| |N|Far east, in a gnoll camp in Galardell Valley (79,39)| +C Solomon's Law |QID|91| -H Lakeshire |SZ|Lakeshire Inn| |QID|180| |NORAF| -T Solomon's Law |QID|91| |NORAF| -T Wanted: Lieutenant Fangore |QID|180| |NORAF| +H Lakeshire |SZ|Lakeshire Inn| |QID|180| +T Solomon's Law |QID|91| +T Wanted: Lieutenant Fangore |QID|180| ]] end) diff --git a/TourGuide_Alliance/28_29_Duskwood.lua b/TourGuide_Alliance/28_29_Duskwood.lua index d66bef7..75669be 100644 --- a/TourGuide_Alliance/28_29_Duskwood.lua +++ b/TourGuide_Alliance/28_29_Duskwood.lua @@ -9,13 +9,13 @@ A The Missing Diplomat (Part 3) |T| |QID|1242| T The Missing Diplomat (Part 3) |T| |N|In the cheese shop in the Trade District (60.09, 64.45)| |Z|Stormwind City| |QID|1242| A The Missing Diplomat (Part 4) |T| |QID|1243| -B [Bronze Tube] |N|Engineering vendor sells this sometimes, but auction or an engineer are your best bets. Needed for "Look To The Stars".| |L|4371| |QID|174| +B [Bronze Tube] |N|Engineering vendor sells this sometimes, but auction or an engineer are your best bets. Needed for "Look To The Stars".| |L|4371| |QID|174| R Darkshire |N|Usually faster to fly to Redridge and take the road southwest| |QID|66| T The Missing Diplomat (Part 4) |N|North of Darkshire walking along the road| |QID|1243| A The Missing Diplomat (Part 5) |QID|1244| A The Legend of Stalvan (Part 1) |T| |QID|66| -A The Totem of Infliction |T| |QID|101| |NORAF| +A The Totem of Infliction |T| |QID|101| h Darkshire |T| |QID|158| A The Night Watch (Part 1) |T| |QID|56| T The Legend of Stalvan (Part 1) |T| |N|Skip the follow-up| |QID|66| @@ -90,14 +90,14 @@ T Deliver the Thread |N|Shack north of the cemetery| |QID|157| A Zombie Juice |QID|158| C The Night Watch (Part 3) |N|Down in the Dawning Wood Catacombs (23.5, 35.4)| |QID|58| -C The Totem of Infliction |N|Ghoul fangs only seem to drop in the catacombs. If you don't get enough venom in the cemetery, kill Black Widow Hatchlings on the ridge east of the cemetery (32,38).| |QID|101| |NORAF| +C The Totem of Infliction |N|Ghoul fangs only seem to drop in the catacombs. If you don't get enough venom in the cemetery, kill Black Widow Hatchlings on the ridge east of the cemetery (32,38).| |QID|101| T Sven's Camp |N|Camp to the west (8,34)| |QID|230| A The Shadowy Figure |QID|262| R Stranglethorn Vale |N|Take the road east towards Darkshire, but head south at the fork in the center of the zone.| |QID|158| F Darkshire |N|There is a flight point at the Rebel Camp along the north edge of STV (38.1, 3.8)| |Z|Stranglethorn Vale| -T The Totem of Infliction |T| |QID|101| |NORAF| +T The Totem of Infliction |T| |QID|101| T The Shadowy Figure |T| |QID|262| A The Shadowy Search Continues |T| |QID|265| T The Night Watch (Part 3) |T| |QID|58| diff --git a/TourGuide_Alliance/29_30_Ashenvale.lua b/TourGuide_Alliance/29_30_Ashenvale.lua index b61b1f1..f46cd39 100644 --- a/TourGuide_Alliance/29_30_Ashenvale.lua +++ b/TourGuide_Alliance/29_30_Ashenvale.lua @@ -23,53 +23,53 @@ A The Branch of Cenarius |QID|1031| C The Branch of Cenarius |N|Kill Geltharis behind the camp (78,42)| |QID|1031| T The Branch of Cenarius |N|Back in Forest Song.| |T| |QID|1031| -A Satyr Slaying! |T| |QID|1032| |NORAF| +A Satyr Slaying! |T| |QID|1032| T Kayneth Stillwind |T| |QID|4581| -A The Lost Chalice |T| |QID|9519| |NORAF| +A The Lost Chalice |T| |QID|9519| A Forsaken Diseases |T| |QID|1011| A The Howling Vale |T| |QID|1022| -A Agents of Destruction |T| |QID|9518| |NORAF| +A Agents of Destruction |T| |QID|9518| T A Helping Hand |T| |QID|9533| -A A Shameful Waste |T| |QID|9517| |NORAF| +A A Shameful Waste |T| |QID|9517| A Destroy the Legion |T| |QID|9516| A Reclaiming Felfire Hill |N|From Gnarl the Ancient of War, he paths around the camp.| |T| |QID|9526| -C The Lost Chalice |N|In Satyrnaar (81.61, 48.57)| |QID|9519| |NORAF| -N Freedom! Horrible, horrible freedom! |QID|1140| |QO|Free the Highborne soul in Satyrnaar: 1/1| |N|Find the crystal behind the structure where you found the chalice (81.58, 48.58)| |NORAF| -N Get wood |N|Collect 5 Satyrnaar Fel Wood.| |L|24081 5| |QID|9517| |NORAF| +C The Lost Chalice |N|In Satyrnaar (81.61, 48.57)| |QID|9519| +N Freedom! Horrible, horrible freedom! |QID|1140| |QO|Free the Highborne soul in Satyrnaar: 1/1| |N|Find the crystal behind the structure where you found the chalice (81.58, 48.58)| +N Get wood |N|Collect 5 Satyrnaar Fel Wood.| |L|24081 5| |QID|9517| -C Agents of Destruction |N|South of Forest Song in Warsong Lumber Camp (88,54). Overseer Gorthak is in the small building southwest of the big building (88.86, 59.51)| |QID|9518| |NORAF| -C A Shameful Waste |QID|9517| |NORAF| +C Agents of Destruction |N|South of Forest Song in Warsong Lumber Camp (88,54). Overseer Gorthak is in the small building southwest of the big building (88.86, 59.51)| |QID|9518| +C A Shameful Waste |QID|9517| C Reclaiming Felfire Hill |N|Southwest at Felfire Hill (81,67)| |QID|9526| -K Demons... |QID|9520| |L|23777| |T| |N|Kill infernals, lashers and felguards until you get the [Diabolical Plans]. Don't worry about completing "Destroy the Legion" right now, you'll be back.| +K Demons... |QID|9520| |L|23777| |T| |N|Kill infernals, lashers and felguards until you get the [Diabolical Plans]. Don't worry about completing "Destroy the Legion" right now, you'll be back.| C Forsaken Diseases |N|Go southwest across the river (75,71)| |QID|1011| C Fallen Sky Lake |N|Kill the Shadethicket Oracle at Fallen Sky Lake to the southwest past the road (66.65, 82.16)| |QID|1035| -C The Tower of Althalaxx (Part 6) |N|Follow the road northwest from Fallen Sky Lake past Raynewood Retreat (64.80, 43.80), then double back along the ridge east of the road to the crystal in Night Run (67,54).| |QID|1140| |NORAF| -C Satyr Slaying! |QID|1032| |NORAF| -C Raene's Cleansing (Part 4) |N|To the northeast, just before entering felwood. Kill treants for the key and open the box (54,35)| |QID|1026| -C The Howling Vale |N|Path starts just north of the box for "Raene's Cleansing" (54.0, 32.5). Head thru the cave, find the tome on a table near the shrine (50.54, 39.07)| |QID|1022| +C The Tower of Althalaxx (Part 6) |N|Follow the road northwest from Fallen Sky Lake past Raynewood Retreat (64.80, 43.80), then double back along the ridge east of the road to the crystal in Night Run (67,54).| |QID|1140| +C Satyr Slaying! |QID|1032| +C Raene's Cleansing (Part 4) |N|To the northeast, just before entering felwood. Kill treants for the key and open the box (54,35)| |QID|1026| +C The Howling Vale |N|Path starts just north of the box for "Raene's Cleansing" (54.0, 32.5). Head thru the cave, find the tome on a table near the shrine (50.54, 39.07)| |QID|1022| H Astranaar |QID|1035| T Fallen Sky Lake |T| |QID|1035| -T The Tower of Althalaxx (Part 6) |N|Back at Maestra's Post, skip the follow-up.| |QID|1140| |NORAF| -T Raene's Cleansing (Part 4) |N|Back at the Moonwell (53,46). Skip the follow-up.| |QID|1026| +T The Tower of Althalaxx (Part 6) |N|Back at Maestra's Post, skip the follow-up.| |QID|1140| +T Raene's Cleansing (Part 4) |N|Back at the Moonwell (53,46). Skip the follow-up.| |QID|1026| F Forest Song |N|Run to Astranaar then fly| |QID|9522| T Forsaken Diseases |T| |QID|1011| -T The Lost Chalice |T| |QID|9519| |NORAF| -T A Shameful Waste |T| |QID|9517| |NORAF| +T The Lost Chalice |T| |QID|9519| +T A Shameful Waste |T| |QID|9517| T Reclaiming Felfire Hill |T| |QID|9526| T The Howling Vale |T| |QID|1022| -T Agents of Destruction |T| |QID|9518| |NORAF| +T Agents of Destruction |T| |QID|9518| A Diabolical Plans |U|23777| |T| |QID|9520| T Diabolical Plans |T| |QID|9520| A Never Again! |T| |QID|9522| -T Satyr Slaying! |T| |QID|1032| |NORAF| +T Satyr Slaying! |T| |QID|1032| -C Never Again! |N|South at Demon Fall canyon. Gorgannon is east up the main path (90.0, 76.8). Diathorus is west past the monument in a cave on Demon Fall Ridge (78.01, 83.66). Small glowing monuments mark the path up. Both demons call for help, so make sure to clear the area around them.| |QID|9522| +C Never Again! |N|South at Demon Fall canyon. Gorgannon is east up the main path (90.0, 76.8). Diathorus is west past the monument in a cave on Demon Fall Ridge (78.01, 83.66). Small glowing monuments mark the path up. Both demons call for help, so make sure to clear the area around them.| |QID|9522| C Destroy the Legion |N|Skip this quest if you can't get all the lashers, they seem to have a very low spawn rate.| |QID|9516| T Never Again! |T| |N|Back in Forest Song| |QID|9522| T Destroy the Legion |T| |QID|9516| diff --git a/TourGuide_Alliance/30_31_Wetlands.lua b/TourGuide_Alliance/30_31_Wetlands.lua index 653e94b..8b97855 100644 --- a/TourGuide_Alliance/30_31_Wetlands.lua +++ b/TourGuide_Alliance/30_31_Wetlands.lua @@ -22,7 +22,7 @@ A Fall of Dun Modr |N|In front of the keep| |T| |QID|472| C Lifting the Curse |N|Kill the Captain for the key, walk up the rudder to reach him (15.5, 23.5)| |QID|290| T Lifting the Curse |N|Open the box on bottom floor of the boat, it's underwater.| |QID|290| A The Eye of Paleth |QID|292| -T Nek'rosh's Gambit |N|Talk to the catapault (47.5, 46.9). Skip the follow-up.| |QID|465| |NORAF| +T Nek'rosh's Gambit |N|Talk to the catapault (47.5, 46.9). Skip the follow-up.| |QID|465| T Fall of Dun Modr |QID|472| A The Dark Iron War |QID|303| @@ -34,7 +34,7 @@ A The Thandol Span (Part 2) |QID|632| T The Thandol Span (Part 2) |QID|632| A The Thandol Span (Part 3) |QID|633| -C A Grim Task |QID|304| |N|Look for a dorf with a voidwalker. If he isn't in the area near the questgiver check at the camp to the east (60, 27). If you don't find him, abandon this.| +C A Grim Task |QID|304| |N|Look for a dorf with a voidwalker. If he isn't in the area near the questgiver check at the camp to the east (60, 27). If you don't find him, abandon this.| C The Dark Iron War |QID|303| T A Grim Task |QID|304| diff --git a/TourGuide_Alliance/31_32_Hillsbrad_Foothills.lua b/TourGuide_Alliance/31_32_Hillsbrad_Foothills.lua index 9dc339e..4622de3 100644 --- a/TourGuide_Alliance/31_32_Hillsbrad_Foothills.lua +++ b/TourGuide_Alliance/31_32_Hillsbrad_Foothills.lua @@ -8,8 +8,8 @@ T Southshore |O| |QID|538| h Southshore |QID|525| A Missing Crystals |QID|9435| A Down the Coast |QID|536| -A Soothing Turtle Bisque |QID|555| |NORAF| -A Bartolo's Yeti Fur Cloak |QID|565| |NORAF| +A Soothing Turtle Bisque |QID|555| +A Bartolo's Yeti Fur Cloak |QID|565| A Costly Menace |QID|564| A Syndicate Assassins |QID|505| @@ -17,33 +17,33 @@ C Tome of the Cabal (Part 2) |N|Get the Moldy Tome, on the beach west of Southsh C Down the Coast |N|On beach west of Southshore| |QID|536| T Down the Coast |QID|536| -A Farren's Proof (Part 1) |QID|559| |NORAF| -C Farren's Proof (Part 1) |QID|559| |NORAF| |N|Murlocs, again, ugh| -T Farren's Proof (Part 1) |QID|559| |NORAF| -A Farren's Proof (Part 2) |QID|560| |NORAF| -T Farren's Proof (Part 2) |QID|560| |NORAF| -A Farren's Proof (Part 3) |QID|561| |NORAF| -T Farren's Proof (Part 3) |QID|561| |NORAF| -A Stormwind Ho! |QID|562| |NORAF| -C Stormwind Ho! |N|On beach east of Southshore| |QID|562| |NORAF| -T Stormwind Ho! |QID|562| |NORAF| -A Reassignment |QID|563| |NORAF| +A Farren's Proof (Part 1) |QID|559| +C Farren's Proof (Part 1) |QID|559| |N|Murlocs, again, ugh| +T Farren's Proof (Part 1) |QID|559| +A Farren's Proof (Part 2) |QID|560| +T Farren's Proof (Part 2) |QID|560| +A Farren's Proof (Part 3) |QID|561| +T Farren's Proof (Part 3) |QID|561| +A Stormwind Ho! |QID|562| +C Stormwind Ho! |N|On beach east of Southshore| |QID|562| +T Stormwind Ho! |QID|562| +A Reassignment |QID|563| -N Kill turtles |N|All along the creek. Need [Turtle Meat] x10 for "Soothing Turtle Bisque"| |L|3712 10| |QID|555| |NORAF| +N Kill turtles |N|All along the creek. Need [Turtle Meat] x10 for "Soothing Turtle Bisque"| |L|3712 10| |QID|555| C Missing Crystals |N|Tower north of Southshore (55.4,35)| |QID|9435| -A Encrypted Letter |N|Take the road north from the tower to the edge of the Alterac Mountains, then east. Examine documents on the table in the camp to the east (58,67)| |Z|Alterac Mountains| |QID|511| +A Encrypted Letter |N|Take the road north from the tower to the edge of the Alterac Mountains, then east. Examine documents on the table in the camp to the east (58,67)| |Z|Alterac Mountains| |QID|511| A Foreboding Plans |N|Examine documents on the table in the camp| |QID|510| C Syndicate Assassins |N|On this plateau and the next one to the west| |QID|505| C Costly Menace |N|West on another plateau (46,81)| |Z|Alterac Mountains| |QID|564| -N Kill yetis |N|In the yeti cave (45.58, 31.40). Need [Yeti Fur] x10 for "Bartolo's Yeti Fur Cloak".| |L|3720 10| |QID|565| |NORAF| +N Kill yetis |N|In the yeti cave (45.58, 31.40). Need [Yeti Fur] x10 for "Bartolo's Yeti Fur Cloak".| |L|3720 10| |QID|565| T Encrypted Letter |QID|511| A Letter to Stormpike |QID|514| T Syndicate Assassins |QID|505| -T Foreboding Plans |N|Skip the follow-up| |QID|510| -T Soothing Turtle Bisque |QID|555| |NORAF| +T Foreboding Plans |S| |N|Skip the follow-up| |QID|510| +T Soothing Turtle Bisque |QID|555| T Missing Crystals |QID|9435| T Costly Menace |QID|564| @@ -52,25 +52,24 @@ T The Eye of Paleth |QID|292| A Cleansing the Eye |QID|293| F City of Ironforge |QID|514| -T Letter to Stormpike |QID|514| |RAF| |N|Skip the follow-up| -T Letter to Stormpike |QID|514| |NORAF| -A Further Mysteries |QID|525| |NORAF| +T Letter to Stormpike |QID|514| +A Further Mysteries |QID|525| T Tome of the Cabal (Part 2) |N|Hall of Explorers| |C|Warlock| |QID|1802| A Tome of the Cabal (Part 3) |N|Hall of Explorers| |C|Warlock| |QID|1804| A Reclaimers' Business in Desolace |N|From Roetten Stonehammer who walks around nearby| |QID|1453| A In Search of Menara Voidrender |N|In The Forlorn Cavern (50.2, 6.2)| |C|Warlock| |QID|4736| F Stormwind City |QID|293| -T Reassignment |Z|Stormwind City| |N|In Stormwind Keep (73.7, 17.6)| |QID|563| |NORAF| +T Reassignment |Z|Stormwind City| |N|In Stormwind Keep (73.7, 17.6)| |QID|563| T Cleansing the Eye |Z|Stormwind City| |N|In Stormwind Cathedral (39,27)| |QID|293| -A Brother Anton |N|Downstairs in Stormwind Cathedral. Requires level 24, skip it if you can't get it.| |QID|6141| -B Hillman's Cloak |QID|565| |L|3719| |N|Buy from auction or a leatherworker. If you can't find one, skip buying the other items and the quest "Bartolo's Yeti Fur Cloak".| |NORAF| -B Bolt of Woolen Cloth |QID|565| |L|2997| |N|Buy from auction or a tailor.| |NORAF| +A Brother Anton |N|Downstairs in Stormwind Cathedral. Requires level 24, skip it if you can't get it.| |QID|6141| +B Hillman's Cloak |QID|565| |L|3719| |N|Buy from auction or a leatherworker. If you can't find one, skip buying the other items and the quest "Bartolo's Yeti Fur Cloak".| +B Bolt of Woolen Cloth |QID|565| |L|2997| |N|Buy from auction or a tailor.| -H Southshore |QID|525| |NORAF| -B Fine Thread |L|2321| |N|From vendor in Southshore (49.0, 55.1). Skip if you couldn't find a Hillman's Cloak.| |QID|565| |NORAF| -T Bartolo's Yeti Fur Cloak |QID|565| |NORAF| -T Further Mysteries |N|Skip the follow-up| |QID|525| |NORAF| +H Southshore |QID|525| +B Fine Thread |L|2321| |N|From vendor in Southshore (49.0, 55.1). Skip if you couldn't find a Hillman's Cloak.| |QID|565| +T Bartolo's Yeti Fur Cloak |QID|565| +T Further Mysteries |S| |N|Skip the follow-up| |QID|525| F Menethil Harbor |C|Warlock| C Tome of the Cabal (Part 3) |N|Kill Dragonmaw Bonewarders and Shadowwarders to the east (47,47)| |C|Warlock| |Z|Wetlands| |QID|1804| diff --git a/TourGuide_Alliance/33_35_Desolace.lua b/TourGuide_Alliance/33_35_Desolace.lua index 0663310..0760836 100644 --- a/TourGuide_Alliance/33_35_Desolace.lua +++ b/TourGuide_Alliance/33_35_Desolace.lua @@ -1,44 +1,44 @@ TourGuide:RegisterGuide("Desolace (33-34)", "Stranglethorn Vale (36-37)", "Alliance", function() return [[ -N This might be a good guide to skip |N|It's quite a bit out of the way, and there is a lot of running around the zone.| |NORAF| +N This might be a good guide to skip |N|It's quite a bit out of the way, and there is a lot of running around the zone.| F Astranaar |N|Take the boat to Theramore Isle and fly up| |QID|1453| -R Nijel's Point |N|From Astranaar run south thru the Talondeep Path, southwest thru Windshear Crag to the road, northwest along the road to Mirkfallon Lake, then southwest thru the Charred Veil into Desolace. Nijel's Point is along the northern edge of Desolace (64,10).| |QID|1453| +R Nijel's Point |N|From Astranaar run south thru the Talondeep Path, southwest thru Windshear Crag to the road, northwest along the road to Mirkfallon Lake, then southwest thru the Charred Veil into Desolace. Nijel's Point is along the northern edge of Desolace (64,10).| |QID|1453| A Vahlarriel's Search (Part 1) |T| |QID|1437| -A Centaur Bounty |T| |QID|1387| |NORAF| +A Centaur Bounty |T| |QID|1387| T Reclaimers' Business in Desolace |T| |QID|1453| -A Reagents for Reclaimers Inc. (Part 1) |T| |QID|1458| |NORAF| +A Reagents for Reclaimers Inc. (Part 1) |T| |QID|1458| A The Karnitol Shipwreck (Part 1) |T| |QID|1454| h Nijel's Point |T| |QID|1440| -T Brother Anton |T| |O| |QID|6141| +T Brother Anton |T| |QID|6141| T Vahlarriel's Search (Part 1) |N|Find the chest in the broken down caravan to the west (56,17)| |QID|1437| A Vahlarriel's Search (Part 2) |QID|1465| -C Reagents for Reclaimers Inc. (Part 1) |N|Kill Hatefury satyrs to the east at Sargeron (75,20)| |QID|1458| |NORAF| +C Reagents for Reclaimers Inc. (Part 1) |N|Kill Hatefury satyrs to the east at Sargeron (75,20)| |QID|1458| T Vahlarriel's Search (Part 2) |N|Back in Nijel's Point| |T| |QID|1465| A Vahlarriel's Search (Part 3) |T| |QID|1438| -T Reagents for Reclaimers Inc. (Part 1) |T| |QID|1458| |NORAF| -A Reagents for Reclaimers Inc. (Part 2) |T| |QID|1459| |NORAF| +T Reagents for Reclaimers Inc. (Part 1) |T| |QID|1458| +A Reagents for Reclaimers Inc. (Part 2) |T| |QID|1459| -N Kill crap... |N|Kill any Scorpashi and Aged Kodo you come across| |QID|1459| |NORAF| -A Bone Collector |N|To the south along the road at Kormek's Hut (62,38)| |QID|5501| |NORAF| -C Centaur Bounty |N|To the east at the Kolkar Village (72,45)| |QID|1387| |NORAF| +N Kill crap... |N|Kill any Scorpashi and Aged Kodo you come across| |QID|1459| +A Bone Collector |N|To the south along the road at Kormek's Hut (62,38)| |QID|5501| +C Centaur Bounty |N|To the east at the Kolkar Village (72,45)| |QID|1387| A Kodo Roundup |N|Follow the road south, then west to Scrabblescrew's Camp (60,61)| |QID|5561| C Kodo Roundup |U|13892| |N|Use the Kodo Kombobulator on Kodo in the graveyard, then take the kodo back to Scrabblescrew.| |QID|5561| T Kodo Roundup |QID|5561| -C Bone Collector |N|Loot the kodo bones lying around the graveyard| |QID|5501| |NORAF| +C Bone Collector |N|Loot the kodo bones lying around the graveyard| |QID|5501| A Sceptre of Light |N|At the tower near the ocean to the northwest (38.9, 27.2)| |QID|5741| T Vahlarriel's Search (Part 3) |N|Turn this in to Dalinda Malem in the main building at the center of Thunder Axe Fortress (54,26)| |QID|1438| A Search for Tyranis |QID|1439| C Sceptre of Light |N|Kill the Burning Blade Seer at the top of the watchtower just outside (55.23, 30.13)| |QID|5741| C Search for Tyranis |N|Found inside the building west (53.0,29.0)| |QID|1439| -T Search for Tyranis |N|Back in the other building. Follow-up is an escort so be ready.| |QID|1439| +T Search for Tyranis |N|Back in the other building. Follow-up is an escort so be ready.| |QID|1439| A Return to Vahlarriel |N|Dalinda may ignore mobs, so don't attack anything unless she attacks or is attacked| |QID|1440| C Return to Vahlarriel |N|Dalinda may ignore mobs, so don't attack anything unless she attacks or is attacked| |QID|1440| -T Bone Collector |N|Back at Kormek's Hut| |QID|5501| |NORAF| +T Bone Collector |N|Back at Kormek's Hut| |QID|5501| T Sceptre of Light |N|Back at the tower by the shore| |QID|5741| A Book of the Ancients |QID|6027| T The Karnitol Shipwreck (Part 1) |N|At the shipwreck on the coast (36.1, 30.4)| |QID|1454| @@ -50,12 +50,12 @@ T Claim Rackmore's Treasure! |N|Find the chest behind a tree on Ranazjar Isle (3 C Book of the Ancients |N|Clear the area around the statue, then talk to it and kill the naga that spawns.| |QID|6027| T Book of the Ancients |N|Back on shore at the tower| |QID|6027| -C Reagents for Reclaimers Inc. (Part 2) |N|Get the last few reagents you need, you should have most by now.| |QID|1459| |NORAF| +C Reagents for Reclaimers Inc. (Part 2) |N|Get the last few reagents you need, you should have most by now.| |QID|1459| H Nijel's Point |QID|1440| -T Reagents for Reclaimers Inc. (Part 2) |N|Skip the follow-up| |T| |QID|1459| |NORAF| -T The Karnitol Shipwreck (Part 2) |N|Skip the follow-up| |T| |QID|1455| -T Centaur Bounty |T| |QID|1387| |NORAF| +T Reagents for Reclaimers Inc. (Part 2) |S| |N|Skip the follow-up| |T| |QID|1459| +T The Karnitol Shipwreck (Part 2) |S| |N|Skip the follow-up| |T| |QID|1455| +T Centaur Bounty |T| |QID|1387| T Return to Vahlarriel |T| |QID|1440| ]] end) diff --git a/TourGuide_Alliance/36_37_Stranglethorn.lua b/TourGuide_Alliance/36_37_Stranglethorn.lua index ae4f301..ade635a 100644 --- a/TourGuide_Alliance/36_37_Stranglethorn.lua +++ b/TourGuide_Alliance/36_37_Stranglethorn.lua @@ -1,11 +1,11 @@ TourGuide:RegisterGuide("Stranglethorn Vale (36-37)", "Dustwallow Marsh (37-38)", "Alliance", function() return [[ -b Booty Bay |QID|213| |N|Fly to Theramore and run up the coast to Ratchet. Watch out for the murloc camp along the way. I know it's annoying, but it's certainly a nicer run than the one from the north end of STV.| +b Booty Bay |QID|213| |N|Fly to Theramore and run up the coast to Ratchet. Watch out for the murloc camp along the way. I know it's annoying, but it's certainly a nicer run than the one from the north end of STV.| A Supplies to Private Thorsen |N|Upper level of the inn| |QID|198| A Investigate the Camp |N|Upper level of the inn| |QID|201| A Hostile Takeover |N|Upper level of the inn| |QID|213| -A Supply and Demand |N|On same level as the flight path. He may not have a ! over his head (28.3, 77.5)| |QID|575| +A Supply and Demand |N|On same level as the flight path. He may not have a ! over his head (28.3, 77.5)| |QID|575| F Rebel Camp |QID|204| T Supplies to Private Thorsen |QID|198| diff --git a/TourGuide_Alliance/37_38_Dustwallow_Marsh.lua b/TourGuide_Alliance/37_38_Dustwallow_Marsh.lua index 86c399b..fb92787 100644 --- a/TourGuide_Alliance/37_38_Dustwallow_Marsh.lua +++ b/TourGuide_Alliance/37_38_Dustwallow_Marsh.lua @@ -21,7 +21,7 @@ A Discrediting the Deserters |T| |QID|11133| C Discrediting the Deserters |N|Hand out pamphlets to the guards| |T| |QID|11133| T Discrediting the Deserters |T| |QID|11133| A The End of the Deserters |T| |QID|11134| -C The End of the Deserters |N|Out on boat to the southeast (76.58, 56.86). Downstairs in the captain's quarters.| |QID|11134| +C The End of the Deserters |N|Out on boat to the southeast (76.58, 56.86). Downstairs in the captain's quarters.| |QID|11134| T The End of the Deserters |N|Back in Theremore, of course.| |T| |QID|11134| h Theramore Isle |T| |QID|11142| @@ -33,7 +33,7 @@ T The Missing Diplomat (Part 13) |T| |QID|1264| A The Missing Diplomat (Part 14) |T| |QID|1265| A A Disturbing Development |T| |QID|11136| -T The Missing Diplomat (Part 14) |N|Inside the tower along road northwest of Theramore (59.7, 41.1). If he is not there just wait, he'll be back.| |QID|1265| +T The Missing Diplomat (Part 14) |N|Inside the tower along road northwest of Theramore (59.7, 41.1). If he is not there just wait, he'll be back.| |QID|1265| A The Missing Diplomat (Part 15) |QID|1266| T A Disturbing Development |QID|11136| A Defias in Dustwallow? |QID|11137| @@ -74,7 +74,7 @@ T Raptor Captor |QID|11146| A Prisoners of the Grimtotems |QID|11145| A Unleash the Raptors |QID|11147| -C Prisoners of the Grimtotems |N|Northwest in Blackhoof Village (41,12). Kill Grimtotems for keys.| |QID|11145| +C Prisoners of the Grimtotems |N|Northwest in Blackhoof Village (41,12). Kill Grimtotems for keys.| |QID|11145| C Unleash the Raptors |U|33070| |N|Place the bait near the windmill in the center of town (42,12)| |QID|11147| C Jarl Needs Eyes |N|Kill spiders to the southwest at Darkmist Cavern (35,21).| |QID|1206| @@ -94,7 +94,7 @@ T Tabetha's Farm |QID|11212| A The Grimtotem Weapon |QID|11169| A The Reagent Thief |QID|11173| -C The Grimtotem Weapon |N|Place the totem near crocs to the north and kill them. If you have a pet you may not want to use it, you won't get credit if the croc is not targeting you when it dies.| |U|33101| |QID|11169| +C The Grimtotem Weapon |N|Place the totem near crocs to the north and kill them. If you have a pet you may not want to use it, you won't get credit if the croc is not targeting you when it dies.| |U|33101| |QID|11169| C The Reagent Thief |N|Kill spiders southeast of the farm (48,62)| |QID|11173| C Direhorn Raiders |N|Kill Grimtotems north of the farm| |QID|11156| @@ -110,7 +110,7 @@ T The Zeppelin Crash |N|To the east at Beezil's Wreck (54,56).| |QID|11172| A Corrosion Prevention |QID|11174| A Secure the Cargo! |QID|11207| -C Corrosion Prevention |U|33108| |N|Make sure you have the "Energized" buff and use the [Ooze Buster] on the slimes. Note that there is a bug with this quest which may allow you to complete it without leaving the questgiver: target a nearby ooze, use the buster... while it is channelling target a different ooze (at any range).| |QID|11174| +C Corrosion Prevention |U|33108| |N|Make sure you have the "Energized" buff and use the [Ooze Buster] on the slimes. Note that there is a bug with this quest which may allow you to complete it without leaving the questgiver: target a nearby ooze, use the buster... while it is channelling target a different ooze (at any range).| |QID|11174| C Secure the Cargo! |QID|11207| T Corrosion Prevention |QID|11174| @@ -119,7 +119,7 @@ A Delivery for Drazzit |QID|11208| T Is it Real? |N|On an island to the southeast (58.72, 60.18)| |QID|11194| A Nat's Bargain |QID|11209| -C Nat's Bargain |N|Head to the ship wreckage to the southwest (57,63), use the fish paste, swim around until you're attacked by the shark. You may have to use the paste more than once.| |U|33166| |QID|11209| +C Nat's Bargain |N|Head to the ship wreckage to the southwest (57,63), use the fish paste, swim around until you're attacked by the shark. You may have to use the paste more than once.| |U|33166| |QID|11209| T Nat's Bargain |QID|11209| A Oh, It's Real |QID|11210| @@ -137,7 +137,7 @@ T Bloodfen Feathers |T| |QID|11158| A Banner of the Stonemaul |T| |QID|11160| A The Essence of Enmity |T| |QID|11161| -C Banner of the Stonemaul |N|Follow the road northwest to the Den of Flames (39,66). Stay left unti you find the Stonemaul Clan Banner (38.13, 69.37). Make sure you use the totem on the dragonkin after you kill them for "The Essence of Enmity".| |U|33088| |QID|11160| +C Banner of the Stonemaul |N|Follow the road northwest to the Den of Flames (39,66). Stay left unti you find the Stonemaul Clan Banner (38.13, 69.37). Make sure you use the totem on the dragonkin after you kill them for "The Essence of Enmity".| |U|33088| |QID|11160| C The Essence of Enmity |U|33088| |N|Kill dragonkin, use the totem on their corpses.| |QID|11161| T Banner of the Stonemaul |N|Back at Mudsprocket| |T| |QID|11160| @@ -149,7 +149,7 @@ C Spirits of Stonemaul Hold |N|North at Stonemaul Ruins, talk to the bones.| |QI T Spirits of Stonemaul Hold |T| |QID|11159| A Challenge to the Black Flight |T| |QID|11162| -C Challenge to the Black Flight |N|East outside the entrance to Onyxia's Lair (52.06, 75.68). Plant the banner and kill the dragon. If you can't plant the banner, back out of the cave.| |U|33095| |QID|11162| +C Challenge to the Black Flight |N|East outside the entrance to Onyxia's Lair (52.06, 75.68). Plant the banner and kill the dragon. If you can't plant the banner, back out of the cave.| |U|33095| |QID|11162| C Catch a Dragon by the Tail |N|Little round spore things, all over between Onyxia's Lair and Mudsprocket.| |QID|11217| T Challenge to the Black Flight |N|Back at Mudsprocket| |T| |QID|11162| @@ -220,7 +220,7 @@ A Tabetha's Assistance |QID|11149| T Tabetha's Assistance |N|At her farm, of course (45,57)| |QID|11149| A Raze Direhorn Post! |QID|11150| -C Raze Direhorn Post! |N|Burn the tents to the north of the farm. North Tent (46.63, 46.14), Northeast Tent (47.16, 46.72), East Tent (47.35, 47.48)| |U|33072| |QID|11150| +C Raze Direhorn Post! |N|Burn the tents to the north of the farm. North Tent (46.63, 46.14), Northeast Tent (47.16, 46.72), East Tent (47.35, 47.48)| |U|33072| |QID|11150| T Raze Direhorn Post! |QID|11150| A Justice for the Hyals |QID|11151| diff --git a/TourGuide_Alliance/38_40_Stranglethorn.lua b/TourGuide_Alliance/38_40_Stranglethorn.lua index 97159a9..e093ffe 100644 --- a/TourGuide_Alliance/38_40_Stranglethorn.lua +++ b/TourGuide_Alliance/38_40_Stranglethorn.lua @@ -16,7 +16,7 @@ A Kurzen's Mystery |QID|207| C Singing Blue Shards |N|Kill Crystal Spine Basilisks west of the Bal'lal Ruins along the shore (25,18)| |QID|605| C The Stone of the Tides |N|On the island to the west (21,22)| |QID|578| -C Kurzen's Mystery |N|First legend is on a tablet named "Moon Over the Vale" in the Bal'lal Ruins (29.5, 19.1). Second is "Gri"lek the Wanderer", west of Bal'lal Ruins underwater (24.8, 22.8). Third is "Fall of Gurubashi" in the Ruins of Zul'Kunda (22.98, 12.05). Fourth is "The Emperor's Tomb" in the Ruins of Zul'Kunda (24.7, 9.0)| |QID|207| +C Kurzen's Mystery |N|First legend is on a tablet named "Moon Over the Vale" in the Bal'lal Ruins (29.5, 19.1). Second is "Gri"lek the Wanderer", west of Bal'lal Ruins underwater (24.8, 22.8). Third is "Fall of Gurubashi" in the Ruins of Zul'Kunda (22.98, 12.05). Fourth is "The Emperor's Tomb" in the Ruins of Zul'Kunda (24.7, 9.0)| |QID|207| C Bloodscalp Ears |N|Kill trolls in the Bal'lal Ruins, Ruins of Zul'Kunda and Tkashi Ruins| |QID|189| C Tiger Mastery (Part 3) |N|South of Nessy's camp, north of Grom'Gol.| |QID|187| @@ -53,24 +53,24 @@ A Water Elementals |T| |QID|601| T Singing Blue Shards |T| |N|Downstairs in the inn| |QID|605| A Venture Company Mining |T| |QID|600| -C Chapter I |N|Buy any pages you don't have off the AH. If you can't find some just skip this chapter.| |T| |QID|339| -C Chapter II |N|Buy any pages you don't have off the AH. If you can't find some just skip this chapter.| |T| |QID|340| -C Chapter III |N|Buy any pages you don't have off the AH. If you can't find some just skip this chapter.| |T| |QID|341| -C Chapter IV |N|Buy any pages you don't have off the AH. If you can't find some just skip this chapter.| |T| |QID|342| +C Chapter I |N|Buy any pages you don't have off the AH. If you can't find some just skip this chapter.| |T| |QID|339| +C Chapter II |N|Buy any pages you don't have off the AH. If you can't find some just skip this chapter.| |T| |QID|340| +C Chapter III |N|Buy any pages you don't have off the AH. If you can't find some just skip this chapter.| |T| |QID|341| +C Chapter IV |N|Buy any pages you don't have off the AH. If you can't find some just skip this chapter.| |T| |QID|342| T Some Assembly Required |T| |N|Back in the leather shop| |QID|577| A Excelsior |T| |QID|628| C Venture Company Mining |N|From the Booty Bay exit take the road north beyond Gurubashi Arena on the east side of the road (39,41)| |QID|600| -C Skullsplitter Tusks |N|In the area around Ziata'Jai Ruins (42,36). Clear that camp, then hit Balia'mah Ruins (45,33) to the northeast and then Zul'Mamwe (47,38) to the southeast. Repeat!| |QID|209| +C Skullsplitter Tusks |N|In the area around Ziata'Jai Ruins (42,36). Clear that camp, then hit Balia'mah Ruins (45,33) to the northeast and then Zul'Mamwe (47,38) to the southeast. Repeat!| |QID|209| C Troll Witchery |N|Around the Balia'mah Ruins (43,41)| |QID|205| C Raptor Mastery (Part 3) |N|West of the ruins across the road (33,37).| |QID|196| -C Panther Mastery (Part 3) |N|Northeast of the raptors in a suspiciously "empty" area (36,35). They stealth.| |QID|192| +C Panther Mastery (Part 3) |N|Northeast of the raptors in a suspiciously "empty" area (36,35). They stealth.| |QID|192| C Excelsior |N|Travel north along the shore killing all the Saltwater Crocolisks you come across until an Elder Saltwater Crocolisks spawns| |QID|628| C Water Elementals |N|On the island (21,22)| |QID|601| -T Panther Mastery (Part 3) |N|Back at Nesingwary's, skip the follow-up.| |QID|192| -T Raptor Mastery (Part 3) |N|Skip the follow-up.| |QID|196| +T Panther Mastery (Part 3) |S| |N|Back at Nesingwary's, skip the follow-up.| |QID|192| +T Raptor Mastery (Part 3) |S| |N|Skip the follow-up.| |QID|196| T Chapter I |QID|339| T Chapter II |QID|340| T Chapter III |QID|341| diff --git a/TourGuide_Alliance/40_41_Badlands.lua b/TourGuide_Alliance/40_41_Badlands.lua index e90b54c..5e0147b 100644 --- a/TourGuide_Alliance/40_41_Badlands.lua +++ b/TourGuide_Alliance/40_41_Badlands.lua @@ -22,7 +22,7 @@ A Barbecued Buzzard Wings |N|West, in the center of the zone (42,52)| |QID|703| N Kill any buzzards you see |N|For "Barbecued Buzzard Wings" and "Badlands Reagent Run"| |QID|2500| C Mirages |N|Grind your way to the crate in the northwest at Camp Kosh (66,21)| |QID|718| -A A Sign of Hope (Part 1) |N|At Hammertoe's Digsite. Note is on the right side of the dig (53,33)| |QID|720| +A A Sign of Hope (Part 1) |N|At Hammertoe's Digsite. Note is on the right side of the dig (53,33)| |QID|720| C A Dwarf and His Tools |N|Kill the dwarfs at Hammertoe's Digsite or Angor Fortress (43,31)| |QID|719| T Mirages |N|Back up the hill| |QID|718| @@ -31,7 +31,7 @@ T A Dwarf and His Tools |QID|719| T A Sign of Hope (Part 1) |QID|720| A Tremors of the Earth (Part 1) |N|From a blood elf to the southeast (61,54).| |QID|732| -N Keep an eye out for the ogre pack |QID|732| |N|They spawn to the south of the questgiver (62,70). They patrol down to the southwest side of the zone and back in a circle. You should be able to pick Boss Tho'grun off the back of the pack easily.| +N Keep an eye out for the ogre pack |QID|732| |N|They spawn to the south of the questgiver (62,70). They patrol down to the southwest side of the zone and back in a circle. You should be able to pick Boss Tho'grun off the back of the pack easily.| T Find Agmond |N|Dead dorf to the southwest at Agmond's End (50,62)| |QID|738| A Murdaloc |QID|739| @@ -69,12 +69,11 @@ C This Is Going to Be Hard (Part 3) |O| |N|Kill the summoned elemental!| |QID|77 T This Is Going to Be Hard (Part 3) |O| |QID|778| T Scrounging |N|Back at the dwarfs on the hill (53,43)| |QID|733| -T Tremors of the Earth (Part 1) |N|Back at the blood elf (61,54). Skip the follow-up| |QID|732| -C Fiery Blaze Enchantments |N|Kill whelps in the ravine to the east. Droprate kind sucks, you may want to skip this.| |QID|706| +T Tremors of the Earth (Part 1) |N|Back at the blood elf (61,54). Skip the follow-up| |QID|732| +C Fiery Blaze Enchantments |N|Kill whelps in the ravine to the east. Droprate kind sucks, you may want to skip this.| |QID|706| T Fiery Blaze Enchantments |QID|706| -T Murdaloc |N|Back at Ironband's Excavation Site in Loch Modan (65,65). Skip the follow-up.| |Z|Loch Modan| |QID|739| +T Murdaloc |N|Back at Ironband's Excavation Site in Loch Modan (65,65). Skip the follow-up.| |Z|Loch Modan| |QID|739| T Badlands Reagent Run |N|Back at Thelsamar, skip the follow-up.| |QID|2500| ]] end) - diff --git a/TourGuide_Alliance/41_42_Stranglethorn.lua b/TourGuide_Alliance/41_42_Stranglethorn.lua index 6004ec0..19e7493 100644 --- a/TourGuide_Alliance/41_42_Stranglethorn.lua +++ b/TourGuide_Alliance/41_42_Stranglethorn.lua @@ -14,7 +14,7 @@ T The Bloodsail Buccaneers (Part 1) |N|On top of one of the barrels (27,69)| |QI A The Bloodsail Buccaneers (Part 2) |QID|597| C Akiris by the Bundle (Part 1) |N|Northwest across the bridge (24,65)| |QID|617| C Scaring Shaky |N|Head back to the Booty Bay entrance, then follow the path north a bit (31,67)| |QID|606| -C Stranglethorn Fever |N|Kill gorillas for a fang, take it to the troll in the cave to the north (35,60). Defend him, the last gorrila will drop your quest item.| |QID|348| +C Stranglethorn Fever |N|Kill gorillas for a fang, take it to the troll in the cave to the north (35,60). Defend him, the last gorrila will drop your quest item.| |QID|348| T Scaring Shaky |N|Back in Booty Bay, at "Shaky" Philippe on the pier.| |QID|606| A Return to MacKinley |QID|607| @@ -30,11 +30,11 @@ T Return to MacKinley |N|At "Sea Wolf" MacKinley in the house right next to the A Voodoo Dues |QID|609| A Keep An Eye Out |N|From Dizzy One-Eye near the Booty Bay blacksmith (Left when entering Booty Bay from the tunnel).| |NODEBUG| |QID|576| -C The Bloodsail Buccaneers (Part 4) |N|From the Booty Bay exit head east to the coast, then south. Items can be found at the two camps (30,81) (27,83), and in a rowboat (28,83).| |QID|604| +C The Bloodsail Buccaneers (Part 4) |N|From the Booty Bay exit head east to the coast, then south. Items can be found at the two camps (30,81) (27,83), and in a rowboat (28,83).| |QID|604| C Keep An Eye Out |N|Kill Bloodsails| |NODEBUG| |QID|576| C Up to Snuff |N| Kill Bloodsails| |QID|587| -C Voodoo Dues |N|Run north to Ruins of Jubuwal (33,51), kill Jon-Jon the Crow and Maury "Club Foot" Wilkins. Run south a tad (33,53) and then east to Ruins of Aboraz (40,57), kill Chucky "Ten Thumbs"| |QID|609| +C Voodoo Dues |N|Run north to Ruins of Jubuwal (33,51), kill Jon-Jon the Crow and Maury "Club Foot" Wilkins. Run south a tad (33,53) and then east to Ruins of Aboraz (40,57), kill Chucky "Ten Thumbs"| |QID|609| C Zanzil's Secret |N|Kill the trolls, but avoid Zanzil| |QID|621| H Booty Bay |SZ|The Salty Sailor Tavern| |QID|576| @@ -42,7 +42,7 @@ T Zanzil's Secret |N|In the inn.| |QID|621| A Whiskey Slim's Lost Grog |QID|580| T Up to Snuff |N|Upstairs in the inn.| |QID|587| T The Bloodsail Buccaneers (Part 4) |N|At Fleet Master Seahorn, 2nd Floor of the Inn.| |QID|604| -T Voodoo Dues |N|At "Sea Wolf" MacKinley (First house next to the Inn). Skip the follow-up.| |QID|609| +T Voodoo Dues |N|At "Sea Wolf" MacKinley (First house next to the Inn). Skip the follow-up.| |QID|609| A Stoley's Debt |QID|2872| T Keep An Eye Out |N|At Dizzy One-Eye outside the smithy's.| |NODEBUG| |QID|576| ]] diff --git a/TourGuide_Alliance/43_45_Feralas.lua b/TourGuide_Alliance/43_45_Feralas.lua index ca07294..2837494 100644 --- a/TourGuide_Alliance/43_45_Feralas.lua +++ b/TourGuide_Alliance/43_45_Feralas.lua @@ -1,7 +1,7 @@ TourGuide:RegisterGuide("Feralas (43-45)", "The Hinterlands (46-47)", "Alliance", function() return [[ -R Feathermoon Stronghold |QID|4124| |N|Fly to Desolace and run southwest into Feralas (43,98). Follow the road until the path down to the docks. Take the boat if it's there, or swim due west.| |Z|Desolace| +R Feathermoon Stronghold |QID|4124| |N|Fly to Desolace and run southwest into Feralas (43,98). Follow the road until the path down to the docks. Take the boat if it's there, or swim due west.| |Z|Desolace| A The Mark of Quality |QID|2821| h Feathermoon Stronghold |QID|4266| @@ -21,14 +21,14 @@ A Against the Hatecrest (Part 2) |QID|2869| C Against the Hatecrest (Part 2) |N|Kill naga back at the ruins| |QID|2869| T Against the Hatecrest (Part 2) |QID|2869| A Against Lord Shalzaru |QID|2870| -C Against Lord Shalzaru |N|South thru the ruins, across the water, in a cave (26,67). He is level 47, so he might be hard to solo.| |QID|2870| +C Against Lord Shalzaru |N|South thru the ruins, across the water, in a cave (26,67). He is level 47, so he might be hard to solo.| |QID|2870| R Feathermoon Stronghold |N|Or die and rez there| |QID|2871| T Against Lord Shalzaru |QID|2870| A Delivering the Relic |QID|2871| T Delivering the Relic |QID|2871| -C Screecher Spirits |N|Back on the main shore, avoid elementals and giants while killing Rogue Vale Screechers. Use Yeh'Kinya's Bramble on their corpses and talk to the spirits. Work your way south.| |U|10699| |QID|3520| +C Screecher Spirits |N|Back on the main shore, avoid elementals and giants while killing Rogue Vale Screechers. Use Yeh'Kinya's Bramble on their corpses and talk to the spirits. Work your way south.| |U|10699| |QID|3520| T The Missing Courier (Part 2) |N|Find the boat wreckage to the south (45.53, 64.98)| |QID|4125| A Boat Wreckage |QID|4127| @@ -41,8 +41,8 @@ A The Woodpaw Gnolls |QID|4131| A Find OOX-22/FE! |O| |U|8705| |QID|2766| C The Mark of Quality |N|Back on mainland, follow the road to the yeti cave (56,56).| |QID|2821| -T Find OOX-22/FE! |O| |N|At the back of the yeti cave. Don't accept the escort!| |QID|2766| -C The High Wilderness |N|Shamans are to the south at the temple (59,73). Brutes at Ruins of Isildien (62,54). If you have issues finding warlocks, you should be shot.| |QID|2982| +T Find OOX-22/FE! |O| |N|At the back of the yeti cave. Don't accept the escort!| |QID|2766| +C The High Wilderness |N|Shamans are to the south at the temple (59,73). Brutes at Ruins of Isildien (62,54). If you have issues finding warlocks, you should be shot.| |QID|2982| A Freedom for All Creatures |N|Clear around the cage in the camp, then head up the path behind the camp (65.63, 46.76)| |QID|2969| C Freedom for All Creatures |N|Lead Kindal Moonweaver down to the cage, open it, and protect the Sprite Darters as they escape.| |QID|2969| T Freedom for All Creatures |QID|2969| @@ -53,7 +53,7 @@ A Doling Justice (Part 2) |QID|2972| T The Woodpaw Gnolls |N|Look for a backpack hanging on a tree in one of the gnoll camps (73,56)| |QID|4131| A The Writhing Deep |QID|4135| -T The Writhing Deep |N|In the hive to the south (73,63). At the bottom, take the southern tunnel and stay right. Turnin at the Zukk'Ash Pod| |QID|4135| +T The Writhing Deep |N|In the hive to the south (73,63). At the bottom, take the southern tunnel and stay right. Turnin at the Zukk'Ash Pod| |QID|4135| A Freed from the Hive |QID|4265| H Feathermoon Stronghold |QID|4266| @@ -67,7 +67,7 @@ A Rise of the Silithid |NODEBUG| |QID|4267| F Rut'theran Village |N|Darnassus you dingus| |QID|2940| T Handle With Care |QID|3022| -A Favored of Elune? |QID|3661| |NORAF| +A Favored of Elune? |QID|3661| T In Search of Knowledge |QID|2939| A Feralas: A History |N|From the green book| |QID|2940| T Feralas: A History |QID|2940| @@ -81,4 +81,3 @@ T The Borrower |QID|2941| A The Super Snapper FX |QID|2944| ]] end) - diff --git a/TourGuide_Alliance/43_Tanaris.lua b/TourGuide_Alliance/43_Tanaris.lua index 2581548..0f31a32 100644 --- a/TourGuide_Alliance/43_Tanaris.lua +++ b/TourGuide_Alliance/43_Tanaris.lua @@ -29,7 +29,7 @@ T Water Pouch Bounty |QID|1707| T Wastewander Justice |QID|1690| A More Wastewander Justice |QID|1691| -C Gadgetzan Water Survey |N|To the west at a pool past the troll outpost (39,29). Two big bugs spawn, be ready to run.| |U|8584| |QID|992| +C Gadgetzan Water Survey |N|To the west at a pool past the troll outpost (39,29). Two big bugs spawn, be ready to run.| |U|8584| |QID|992| T Gadgetzan Water Survey |QID|992| A Noxious Lair Investigation |QID|82| C More Wastewander Justice |N|Around the western Wastewander camp (60,35).| |QID|1691| @@ -49,4 +49,3 @@ T WANTED: Caliph Scorpidsting |QID|2781| A Handle With Care |QID|3022| ]] end) - diff --git a/TourGuide_Alliance/46_47_Hinterlands.lua b/TourGuide_Alliance/46_47_Hinterlands.lua index 49b5a6b..2a33c26 100644 --- a/TourGuide_Alliance/46_47_Hinterlands.lua +++ b/TourGuide_Alliance/46_47_Hinterlands.lua @@ -21,7 +21,7 @@ C Witherbark Cages |N|Last cage is to the east (31,57)| |QID|2988| C Preying on the Predators |QID|9471| C Troll Necklace Bounty |N|Kill any trolls you can find if you don't have all your necklaces| |QID|2880| C Skulk Rock Clean-up |N|Northeast at Agor'watha (46,42)| |QID|2877| -C The Super Snapper FX |N|Jump off the waterfall at the east edge of the zone (81,46). Run south along the shore. Find tho aggro turtle and take it's picture.| |U|9328| |QID|2944| +C The Super Snapper FX |N|Jump off the waterfall at the east edge of the zone (81,46). Run south along the shore. Find tho aggro turtle and take it's picture.| |U|9328| |QID|2944| C Whiskey Slim's Lost Grog |QID|580| H Aerie Peak |SZ|Wildhammer Keep| |QID|2989| @@ -35,8 +35,8 @@ T In Pursuit of Featherbeard |N|To the southeast in Shadar'Alor, in the east tem A Reclaiming the Eggs |QID|9475| C Reclaiming the Eggs |N|Two eggs at the altar on the south edge of the pond (34.16, 72.91), 3 near Atal'ai Exile in a troff (33,75)| |QID|9475| -C The Altar of Zul |N|East at the Altar of Zul (48,68). Just run up the altar and back down, the mob at the top is level 50.| |QID|2989| -C Favored of Elune? |QID|3661| |NORAF| +C The Altar of Zul |N|East at the Altar of Zul (48,68). Just run up the altar and back down, the mob at the top is level 50.| |QID|2989| +C Favored of Elune? |QID|3661| A Find OOX-09/HL! |U|8704| |O| |QID|485| T Find OOX-09/HL! |O| |N|On an island north of Agor'watha (49,37)| |QID|485| @@ -49,10 +49,10 @@ T The Altar of Zul |N|Cave again| |QID|2989| A Thadius Grimshade |QID|2990| F Rut'theran Village |QID|2943| -T Favored of Elune? |QID|3661| |NORAF| +T Favored of Elune? |QID|3661| T The Super Snapper FX |QID|2944| A Return to Troyas |QID|2943| -B [Elixir of Fortitude] x2 |QID|3842| |L|3825 2| |N|From the auction house or find yourself an alchemist. You can skip this if you did not do the "Freedom for All Creatures" questline or don't plan to continue it.| +B [Elixir of Fortitude] x2 |QID|3842| |L|3825 2| |N|From the auction house or find yourself an alchemist. You can skip this if you did not do the "Freedom for All Creatures" questline or don't plan to continue it.| ]] end) diff --git a/TourGuide_Alliance/47_48_Tanaris.lua b/TourGuide_Alliance/47_48_Tanaris.lua index 5e7f7cb..de1d52f 100644 --- a/TourGuide_Alliance/47_48_Tanaris.lua +++ b/TourGuide_Alliance/47_48_Tanaris.lua @@ -11,33 +11,33 @@ A The Stone Circle |QID|3444| A Gahz'ridian |QID|3161| U Put on the helmet |U|9978| |QID|3161| -C The Dunemaul Compound |N|Kill Gor'marok in a small cave at the Dunemaul Compound (41.48, 57.81), then head to the ruins (47,66). Collect stuff for "Gahz'ridian" anytime it shows up on the minimap.| |QID|5863| +C The Dunemaul Compound |N|Kill Gor'marok in a small cave at the Dunemaul Compound (41.48, 57.81), then head to the ruins (47,66). Collect stuff for "Gahz'ridian" anytime it shows up on the minimap.| |QID|5863| C Gahz'ridian |N|Find large clusters of these in the ruins (40,73) (47,66)| |QID|3161| C Thistleshrub Valley |N|To the west (29,66)| |QID|3362| C The Thirsty Goblin |QID|2605| -N If you find Tooga... |QID|1560| |N|Accept his quest. He'll follow you, so you can complete "Noxious Lair Investigation" with him on your tail. Just make sure you leave there with at least 10 minutes left on his timer.| +N If you find Tooga... |QID|1560| |N|Accept his quest. He'll follow you, so you can complete "Noxious Lair Investigation" with him on your tail. Just make sure you leave there with at least 10 minutes left on his timer.| C Noxious Lair Investigation |N|At the Noxious Lair (34,46)| |QID|82| T Tooga's Quest |O| |QID|1560| A Yuka Screwspigot |QID|4324| |N|Back at Steamwheedle Port| -T Screecher Spirits |N|Skip the follow-up| |QID|3520| +T Screecher Spirits |S| |N|Skip the follow-up| |QID|3520| T The Thirsty Goblin |QID|2605| |N|Back at Gadgetzan| A In Good Taste |QID|2606| T The Dunemaul Compound |QID|5863| T Thistleshrub Valley |QID|3362| T In Good Taste |QID|2606| -A Sprinkle's Secret Ingredient |QID|2641| |NORAF| +A Sprinkle's Secret Ingredient |QID|2641| T Noxious Lair Investigation |QID|82| A The Scrimshank Redemption |N|Goblin on the hill to the west| |QID|10| T Gahz'ridian |N|To the south (52,45)| |QID|3161| -C The Scrimshank Redemption |N|To the south at The Gaping Chasm (55,70), go to the bottom. Take the southewest entrance, hang left until you get to the gear (55.96, 71.17)| |QID|10| +C The Scrimshank Redemption |N|To the south at The Gaping Chasm (55,70), go to the bottom. Take the southewest entrance, hang left until you get to the gear (55.96, 71.17)| |QID|10| A Find OOX-17/TN! |O| |QID|351| T OOX-17/TN Distress Beacon |O| |N|Up in the hills north on the silithid at (60,64)| |QID|351| -A Rescue OOX-17/TN! |O| |QID|648| +A Rescue OOX-17/TN! |O| |PRE|Find OOX-17/TN!| |QID|648| C Rescue OOX-17/TN! |O| |QID|648| H Gadgetzan |QID|113| @@ -48,11 +48,11 @@ A Insect Part Analysis (Part 2) |QID|113| T Insect Part Analysis (Part 2) |QID|113| A Rise of the Silithid |NODEBUG| |QID|162| -T An Orphan Looking For a Home |NODEBUG| |N|Up at the raceway in Shimmering Flats (78.38, 74.68)| |Z|Thousand Needles| |QID|3841| |NORAF| -A A Short Incubation |QID|3842| |NORAF| -T A Short Incubation |QID|3842| |NORAF| -N The next quest is timed! |QID|3843| |NORAF| -A The Newest Member of the Family |QID|3843| |NORAF| +T An Orphan Looking For a Home |NODEBUG| |N|Up at the raceway in Shimmering Flats (78.38, 74.68)| |Z|Thousand Needles| |QID|3841| +A A Short Incubation |QID|3842| +T A Short Incubation |QID|3842| +N The next quest is timed! |QID|3843| +A The Newest Member of the Family |QID|3843| F Theramore |QID|623| T Akiris by the Bundle |QID|623| @@ -60,17 +60,16 @@ T Akiris by the Bundle |QID|623| F City of Ironforge |N|Boat to Menethil, fly to IF| h Ironforge |QID|3182| -F Aerie Peak |N|Hinterlands!| |QID|4298| |NORAF| -T The Newest Member of the Family |N|In the inn, downstairs| |QID|3843| |NORAF| -A Food for Baby |QID|4297| |NORAF| +F Aerie Peak |N|Hinterlands!| |QID|4298| +T The Newest Member of the Family |N|In the inn, downstairs| |QID|3843| +A Food for Baby |QID|4297| -C Sprinkle's Secret Ingredient |N|At the bottom of a lake to the east near the Altar of Zul (40,59)| |Z|The Hinterlands| |QID|2641| |NORAF| -C Food for Baby |N|Kill stealth wolves to the east| |QID|4297| |NORAF| +C Sprinkle's Secret Ingredient |N|At the bottom of a lake to the east near the Altar of Zul (40,59)| |Z|The Hinterlands| |QID|2641| +C Food for Baby |N|Kill stealth wolves to the east| |QID|4297| -T Food for Baby |N|Back at the inn| |QID|4297| |NORAF| -A Becoming a Parent |QID|4298| |NORAF| -T Becoming a Parent |QID|4298| |NORAF| +T Food for Baby |N|Back at the inn| |QID|4297| +A Becoming a Parent |QID|4298| +T Becoming a Parent |QID|4298| ]] end) - diff --git a/TourGuide_Alliance/47_Feralas.lua b/TourGuide_Alliance/47_Feralas.lua index 1ea8060..34b1548 100644 --- a/TourGuide_Alliance/47_Feralas.lua +++ b/TourGuide_Alliance/47_Feralas.lua @@ -17,7 +17,7 @@ T Fuel for the Zapping |QID|7721| C Improved Quality |N|North at Rage Scar Hold (51,31)| |QID|7733| A The Giant Guardian |N|Find the giant "Rockbiter" north near the twin colossals (42,22)| |QID|2844| -C The Stave of Equinex |N|Northwest at the Ruins of Ravenwind. Find the essences (38.52, 15.79), (40.55, 12.64), (39.93, 9.46), (37.76, 12.15). Use the staff at the monolith (38.8, 13.1)| |U|9263| |QID|2879| +C The Stave of Equinex |N|Northwest at the Ruins of Ravenwind. Find the essences (38.52, 15.79), (40.55, 12.64), (39.93, 9.46), (37.76, 12.15). Use the staff at the monolith (38.8, 13.1)| |U|9263| |QID|2879| T The Stave of Equinex |QID|2879| A The Morrow Stone |QID|2942| T The Giant Guardian |N|Back near the last flame (38.22, 10.30)| |QID|2844| @@ -32,11 +32,10 @@ T Pristine Yeti Hide |O| |QID|7735| T The Morrow Stone |QID|2942| A The Sunken Temple |QID|3445| -A An Orphan Looking For a Home |N|East at the grimtotem camp (65.9, 45.6)| |NODEBUG| |QID|3841| |NORAF| -R Thalanaar |QID|4281| |N|Follow the road east to the border of Thousand Needles. Watch out for the horde town!| +A An Orphan Looking For a Home |N|East at the grimtotem camp (65.9, 45.6)| |NODEBUG| |QID|3841| +R Thalanaar |QID|4281| |N|Follow the road east to the border of Thousand Needles. Watch out for the horde town!| A Thalanaar Delivery |QID|4281| |U|11463| |N|You should have recieved a quest starting item when you raided the leather backpacks in an earlier guide. If not, skip this| T Thalanaar Delivery |QID|4281| ]] end) - diff --git a/TourGuide_Alliance/48_49_Stranglethorn.lua b/TourGuide_Alliance/48_49_Stranglethorn.lua index 7055d23..1117c74 100644 --- a/TourGuide_Alliance/48_49_Stranglethorn.lua +++ b/TourGuide_Alliance/48_49_Stranglethorn.lua @@ -12,9 +12,9 @@ T Rescue OOX-17/TN! |O| |N|On the second level of the docks. Just up the ramp ne T Rescue OOX-22/FE! |O| |N|On the second level of the docks. Just up the ramp next to the hanging shark, in the first house after the small bridge (28.3,76.3)| A The Captain's Chest -C Stranglethorn Fever |N|Kill gorillas around (34,63), turn in 10 fangs to the troll in the cave (35,60). Defend him against the 3 waves. In the last wave, kill Mokk first in case you die.| +C Stranglethorn Fever |N|Kill gorillas around (34,63), turn in 10 fangs to the troll in the cave (35,60). Defend him against the 3 waves. In the last wave, kill Mokk first in case you die.| C Big Game Hunter |N|Kill King Bangalash (38.2, 34.9)| -C Cracking Maury's Foot |N|Kill ogres at their mound (48,25). This item is a low drop rate, so you may want to abandon the quest if it doesn't drop.| +C Cracking Maury's Foot |N|Kill ogres at their mound (48,25). This item is a low drop rate, so you may want to abandon the quest if it doesn't drop.| T Big Game Hunter |N|At Nessingway's Camp| H Booty Bay @@ -22,10 +22,10 @@ T Stranglethorn Fever T Cracking Maury's Foot A Message in a Bottle (Part 1) |N|Open bottles on the shore east of Booty Bay, you know, the one with the pirates.| -C The Captain's Chest |N|Kill Gorlash (36,69). He's elite, so burn your cooldowns.| -T Message in a Bottle (Part 1) |N|On the island (38.55,80.61) Skip the follow-up unless you've got at least 3 people.| +C The Captain's Chest |N|Kill Gorlash (36,69). He's elite, so burn your cooldowns.| +T Message in a Bottle (Part 1) |N|On the island (38.55,80.61) Skip the follow-up unless you've got at least 3 people.| -C The Bloodsail Buccaneers (Part 5) |N|To the south at the ships (33,87) (30,88). One cap'n per ship, inside on the second level. Also keep an eye out for "Cortello's Riddle", a scroll that starts a quest.| +C The Bloodsail Buccaneers (Part 5) |N|To the south at the ships (33,87) (30,88). One cap'n per ship, inside on the second level. Also keep an eye out for "Cortello's Riddle", a scroll that starts a quest.| H Booty Bay |N|Or deathport| T The Captain's Chest @@ -41,4 +41,3 @@ C The Stone Circle |N|The chest outside the hut.| ]] end) - diff --git a/TourGuide_Alliance/49_50_Blasted_Lands.lua b/TourGuide_Alliance/49_50_Blasted_Lands.lua index e12708a..4c6b256 100644 --- a/TourGuide_Alliance/49_50_Blasted_Lands.lua +++ b/TourGuide_Alliance/49_50_Blasted_Lands.lua @@ -1,10 +1,10 @@ TourGuide:RegisterGuide("Blasted Lands (49-50)", "Searing Gorge (50-51)", "Alliance", function() return [[ -N Do you want to grind? |N|This Blasted Lands guide may appear short, but it is a BUNCH of grinding. If you do not want to do this, skip ahead to "Searing Gorge (50-51)."| +N Do you want to grind? |N|This Blasted Lands guide may appear short, but it is a BUNCH of grinding. If you do not want to do this, skip ahead to "Searing Gorge (50-51)."| F Darkshire |QID|624| -T Cortello's Riddle (Part 1) |O| |N|Run east into Swamp of Sorrows. Under a bridge on the left fork of the road (22.6,48.0)| |Z|Swamp of Sorrows| |QID|624| +T Cortello's Riddle (Part 1) |O| |N|Run east into Swamp of Sorrows. Under a bridge on the left fork of the road (22.6,48.0)| |Z|Swamp of Sorrows| |QID|624| R Blasted Lands |N|Run east into Swamp of Sorrows, then south.| |QID|2990| @@ -32,8 +32,7 @@ T Snickerfang Jowls |QID|2581| T A Boar's Vitality |QID|2583| T The Decisive Striker |QID|2585| -T Thadius Grimshade |N|In the tower in Nethergarde Keep (67.0,19.4). Skip the follow-up.| |QID|2990| +T Thadius Grimshade |N|In the tower in Nethergarde Keep (67.0,19.4). Skip the follow-up.| |QID|2990| ]] end) - diff --git a/TourGuide_Alliance/50_51_Searing_Gorge.lua b/TourGuide_Alliance/50_51_Searing_Gorge.lua index e5caaab..dd11f32 100644 --- a/TourGuide_Alliance/50_51_Searing_Gorge.lua +++ b/TourGuide_Alliance/50_51_Searing_Gorge.lua @@ -8,7 +8,7 @@ B 15 Silk Cloth |L|4306 15| |N|If you don't already have them, that is| |QID|444 R Searing Gorge |N|Fly to Thelsamar, run down through the badlands to the west edge of the zone (1,62)| |Z|Badlands| |QID|4449| A Caught! |N|At an outhouse (65.58, 62.33)| |QID|4449| -A Suntara Stones (Part 1) |N|Dorf down in the dig (63.8, 60.9). This is another crummy escort.| |QID|3367| +A Suntara Stones (Part 1) |N|Dorf down in the dig (63.8, 60.9). This is another crummy escort.| |QID|3367| T Suntara Stones (Part 1) |QID|3367| A Suntara Stones (Part 2) |N|Read the letter he dropped| |QID|3368| @@ -43,7 +43,7 @@ A Proof of Deed |QID|3182| H City of Ironforge |QID|3182| T Proof of Deed |N|In the Hall of Explorers| |QID|3182| A At Last! |QID|3201| -A A Little Slime Goes a Long Way |N|In the Hall of Explorers museum (75.82, 23.19)| |Z|Ironforge| |QID|4512| |NORAF| +A A Little Slime Goes a Long Way |N|In the Hall of Explorers museum (75.82, 23.19)| |Z|Ironforge| |QID|4512| F Thelsamar |QID|3201| T At Last! |N|Valley of Kings again (18.18, 84.06)| |Z|Loch Modan| |QID|3201| @@ -60,7 +60,7 @@ A Forging the Shaft |QID|3443| A The Key to Freedom |O| |U|11818| |QID|4451| T The Key to Freedom |O| |N|Back at the outhouse!| |QID|4451| -T Dwarven Justice |N|Head down into the cauldren. Enter the second cave from the west end (41,54), find the Dying Archaeologist (41.19, 25.72). Kill DI Taskmasters and Slavers on the way, of course!| |QID|3371| +T Dwarven Justice |N|Head down into the cauldren. Enter the second cave from the west end (41,54), find the Dying Archaeologist (41.19, 25.72). Kill DI Taskmasters and Slavers on the way, of course!| |QID|3371| A Release Them |QID|3372| C JOB OPPORTUNITY: Culling the Competition |N|Keep working your way towards the exit| |QID|7729| C WANTED: Overseer Maltorius |N|Up the top in the room to the right (40.76,35.7)| |QID|7701| @@ -79,7 +79,7 @@ T What the Flux? |QID|7722| T Forging the Shaft |QID|3443| A The Flame's Casing |QID|3452| -C Release Them |N|Run up the path to the east of the cave at the Twilight Hammer camp (24,32). In the center of a lava pool is the Twilight Artifact (29.2, 25.9)| |QID|3372| +C Release Them |N|Run up the path to the east of the cave at the Twilight Hammer camp (24,32). In the center of a lava pool is the Twilight Artifact (29.2, 25.9)| |QID|3372| A Prayer to Elune (Part 1) |N|From an NPC in a cage nearby (29.5, 26.5)| |QID|3377| T Prayer to Elune (Part 1) |QID|3377| A Prayer to Elune (Part 2) |QID|3378| @@ -94,7 +94,7 @@ T The Torch of Retribution (Part 2) |N|Grab the torch he just made, duh.| |QID|3 A Squire Maltrake |QID|3462| T Squire Maltrake |QID|3462| A Set Them Ablaze! |QID|3463| -T Release Them |N|Head back down to the Dying Archaeologist (41.2, 25.7). You can drop through the hole if you want (35.15,43.18). Talk to the alter near him. Don't accept the followup unless you have a group to help.| |QID|3372| +T Release Them |N|Head back down to the Dying Archaeologist (41.2, 25.7). You can drop through the hole if you want (35.15,43.18). Talk to the alter near him. Don't accept the followup unless you have a group to help.| |QID|3372| C Set Them Ablaze! |N|Light the brazier at each tower (33,53) (36,60) (44,61) (50,54)| |U|10515| |QID|3463| T Set Them Ablaze! |N|Back at Thorium Point| |QID|3463| diff --git a/TourGuide_Alliance/51_52_UnGoro_Crater.lua b/TourGuide_Alliance/51_52_UnGoro_Crater.lua index ce96c8e..a1d4772 100644 --- a/TourGuide_Alliance/51_52_UnGoro_Crater.lua +++ b/TourGuide_Alliance/51_52_UnGoro_Crater.lua @@ -2,7 +2,7 @@ TourGuide:RegisterGuide("Un'Goro Crater (51-52)", "Felwood (53-54)", "Alliance", function() return [[ R Un'Goro Crater |N|The entrance is in the soutwest corner of Tanaris. Look for two large stone pillars (27,58).| |Z|Tanaris| |QID|3844| -N Look for loot... |N|There are many loot nodes scattered across this zone. You'll need 7 of each color of power crystals. Also loot any dirt piles or sprouts you find.| |QID|3781| +N Look for loot... |N|There are many loot nodes scattered across this zone. You'll need 7 of each color of power crystals. Also loot any dirt piles or sprouts you find.| |QID|3781| A The Apes of Un'Goro |N|Tauren on the hill to the left of the ramp from Tanaris (69,77)| |QID|4289| A The Fare of Lar'korwi |QID|4290| @@ -45,30 +45,30 @@ A The Western Pylon |QID|4288| N Kill stuff... |N|Kill any bloodpetals, diametradons, and pterrordaxes you come across| |QID|4141| -C The Northern Pylon |N|Along the north edge of the zone to the east (56.46, 12.48). Kill pterrordaxes here.| |QID|4285| -T Chasing A-Me 01 |N|East in the gorilla cave (63,17). Skip the follow-up.| |QID|4243| +C The Northern Pylon |N|Along the north edge of the zone to the east (56.46, 12.48). Kill pterrordaxes here.| |QID|4285| +T Chasing A-Me 01 |N|East in the gorilla cave (63,17). Skip the follow-up.| |QID|4243| C The Apes of Un'Goro |QID|4289| C Super Sticky |N|At the tarpits in the north half of the zone| |QID|4504| N Find [Crate of Foodstuffs] |N|At the abandoned camp in the east side of the zone (68.52, 36.59)| |L|11113| |QID|3881| -C Muigin and Larion |N|Kill lasher around the camp area. Also kill any diemetradons or pterrordaxes you come across| |QID|4141| +C Muigin and Larion |N|Kill lasher around the camp area. Also kill any diemetradons or pterrordaxes you come across| |QID|4141| C The Eastern Pylon |N|To the east, of course (77.2,50)| |QID|4287| U Open Torwa's Pouch |U|11568| |QID|4292| U Place the meat |U|11569| |N|At the flat rock behind the east pylon (79.9, 49.9)| |QID|4292| C The Bait for Lar'korwi |U|11570| |QID|4292| |N|Use the pheromone mixture, kill him!| -T The Apes of Un'Goro |N|Skip the follow-up| |QID|4289| +T The Apes of Un'Goro |S| |N|Skip the follow-up| |QID|4289| T The Bait for Lar'korwi |QID|4292| -C Alien Ecology |N|Down in the Slithering Scar (50,77). Head left inside to the big room (48.62, 85.33), use the vial| |U|11132| |QID|3883| +C Alien Ecology |N|Down in the Slithering Scar (50,77). Head left inside to the big room (48.62, 85.33), use the vial| |U|11132| |QID|3883| C Bungle in the Jungle |QID|4496| -C Expedition Salvation |N|At camp to the west (38.5, 66.0). Beware of the elite Stegodons.| |QID|3881| +C Expedition Salvation |N|At camp to the west (38.5, 66.0). Beware of the elite Stegodons.| |QID|3881| C The Western Pylon |N|Up the hill, west of the camp (23.8, 59.1)| |QID|4288| A Finding the Source |N|From a goblin near the hot springs (30.9, 50.4)| |QID|974| -C Roll the Bones |N|Scattered all over the west half of the zone and drop from diemetradons. Kill pterrordaxes over here too. There is usually a good stash of bones at a threshadon carcass to the southwest of the camp (31.27, 77.43).| |QID|3882| -C Beware of Pterrordax |N|You can find the Frenzied Pterrordaxes all over the west half of the zone, more towards the northwest part. Normal Pterrordaxes are in the south half of the zone, and a few near the North pylon.| |QID|4501| +C Roll the Bones |N|Scattered all over the west half of the zone and drop from diemetradons. Kill pterrordaxes over here too. There is usually a good stash of bones at a threshadon carcass to the southwest of the camp (31.27, 77.43).| |QID|3882| +C Beware of Pterrordax |N|You can find the Frenzied Pterrordaxes all over the west half of the zone, more towards the northwest part. Normal Pterrordaxes are in the south half of the zone, and a few near the North pylon.| |QID|4501| C Shizzle's Flyer |N|Kill diemetradons and pterrordaxes, all over the zone.| |QID|4503| -C Finding the Source |N|At the volcano in the center of the zone. Use the thermometer at the "Hot Spot" at the top of the mountain (49.75, 45.78).| |U|12472| |QID|974| +C Finding the Source |N|At the volcano in the center of the zone. Use the thermometer at the "Hot Spot" at the top of the mountain (49.75, 45.78).| |U|12472| |QID|974| C Volcanic Activity |N|Kill elementals, mainly around the cave on the south side of the volcano.| |QID|4502| T Lost! |N|In the cave on the south side of the volcano (51,49)| |QID|4492| A A Little Help From My Friends |NODEBUG| |QID|4491| @@ -76,7 +76,7 @@ C A Little Help From My Friends |NODEBUG| |N|Use the canteen on him if he faints T A Little Help From My Friends |NODEBUG| |QID|4491| T Beware of Pterrordax |QID|4501| T Shizzle's Flyer |QID|4503| -T Muigin and Larion |N|Skip the follow-up| |QID|4141| +T Muigin and Larion |S| |N|Skip the follow-up| |QID|4141| T Roll the Bones |QID|3882| T Alien Ecology |QID|3883| T Expedition Salvation |QID|3881| @@ -92,7 +92,7 @@ A The New Springs |QID|980| R Silithus |N|Take the path up out of the crater in the northwest corner of the zone (29,22)| |QID|4504| R Cenarion Hold |N|Follow the road| |QID|4504| F Gadgetzan |N|Flightpoint is up the big hill| -T Bungle in the Jungle |N|Skip the follow-up| |QID|4496| +T Bungle in the Jungle |S| |N|Skip the follow-up| |QID|4496| T Super Sticky |QID|4504| F Ratchet |QID|4502| diff --git a/TourGuide_Alliance/51_Kalimdor.lua b/TourGuide_Alliance/51_Kalimdor.lua index 846ba55..58b88cb 100644 --- a/TourGuide_Alliance/51_Kalimdor.lua +++ b/TourGuide_Alliance/51_Kalimdor.lua @@ -21,7 +21,7 @@ T Rescue OOX-17/TN! |O| |N|On the second level of the docks. Just up the ramp ne T Rescue OOX-22/FE! |O| |N|On the second level of the docks. Just up the ramp next to the hanging shark, in the first house after the small bridge (28.3,76.3)| |QID|2767| F Gadgetzan |QID|3444| -T Sprinkle's Secret Ingredient |QID|2641| |NORAF| +T Sprinkle's Secret Ingredient |QID|2641| A Delivery for Marin |QID|2661| T Delivery for Marin |QID|2661| A Noggenfogger Elixir |QID|2662| @@ -30,8 +30,7 @@ A Super Sticky |QID|4504| T March of the Silithid |QID|4493| A Bungle in the Jungle |QID|4496| -T The Stone Circle |N|South of Gadget at the ruins (52.7, 45.9). Skip the follow-up.| |Z|Tanaris| |QID|3444| +T The Stone Circle |N|South of Gadget at the ruins (52.7, 45.9). Skip the follow-up.| |Z|Tanaris| |QID|3444| ]] end) - diff --git a/TourGuide_Alliance/52_53_Azshara.lua b/TourGuide_Alliance/52_53_Azshara.lua index f4e6c47..2bb988c 100644 --- a/TourGuide_Alliance/52_53_Azshara.lua +++ b/TourGuide_Alliance/52_53_Azshara.lua @@ -39,10 +39,10 @@ A Courser Antlers |QID|8153| |C|Hunter| T Cenarion Aid |QID|8254| |C|Priest| A Of Coursers We Know |QID|8255| |C|Priest| -C Sealed Azure Bag |QID|8234| |C|Rogue| |N|Can be pickpocketed from Timbermaw Shaman (45,25). If you are Unfriendly or better with them, you will have to check 'At War' in their reputation panel.| +C Sealed Azure Bag |QID|8234| |C|Rogue| |N|Can be pickpocketed from Timbermaw Shaman (45,25). If you are Unfriendly or better with them, you will have to check 'At War' in their reputation panel.| A Kim'jael Indeed! |QID|3601| |N|On top of a hill near the satyr camp to the north (53.4, 21.8)| -C Kim'jael Indeed! |QID|3601| |N|To the south at the Thallasian Base Camp (56,29) (57,28) (60,31) (59,28). Loot the crates till you find all his stuff.| +C Kim'jael Indeed! |QID|3601| |N|To the south at the Thallasian Base Camp (56,29) (57,28) (60,31) (59,28). Loot the crates till you find all his stuff.| C Magic Dust |QID|8251| |C|Mage| |N|Kill them blood elves!| T Kim'jael Indeed! |QID|3601| A Kim'jael's "Missing" Equipment |QID|5534| diff --git a/TourGuide_Alliance/53_54_Felwood.lua b/TourGuide_Alliance/53_54_Felwood.lua index 26682e0..d7fa25f 100644 --- a/TourGuide_Alliance/53_54_Felwood.lua +++ b/TourGuide_Alliance/53_54_Felwood.lua @@ -7,11 +7,10 @@ A Morrowgrain Research (Part 1) |N|Upstairs!| |QID|3781| T Morrowgrain Research (Part 1) |N|Downstairs!| |QID|3781| A Morrowgrain Research (Part 2) |QID|3785| |NODEBUG| N Morrowgrain... |N|Use the Evergreen Pouch whenever it's cooldown is up until you get all your Morrowgrain.| |QID|3785| -A Moontouched Wildkin |N|Down in Rut'theran Village| |QID|978| |NORAF| +A Moontouched Wildkin |N|Down in Rut'theran Village| |QID|978| -R Felwood |N|Fly to Astranaar then head east out of town. At the fork near the retreat head north out of the zone (55.75, 29.50)| |Z|Ashenvale| |QID|4101| |NORAF| -R Felwood |N|Fly to Astranaar then head east out of town. At the fork near the retreat head north out of the zone (55.75, 29.50)| |Z|Ashenvale| |QID|8460| |RAF| -A Cleansing Felwood |N|On the north side of the road (54,86)| |QID|4101| |NORAF| +R Felwood |N|Fly to Astranaar then head east out of town. At the fork near the retreat head north out of the zone (55.75, 29.50)| |Z|Ashenvale| |QID|4101| +A Cleansing Felwood |N|On the north side of the road (54,86)| |QID|4101| R Emerald Sanctuary |N|Just ahead, north of the road (51,81)| |QID|5155| A Forces of Jaedenar |QID|5155| @@ -23,10 +22,10 @@ C Timbermaw Ally |N|Just to the southwest| |QID|8460| T Timbermaw Ally |QID|8460| A Speak to Nafien |QID|8462| -U Open your ooze containers |U|11912| |QID|4512| |NORAF| -K Cursed Oozes |N|Follow the road north to the Ruins of Constellas (40,69). Use the vials after you kill and loot.| |U|11914| |QID|4512| |QO|Filled Cursed Ooze Jar: 6/6| |NORAF| +U Open your ooze containers |U|11912| |QID|4512| +K Cursed Oozes |N|Follow the road north to the Ruins of Constellas (40,69). Use the vials after you kill and loot.| |U|11914| |QID|4512| |QO|Filled Cursed Ooze Jar: 6/6| C The Corruption of the Jadefire |N|To the west, Xavathras can be found at the far west end of the ruins (32,67)| |QID|4421| -C A Little Slime Goes a Long Way (Part 1) |N|At the next set of ponds north along the road (40,59)| |U|11948| |QID|4512| |NORAF| +C A Little Slime Goes a Long Way (Part 1) |N|At the next set of ponds north along the road (40,59)| |U|11948| |QID|4512| C Forces of Jaedenar |N|To the west, outside the caves (37,59)| |QID|5155| T Forces of Jaedenar |N|Back at Emerald Sanctuary| |QID|5155| @@ -35,12 +34,12 @@ T The Corruption of the Jadefire |QID|4421| A Further Corruption |QID|4906| C Collection of the Corrupt Water |N|Fill the vial at the corrupted moonwell in Jaedenar (35.25, 59.75)| |U|12922| |QID|5157| -C Verifying the Corruption |N|North at Shatter Scar Vale (40.52, 41.78). Watch out for the elite infernals!| |QID|5156| +C Verifying the Corruption |N|North at Shatter Scar Vale (40.52, 41.78). Watch out for the elite infernals!| |QID|5156| K Kill Xavaric |L|11668| |N|North in Jadefire Run (39,22)| |QID|939| A Flute of Xavaric |N|From the item he dropped, naturally| |U|11668| |QID|939| C Further Corruption |QID|4906| C Flute of Xavaric |QID|939| -C Cleansing Felwood |N|Kill elementals at Irontree Cavern (55,17)| |QID|4101| |NORAF| +C Cleansing Felwood |N|Kill elementals at Irontree Cavern (55,17)| |QID|4101| R Talonbranch Glade |N|At the northeast edge of the zone, south of the road (62,24)| |QID|5156| F Emerald Sanctuary |QID|5156| @@ -48,7 +47,7 @@ T Collection of the Corrupt Water |QID|5157| T Further Corruption |QID|4906| T Flute of Xavaric |QID|939| T Verifying the Corruption |QID|5156| -T Cleansing Felwood |N|South along the road| |QID|4101| |NORAF| +T Cleansing Felwood |N|South along the road| |QID|4101| A To Winterspring! |QID|5249| |N|You can't get this quest if you already have "Starfall".| F Talonbranch Glade |QID|8465| @@ -59,4 +58,3 @@ T Deadwood of the North |QID|8461| A Speak to Salfa |QID|8465| ]] end) - diff --git a/TourGuide_Alliance/54_55_Winterspring.lua b/TourGuide_Alliance/54_55_Winterspring.lua index b31a66d..31a4daf 100644 --- a/TourGuide_Alliance/54_55_Winterspring.lua +++ b/TourGuide_Alliance/54_55_Winterspring.lua @@ -7,10 +7,10 @@ f Get Fight Point |N|(48.1,67.3)| |C|Death Knight, Hunter, Mage, Paladin, Priest R Winterspring |N|You need to be Unfriendly or higher and not At War with the Timbermaw Hold to go through the cave| |QID|8465| T Speak to Salfa |QID|8465| A Winterfall Activity |QID|8464| -N Grab feathers you see |N|For "Moontouched Wildkin"| |QID|978| |NORAF| +N Grab feathers you see |N|For "Moontouched Wildkin"| |QID|978| T The New Springs |N|To the south near the hot springs (31.27, 45.20)| |Z|Winterspring| |QID|980| A Strange Sources |QID|4842| -T It's a Secret to Everybody (Part 3) |QID|3908| |N|Skip the follow-up.| +T It's a Secret to Everybody (Part 3) |QID|3908| |S| |N|Skip the follow-up.| A Threat of the Winterfall |QID|5082| R Everlook |N|Follow the road east| @@ -19,30 +19,30 @@ h Everlook |QID|977| A The Everlook Report |QID|6028| A Duke Nicholas Zverenhoff |QID|6030| A Sister Pamela |QID|5601| -A Are We There, Yeti? (Part 1) |QID|3783| |NORAF| +A Are We There, Yeti? (Part 1) |QID|3783| C Strange Sources |N|Follow the road far to the south (60.12,73.44)| |QID|4842| H Everlook |QID|977| -C Are We There, Yeti? (Part 1) |N|Just southeast of town. Kill yeti outside the cave.| |QID|3783| |NORAF| -T Are We There, Yeti? (Part 1) |N|Back in Everlook| |QID|3783| |NORAF| -A Are We There, Yeti? (Part 2) |QID|977| |NORAF| -C Are We There, Yeti? (Part 2) |N|Back in the yeti cave (67,42)| |QID|977| |NORAF| -T Are We There, Yeti? (Part 2) |QID|977| |NORAF| -A Are We There, Yeti? (Part 3) |QID|5163| |NORAF| -N Scare Legacki |N|East of the inn, use the Yeti| |U|12928| |QID|5163| |QO|Scare Legacki: 1/1| |NORAF| +C Are We There, Yeti? (Part 1) |N|Just southeast of town. Kill yeti outside the cave.| |QID|3783| +T Are We There, Yeti? (Part 1) |N|Back in Everlook| |QID|3783| +A Are We There, Yeti? (Part 2) |QID|977| +C Are We There, Yeti? (Part 2) |N|Back in the yeti cave (67,42)| |QID|977| +T Are We There, Yeti? (Part 2) |QID|977| +A Are We There, Yeti? (Part 3) |QID|5163| +N Scare Legacki |N|East of the inn, use the Yeti| |U|12928| |QID|5163| |QO|Scare Legacki: 1/1| C Winterfall Activity |N|East of town (66,34)| |QID|8464| T To Winterspring! |QID|5249| |O| T Starfall |QID|5250| |O| A The Ruins of Kel'Theril |QID|5244| -T Enraged Wildkin (Part 1) |N|Skip the follow-up| |QID|6604| +T Enraged Wildkin (Part 1) |S| |N|Skip the follow-up| |QID|6604| T The Ruins of Kel'Theril |QID|5244| A Troubled Spirits of Kel'Theril |QID|5245| C Troubled Spirits of Kel'Theril |N|Find the relics scattered around Ruins of Kel'Theril (55.15, 42.93), (53.34, 43.41), (52.43, 41.52) (50.89, 41.73)| |QID|5245| C Threat of the Winterfall |N|Kill furblogs near the hot springs (30,37) or south of the road east of the springs (39,43)| |QID|5082| -C Moontouched Wildkin |QID|978| |NORAF| +C Moontouched Wildkin |QID|978| A Winterfall Firewater |U|12771| |N|Kill furblogs until you get an Empty Firewater Flask| |QID|5083| T Strange Sources |N|Back at the camp near the south spring| |QID|4842| T Threat of the Winterfall |QID|5082| @@ -56,9 +56,9 @@ A Mystery Goo |QID|5085| T Mystery Goo |N|Back in Winterspring. Skip the follow-up.| |QID|5085| F Rut'theran Village |QID|6762| -T Moontouched Wildkin |N|Skip the follow-up| |QID|978| |NORAF| +T Moontouched Wildkin |S| |N|Skip the follow-up| |QID|978| -A The New Frontier (Part 1) |QID|1047| |N|From Herald Moonstalker in Darnassus, she wanders in a figure eight around town and across the bridge. From the bank run north and around coming back across the bridge, then south and around until you find her. She also walks behind the bank!| +A The New Frontier (Part 1) |QID|1047| |N|From Herald Moonstalker in Darnassus, she wanders in a figure eight around town and across the bridge. From the bank run north and around coming back across the bridge, then south and around until you find her. She also walks behind the bank!| T The New Frontier (Part 1) |QID|1047| A The New Frontier (Part 2) |QID|6761| T The New Frontier (Part 2) |QID|6761| @@ -70,4 +70,3 @@ A Wasteland |QID|1124| ]] end) - diff --git a/TourGuide_Alliance/54_Felwood.lua b/TourGuide_Alliance/54_Felwood.lua deleted file mode 100644 index 7233381..0000000 --- a/TourGuide_Alliance/54_Felwood.lua +++ /dev/null @@ -1,23 +0,0 @@ - -TourGuide:RegisterGuide("Felwood (54)", "Winterspring (54-55)", "Alliance", function() -return [[ -F Emerald Sanctuary -T Cleansed Water Returns to Felwood -A Dousing the Flames of Protection -T Felbound Ancients -A Purified! -T Purified! -T Linken's Memory -A Silver Heart - -C Dousing the Flames of Protection |N|In the cave at Jaedenar (35,58)| -C Silver Heart |N|Kill bears and wolves all over. Kill tree elementals in the Irontree Woods (51,19)| - -F Emerald Sanctuary |N|Run to the FP at the north end and fly down| -T Dousing the Flames of Protection |N|Skip the follow-up| -T Silver Heart -A Aquementas -A To Winterspring! -]] -end) - diff --git a/TourGuide_Alliance/54_Ungoro_Crater.lua b/TourGuide_Alliance/54_Ungoro_Crater.lua deleted file mode 100644 index d420b76..0000000 --- a/TourGuide_Alliance/54_Ungoro_Crater.lua +++ /dev/null @@ -1,36 +0,0 @@ - -TourGuide:RegisterGuide("Un'Goro Crater (54)", "Felwood (54)", "Alliance", function() -return [[ -F City of Ironforge -T A Little Slime Goes a Long Way (Part 1) |N|In the Hall of Explorers| -A A Little Slime Goes a Long Way (Part 2) -T Return to Tymor |N|In the Mystic Ward| - -F Gadgetzan -T Meet at the Grave |N|Go to the graveyard east of town, drink the elixir. DO NOT REZ. Run north to Gaeriyan (54.0, 23.4)| |U|11243| |Z|Tanaris| -A A Grave Situation -T A Grave Situation |N|Head back to the graveyard and rez, talk to the tombstone.| -A Linken's Sword - -R Un'Goro Crater -A The Mighty U'cha |N|From the tauren at the bottom of the ramp (71,76)| -C A Little Slime Goes a Long Way (Part 2) |N|You can find a lot of slimes east and west of the volcano. Stun them when they try to clone if you can.| -A Chasing A-Me 01 (Part 1) |N|At the gorilla cave in the far northeast (64,16). Hang a right to the gorilla-bot.| -T Chasing A-Me 01 (Part 1) -C The Mighty U'cha -A Chasing A-Me 01 (Part 2) -C Chasing A-Me 01 (Part 2) |N|Just your usual escort.| -T Chasing A-Me 01 (Part 2) -T Linken's Sword -A A Gnome's Assistance -T A Gnome's Assistance |N|In the crystal cave| -A Linken's Memory - -T The Mighty U'cha |N|Back down at the tauren| - -H Astranaar -F Darnassus -C Felbound Ancients |N|Fill your vial at the temple moonwell| |U|11682| |L|5646| -]] -end) - diff --git a/TourGuide_Alliance/55_56_Burning_Steppes.lua b/TourGuide_Alliance/55_56_Burning_Steppes.lua index 6e0dfef..4115e02 100644 --- a/TourGuide_Alliance/55_56_Burning_Steppes.lua +++ b/TourGuide_Alliance/55_56_Burning_Steppes.lua @@ -3,7 +3,7 @@ TourGuide:RegisterGuide("Burning Steppes (55-56)", "Silithus (56)", "Alliance", return [[ F City of Ironforge |N|Fly to Auberdine, boat to Stormwind, tram to Ironforge| |QID|8275| h Ironforge |QID|3701| -T A Little Slime Goes a Long Way |N|In the Hall of Explorers, skip the follow-up.| |QID|4512| |NORAF| +T A Little Slime Goes a Long Way |N|In the Hall of Explorers, skip the follow-up.| |QID|4512| A The Smoldering Ruins of Thaurissan (Part 1) |N|In the throne room| |QID|3702| T The Smoldering Ruins of Thaurissan (Part 1) |QID|3702| A The Smoldering Ruins of Thaurissan (Part 2) |QID|3701| @@ -14,7 +14,7 @@ f Grab flight point |N|Up in Morgan's Vigil (83,63)| |QID|3823| A Extinguish the Firegut |QID|3823| A FIFTY! YEP! |QID|4283| -C Extinguish the Firegut |N|Kill ogres down at the mountain (82,54). Most of the mages can be found in the cave on the northern face (83,39)| |QID|3823| +C Extinguish the Firegut |N|Kill ogres down at the mountain (82,54). Most of the mages can be found in the cave on the northern face (83,39)| |QID|3823| T Extinguish the Firegut |QID|3823| A Gor'tesh the Brute Lord |QID|3824| @@ -27,10 +27,10 @@ C The Smoldering Ruins of Thaurissan (Part 2) |N|Poke the relics around this are C Gor'tesh the Brute Lord |N|At Pillar of Ash (40,55)| |QID|3824| C FIFTY! YEP! |N|Kill orcs at Blackrock Stronghold (43,36) or Pillar of Ash (49,55)| |QID|4283| -C Broodling Essence |N|Dragons to the northeast. Use the device on them, then kill them. Get help if you can.| |U|12284| |QID|4726| +C Broodling Essence |N|Dragons to the northeast. Use the device on them, then kill them. Get help if you can.| |U|12284| |QID|4726| A A Taste of Flame |N|In the cave at Slither Rock (94,31)| |QID|4024| -T A Taste of Flame |N|Skip the follow-up| |QID|4024| +T A Taste of Flame |S| |N|Skip the follow-up| |QID|4024| T FIFTY! YEP! |N| Back at Morgan's Vigil (84,68)| |QID|4283| T Gor'tesh the Brute Lord |QID|3824| diff --git a/TourGuide_Alliance/56_57_Western_Plaguelands.lua b/TourGuide_Alliance/56_57_Western_Plaguelands.lua index 044a203..82f019c 100644 --- a/TourGuide_Alliance/56_57_Western_Plaguelands.lua +++ b/TourGuide_Alliance/56_57_Western_Plaguelands.lua @@ -9,11 +9,11 @@ T Return to Tymor |QID|3461| |O| |N|In Ironforge, of course| R Western Plaguelands |N|Fly to Southshore then follow the road north out of the zone, east thru Alterac until you come to Chillwind Camp.| |QID|5066| A A Plague Upon Thee (Part 1) |QID|5903| -A The Mark of the Lightbringer |N|From Anchorite Truuen. He may not be in the camp if he's out doing the escort quest.| |QID|9474| +A The Mark of the Lightbringer |N|From Anchorite Truuen. He may not be in the camp if he's out doing the escort quest.| |QID|9474| T A Call to Arms: The Plaguelands! |QID|5066| A Clear the Way |QID|5092| T The Everlook Report |QID|6028| -N Get a Commission |N|Talk to the quartermaster and get a commission, you should have this equipped any time you are in the plaguelands. Turn in any scourgestones you get when you are in town if you have a full stack.| |L|12846| |QID|5092| +N Get a Commission |N|Talk to the quartermaster and get a commission, you should have this equipped any time you are in the plaguelands. Turn in any scourgestones you get when you are in town if you have a full stack.| |L|12846| |QID|5092| C Clear the Way |N|To the northeast at Sorrow Hill| |QID|5092| T Clear the Way |QID|5092| @@ -23,7 +23,7 @@ T The Scourge Cauldrons |QID|5215| A Target: Felstone Field |QID|5216| C All Along the Watchtowers |U|12815| |N|Mark each tower in Andorhal, you can get close enough to mark without aggroing mobs inside if you are careful. (47,71) (40,71) (42,66) (44,63)| |QID|5097| -C Target: Felstone Field |N|To the northwest at Felstone Field (37,56). Kill Cauldron Lord Bilemaw for the key, then talk to the cauldren.| |QID|5216| +C Target: Felstone Field |N|To the northwest at Felstone Field (37,56). Kill Cauldron Lord Bilemaw for the key, then talk to the cauldren.| |QID|5216| T Target: Felstone Field |N|Talk to the cauldren| |QID|5216| A Return to Chillwind Camp (Part 1) |QID|5217| @@ -38,12 +38,12 @@ A Skeletal Fragments |QID|5537| T Return to Chillwind Camp (Part 1) |QID|5217| A Target: Dalson's Tears |QID|5219| -C Target: Dalson's Tears |N|To the north at Dalson's Tears (46,52). Kill Cauldron Lord Malvinious for the key, then talk to the cauldren.| |QID|5219| +C Target: Dalson's Tears |N|To the north at Dalson's Tears (46,52). Kill Cauldron Lord Malvinious for the key, then talk to the cauldren.| |QID|5219| T Target: Dalson's Tears |N|Talk to the cauldren| |QID|5219| A Return to Chillwind Camp (Part 2) |QID|5220| -N Read Mrs. Dalson's Diary |N|On the floor in the barn (47.8, 50.7). Nothing to accept, just read the book.| |QID|5060| -K Wandering Skeleton |N|Patrols around the house and barn, you are looking for the outhouse key. Scarlets might kill this mob.| |L|12738| |QID|5060| +N Read Mrs. Dalson's Diary |N|On the floor in the barn (47.8, 50.7). Nothing to accept, just read the book.| |QID|5060| +K Wandering Skeleton |N|Patrols around the house and barn, you are looking for the outhouse key. Scarlets might kill this mob.| |L|12738| |QID|5060| K Farmer Dalson |N|Open the outhouse, get his key| |L|12739| |QID|5060| N Open cabinet |N|Locked cabinet upstairs in the house.| |L|13475| |QID|5060| @@ -70,7 +70,7 @@ A Two Halves Become One |QID|5051| C Two Halves Become One |N|Go out in the field and kill the Jabbering Ghoul (only one with a pitchfork), then combine the pieces.| |QID|5051| |U|12722| T Two Halves Become One |QID|5051| -C Target: Writhing Haunt |N|To the southeast at Writhing Haunt (53,65). Kill Cauldron Lord Razarch for the key, then talk to the cauldren.| |QID|5222| +C Target: Writhing Haunt |N|To the southeast at Writhing Haunt (53,65). Kill Cauldron Lord Razarch for the key, then talk to the cauldren.| |QID|5222| T Target: Writhing Haunt |N|Talk to the cauldren| |QID|5222| A Return to Chillwind Camp (Part 3) |QID|5223| @@ -84,7 +84,7 @@ A Target: Gahrron's Withering |QID|5225| C The Wildlife Suffers Too (Part 2) |N|East, between Writhing Haunt and Gahrron's Withering (52,56)| |QID|4985| -C Target: Gahrron's Withering |N|To the east at Writhing Haunt (62,58). Kill Cauldron Lord Soulwrath for the key, then talk to the cauldren.| |QID|5225| +C Target: Gahrron's Withering |N|To the east at Writhing Haunt (62,58). Kill Cauldron Lord Soulwrath for the key, then talk to the cauldren.| |QID|5225| T Target: Gahrron's Withering |N|Talk to the cauldren| |QID|5225| A Return to Chillwind Camp (Part 4) |QID|5226| diff --git a/TourGuide_Alliance/56_Silithus.lua b/TourGuide_Alliance/56_Silithus.lua index ff39f9b..1227596 100644 --- a/TourGuide_Alliance/56_Silithus.lua +++ b/TourGuide_Alliance/56_Silithus.lua @@ -1,11 +1,11 @@ TourGuide:RegisterGuide("Silithus (56)", "Western Plaguelands (56-57)", "Alliance", function() return [[ -F Gadgetzan |QID|5163| |NORAF| -N Scare Sprinkle |N|Northwest side of town, use the Yeti| |U|12928| |QID|5163| |QO|Scare Sprinkle: 1/1| |NORAF| +F Gadgetzan |QID|5163| +N Scare Sprinkle |N|Northwest side of town, use the Yeti| |U|12928| |QID|5163| |QO|Scare Sprinkle: 1/1| -F Un'Goro Crater |QID|5163| |NORAF| -N Scare Quixxil |U|12928| |QID|5163| |QO|Scare Quixxil: 1/1| |NORAF| +F Un'Goro Crater |QID|5163| +N Scare Quixxil |U|12928| |QID|5163| |QO|Scare Quixxil: 1/1| F Silithus |QID|8275| A The Twilight Mystery |QID|8284| @@ -14,7 +14,7 @@ A Securing the Supply Lines |QID|8280| h Cenarion Hold |QID|8287| A Deadly Desert Venom |QID|8277| -C The Twilight Mystery |N|Far to the west (22,9). Kill stuff along the way for other quests. Avoid the hive and the silithid mobs.| |QID|8284| +C The Twilight Mystery |N|Far to the west (22,9). Kill stuff along the way for other quests. Avoid the hive and the silithid mobs.| |QID|8284| C Deadly Desert Venom |QID|8277| C Securing the Supply Lines |QID|8280| @@ -28,10 +28,10 @@ A The Deserter |QID|8285| T Wasteland |N|Take the road northwest to Valor's Rest (81.8, 18.3)| |QID|1124| A The Spirits of Southwind |QID|1125| -C The Spirits of Southwind |N|Follow the road southwest until you're almost back at the hold, then south to Southwind (62,53). Stick to the outskirts, working your way around to the south side of the outpost.| |QID|1125| -T The Deserter |N|In a cave (67,69). Kill stuff along the way, of course.| |QID|8285| +C The Spirits of Southwind |N|Follow the road southwest until you're almost back at the hold, then south to Southwind (62,53). Stick to the outskirts, working your way around to the south side of the outpost.| |QID|1125| +T The Deserter |N|In a cave (67,69). Kill stuff along the way, of course.| |QID|8285| A The Twilight Lexicon |QID|8279| -C Noggle's Last Hope |N|Work your way counter-clockwise from the cave around Hive'Regal. You can find lots of mobs around the south of the zone and near the road south of Cenarion Hold.| |QID|8278| +C Noggle's Last Hope |N|Work your way counter-clockwise from the cave around Hive'Regal. You can find lots of mobs around the south of the zone and near the road south of Cenarion Hold.| |QID|8278| C Stepping Up Security |QID|8281| H Cenarion Hold |N|Or deathport| |QID|8281| @@ -39,17 +39,17 @@ T Noggle's Last Hope |QID|8278| A Noggle's Lost Satchel |QID|8282| T Stepping Up Security |QID|8281| -K Twilight Keeper Manya |N|Far west at the Twilight Post (29,35). Patrols along the east side. Pull her back so you don't get links if she fears.| |L|20394| |QID|8279| -K Twilight Keeper Havanuth |N|East at Twilight Base Camp (41,41). Patrols along the northeast side.| |L|20396| |QID|8279| -C Noggle's Lost Satchel |N|South on the hill behind the camp (44.6,91.3). Sneak in when Deathclasp is away.| |QID|8282| -K Twilight Keeper Exeter |N|Southwest side of Twilight Outpost (16,87). Follow the mountains along the south edge of the camp to avoid aggro.| |L|20395| |QID|8279| +K Twilight Keeper Manya |N|Far west at the Twilight Post (29,35). Patrols along the east side. Pull her back so you don't get links if she fears.| |L|20394| |QID|8279| +K Twilight Keeper Havanuth |N|East at Twilight Base Camp (41,41). Patrols along the northeast side.| |L|20396| |QID|8279| +C Noggle's Lost Satchel |N|South on the hill behind the camp (44.6,91.3). Sneak in when Deathclasp is away.| |QID|8282| +K Twilight Keeper Exeter |N|Southwest side of Twilight Outpost (16,87). Follow the mountains along the south edge of the camp to avoid aggro.| |L|20395| |QID|8279| T The Twilight Lexicon |N|In that cave again (67.20, 69.75)| |QID|8279| A A Terrible Purpose |QID|8287| T The Spirits of Southwind |N|At Valor's Rest| |QID|1125| A Hive in the Tower |QID|1126| -C Hive in the Tower |N|In the tower (61,52). Watch out for the spawns when you enter. Loot the pod, kill and loot one of the spawns, and get the hell out of there! After you get the encrusted object, you can drop the goo.| |QID|1126| +C Hive in the Tower |N|In the tower (61,52). Watch out for the spawns when you enter. Loot the pod, kill and loot one of the spawns, and get the hell out of there! After you get the encrusted object, you can drop the goo.| |QID|1126| T Hive in the Tower |N|At Valor's Rest| |QID|1126| A Umber, Archivist |QID|6844| diff --git a/TourGuide_Alliance/57_58_Eastern_Plaguelands.lua b/TourGuide_Alliance/57_58_Eastern_Plaguelands.lua index b27f913..37f986c 100644 --- a/TourGuide_Alliance/57_58_Eastern_Plaguelands.lua +++ b/TourGuide_Alliance/57_58_Eastern_Plaguelands.lua @@ -7,11 +7,11 @@ A Blood Tinged Skies |QID|5543| A Carrion Grubbage |QID|5544| N Kill crap... |N|Kill any plaguehounds, carrion worms, and plaguebats you encounter in EPL for each respective quest.| |QID|5544| -C The Eastern Plagues |N|Around the Marris Stead, just north of the road. Rutger (25.17, 73.09), Fredo (23.60, 68.46), Turyen (25.12, 68.37)| |QID|6185| +C The Eastern Plagues |N|Around the Marris Stead, just north of the road. Rutger (25.17, 73.09), Fredo (23.60, 68.46), Turyen (25.12, 68.37)| |QID|6185| T Sister Pamela |N|In a house in Darrowshire (32.48, 83.65)| |QID|5601| A Pamela's Doll |QID|5149| -C Pamela's Doll |N|Parts are found in the houses nearby. Ghosts spawn when you get near them.| |QID|5149| +C Pamela's Doll |N|Parts are found in the houses nearby. Ghosts spawn when you get near them.| |QID|5149| T Pamela's Doll |QID|5149| A Auntie Marlene |QID|5152| A Uncle Carlin |QID|5241| @@ -24,7 +24,7 @@ A Defenders of Darrowshire |QID|5211| T Duke Nicholas Zverenhoff |QID|6030| A Zaeldarr the Outcast |N|Southwest near the corpse pits (73.92, 57.70)| |QID|6021| -N Free Spirits... |QID|5211| |N|Kill any cannibal ghouls, gibbering ghouls and diseased flayers you come across. Speak to any ghosts that spawn for "Defenders of Darrowshire".| +N Free Spirits... |QID|5211| |N|Kill any cannibal ghouls, gibbering ghouls and diseased flayers you come across. Speak to any ghosts that spawn for "Defenders of Darrowshire".| C Demon Dogs |N|Plaguehounds near Light's Hope to the east, Frenzied Plaguehound in the north half of the zone.| |QID|5542| C A Plague Upon Thee (Part 1) |N|Find termite mounds all around the northern part of the zone.| |QID|5903| C Carrion Grubbage |QID|5544| diff --git a/TourGuide_Alliance/58_59_Western_Plaguelands.lua b/TourGuide_Alliance/58_59_Western_Plaguelands.lua index bbc3e5e..826ae4a 100644 --- a/TourGuide_Alliance/58_59_Western_Plaguelands.lua +++ b/TourGuide_Alliance/58_59_Western_Plaguelands.lua @@ -1,5 +1,5 @@ -TourGuide:RegisterGuide("Western Plaguelands (58-59)", "Hellfire Peninsula (60-62)", "Alliance", function() +TourGuide:RegisterGuide("Western Plaguelands (58-59)", nil, "Alliance", function() return [[ F Western Plaguelands |QID|5904| T A Plague Upon Thee (Part 1) |QID|5903| @@ -15,17 +15,17 @@ C Unfinished Business (Part 1) |N|Two camps to the southeast of the lumber mill T Unfinished Business (Part 1) |QID|6004| A Unfinished Business (Part 2) |QID|6023| -C Unfinished Business (Part 2) |QID|6023| |N|Huntsman Radley is northeast of the camps from the previous quest at a small camp in the mountains (57.72, 36.14). HINT: you can sneak through the mountains and avoid a lot of scarlets. Cavalier Durgen is at the tower to the north (55,23).| +C Unfinished Business (Part 2) |QID|6023| |N|Huntsman Radley is northeast of the camps from the previous quest at a small camp in the mountains (57.72, 36.14). HINT: you can sneak through the mountains and avoid a lot of scarlets. Cavalier Durgen is at the tower to the north (55,23).| C The Mark of the Lightbringer |N|At the top of the tower| |QID|9474| T Unfinished Business (Part 2) |QID|6023| A Unfinished Business (Part 3) |QID|6025| -C Unfinished Business (Part 3) |QID|6025| |N|To the north, up the tower just inside Hearthglen (45.84, 18.32). Watch out for the elite patrol.| +C Unfinished Business (Part 3) |QID|6025| |N|To the north, up the tower just inside Hearthglen (45.84, 18.32). Watch out for the elite patrol.| T Unfinished Business (Part 3) |QID|6025| T Of Lost Honor |N|Back in EPL, by the river.| |QID|5845| A Of Love and Family (Part 1) |QID|5846| -T Of Love and Family (Part 1) |N|In front of Scholomance. Skip the follow-up.| |QID|5846| +T Of Love and Family (Part 1) |N|In front of Scholomance. Skip the follow-up.| |QID|5846| T A Plague Upon Thee (Part 3) |N|Back at Chillwind Camp| |QID|6389| T The Mark of the Lightbringer |QID|9474| @@ -33,7 +33,7 @@ A Tomb of the Lightbringer |QID|9446| C Tomb of the Lightbringer |N|Escort quest!| |QID|9446| T Tomb of the Lightbringer |N|Back at Chillwind Camp| |QID|9446| -F Everlook |N|Hearth to Stormwind, boat to Auberdine, fly to Everlook| |QID|5163| |NORAF| -T Are We There, Yeti? (Part 3) |QID|5163| |NORAF| +F Everlook |N|Hearth to Stormwind, boat to Auberdine, fly to Everlook| |QID|5163| +T Are We There, Yeti? (Part 3) |QID|5163| ]] end) diff --git a/TourGuide_Alliance/58_Eastern_Plaguelands.lua b/TourGuide_Alliance/58_Eastern_Plaguelands.lua index 78984dc..4826b46 100644 --- a/TourGuide_Alliance/58_Eastern_Plaguelands.lua +++ b/TourGuide_Alliance/58_Eastern_Plaguelands.lua @@ -9,7 +9,7 @@ C Redemption |N|Blah blah blah... he talks too much.| |QID|5742| T Redemption |QID|5742| A Of Forgotten Memories |QID|5781| -C Of Forgotten Memories |N|South at the Undercroft (24.59, 79.99). Talk to the grave behind the crypt. Mercutio and his adds will walk in (not spawn). Try to pull him away from the adds, kill and loot him, and get out. You might need help.| |QID|5781| +C Of Forgotten Memories |N|South at the Undercroft (24.59, 79.99). Talk to the grave behind the crypt. Mercutio and his adds will walk in (not spawn). Try to pull him away from the adds, kill and loot him, and get out. You might need help.| |QID|5781| C Zaeldarr the Outcast |N|Downstairs in the crypt (23.83, 78.52)| |QID|6021| T Of Forgotten Memories |N|Back on the west edge of the zone| |QID|5781| @@ -19,17 +19,16 @@ T Brother Carlin |N|Back at Light's Hope Chapel| |QID|5210| A Villains of Darrowshire |QID|5181| T Zaeldarr the Outcast |N|Down by the corpse pit| |QID|6021| -C Villains of Darrowshire |N|Sword is north of Corin's Crossing down in the Infectis Scar (49.19, 59.55). Skull is in Blackwood Lake (46.53, 44.17)| |QID|5181| +C Villains of Darrowshire |N|Sword is north of Corin's Crossing down in the Infectis Scar (49.19, 59.55). Skull is in Blackwood Lake (46.53, 44.17)| |QID|5181| C Of Lost Honor |N|Find the flag in the lake at Northdale (65.95, 28.93)| |QID|5845| -T Troubled Spirits of Kel'Theril |N|Northwest of Northpass Tower (48.89, 17.67). Skip the follow-up.| |QID|5245| +T Troubled Spirits of Kel'Theril |N|Northwest of Northpass Tower (48.89, 17.67). Skip the follow-up.| |QID|5245| C Defenders of Darrowshire |N|Kill cannibal ghouls, gibbering ghouls and diseased flayers in Plaguewood, talk to the ghosts that spawn.| |QID|5211| T Defenders of Darrowshire |N|Back at Light's Hope Chapel| |QID|5211| T Villains of Darrowshire |QID|5181| H Stormwind City |QID|6186| -T The Blightcaller Cometh |N|In Stormwind Keep. Skip the follow-up| |QID|6186| +T The Blightcaller Cometh |N|In Stormwind Keep. Skip the follow-up| |QID|6186| ]] end) - diff --git a/TourGuide_Alliance/58_Western_Plaguelands.lua b/TourGuide_Alliance/58_Western_Plaguelands.lua index d67541f..b96b368 100644 --- a/TourGuide_Alliance/58_Western_Plaguelands.lua +++ b/TourGuide_Alliance/58_Western_Plaguelands.lua @@ -12,8 +12,8 @@ T A Strange Historian |N|In the inn in Andorhal (39.43, 66.81)| |QID|5153| A The Annals of Darrowshire |QID|5154| A A Matter of Time |QID|4971| -C A Matter of Time |N|Find the blue glowy silos around the edges of Andorhal (45.05, 62.73). Use horn.| |U|12627| |QID|4971| -C The Annals of Darrowshire |N|In the town hall (43.91, 69.22). Loot books till you find it.| |QID|5154| +C A Matter of Time |N|Find the blue glowy silos around the edges of Andorhal (45.05, 62.73). Use horn.| |U|12627| |QID|4971| +C The Annals of Darrowshire |N|In the town hall (43.91, 69.22). Loot books till you find it.| |QID|5154| T A Matter of Time |N|Back at the inn| |QID|4971| A Counting Out Time |QID|4973| diff --git a/TourGuide_Alliance/Guides.xml b/TourGuide_Alliance/Guides.xml index cae4962..4277466 100644 --- a/TourGuide_Alliance/Guides.xml +++ b/TourGuide_Alliance/Guides.xml @@ -37,8 +37,6 @@