Download
(2 MB)
Download
Updated: 05-10-14 09:07 AM
Compatibility:
Siege of Orgrimmar (5.4)
Escalation (5.3)
Thunder Isle (5.2)
Landfall (5.1)
Mists of Pandaria (5.0.4)
Updated:05-10-14 09:07 AM
Created:01-31-12 07:27 PM
Downloads:4,997
Favorites:114
MD5:
5.4
Grail
Version: 064
by: Nimhfree [More]
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.

Please make comments on Grail in the Grail forum or create a ticket if you find problems.

Prereleases can be found on the official Prerelease Page for those interested.

Making Grail better

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.
Version 064
Updates some quest/NPC information.
Corrects prerequisite evaluation when analyzing more than one path that have different results (like Alliance vs Horde both leading to the same quest).
Speeds up prerequisite tree analysis.

Version 063
Updates some quest/NPC information.
Unified the reputation requirements into the prerequisite codes.
Allows A: and T: codes to work in conjuction (additive) with the faction-specific versions.
Allows AZ: codes to have more than one map area.

Version 062
Corrects a problem where quests with First Aid prerequisites would cause a Lua error.

Version 061
Updates some quest/NPC information.
Added the ability for prerequisite evaluation to only check profession requirements.
Corrected the evaluation of ancestor failures to properly propagate past the first level of quest failure.

Version 060
Updates some quest/NPC information.
Updates the issue recording system to provide a little more accurate information to make processing saved variables files easier.

Version 059
Caches the results obtained from ItemPresent() to make quest status updates faster, invalidating the cache as appropriate.
Updates some quest/NPC information.
Changes the NPC IDs used to represent spells that summon pets to remove a conflict with actual items.
Changes some of the internal structures used to save some memory.
Corrects an issue where the Loremaster quest data for Pandaria was not populating an internal structure properly (causing Loremaster not to display map pins).
Updates _QuestsInLog() to work better when various headings are closed in the Blizzard quest log.

Version 058
Augments ClassificationOfQuestCode() to return 'K' for weekly quests.
Updates some quest/NPC information.
Makes handling LOOT_CLOSED not be so noisy with chat spam.
Makes processing the UNIT_QUEST_LOG_CHANGED event delayed by 0.5 seconds to allow walking through the Blizzard quest log using GetQuestLogTitle() to work better.

Version 057
Corrects some issues stemming from new repuation information.
Adds some localizations of quest/NPC names.

Version 056
Updates some quest/NPC information.
Fixes a variable leak that causes problems determining prerequisite information.

Version 055
Updates some quest/NPC information.
Fixes an infinite loop issue when evaluating data in the Valley of the Four Winds.
Fixes a Lua issue that manifests when Dugi guides are loaded, because Grail was incorrectly using a variable that Dugi guides leaks into the global namespace.
Caches the results obtained from _QuestsInLog() to make quest status updates faster, invalidating the cache as appropriate.
Fixes a rare error caused when cleaning the database of reputation data evident by an "unfinished capture" error message.
Adds the ability to treat the chests on the Timeless Isle as quests.
Adds the slash command "/grail loot" to control whether the LOOT_CLOSED event is monitored as that is used to handle Timeless Isle chests.
Makes persistent the settings for the slash commands "/grail tracking" and "/grail debug".
Makes CanAcceptQuest() not return true if the quest is obsolete or pending.

Version 054
Updates some quest/NPC information.
Incorporates prereqisite population API originally written in Wholly.
Fills out the Pandaria "loremaster" achievements to include all the prerequisite quests for each sub achievement quest.

Version 053
Updates some quest/NPC information.
Corrects an error that would cause an infinite loop in evaluating data in Ashenvale for quest 31815, Zonya the Sadist.

Version 052
Updates some quest/NPC information.
Adds some Wrathion achievements.
Moves some achievements into continents that are a little more logical.
Separates some achievements to give a little finer-grain control.
Updates some zhCN localizations.

Version 051
Adds Midsummer quests for Pandaria.
Updates some quest/NPC information not associated with Midsummer.
Changes _CleanDatabase() to better handle NPCs that have prerequisites.
Corrects a problem where questReputations was not initialized when reputation data was not loaded.
Adds the ability to have an equipped iLvl be used as a prerequisite.

Version 050
Corrects a problem with QuestPrerequisites() and nil data.

Version 049
Changes the Interface to 50300 for the 5.3.0 Blizzard release.
Updates some quest/NPC information, primarily with the Isle of Thunder.
Adds a new loadable addon, Grail-When, that records when quests are completed.
Adds a flag to QuestPrerequisites(), allowing the lack of flag to cause the behavior to return to what it was previously, and with the flag the newer behavior.

Version 048
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.

Version 047
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.

Version 046
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.

Version 045
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.

Version 044
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.

Version 043
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.

Version 042
Corrects an initialization problem that would cause a Lua error if dailyQuests were not gotten before evaluated.

Version 041
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.

Version 040
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.

