Grail is a library of quest information designed to provide that quest information to other addons to make their decision processing easier. For example, an addon like EveryQuest or TourGuide would be able to make use of Grail's knowledge to determine if a quest has been completed, whether the character can obtain a quest, what reasons the character cannot obtain a quest (lack of level, wrong race, wrong class, not enough reputation, has not completed a prerequisite quest, etc.), the location to obtain or turn in a quest, the amount of reputation awarded from completing a quest, whether a quest counts towards an achievement, etc.
Starting with version 029, Grail's achievement and reputation gained information are separated into two loadable on demand addons included in the package.
As a user of Grail plays WoW, Grail's internal database is checked as a player accepts and turns in quests. If Grail has incorrect data, it will record the actual data the player has found in the Grail saved variables file. This file can be used to update Grail for future releases if you choose to provide this information (in a ticket for example). As the Grail database becomes more accurate, the Grail saved variables file will have any previously found discrepencies removed. The Grail saved variables file can be found in your WoW directory/WTF/Account/account name/SavedVariables directory with the name Grail.lua.
If you are using WoW in a locale other than enUS, you can help provide up-to-date localized NPC names by issuing the slash command /grail verifynpcs at some point while playing. This will record into the Grail saved variables file the localized names of NPCs you have encountered for which Grail does not have the proper name.
Using the slash command /grail help lists all the options Grail has.
Makes it so choosing PvE or PvP for the day on Isle of Thunder is handled well.
Adds IsQuestObsolete() and IsQuestPending() which use the new Z and E quests codes that can be present. If either returns true, the quest is not available in the current Blizzard client.
Adds support for the new way reputation information is being stored.
Converts prerequisite information storage to no longer use tables, saving about 1.0 MB of space.
Updates some quest/NPC information, primarily with the Isle of Thunder.
Adds the basics for the quests added in the 5.3.0 PTR release 16758.
Events in combat are forced to be delayed, but the user can still override.
Changes the internal design of the NPCs to save about 0.6 MB of space.
Updates some quest/NPC information.
Speeds up the CodesWithPrefix() routine provided by rowaasr13. This reduces the chance of running into an issue when teleporting into combat.
Adds F code prerequisites which indicate a faction requirement. Demonstrate this with two Work Order: quests, but will be used primarily for "phased" NPC prerequisites, whose architecture is starting to be implemented.
Updates some Traditional Chinese localizations.
Updates to Isle of Thunder King/Isle of Giants quests from 5.2 PTR.
Updates some Traditional Chinese localizations.
Updates some quest/NPC information.
Updates the technique where a quest is invalidated to properly include not being able to fulfill all prerequisites that include groups.
Puts quests whose start location does not map directly to a specific zone into their own "Other" map area.
Augments the API that returns NPC locations to include created and mailbox flags.
Removes the Grail-Zones.lua file since the names are now gotten from the runtime.
Puts in support for "/grail events" allowing control over processing of some Blizzard events received while in combat until after combat.
Updates some quest/NPC information for Operation: Shieldwall.
Removes the Grail.xml and rewrites the startup to account for its lack.
Adds very basic quest information for 5.2 PTR quests from 2013-01-02.
Removes the quests on Yojamba Isle since there are no NPCs there.
Updates some Netherstorm quests for Aldor/Scryers information.
Updates some quest localizations for Simplified Chinese.
Corrects the prerequisites for the Chi-Ji champion dailies.
Updates the Shado-Pan dailies' NPCs.
Updates some quest/NPC information for Jade Forest, Kun-Lai Summit, Durotar and the dailies available in 5.1.
Updates the TOC to support interface 50100.
Corrects an initialization problem that would cause a Lua error if dailyQuests were not gotten before evaluated.
Adds support for quests having prerequisites of having ever experienced a buff.
Changes the internal representation of NPC information to separate the NPC names to make the data more "normal".
Augments the way the reputationLevelMapping table provides information so it can provide specific numeric values over the minimum reputation.
Adds the ability to have quests grouped so able to invalidate groups based on daily counts, or make prerequisites of a number of quests from a group.
Updates some quest/NPC information for Tillers, Golden Lotus, Order of the Cloud Serpent, Shado-Pan, August Celestials, Anglers and Klaxxi dailies.
Adds very basic quest information for 5.1 PTR quests from 2012-10-25.
Adds the ability to invalidate a quest by accepting a quest from a quest group.
Adds the ability for quests to have a prerequisite of a maximum reputation.
Adds code that abandons processing the server completed quests if the return results do not represent the total number of quests completed as compared to the locally stored count.
Updates some quest/NPC information for Howling Fjord, Jade Forest, Krasarang Wilds, Townlong Steppes, Valley of the Four Winds, Kun-Lai Summit and Vale of Eternal Blossoms.
Removes the raceMapping, raceNameFemaleMapping, raceNameMapping and raceToBitMapping tables.
Changes the format for reputation change logging.
Adds reputationLevelMapping table that Wholly was using because it will be changed as more information is known, and there should be no need for Wholly to need to change.
Updates some quest/NPC information for Vale of Eternal Blossoms, Kun-Lai Summit, Borean Tundra, Dread Wastes and Valley of the Four Winds.
Adds support for prerequisites to be able to have OR requirements within an AND requirement, instead of just outside them.
Adds support for CanAcceptQuest() to not allow bugged quests to be acceptable.
Replaces the raceMapping, raceNameFemaleMapping, raceNameMapping and raceToBitMapping tables with races. These older ones will be removed in version 40.
Adds some Italian localization and quest localization updates for release 16030.
Updates some quest/NPC information for Jade Forest, Northern Stranglethorn, Vale of Eternal Blossoms and Echo Isles.
Adds ability for a quest to have prerequisites of a general skill, used by battle pets for example.
Refines meeting prerequisites when part of the requirements includes possessing an item.
Updates some quest/NPC information for Twilight Highlands, Deepholm, Uldum, Sholazar Basin and Mount Hyjal.
Adds DisplayableQuestPrerequisites() so flag quests can be bypassed, showing their requirements instead.
Adds some Italian localization.
Adds support for account-wide quests.
Fixes the problem where accepting and abandoning a quest with a breadcrumb was not setting the breadcrumb status properly.
Fixes the problem where quests could be considered to fail prerequisites if the only prerequisites were quests requiring presence in the quest log.
Updates some quest/NPC information for MoP beta, including Night Elf and Draenei starter zones.
Updates quest information to allow marking quests Scenario and Legendary.
Removes Grail.bitMaskQuestNonLevel as the internal data structures have changed, no longer requiring this.
Adds HasQuestEverBeenAccepted() to be able to handle O type prerequisites.
Removes Grail.reputationBlizzardMapping since it is no longer needed because of the use of Blizzard faction IDs.
Updates Midsummer Fire Festival localization for Korean, Spanish and German.
Updates more NPC/quest localizations.
Updates the quest recording subsystem to generate basic K codes.
Changes the reputation system to no longer use indirection, but Blizzard faction IDs.
Updates the quest recording subsystem to record faction rewards on quest acceptance, and turns off recording faction rewards when quests are turned in.
Corrects the problem where quests that start automatically when entering a zone can appear improperly in the current zone (based on the current zone name).
Changes the technique by which the server is queried for completed quests since API has been changed for MoP.
Updates some quest/NPC information for Valley of the Four Winds and Krasarang Wilds.
Makes it so B codes are automatically generated from the quests with O codes, so the vast majority of B codes need not be present in the data file.
Adds the ability to create profession prerequisite codes (vice the normally supported profession requirements).
Updates some quest/NPC information for Wandering Isle.
Creates new Grail.reputationExpansionMapping table to replace the original four tables which are deprecated and will be removed in version 035.
Updates Midsummer Fire Festival quest/NPC data, primarily the Portuguese localization.
Updates some quest/NPC information for Blasted Lands, Eastern Plaguelands, Tirisfal Glades, Undercity, Winterspring, Zul'Aman and professions.
Adds some Spanish translation from Trisquite.
Changes the implementation of _ReputationExceeds() to use GetFactionInfoByID() instead of GetFactionInfo() since it seems there are times when the latter does not return proper values at startup.
Adds some German translation from polzi.
Augments CanAcceptQuest() to include a parameter to ignore holiday requirements.
Updates some quest/NPC information for some dungeons, Oracles/Frenzyheart, Worgen starting areas, Tol Barad and others.
Changes the comparisons to completed quests to be more mathematically robust.
Corrects a problem where cleaning the database can cause a LUA error.
Corrects the internal checking of reputation gains to not include modifications when the reputation is lost.
Adds the verifynpcs slash command option.
Updates some localizations, primarily Portuguese and Korean.
Updates some quest/NPC information for Dun Morogh, Loch Modan, Wetlands, Vash'jir and Kelp'thar Forest.
Corrects the problem where quests with breadcrumbs were being marked as not complete after a reload.
Adds processing to startup to ensure Grail attempts to get the server quest status automatically.
Corrects AncestorStatusCode() to ignore non-quest prerequisites.
Adds the ability to have quests have items or lack of items as prerequisites.
Adds support for ODC: quest codes, which are used to mark other quests complete when a quest is turned in.
Adds the ability to have quests use the abandoned state of quests as prerequisites.
Corrects a problem that manifests itself when running the ElvUI addon.
*** Will not work with Wholly 16 or older ***
Splits out two load on demand addons to handle achievements and reputation gains.
Updates some quest/NPC information for the Lost Isles, Feralas and some dungeons.
Updates some localizations, primarily Portuguese, Korean and Simplified Chinese.
Corrects the problem where some daily quests that also have another aspect (e.g., PVP or dungeon) were not being shown as daily quests.
Updates the automatic quest level verification system to ensure quests that are considered to have a dynamic level actually do.
Adds basic structural support for the Italian localization.
Consolidates the internal use of prerequisite quest types into a unified technique, causing all QuestPrerequisite* API to be REMOVED other than QuestPrerequisites.
Fixes the problem where quests with AZ codes were not being added to the proper zone.
Fixes the problem where the status of quests that require other quests being in the quest log was not being displayed properly.
Adds the Kalu'ak Fishing Derby holiday.
Updates some quest/NPC information for the fishing contests.
*** Will not work with Wholly 15 or older ***
Corrects the mapAreaMaximumReputationChange constant.
Revamps the location providing routines so only the new QuestLocations() and NPCLocations() are needed, REMOVING the older ones.
Updates some quest/NPC information for Un'Goro Crater, Silithus, Burning Steppes, Kezan, The Lost Isles, Northern Barrens, Ashenvale, some dungeons and Winterspring.
Fixes detection of European servers to remove non-existent quests.
Updates some Portuguese localizations.
Makes _CleanDatabase() a little more intense with its cleaning.
Makes the system than checks for reputation gains a little more accurate.
Records actual quest completion for those quests that Blizzard marks complete with others in the server, so clients can know really which quest was done.
Implements a way to know when Blizzard uses internal marking mechanics (which differ from flag quests) to specify when quests are available.
Adds an architecture to support information about quests that are bugged.