QuestCache.wdb
Jump to navigation
Jump to search
The QuestCache.wdb holds most of the information for quest you have seen in game.
- Signature: WQST
Structure
Version 9.0.1.33978
Blizzard removed all three fields related to level (QuestLevel, QuestMaxScalingLevel, and QuestMinLevel) in 9.0.1. Presumably, this is replaced with a lookup to ContentTuning in order to acquire that information. However, I don't know where that lookup happens (maybe in a separate packet that isn't cached?). Regardless, quest levels aren't a thing we have easy access to anymore. Additionally, Blizzard added two new fields to the end of the structure (B30993_Int_1 and B31984_Int_1). The purpose of both is unknown. They were added in the build for which they were named after.
typedef struct { int ID; int Length; if (Length > 0) { int QuestID; int QuestType; int Quest_UNK_27075; // Unknown, but seems to frequently mirror SuggestedGroupNum. Theory: Maximum party size number for LFG Tool to create a group int QuestPackageID; // FK to QuestPackageItem.db2 int QuestSortID; // When QuestSortID is greater than 0, FK to AreaTable.db2; otherwise, FK to QuestSort.db2 int QuestInfoID; // FK to QuestInfo.db2 int SuggestedGroupNum; int RewardNextQuest; // Next QuestID in the chain; sometimes blank when it shouldn't be because chains are often not linear and require multiple quests to continue at certain points int RewardXPDifficulty; // The column of QuestXp to use float RewardXPMultiplier; // Multiplier applied to the value retrieved from the field above int RewardMoney; // Precomputed final money value based on player level at the time of caching; not very useful unless you can ensure consistent player levels int RewardMoneyDifficulty; // The column of QuestMoneyReward to use float RewardMoneyMultiplier; // Multiplier applied to the value retrieved from the field above int RewardBonusMoney; // Bonus money rewarded if completed at max level int RewardDisplaySpell[3]; int RewardSpell; int RewardHonor; // Amount of honor rewarded by the quest float RewardHonorKill; // Multiplier applied to honor rewarded by the quest (or to kills during it? unknown exactly) int RewardArtifactXPDifficulty; // The column of ArtifactQuestXp to use float RewardArtifactXPMultiplier; // Multiplier applied to the value retrieved from the field above int RewardArtifactCategoryID; int ProvidedItem; // Item linked to the quest, usually destroying it will force the quest to abandon uint Flags; uint Flags2; uint Flags3; struct { int ItemID; int Quantity; } RewardFixedItems[4]; // Rewards always given struct { int ItemID; int Quantity; } ItemDrop[4]; // Rewards forced on the player outside the quest dialog(?); rarely used now struct { int ItemID; int Quantity; int DisplayID; } RewardChoiceItems[6]; // Reward choices - player can pick one int POIContinent; // Very rarely used these days as POIs are provided by a different system usually float POIx; // Very rarely used these days as POIs are provided by a different system usually float POIy; // Very rarely used these days as POIs are provided by a different system usually int POIPriority; // Very rarely used these days as POIs are provided by a different system usually int RewardTitle; // Very rarely used (mainly for TBC Isle of Quel'Danas money title); Blizzard prefers to reward titles from quests via RewardSpell these days instead int RewardArenaPoints; // Not used since TBC int RewardSkillLineID; int RewardNumSkillUps; int PortraitGiverDisplayID; int BFA_UnkDisplayID; // Purpose of the field is unknown and it is used significantly less often than the fields around it, but it appears to also be a CreatureDisplayInfoID int PortraitTurnInDisplayID; struct { int FactionID; int FactionValue; // The column of QuestFactionReward to use int FactionOverride; // An override used when Blizzard wants to reward a non-standard amount of reputation, like '1500' or '3000' int FactionGainMaxRank; // The reputation threshold where you stop being able to apply the reputation reward. For example, '7' means that the rep counts all the way through Exalted. } RewardFaction[5]; int RewardFactionFlags; struct { int CurrencyID; int Quantity; } RewardCurrency[4]; int AcceptedSoundKitID; int CompleteSoundKitID; int AreaGroupID; int TimeAllowed; int NumObjectives; uint64 RaceFlags; uint QuestRewardID; uint ExpansionID; uint B30993_Int_1; // Unknown - only set on Warfront-related quests; has values of 12, 113, 114, and 115 uint B31984_Int_1; // Unknown - always 0 so far BitfieldDisablePadding(); BitfieldLeftToRight(); uint LogTitleLength : 9; uint LogDescriptionLength : 12; uint QuestDescriptionLength : 12; uint AreaDescriptionLength : 9; uint PortraitGiverTextLength : 10; uint PortraitGiverNameLength : 8; uint PortraitTurnInTextLength : 10; uint PortraitTurnInNameLength : 8; uint QuestCompletionLogLength : 11; BitfieldEnablePadding(); struct { int ID; ubyte Type; byte StorageIndex; int ObjectID; int Amount; int Flags; int Flags2; float PercentAmount; int NumVisualEffects; int VisualEffects[NumVisualEffects]; ubyte DescriptionLength; char Description[DescriptionLength]; } Objectives[NumObjectives] <optimize=false>; char LogTitle[LogTitleLength]; char LogDescription[LogDescriptionLength]; char QuestDescription[QuestDescriptionLength]; char AreaDescription[AreaDescriptionLength]; char PortraitGiverText[PortraitGiverTextLength]; char PortraitGiverName[PortraitGiverNameLength]; char PortraitTurnInText[PortraitTurnInTextLength]; char PortraitTurnInName[PortraitTurnInNameLength]; char QuestCompletionLog[QuestCompletionLogLength]; } } QuestCacheRow;
Version 8.0.1.27075
typedef struct { int ID; int Length; if (Length > 0) { int QuestID; int QuestType; int QuestLevel; // Recommended level to complete the quest int Quest_UNK_27075; // Unknown. Almost always 0 but sometimes 3 or 5. int QuestMaxScalingLevel; // Maximum level that the quest reward and difficulty will scale to int QuestPackageID; // FK to QuestPackageItem.db2 int QuestMinLevel; // Required level to pick up the quest int QuestSortID; // When QuestSortID is greater than 0, FK to AreaTable.db2; otherwise, FK to QuestSort.db2 int QuestInfoID; // FK to QuestInfo.db2 int SuggestedGroupNum; int RewardNextQuest; // Next QuestID in the chain; sometimes blank when it shouldn't be because chains are often not linear and require multiple quests to continue at certain points int RewardXPDifficulty; // The column of QuestXp to use. Use Player Level as the ID if it is within the range of QuestMinLevel to QuestMaxScalingLevel, otherwise QuestLevel. float RewardXPMultiplier; // Multiplier applied to the value retrieved from the field above int RewardMoney; // Precomputed final money value based on player level at the time of caching; not very useful unless you can ensure consistent player levels int RewardMoneyDifficulty; // The column of QuestMoneyReward to use. Use Player Level as the ID if it is within the range of QuestMinLevel to QuestMaxScalingLevel, otherwise QuestLevel. float RewardMoneyMultiplier; // Multiplier applied to the value retrieved from the field above int RewardBonusMoney; // Bonus money rewarded if completed at max level int RewardDisplaySpell[3]; int RewardSpell; int RewardHonor; // Amount of honor rewarded by the quest float RewardHonorKill; // Multiplier applied to honor rewarded by the quest (or to kills during it? unknown exactly) int RewardArtifactXPDifficulty; // The column of ArtifactQuestXp to use. Use Player Level as the ID if it is within the range of QuestMinLevel to QuestMaxScalingLevel, otherwise QuestLevel. float RewardArtifactXPMultiplier; // Multiplier applied to the value retrieved from the field above int RewardArtifactCategoryID; int ProvidedItem; // Item linked to the quest, usually destroying it will force the quest to abandon uint Flags; uint Flags2; uint Flags3; struct { int ItemID; int Quantity; } RewardFixedItems[4]; // Rewards always given struct { int ItemID; int Quantity; } ItemDrop[4]; // Rewards forced on the player outside the quest dialog(?); rarely used now struct { int ItemID; int Quantity; int DisplayID; } RewardChoiceItems[6]; // Reward choices - player can pick one int POIContinent; // Very rarely used these days as POIs are provided by a different system usually float POIx; // Very rarely used these days as POIs are provided by a different system usually float POIy; // Very rarely used these days as POIs are provided by a different system usually int POIPriority; // Very rarely used these days as POIs are provided by a different system usually int RewardTitle; // Very rarely used (mainly for TBC Isle of Quel'Danas money title); Blizzard prefers to reward titles from quests via RewardSpell these days instead int RewardArenaPoints; // Not used since TBC int RewardSkillLineID; int RewardNumSkillUps; int PortraitGiverDisplayID; int BFA_UnkDisplayID; // Purpose of the field is unknown and it is used significantly less often than the fields around it, but it appears to also be a CreatureDisplayInfoID int PortraitTurnInDisplayID; struct { int FactionID; int FactionValue; // The column of QuestFactionReward to use int FactionOverride; // An override used when Blizzard wants to reward a non-standard amount of reputation, like '1500' or '3000' int FactionGainMaxRank; // The reputation threshold where you stop being able to apply the reputation reward. For example, '7' means that the rep counts all the way through Exalted. } RewardFaction[5]; int RewardFactionFlags; struct { int CurrencyID; int Quantity; } RewardCurrency[4]; int AcceptedSoundKitID; int CompleteSoundKitID; int AreaGroupID; int TimeAllowed; int NumObjectives; uint64 RaceFlags; uint QuestRewardID; uint ExpansionID; BitfieldDisablePadding(); BitfieldLeftToRight(); uint LogTitleLength : 9; uint LogDescriptionLength : 12; uint QuestDescriptionLength : 12; uint AreaDescriptionLength : 9; uint PortraitGiverTextLength : 10; uint PortraitGiverNameLength : 8; uint PortraitTurnInTextLength : 10; uint PortraitTurnInNameLength : 8; uint QuestCompletionLogLength : 11; BitfieldEnablePadding(); struct { int ID; ubyte Type; byte StorageIndex; int ObjectID; int Amount; int Flags; int Flags2; float PercentAmount; int NumVisualEffects; int VisualEffects[NumVisualEffects]; ubyte DescriptionLength; char Description[DescriptionLength]; } Objectives[NumObjectives] <optimize=false>; char LogTitle[LogTitleLength]; char LogDescription[LogDescriptionLength]; char QuestDescription[QuestDescriptionLength]; char AreaDescription[AreaDescriptionLength]; char PortraitGiverText[PortraitGiverTextLength]; char PortraitGiverName[PortraitGiverNameLength]; char PortraitTurnInText[PortraitTurnInTextLength]; char PortraitTurnInName[PortraitTurnInNameLength]; char QuestCompletionLog[QuestCompletionLogLength]; } } QuestCacheRow;
Version 3.3.5?
Column Field Type Notes 1 questID Integer 2 entryLength Integer WDB Files 3 DuplicatedQuestID Integer This is a duplicate of the quest ID 4 QuestType Integer 2 or 0, 0 appears to be when it's a quick click-through quest like repeatable quests (but not exclusively) 5 QuestLevel Integer The level of the quest. This is not the level at which the quest is atainable at. 6 areaID/sortID Integer AreaTable.dbc if negative the value points to: QuestSort.dbc 7 infoID Integer QuestInfo.dbc 8 SuggestedPlayers Integer 9 FactionID Integer Faction.dbc 10 FactionAmount Integer e.g. 3000 11 Unknown Integer Always 0? 12 Unknown Integer Always 0? 13 nextQuestID Integer The quest that follows this quest 14 coins Integer Value is in Copper - Coins rewarded on completion 15 SubExp70 Integer Value is in Copper - Coins rewarded on lvl 70 instead of experience (guess) 16 RewardSpellID Integer Spell.dbc: Spell or ability that is added to players spellbook upon completion. This is probably an argument passed into EffectOnPlayer somehow, as this is sometimes a duplicated value as the EffectOnPlayer field, and it's not a spell that the player learns. (Such as the Razorhide quest turnin). 17 EffectOnPlayer Integer Spell.dbc: Spell/effect cast on player when completing. 18 startingItemID Integer ItemCache.wdb The item that you are given when you start the quest, such as a package to deliver. 19 QuestFlags BitMask 20 givenItem1 Integer ItemCache.wdb 21 givenItem1Amount Integer 22 givenItem2 Integer ItemCache.wdb 23 givenItem2Amount Integer 24 givenItem3 Integer ItemCache.wdb 25 givenItem3Amount Integer 26 givenItem4 Integer ItemCache.wdb 27 givenItem4Amount Integer 28 choiceItem1 Integer ItemCache.wdb 29 choiceItem1Amount Integer 30 choiceItem2 Integer ItemCache.wdb 31 choiceItem2Amount Integer 32 choiceItem3 Integer ItemCache.wdb 33 choiceItem3Amount Integer 34 choiceItem4 Integer ItemCache.wdb 35 choiceItem4Amount Integer 36 choiceItem5 Integer ItemCache.wdb 37 choiceItem5Amount Integer 38 choiceItem6 Integer ItemCache.wdb 39 choiceItem6Amount Integer 40 Unknown Integer 41 Unknown Integer 42 Unknown Integer 43 Unknown Integer 44 name String 45 description String 46 details String 47 subdescription String 48 killCreature1 Integer CreatureCache.wdb 49 killCreature1Amount Integer 50 collectItem1 Integer ItemCache.wdb 51 collectItem1Amount Integer 52 killCreature2 Integer CreatureCache.wdb 53 killCreature2Amount Integer 54 collectItem2 Integer ItemCache.wdb 55 collectItem2Amount Integer 56 killCreature3 Integer CreatureCache.wdb 57 killCreature3Amount Integer 58 collectItem3 Integer ItemCache.wdb 59 collectItem3Amount Integer 60 killCreature4 Integer CreatureCache.wdb 61 killCreature4Amount Integer 62 collectItem4 Integer ItemCache.wdb 63 collectItem4Amount Integer 64 Objective1 String If not killCreature1 or collectItem1 this is the objective if set 65 Objective2 String If not killCreature2 or collectItem2 this is the objective if set 66 Objective3 String If not killCreature3 or collectItem3 this is the objective if set 67 Objective4 String If not killCreature4 or collectItem4 this is the objective if set
Version 0.5.3.3368
For (0.5.3.3368) client version
Column Field Type 1 QuestId Integer 2 QuestType Integer 3 QuestLevel Integer 4 QuestSortID Integer 5 QuestInfoID Integer 6 RewardNextQuest Integer 7 RewardMoney Integer 8 StartItem Integer 9 RewardItems Integer[4] 10 RewardAmount Integer[4] 11 RewardChoiceItems Integer[6] 12 RewardChoiceAmount Integer[6] 13 POIContinent Integer 14 POIx Float 15 POIy Float 16 POIPriority Integer 17 LogTitle Char[128] 18 LogDescription Char[1024] 19 QuestDescription Char[1024] 20 AreaDescription Char[128] 21 MonsterToKill Integer[4] 22 MonsterToKillQuantity Integer[4] 23 ItemToGet Integer[4] 24 ItemToGetQuantity Integer[4] 25 GetDescription Char[4][64]
Quest Flags
1 (1) Deliver 2 (2) Kill 3 (4) Speak To 4 (8) Repeatable? Q:Shareable? 5 (16) Exploration 6 (32) Timed Quest 7 (64) Raid Quest Tagged as "(Raid)" (to verify) 8 (128) Reputation 9 (256) Unknown 10 (512) Unknown 11 (1024) Unknown 12 (2048) Unknown 13 (4096) Daily This bit is set if it's a Daily Quest