Version 039
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.

Version 038
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.

Version 037
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.

Version 036
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.

Version 035
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).

Version 034
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.

Version 033
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.

Version 032
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.

Version 031
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.

Version 030
Corrects a problem that manifests itself when running the ElvUI addon.

Version 029
*** 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.

Version 028
*** 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.
Archived Files (37)
File Name
Version
Size
Author
Date
063
2MB
Nimhfree
04-10-14 08:11 AM
062
2MB
Nimhfree
02-11-14 11:09 AM
061
2MB
Nimhfree
02-10-14 09:15 AM
060
2MB
Nimhfree
01-10-14 12:39 PM
059
2MB
Nimhfree
12-10-13 10:35 AM
058
2MB
Nimhfree
11-10-13 12:09 PM
057
2MB
Nimhfree
10-12-13 08:01 PM
056
2MB
Nimhfree
10-10-13 10:36 AM
055
2MB
Nimhfree
09-24-13 02:44 PM
054
2MB
Nimhfree
09-10-13 07:19 PM
053
2MB
Nimhfree
08-12-13 08:35 PM
052
2MB
Nimhfree
08-10-13 10:57 AM
051
2MB
Nimhfree
07-10-13 04:05 AM
050
2MB
Nimhfree
06-11-13 07:41 AM
049
2MB
Nimhfree
06-10-13 07:52 AM
048
2MB
Nimhfree
05-10-13 02:08 PM
047
2MB
Nimhfree
04-10-13 10:34 AM
046
2MB
Nimhfree
03-10-13 10:24 AM
045
2MB
Nimhfree
02-10-13 07:06 AM
044
2MB
Nimhfree
01-10-13 02:25 PM
043
2MB
Nimhfree
12-10-12 10:51 AM
042
2MB
Nimhfree
11-11-12 07:22 AM
041
2MB
Nimhfree
11-10-12 09:49 AM
040
3MB
Nimhfree
10-10-12 07:33 AM
039
3MB
Nimhfree
09-25-12 07:08 AM
038
3MB
Nimhfree
09-10-12 12:24 PM
037
2MB
Nimhfree
08-28-12 04:34 PM
036
2MB
Nimhfree
08-10-12 08:40 PM
035
2MB
Nimhfree
07-10-12 04:28 AM
034
2MB
Nimhfree
06-21-12 02:11 PM
033
2MB
Nimhfree
06-10-12 04:54 AM
032
2MB
Nimhfree
05-10-12 07:58 AM
031
2MB
Nimhfree
04-10-12 08:27 AM
030
2MB
Nimhfree
03-11-12 01:24 PM
029
2MB
Nimhfree
03-10-12 05:03 PM
028
2MB
Nimhfree
02-10-12 10:50 AM
027
2MB
Nimhfree
01-31-12 07:27 PM


Post A Reply Comment Options
Unread 05-05-13, 08:13 PM  
Nimhfree
A Flamescale Wyrmkin
AddOn Author - Click to view AddOns

Forum posts: 146
File comments: 31
Uploads: 3
Originally Posted by jtlareau
Just letting you know that there is an interaction between GRAIL and CARBONITE BETA that causes the Quest Watch list to disappear. This has now been reported to both addon's support.
I have not seen anything posted to "Grail support" for this issue, other than this message here. I would find it very interesting to know what is happening, especially since Grail does nothing with the Quest Watch list (at least directly).
Nimhfree is offline Report comment to moderator  
Reply With Quote
Unread 05-05-13, 02:50 PM  
jtlareau
A Defias Bandit
 
jtlareau's Avatar

Forum posts: 3
File comments: 4
Uploads: 0
Just letting you know that there is an interaction between GRAIL and CARBONITE BETA that causes the Quest Watch list to disappear. This has now been reported to both addon's support.
jtlareau is offline Report comment to moderator  
Reply With Quote
Unread 03-13-13, 05:04 PM  
Nimhfree
A Flamescale Wyrmkin
AddOn Author - Click to view AddOns

Forum posts: 146
File comments: 31
Uploads: 3
You might want to try using the slash command "/grail events" which makes it so Grail delays certain event processing until out of combat. This seems to help some machines that cannot handle the processing fast enough.
Nimhfree is offline Report comment to moderator  
Reply With Quote
Unread 03-13-13, 10:33 AM  
Qithe
A Murloc Raider

Forum posts: 7
File comments: 9
Uploads: 0
Constant errors coming up with this since updating to the newest version. e.g. Killing an NPC that's part of a quest, error. Picking up an item which is part of a quest, error.

