TrinityCore
Loading...
Searching...
No Matches
QuestDef.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "QuestDef.h"
19#include "DatabaseEnv.h"
20#include "DBCStores.h"
21#include "Log.h"
22#include "ObjectMgr.h"
23#include "Opcodes.h"
24#include "Player.h"
25#include "QuestPackets.h"
26#include "QuestPools.h"
27#include "World.h"
28
29Quest::Quest(Field* questRecord)
30{
31 _id = questRecord[0].GetUInt32();
32 _type = questRecord[1].GetUInt8();
33 _level = questRecord[2].GetInt16();
34 _minLevel = questRecord[3].GetUInt8();
35 _zoneOrSort = questRecord[4].GetInt16();
36 _questInfoID = questRecord[5].GetUInt16();
37 _suggestedPlayers = questRecord[6].GetUInt8();
38 _limitTime = questRecord[7].GetUInt32();
39 _allowableRaces = questRecord[8].GetUInt32();
40 _requiredFactionId1 = questRecord[9].GetUInt16();
41 _requiredFactionId2 = questRecord[10].GetUInt16();
42 _requiredFactionValue1 = questRecord[11].GetInt32();
43 _requiredFactionValue2 = questRecord[12].GetInt32();
44 _rewardNextQuest = questRecord[13].GetUInt32();
45 _rewardXPDifficulty = questRecord[14].GetUInt8();
46 _rewardMoney = questRecord[15].GetInt32();
47 _rewardBonusMoney = questRecord[16].GetUInt32();
48 _rewardDisplaySpell = questRecord[17].GetUInt32();
49 _rewardSpell = questRecord[18].GetInt32();
50 _rewardHonor = questRecord[19].GetUInt32();
51 _rewardKillHonor = questRecord[20].GetFloat();
52 _sourceItemId = questRecord[21].GetUInt32();
53 _flags = questRecord[22].GetUInt32();
54 _rewardTitleId = questRecord[23].GetUInt8();
55 _requiredPlayerKills = questRecord[24].GetUInt8();
56 _rewardTalents = questRecord[25].GetUInt8();
57 _rewardArenaPoints = questRecord[26].GetUInt16();
58
59 for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
60 {
61 RewardItemId[i] = questRecord[27 + i * 2].GetUInt32();
62 RewardItemCount[i] = questRecord[28 + i * 2].GetUInt16();
63
64 if (RewardItemId[i])
66 }
67
68 for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
69 {
70 RewardChoiceItemId[i] = questRecord[35 + i * 2].GetUInt32();
71 RewardChoiceItemCount[i] = questRecord[36 + i * 2].GetUInt16();
72
73 if (RewardChoiceItemId[i])
75 }
76
77 for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i)
78 {
79 RewardFactionId[i] = questRecord[47 + i * 3].GetUInt16();
80 RewardFactionValue[i] = questRecord[48 + i * 3].GetInt32();
81 RewardFactionOverride[i] = questRecord[49 + i * 3].GetInt32();
82 }
83
84 _poiContinent = questRecord[62].GetUInt16();
85 _poiX = questRecord[63].GetFloat();
86 _poiY = questRecord[64].GetFloat();
87 _poiPriority = questRecord[65].GetUInt32();
88 _logTitle = questRecord[66].GetString();
89 _logDescription = questRecord[67].GetString();
90 _questDescription = questRecord[68].GetString();
91 _areaDescription = questRecord[69].GetString();
92 _questCompletionLog = questRecord[70].GetString();
93
94 for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
95 {
96 RequiredNpcOrGo[i] = questRecord[71+i].GetInt32();
97 RequiredNpcOrGoCount[i] = questRecord[75+i].GetUInt16();
98 ObjectiveText[i] = questRecord[100+i].GetString();
99
100 if (RequiredNpcOrGo[i])
102 }
103
104 for (uint32 i = 0; i < QUEST_ITEM_DROP_COUNT; ++i)
105 {
106 ItemDrop[i] = questRecord[79+i].GetUInt32();
107 ItemDropQuantity[i] = questRecord[83+i].GetUInt16();
108 }
109
110 for (uint32 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
111 {
112 RequiredItemId[i] = questRecord[87+i].GetUInt32();
113 RequiredItemCount[i] = questRecord[93+i].GetUInt16();
114
115 if (RequiredItemId[i])
117 }
118
119 _rewardReputationMask = questRecord[99].GetUInt32();
120 // int32 VerifiedBuild = questRecord[104].GetInt32();
121}
122
124{
125 for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
126 {
127 if (!sEmotesStore.LookupEntry(fields[1+i].GetUInt16()))
128 {
129 TC_LOG_ERROR("sql.sql", "Table `quest_details` has non-existing Emote{} ({}) set for quest {}. Skipped.", 1+i, fields[1+i].GetUInt16(), fields[0].GetUInt32());
130 continue;
131 }
132
133 DetailsEmote[i] = fields[1+i].GetUInt16();
134 }
135
136 for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
137 DetailsEmoteDelay[i] = fields[5+i].GetUInt32();
138}
139
141{
142 _emoteOnComplete = fields[1].GetUInt16();
143 _emoteOnIncomplete = fields[2].GetUInt16();
144
145 if (!sEmotesStore.LookupEntry(_emoteOnComplete))
146 TC_LOG_ERROR("sql.sql", "Table `quest_request_items` has non-existing EmoteOnComplete ({}) set for quest {}.", _emoteOnComplete, fields[0].GetUInt32());
147
148 if (!sEmotesStore.LookupEntry(_emoteOnIncomplete))
149 TC_LOG_ERROR("sql.sql", "Table `quest_request_items` has non-existing EmoteOnIncomplete ({}) set for quest {}.", _emoteOnIncomplete, fields[0].GetUInt32());
150
151 _emoteOnCompleteDelay = fields[3].GetUInt32();
153 _requestItemsText = fields[5].GetStringView();
154}
155
157{
158 for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
159 {
160 if (!sEmotesStore.LookupEntry(fields[1 + i].GetUInt16()))
161 {
162 TC_LOG_ERROR("sql.sql", "Table `quest_offer_reward` has non-existing Emote{} ({}) set for quest {}. Skipped.", 1 + i, fields[1 + i].GetUInt16(), fields[0].GetUInt32());
163 continue;
164 }
165
166 OfferRewardEmote[i] = fields[1 + i].GetUInt16();
167 }
168
169 for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
170 OfferRewardEmoteDelay[i] = fields[5 + i].GetUInt32();
171
172 _offerRewardText = fields[9].GetString();
173}
174
176{
177 _maxLevel = fields[1].GetUInt8();
178 _allowableClasses = fields[2].GetUInt32();
179 _sourceSpellID = fields[3].GetUInt32();
180 _prevQuestID = fields[4].GetInt32();
181 _nextQuestID = fields[5].GetUInt32();
182 _exclusiveGroup = fields[6].GetInt32();
183 _breadcrumbForQuestId = fields[7].GetInt32();
184 _rewardMailTemplateId = fields[8].GetUInt32();
185 _rewardMailDelay = fields[9].GetUInt32();
186 _requiredSkillId = fields[10].GetUInt16();
187 _requiredSkillPoints = fields[11].GetUInt16();
188 _requiredMinRepFaction = fields[12].GetUInt16();
189 _requiredMaxRepFaction = fields[13].GetUInt16();
190 _requiredMinRepValue = fields[14].GetInt32();
191 _requiredMaxRepValue = fields[15].GetInt32();
192 _sourceItemIdCount = fields[16].GetUInt8();
193 _specialFlags = fields[17].GetUInt8();
194
197}
198
200{
201 _rewardMailSenderEntry = fields[1].GetUInt32();
202}
203
204uint32 Quest::GetXPReward(Player const* player) const
205{
206 if (player)
207 {
208 int32 quest_level = (_level == -1 ? player->GetLevel() : _level);
209 QuestXPEntry const* xpentry = sQuestXPStore.LookupEntry(quest_level);
210 if (!xpentry)
211 return 0;
212
213 int32 diffFactor = 2 * (quest_level - player->GetLevel()) + 20;
214 if (diffFactor < 1)
215 diffFactor = 1;
216 else if (diffFactor > 10)
217 diffFactor = 10;
218
219 uint32 xp = RoundXPValue(diffFactor * xpentry->Difficulty[_rewardXPDifficulty] / 10);
220 if (sWorld->getIntConfig(CONFIG_MIN_QUEST_SCALED_XP_RATIO))
221 {
222 uint32 minScaledXP = RoundXPValue(xpentry->Difficulty[_rewardXPDifficulty]) * sWorld->getIntConfig(CONFIG_MIN_QUEST_SCALED_XP_RATIO) / 100;
223 xp = std::max(minScaledXP, xp);
224 }
225
226 return xp;
227 }
228
229 return 0;
230}
231
232/*static*/ bool Quest::IsTakingQuestEnabled(uint32 questId)
233{
234 if (!sQuestPoolMgr->IsQuestActive(questId))
235 return false;
236
237 return true;
238}
239
240void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player, bool sendHiddenRewards) const
241{
242 if (!HasFlag(QUEST_FLAGS_HIDDEN_REWARDS) || sendHiddenRewards)
243 {
244 for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
245 {
246 if (!RewardChoiceItemId[i])
247 continue;
248
249 uint32 displayID = 0;
250 if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(RewardChoiceItemId[i]))
251 displayID = itemTemplate->GetDisplayId();
252
253 rewards.UnfilteredChoiceItems.emplace_back(RewardChoiceItemId[i], RewardChoiceItemCount[i], displayID);
254 }
255
256 for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
257 {
258 if (!RewardItemId[i])
259 continue;
260
261 uint32 displayID = 0;
262 if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(RewardItemId[i]))
263 displayID = itemTemplate->GetDisplayId();
264
265 rewards.RewardItems.emplace_back(RewardItemId[i], RewardItemCount[i], displayID);
266 }
267
268 rewards.RewardMoney = GetRewOrReqMoney(player);
269 rewards.RewardXPDifficulty = player->GetQuestXPReward(this);
270 }
271
272 rewards.RewardHonor = 10 * CalculateHonorGain(player->GetQuestLevel(this)); // rewarded honor points. Multiply with 10 to satisfy client
273 rewards.RewardDisplaySpell = GetRewDisplaySpell(); // reward spell, this spell will display (icon) (cast if RewSpellCast == 0)
274 rewards.RewardSpell = GetRewSpell();
275 rewards.RewardTitleId = GetRewTitle();
276 rewards.RewardTalents = GetBonusTalents();
278
279 for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i)
280 {
281 rewards.RewardFactionID[i] = RewardFactionId[i];
284 }
285}
286
288{
289 // RequiredMoney: the amount is the negative copper sum.
290 if (_rewardMoney < 0)
291 return _rewardMoney;
292
293 // RewardMoney: the positive amount
294 if (!player || !player->IsMaxLevel())
295 return int32(_rewardMoney * sWorld->getRate(RATE_MONEY_QUEST));
296 else // At level cap, the money reward is the maximum amount between normal and bonus money reward
297 return std::max(int32(GetRewMoneyMaxLevel()), int32(_rewardMoney * sWorld->getRate(RATE_MONEY_QUEST)));
298}
299
301{
302 // If Quest has flag to not give money on max level, it's 0
304 return 0;
305
306 // Else, return the rewarded copper sum modified by the rate
308}
309
311{
313}
314
319
320bool Quest::IsRaidQuest(Difficulty difficulty) const
321{
322 switch (_questInfoID)
323 {
324 case QUEST_INFO_RAID:
325 return true;
327 return difficulty == RAID_DIFFICULTY_10MAN_NORMAL || difficulty == RAID_DIFFICULTY_10MAN_HEROIC;
329 return difficulty == RAID_DIFFICULTY_25MAN_NORMAL || difficulty == RAID_DIFFICULTY_25MAN_HEROIC;
330 default:
331 break;
332 }
333
334 if ((_flags & QUEST_FLAGS_RAID) != 0)
335 return true;
336
337 return false;
338}
339
340bool Quest::IsAllowedInRaid(Difficulty difficulty) const
341{
342 if (IsRaidQuest(difficulty))
343 return true;
344
345 return sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_RAID);
346}
347
349{
350 if (level > GT_MAX_LEVEL)
351 level = GT_MAX_LEVEL;
352
353 uint32 honor = 0;
354
355 if (GetRewHonor() > 0 || GetRewKillHonor() > 0.0f)
356 {
357 // values stored from 0.. for 1...
358 TeamContributionPointsEntry const* tc = sTeamContributionPointsStore.LookupEntry(level);
359 if (!tc)
360 return 0;
361
362 honor = uint32(tc->Data * GetRewKillHonor() * 0.1f);
363 honor += GetRewHonor();
364 }
365
366 return honor;
367}
368
370{
371 // Dungeon Finder/Daily/Repeatable (if not weekly, monthly or seasonal) quests are never considered rewarded serverside.
372 // This affects counters and client requests for completed quests.
373 return (!IsDFQuest() && !IsDaily() && (!IsRepeatable() || IsWeekly() || IsMonthly() || IsSeasonal()));
374}
375
377{
378 for (uint8 loc = LOCALE_enUS; loc < TOTAL_LOCALES; ++loc)
379 QueryData[loc] = BuildQueryData(static_cast<LocaleConstant>(loc));
380}
381
383{
385
386 response.Info.LogTitle = GetLogTitle();
391
392 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
393 response.Info.ObjectiveText[i] = ObjectiveText[i];
394
395 if (QuestLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(GetQuestId()))
396 {
397 ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, loc, response.Info.LogTitle);
398 ObjectMgr::GetLocaleString(questTemplateLocale->LogDescription, loc, response.Info.LogDescription);
399 ObjectMgr::GetLocaleString(questTemplateLocale->QuestDescription, loc, response.Info.QuestDescription);
400 ObjectMgr::GetLocaleString(questTemplateLocale->AreaDescription, loc, response.Info.AreaDescription);
401 ObjectMgr::GetLocaleString(questTemplateLocale->QuestCompletionLog, loc, response.Info.QuestCompletionLog);
402
403 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
404 ObjectMgr::GetLocaleString(questTemplateLocale->ObjectiveText[i], loc, response.Info.ObjectiveText[i]);
405 }
406
407 response.Info.QuestID = GetQuestId();
408 response.Info.QuestType = GetQuestType();
409 response.Info.QuestLevel = GetQuestLevel();
410 response.Info.QuestMinLevel = GetMinLevel();
411 response.Info.QuestSortID = GetZoneOrSort();
412
413 response.Info.QuestInfoID = GetQuestInfoID();
415
418
421
424
426 response.Info.RewardMoney = GetRewOrReqMoney();
427
430 response.Info.RewardSpell = GetRewSpell();
431
432 response.Info.RewardHonor = GetRewHonor();
434
435 response.Info.StartItem = GetSrcItemId();
436 response.Info.Flags = GetFlags();
437 response.Info.RewardTitle = GetRewTitle();
442
444 {
445 for (uint8 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
446 {
447 response.Info.RewardItems[i] = RewardItemId[i];
448 response.Info.RewardAmount[i] = RewardItemCount[i];
449 }
450
451 for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
452 {
455 }
456 }
457
458 for (uint8 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i)
459 {
460 response.Info.RewardFactionID[i] = RewardFactionId[i];
463 }
464
465 response.Info.POIContinent = GetPOIContinent();
466 response.Info.POIx = GetPOIx();
467 response.Info.POIy = GetPOIy();
468 response.Info.POIPriority = GetPOIPriority();
469
470 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
471 {
472 response.Info.RequiredNpcOrGo[i] = RequiredNpcOrGo[i];
474 response.Info.ItemDrop[i] = ItemDrop[i];
475 response.Info.ItemDropQuantity[i] = ItemDropQuantity[i];
476 }
477
478 for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
479 {
480 response.Info.RequiredItemId[i] = RequiredItemId[i];
482 }
483
484 response.Write();
485 response.ShrinkToFit();
486 return response.Move();
487}
488
489void Quest::AddQuestLevelToTitle(std::string &title, int32 level)
490{
491 // Adds the quest level to the front of the quest title
492 // example: [13] Westfall Stew
493
494 std::stringstream questTitlePretty;
495 questTitlePretty << "[" << level << "] " << title;
496 title = questTitlePretty.str();
497}
498
500{
501 if (xp <= 100)
502 return 5 * ((xp + 2) / 5);
503 else if (xp <= 500)
504 return 10 * ((xp + 5) / 10);
505 else if (xp <= 1000)
506 return 25 * ((xp + 12) / 25);
507 else
508 return 50 * ((xp + 25) / 50);
509}
LocaleConstant
Definition Common.h:48
@ TOTAL_LOCALES
Definition Common.h:59
@ LOCALE_enUS
Definition Common.h:49
Difficulty
Definition DBCEnums.h:279
@ RAID_DIFFICULTY_25MAN_HEROIC
Definition DBCEnums.h:289
@ RAID_DIFFICULTY_10MAN_NORMAL
Definition DBCEnums.h:286
@ RAID_DIFFICULTY_25MAN_NORMAL
Definition DBCEnums.h:287
@ RAID_DIFFICULTY_10MAN_HEROIC
Definition DBCEnums.h:288
DBCStorage< QuestXPEntry > sQuestXPStore(QuestXPfmt)
DBCStorage< TeamContributionPointsEntry > sTeamContributionPointsStore(TeamContributionPointsfmt)
DBCStorage< EmotesEntry > sEmotesStore(EmotesEntryfmt)
#define GT_MAX_LEVEL
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
#define TC_LOG_ERROR(filterType__,...)
Definition Log.h:165
#define sObjectMgr
Definition ObjectMgr.h:1721
#define QUEST_ITEM_DROP_COUNT
Definition QuestDef.h:40
#define QUEST_REWARD_ITEM_COUNT
Definition QuestDef.h:42
#define QUEST_ITEM_OBJECTIVES_COUNT
Definition QuestDef.h:39
#define QUEST_REWARD_REPUTATIONS_COUNT
Definition QuestDef.h:43
#define QUEST_EMOTE_COUNT
Definition QuestDef.h:44
#define QUEST_OBJECTIVES_COUNT
Definition QuestDef.h:38
@ QUEST_FLAGS_NO_MONEY_FROM_XP
Definition QuestDef.h:140
@ QUEST_FLAGS_HIDDEN_REWARDS
Definition QuestDef.h:141
@ QUEST_FLAGS_AUTO_ACCEPT
Definition QuestDef.h:151
@ QUEST_FLAGS_AUTOCOMPLETE
Definition QuestDef.h:148
@ QUEST_FLAGS_RAID
Definition QuestDef.h:138
#define QUEST_REWARD_CHOICES_COUNT
Definition QuestDef.h:41
@ QUEST_SPECIAL_FLAGS_AUTO_ACCEPT
Definition QuestDef.h:162
#define sQuestPoolMgr
Definition QuestPools.h:63
@ QUEST_INFO_RAID_10
@ QUEST_INFO_RAID_25
@ QUEST_INFO_RAID
@ QUEST_TYPE_TURNIN
Class used to access individual fields of database query result.
Definition Field.h:92
uint8 GetUInt8() const
Definition Field.cpp:29
std::string GetString() const
Definition Field.cpp:125
std::string_view GetStringView() const
Definition Field.cpp:137
int16 GetInt16() const
Definition Field.cpp:53
uint16 GetUInt16() const
Definition Field.cpp:45
float GetFloat() const
Definition Field.cpp:93
uint32 GetUInt32() const
Definition Field.cpp:61
int32 GetInt32() const
Definition Field.cpp:69
static std::string_view GetLocaleString(std::vector< std::string > const &data, LocaleConstant locale)
Definition ObjectMgr.h:1519
int32 GetQuestLevel(Quest const *quest) const
Definition Player.h:1236
bool IsMaxLevel() const
Definition Player.cpp:2537
uint32 GetQuestXPReward(Quest const *quest)
Definition Player.cpp:14844
uint32 _emoteOnIncomplete
Definition QuestDef.h:394
int32 GetRewArenaPoints() const
Definition QuestDef.h:256
std::string _areaDescription
Definition QuestDef.h:379
int32 GetRepObjectiveValue() const
Definition QuestDef.h:240
std::array< uint32, QUEST_OBJECTIVES_COUNT > RequiredNpcOrGoCount
Definition QuestDef.h:309
int32 _prevQuestID
Definition QuestDef.h:406
std::array< int32, QUEST_REWARD_REPUTATIONS_COUNT > RewardFactionValue
Definition QuestDef.h:315
uint32 GetRewMoneyMaxLevel() const
Definition QuestDef.cpp:300
int32 _level
Definition QuestDef.h:358
uint32 _requiredSkillPoints
Definition QuestDef.h:413
uint32 GetRewTitle() const
Definition QuestDef.h:276
WorldPacket BuildQueryData(LocaleConstant loc) const
Definition QuestDef.cpp:382
int32 GetRepObjectiveValue2() const
Definition QuestDef.h:242
std::string const & GetQuestCompletionLog() const
Definition QuestDef.h:267
uint32 _suggestedPlayers
Definition QuestDef.h:365
uint32 _rewardBonusMoney
Definition QuestDef.h:384
uint32 GetRepObjectiveFaction() const
Definition QuestDef.h:239
uint32 GetXPReward(Player const *player) const
Definition QuestDef.cpp:204
int32 _breadcrumbForQuestId
Definition QuestDef.h:409
float _rewardKillHonor
Definition QuestDef.h:382
void LoadQuestDetails(Field *fields)
Definition QuestDef.cpp:123
std::array< uint32, QUEST_REWARD_CHOICES_COUNT > RewardChoiceItemCount
Definition QuestDef.h:311
int32 _rewardMoney
Definition QuestDef.h:383
uint32 _requiredFactionId2
Definition QuestDef.h:363
uint32 _sourceItemIdCount
Definition QuestDef.h:418
static void AddQuestLevelToTitle(std::string &title, int32 level)
Definition QuestDef.cpp:489
static bool IsTakingQuestEnabled(uint32 questId)
Definition QuestDef.cpp:232
uint32 GetRepObjectiveFaction2() const
Definition QuestDef.h:241
Quest(Field *questRecord)
Definition QuestDef.cpp:29
uint32 _rewardTalents
Definition QuestDef.h:370
std::array< uint32, QUEST_REWARD_CHOICES_COUNT > RewardChoiceItemId
Definition QuestDef.h:310
int32 _rewardSpell
Definition QuestDef.h:386
float GetPOIy() const
Definition QuestDef.h:279
std::array< uint32, QUEST_EMOTE_COUNT > DetailsEmoteDelay
Definition QuestDef.h:318
void LoadQuestRequestItems(Field *fields)
Definition QuestDef.cpp:140
uint32 GetMinLevel() const
Definition QuestDef.h:231
WorldPacket QueryData[TOTAL_LOCALES]
Definition QuestDef.h:343
float _poiY
Definition QuestDef.h:389
uint32 _requiredMinRepFaction
Definition QuestDef.h:414
std::string _questDescription
Definition QuestDef.h:378
std::array< uint32, QUEST_REWARD_ITEM_COUNT > RewardItemId
Definition QuestDef.h:312
uint32 _requiredSkillId
Definition QuestDef.h:412
int32 _requiredMinRepValue
Definition QuestDef.h:415
uint32 _rewItemsCount
Definition QuestDef.h:350
uint32 _flags
Definition QuestDef.h:367
uint32 GetRewardReputationMask() const
Definition QuestDef.h:290
uint32 _rewChoiceItemsCount
Definition QuestDef.h:349
static uint32 RoundXPValue(uint32 xp)
Definition QuestDef.cpp:499
std::array< uint32, QUEST_REWARD_ITEM_COUNT > RewardItemCount
Definition QuestDef.h:313
uint32 GetPOIContinent() const
Definition QuestDef.h:277
std::array< std::string, QUEST_OBJECTIVES_COUNT > ObjectiveText
Definition QuestDef.h:303
int32 _rewardArenaPoints
Definition QuestDef.h:371
bool IsDFQuest() const
Definition QuestDef.h:298
uint32 _rewardHonor
Definition QuestDef.h:381
void LoadQuestMailSender(Field *fields)
Definition QuestDef.cpp:199
uint32 GetXPDifficulty() const
Definition QuestDef.h:257
uint32 _rewardXPDifficulty
Definition QuestDef.h:374
std::string _requestItemsText
Definition QuestDef.h:397
uint32 _reqItemsCount
Definition QuestDef.h:347
int32 _requiredFactionValue2
Definition QuestDef.h:364
uint32 GetRewDisplaySpell() const
Definition QuestDef.h:271
bool IsRepeatable() const
Definition QuestDef.h:285
int32 GetZoneOrSort() const
Definition QuestDef.h:230
uint32 _emoteOnIncompleteDelay
Definition QuestDef.h:396
int32 _exclusiveGroup
Definition QuestDef.h:408
int32 GetQuestLevel() const
Definition QuestDef.h:233
bool IsAutoComplete() const
Definition QuestDef.cpp:315
uint32 _rewardReputationMask
Definition QuestDef.h:372
uint32 _requiredFactionId1
Definition QuestDef.h:361
uint32 GetRewKillHonor() const
Definition QuestDef.h:269
uint32 _sourceItemId
Definition QuestDef.h:375
uint32 GetFlags() const
Definition QuestDef.h:288
int32 _requiredMaxRepValue
Definition QuestDef.h:417
uint32 GetPlayersSlain() const
Definition QuestDef.h:254
void BuildQuestRewards(WorldPackets::Quest::QuestRewards &rewards, Player *player, bool sendHiddenRewards=false) const
Definition QuestDef.cpp:240
std::array< uint32, QUEST_ITEM_OBJECTIVES_COUNT > RequiredItemId
Definition QuestDef.h:304
uint32 CalculateHonorGain(uint8 level) const
Definition QuestDef.cpp:348
std::string const & GetLogTitle() const
Definition QuestDef.h:261
uint32 GetQuestType() const
Definition QuestDef.h:229
uint32 _requiredMaxRepFaction
Definition QuestDef.h:416
uint32 _allowableRaces
Definition QuestDef.h:360
uint32 GetQuestId() const
Definition QuestDef.h:228
std::string _logTitle
Definition QuestDef.h:376
std::string _logDescription
Definition QuestDef.h:377
uint32 _reqCreatureOrGOcount
Definition QuestDef.h:348
uint32 _questInfoID
Definition QuestDef.h:359
uint32 _rewardNextQuest
Definition QuestDef.h:373
void LoadQuestOfferReward(Field *fields)
Definition QuestDef.cpp:156
uint32 _rewardMailDelay
Definition QuestDef.h:411
uint32 _requiredPlayerKills
Definition QuestDef.h:369
std::array< uint32, QUEST_ITEM_DROP_COUNT > ItemDropQuantity
Definition QuestDef.h:307
uint32 _sourceSpellID
Definition QuestDef.h:405
bool IsAutoAccept() const
Definition QuestDef.cpp:310
bool IsDaily() const
Definition QuestDef.h:291
uint32 GetQuestInfoID() const
Definition QuestDef.h:234
uint32 _poiContinent
Definition QuestDef.h:387
bool IsRaidQuest(Difficulty difficulty) const
Definition QuestDef.cpp:320
int32 GetRewSpell() const
Definition QuestDef.h:272
uint32 _limitTime
Definition QuestDef.h:366
uint32 _rewardDisplaySpell
Definition QuestDef.h:385
uint32 _type
Definition QuestDef.h:355
uint32 _emoteOnCompleteDelay
Definition QuestDef.h:395
uint32 _specialFlags
Definition QuestDef.h:420
uint32 _minLevel
Definition QuestDef.h:357
int32 GetRewOrReqMoney(Player const *player=nullptr) const
Definition QuestDef.cpp:287
std::string const & GetLogDescription() const
Definition QuestDef.h:262
std::array< int32, QUEST_REWARD_REPUTATIONS_COUNT > RewardFactionOverride
Definition QuestDef.h:316
void InitializeQueryData()
Definition QuestDef.cpp:376
std::array< uint32, QUEST_EMOTE_COUNT > DetailsEmote
Definition QuestDef.h:317
std::array< uint32, QUEST_REWARD_REPUTATIONS_COUNT > RewardFactionId
Definition QuestDef.h:314
std::string const & GetAreaDescription() const
Definition QuestDef.h:264
uint32 _poiPriority
Definition QuestDef.h:390
bool IsAllowedInRaid(Difficulty difficulty) const
Definition QuestDef.cpp:340
uint32 GetRewHonor() const
Definition QuestDef.h:268
uint32 GetSrcItemId() const
Definition QuestDef.h:258
uint32 _allowableClasses
Definition QuestDef.h:404
bool IsWeekly() const
Definition QuestDef.h:292
bool IsSeasonal() const
Definition QuestDef.h:294
std::string _questCompletionLog
Definition QuestDef.h:380
uint32 _maxLevel
Definition QuestDef.h:403
float GetPOIx() const
Definition QuestDef.h:278
int32 _requiredFactionValue1
Definition QuestDef.h:362
uint32 _id
Definition QuestDef.h:354
uint32 _rewardMailSenderEntry
Definition QuestDef.h:419
float _poiX
Definition QuestDef.h:388
std::string const & GetQuestDescription() const
Definition QuestDef.h:263
uint32 _emoteOnComplete
Definition QuestDef.h:393
std::array< uint32, QUEST_ITEM_OBJECTIVES_COUNT > RequiredItemCount
Definition QuestDef.h:305
std::array< uint32, QUEST_ITEM_DROP_COUNT > ItemDrop
Definition QuestDef.h:306
bool IsMonthly() const
Definition QuestDef.h:293
int32 _zoneOrSort
Definition QuestDef.h:356
uint32 _rewardTitleId
Definition QuestDef.h:368
std::array< int32, QUEST_OBJECTIVES_COUNT > RequiredNpcOrGo
Definition QuestDef.h:308
uint32 GetBonusTalents() const
Definition QuestDef.h:255
bool HasFlag(QuestFlags flag) const
Definition QuestDef.h:216
std::string _offerRewardText
Definition QuestDef.h:400
uint32 _rewardMailTemplateId
Definition QuestDef.h:410
std::array< uint32, QUEST_EMOTE_COUNT > OfferRewardEmoteDelay
Definition QuestDef.h:320
uint32 GetPOIPriority() const
Definition QuestDef.h:280
uint32 _nextQuestID
Definition QuestDef.h:407
void LoadQuestTemplateAddon(Field *fields)
Definition QuestDef.cpp:175
uint32 GetNextQuestInChain() const
Definition QuestDef.h:253
bool CanIncreaseRewardedQuestCounters() const
Definition QuestDef.cpp:369
uint32 GetSuggestedPlayers() const
Definition QuestDef.h:247
std::array< uint32, QUEST_EMOTE_COUNT > OfferRewardEmote
Definition QuestDef.h:319
uint8 GetLevel() const
Definition Unit.h:903
WorldPacket const * Write() override
WorldPacket && Move()
Definition Packet.h:53
#define sWorld
Definition World.h:901
@ CONFIG_MIN_QUEST_SCALED_XP_RATIO
Definition World.h:255
@ RATE_MONEY_MAX_LEVEL_QUEST
Definition World.h:475
@ RATE_MONEY_QUEST
Definition World.h:474
@ CONFIG_QUEST_IGNORE_AUTO_COMPLETE
Definition World.h:153
@ CONFIG_QUEST_IGNORE_RAID
Definition World.h:113
@ CONFIG_QUEST_IGNORE_AUTO_ACCEPT
Definition World.h:152
uint32 Difficulty[10]
uint32 RewardFactionID[QUEST_REWARD_REPUTATIONS_COUNT]
uint32 RequiredNpcOrGoCount[QUEST_OBJECTIVES_COUNT]
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT]
uint32 RewardItems[QUEST_REWARD_ITEM_COUNT]
int32 RewardFactionOverride[QUEST_REWARD_REPUTATIONS_COUNT]
uint32 RewardAmount[QUEST_REWARD_ITEM_COUNT]
uint32 RequiredItemCount[QUEST_ITEM_OBJECTIVES_COUNT]
int32 RequiredFactionValue[PVP_TEAMS_COUNT]
uint32 ItemDropQuantity[QUEST_ITEM_DROP_COUNT]
QuestInfoChoiceItem UnfilteredChoiceItems[QUEST_REWARD_CHOICES_COUNT]
uint32 RequiredItemId[QUEST_ITEM_OBJECTIVES_COUNT]
int32 RequiredNpcOrGo[QUEST_OBJECTIVES_COUNT]
uint32 RequiredFactionId[PVP_TEAMS_COUNT]
uint32 ItemDrop[QUEST_ITEM_DROP_COUNT]
int32 RewardFactionValue[QUEST_REWARD_REPUTATIONS_COUNT]
std::array< int32, QUEST_REWARD_REPUTATIONS_COUNT > RewardFactionOverride
std::vector< QuestChoiceItem > RewardItems
std::array< uint32, QUEST_REWARD_REPUTATIONS_COUNT > RewardFactionID
std::vector< QuestChoiceItem > UnfilteredChoiceItems
std::array< int32, QUEST_REWARD_REPUTATIONS_COUNT > RewardFactionValue