Date: 2013-03-13 12:31:02
ID: 29
Error occured in: Global
Count: 1
Message: ..\AddOns\Grail\Grail.lua line 3267:
script ran too long
Debug:
[C]: ?
Grail\Grail.lua:3267: _GetDailyDay()
Grail\Grail.lua:5272: _RecordGroupValueChange()
Grail\Grail.lua:3611: IsInvalidated()
Grail\Grail.lua:4173: MeetsRequirementGroupPossibleToComplete()
Grail\Grail.lua:3069: f()
Grail\Grail.lua:1714: _AllEvaluateTrueF()
Grail\Grail.lua:1767: _AnyEvaluateTrueF()
Grail\Grail.lua:3601: IsInvalidated()
Grail\Grail.lua:4173: MeetsRequirementGroupPossibleToComplete()
Grail\Grail.lua:3069: f()
Grail\Grail.lua:1714: _AllEvaluateTrueF()
Grail\Grail.lua:1767: _AnyEvaluateTrueF()
Grail\Grail.lua:3601: IsInvalidated()
Grail\Grail.lua:5584: StatusCode()
Grail\Grail.lua:1956: ClassificationOfQuestCode()
Wholly\Wholly.lua:857: _ClassifyQuestsInMap()
Wholly\Wholly.lua:806: f()
Grail\Grail.lua:4382: _PostNotification()
Grail\Grail.lua:4396: _ProcessDelayedNotifications()
Grail\Grail.lua:4371:
Grail\Grail.lua:4371
Locals:

AddOns:
...
Qithe is offline Report comment to moderator  
Reply With Quote
Unread 03-10-13, 04:37 PM  
Barleduq
Ruler of All I Survey
 
Barleduq's Avatar

Forum posts: 62
File comments: 261
Uploads: 0
Thanks for the update!

looking forward to see what's changed within.

-Bar
Barleduq is offline Report comment to moderator  
Reply With Quote
Unread 10-27-12, 02:59 PM  
Nimhfree
A Flamescale Wyrmkin
AddOn Author - Click to view AddOns

Forum posts: 146
File comments: 31
Uploads: 3
Grail was meant to be able to be extended with regard to the information it supplies. For example, two loadable addons were added to provide reputation information as well as achievement information. These were not originally part of the Grail database.

So, yes, it should be doable. If there is other data out there that specifies blobs information or other location information associated with quests, it could be added to Grail's data (most probably as another loadable addon) so those interested in it can use it. I do not know how to get the information that Blizzard provides with its POIs that it puts onto the maps. That information can also be live if a target is moving, etc. But if Carbonite has information to use I am sure we can make Grail able to host that information.
Nimhfree is offline Report comment to moderator  
Reply With Quote
Unread 10-27-12, 02:36 PM  
Vis
Premium Member
 
Vis's Avatar

Forum posts: 1782
File comments: 45
Uploads: 0
Is it possible for Grail to save "Quest blob" location information from the minimap in a similar way that Carbonite does with it's internal DB? Just curious.

For reference, the question was mentioned in this forum thread.
__________________
Vis is offline Report comment to moderator  
Reply With Quote
Unread 09-06-12, 05:47 AM  
Barleduq
Ruler of All I Survey
 
Barleduq's Avatar

Forum posts: 62
File comments: 261
Uploads: 0
Yay!

Just want to say Thank You for having this updated for 5.0.4 ! I've enjoyed using it, and am happy to be able to still do so!

Barleduq is offline Report comment to moderator  
Reply With Quote
Unread 07-20-12, 05:13 PM  
Nimhfree
A Flamescale Wyrmkin
AddOn Author - Click to view AddOns

Forum posts: 146
File comments: 31
Uploads: 3
Re: Error found on first time use

Originally Posted by Barleduq
I hate to make a problem-report be the first comment on a page. I downloaded Grail (and Wholly) yesterday, and launched WoW for the first time with them installed today. I got this error message on both the first and second toon I logged in with:

Grail found _AllEvaluateTrue quest ID O24992 with unknown code O
Grail found _AllEvaluateTrue quest ID O25024 with unknown code O

I'm 99% sure that the leading character in the quest ID number and the 'unknown code' are both the letter Capital o - the zero in the second quest id does look different on my screen in the font blizz uses for the chat pane. I'm leaving hte 1% cause I can always be incorrect.

Hope to enjoy testing this out.
Those are some debug messages I have in place. In the final version of next release they will not be there. Those are capital letter o and just warnings.
Nimhfree is offline Report comment to moderator  
Reply With Quote
Unread 07-20-12, 03:31 PM  
Barleduq
Ruler of All I Survey
 
Barleduq's Avatar

Forum posts: 62
File comments: 261
Uploads: 0
Error found on first time use

I hate to make a problem-report be the first comment on a page. I downloaded Grail (and Wholly) yesterday, and launched WoW for the first time with them installed today. I got this error message on both the first and second toon I logged in with:

Grail found _AllEvaluateTrue quest ID O24992 with unknown code O
Grail found _AllEvaluateTrue quest ID O25024 with unknown code O

I'm 99% sure that the leading character in the quest ID number and the 'unknown code' are both the letter Capital o - the zero in the second quest id does look different on my screen in the font blizz uses for the chat pane. I'm leaving hte 1% cause I can always be incorrect.

Hope to enjoy testing this out.
Barleduq is offline Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: