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 _method = questRecord[1].GetUInt8();
33 _level = questRecord[2].GetInt16();
34 _minLevel = questRecord[3].GetUInt8();
35 _zoneOrSort = questRecord[4].GetInt16();
36 _type = questRecord[5].GetUInt16();
37 _suggestedPlayers = questRecord[6].GetUInt8();
38 _timeAllowed = 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 _startItem = 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_REWARDS_COUNT; ++i)
60 {
61 RewardItemId[i] = questRecord[27 + i * 2].GetUInt32();
62 RewardItemIdCount[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_REPUTATIONS_COUNT; ++i)
78 {
79 RewardFactionId[i] = questRecord[47 + i * 3].GetUInt16();
80 RewardFactionValueId[i] = questRecord[48 + i * 3].GetInt32();
81 RewardFactionValueIdOverride[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 _title = questRecord[66].GetString();
89 _objectives = questRecord[67].GetString();
90 _details = questRecord[68].GetString();
91 _areaDescription = questRecord[69].GetString();
92 _completedText = 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_SOURCE_ITEM_IDS_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 // int8 Unknown0 = questRecord[99].GetUInt8();
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 _requestItemsText = fields[3].GetString();
152}
153
155{
156 for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
157 {
158 if (!sEmotesStore.LookupEntry(fields[1 + i].GetUInt16()))
159 {
160 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());
161 continue;
162 }
163
164 OfferRewardEmote[i] = fields[1 + i].GetUInt16();
165 }
166
167 for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
168 OfferRewardEmoteDelay[i] = fields[5 + i].GetUInt32();
169
170 _offerRewardText = fields[9].GetString();
171}
172
174{
175 _maxLevel = fields[1].GetUInt8();
176 _requiredClasses = fields[2].GetUInt32();
177 _sourceSpellid = fields[3].GetUInt32();
178 _prevQuestId = fields[4].GetInt32();
179 _nextQuestId = fields[5].GetUInt32();
180 _exclusiveGroup = fields[6].GetInt32();
181 _breadcrumbForQuestId = fields[7].GetInt32();
182 _rewardMailTemplateId = fields[8].GetUInt32();
183 _rewardMailDelay = fields[9].GetUInt32();
184 _requiredSkillId = fields[10].GetUInt16();
185 _requiredSkillPoints = fields[11].GetUInt16();
186 _requiredMinRepFaction = fields[12].GetUInt16();
187 _requiredMaxRepFaction = fields[13].GetUInt16();
188 _requiredMinRepValue = fields[14].GetInt32();
189 _requiredMaxRepValue = fields[15].GetInt32();
190 _startItemCount = fields[16].GetUInt8();
191 _specialFlags = fields[17].GetUInt8();
192
195}
196
198{
199 _rewardMailSenderEntry = fields[1].GetUInt32();
200}
201
202uint32 Quest::GetXPReward(Player const* player) const
203{
204 if (player)
205 {
206 int32 quest_level = (_level == -1 ? player->GetLevel() : _level);
207 QuestXPEntry const* xpentry = sQuestXPStore.LookupEntry(quest_level);
208 if (!xpentry)
209 return 0;
210
211 int32 diffFactor = 2 * (quest_level - player->GetLevel()) + 20;
212 if (diffFactor < 1)
213 diffFactor = 1;
214 else if (diffFactor > 10)
215 diffFactor = 10;
216
217 uint32 xp = RoundXPValue(diffFactor * xpentry->Difficulty[_rewardXPDifficulty] / 10);
218 if (sWorld->getIntConfig(CONFIG_MIN_QUEST_SCALED_XP_RATIO))
219 {
220 uint32 minScaledXP = RoundXPValue(xpentry->Difficulty[_rewardXPDifficulty]) * sWorld->getIntConfig(CONFIG_MIN_QUEST_SCALED_XP_RATIO) / 100;
221 xp = std::max(minScaledXP, xp);
222 }
223
224 return xp;
225 }
226
227 return 0;
228}
229
230/*static*/ bool Quest::IsTakingQuestEnabled(uint32 questId)
231{
232 if (!sQuestPoolMgr->IsQuestActive(questId))
233 return false;
234
235 return true;
236}
237
238void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player, bool sendHiddenRewards) const
239{
240 if (!HasFlag(QUEST_FLAGS_HIDDEN_REWARDS) || sendHiddenRewards)
241 {
242 for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
243 {
244 if (!RewardChoiceItemId[i])
245 continue;
246
247 uint32 displayID = 0;
248 if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(RewardChoiceItemId[i]))
249 displayID = itemTemplate->DisplayInfoID;
250
251 rewards.UnfilteredChoiceItems.emplace_back(RewardChoiceItemId[i], RewardChoiceItemCount[i], displayID);
252 }
253
254 for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i)
255 {
256 if (!RewardItemId[i])
257 continue;
258
259 uint32 displayID = 0;
260 if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(RewardItemId[i]))
261 displayID = itemTemplate->DisplayInfoID;
262
263 rewards.RewardItems.emplace_back(RewardItemId[i], RewardItemIdCount[i], displayID);
264 }
265
266 rewards.RewardMoney = GetRewOrReqMoney(player);
267 rewards.RewardXPDifficulty = GetXPReward(player) * sWorld->getRate(RATE_XP_QUEST);
268 }
269
270 rewards.RewardHonor = 10 * CalculateHonorGain(player->GetQuestLevel(this)); // rewarded honor points. Multiply with 10 to satisfy client
271 rewards.RewardDisplaySpell = GetRewSpell(); // reward spell, this spell will display (icon) (cast if RewSpellCast == 0)
272 rewards.RewardSpell = GetRewSpellCast();
273 rewards.RewardTitleId = GetCharTitleId();
274 rewards.RewardTalents = GetBonusTalents();
276
277 for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
278 rewards.RewardFactionID[i] = RewardFactionId[i];
279
280 for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
282
283 for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
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
316{
318}
319
320bool Quest::IsRaidQuest(Difficulty difficulty) const
321{
322 switch (_type)
323 {
324 case QUEST_TYPE_RAID:
325 return true;
327 return !(difficulty & RAID_DIFFICULTY_MASK_25MAN);
329 return difficulty & RAID_DIFFICULTY_MASK_25MAN;
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 (GetRewHonorAddition() > 0 || GetRewHonorMultiplier() > 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 * GetRewHonorMultiplier() * 0.1f);
363 honor += GetRewHonorAddition();
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 std::string locQuestTitle = GetTitle();
387 std::string locQuestDetails = GetDetails();
388 std::string locQuestObjectives = GetObjectives();
389 std::string locQuestAreaDescription = GetAreaDescription();
390 std::string locQuestCompletedText = GetCompletedText();
391
392 std::string locQuestObjectiveText[QUEST_OBJECTIVES_COUNT];
393 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
394 locQuestObjectiveText[i] = ObjectiveText[i];
395
396 if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(GetQuestId()))
397 {
398 ObjectMgr::GetLocaleString(localeData->Title, loc, locQuestTitle);
399 ObjectMgr::GetLocaleString(localeData->Details, loc, locQuestDetails);
400 ObjectMgr::GetLocaleString(localeData->Objectives, loc, locQuestObjectives);
401 ObjectMgr::GetLocaleString(localeData->AreaDescription, loc, locQuestAreaDescription);
402 ObjectMgr::GetLocaleString(localeData->CompletedText, loc, locQuestCompletedText);
403
404 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
405 ObjectMgr::GetLocaleString(localeData->ObjectiveText[i], loc, locQuestObjectiveText[i]);
406 }
407
408 response.Info.QuestID = GetQuestId();
409 response.Info.QuestMethod = GetQuestMethod();
410 response.Info.QuestLevel = GetQuestLevel();
411 response.Info.QuestMinLevel = GetMinLevel();
412 response.Info.QuestSortID = GetZoneOrSort();
413
414 response.Info.QuestType = GetType();
416
419
422
424 response.Info.RewardXPDifficulty = GetXPId();
425
426 response.Info.RewardMoney = GetRewOrReqMoney();
429 response.Info.RewardSpell = GetRewSpellCast();
430
433
434 response.Info.StartItem = GetSrcItemId();
435 response.Info.Flags = GetFlags();
436 response.Info.RewardTitleId = GetCharTitleId();
440
441 for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
442 {
443 response.Info.RewardItems[i] = RewardItemId[i];
444 response.Info.RewardAmount[i] = RewardItemIdCount[i];
445 }
446
447 for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
448 {
451 }
452
453 for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids
454 response.Info.RewardFactionID[i] = RewardFactionId[i];
455
456 for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid+1 QuestFactionReward.dbc?
458
459 for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unk (0)
461
462 response.Info.POIContinent = GetPOIContinent();
463 response.Info.POIx = GetPOIx();
464 response.Info.POIy = GetPOIy();
465 response.Info.POIPriority = GetPointOpt();
466
467 response.Info.Title = locQuestTitle;
468 response.Info.Objectives = locQuestObjectives;
469 response.Info.Details = locQuestDetails;
470 response.Info.AreaDescription = locQuestAreaDescription;
471 response.Info.CompletedText = locQuestCompletedText;
472
473 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
474 {
475 response.Info.RequiredNpcOrGo[i] = RequiredNpcOrGo[i];
477 response.Info.ItemDrop[i] = ItemDrop[i];
478 }
479
480 for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
481 {
482 response.Info.RequiredItemId[i] = RequiredItemId[i];
484 }
485
486 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
487 response.Info.ObjectiveText[i] = locQuestObjectiveText[i];
488
489 response.Write();
490 response.ShrinkToFit();
491 return response.Move();
492}
493
494void Quest::AddQuestLevelToTitle(std::string &title, int32 level)
495{
496 // Adds the quest level to the front of the quest title
497 // example: [13] Westfall Stew
498
499 std::stringstream questTitlePretty;
500 questTitlePretty << "[" << level << "] " << title;
501 title = questTitlePretty.str();
502}
503
505{
506 if (xp <= 100)
507 return 5 * ((xp + 2) / 5);
508 else if (xp <= 500)
509 return 10 * ((xp + 5) / 10);
510 else if (xp <= 1000)
511 return 25 * ((xp + 12) / 25);
512 else
513 return 50 * ((xp + 25) / 50);
514}
LocaleConstant
Definition Common.h:48
@ TOTAL_LOCALES
Definition Common.h:59
@ LOCALE_enUS
Definition Common.h:49
Difficulty
Definition DBCEnums.h:279
#define RAID_DIFFICULTY_MASK_25MAN
Definition DBCEnums.h:292
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_REWARDS_COUNT
Definition QuestDef.h:42
#define QUEST_ITEM_OBJECTIVES_COUNT
Definition QuestDef.h:39
#define QUEST_EMOTE_COUNT
Definition QuestDef.h:45
#define QUEST_OBJECTIVES_COUNT
Definition QuestDef.h:38
@ QUEST_FLAGS_NO_MONEY_FROM_XP
Definition QuestDef.h:141
@ QUEST_FLAGS_HIDDEN_REWARDS
Definition QuestDef.h:142
@ QUEST_FLAGS_AUTO_ACCEPT
Definition QuestDef.h:152
@ QUEST_FLAGS_AUTOCOMPLETE
Definition QuestDef.h:149
@ QUEST_FLAGS_RAID
Definition QuestDef.h:139
#define QUEST_REPUTATIONS_COUNT
Definition QuestDef.h:44
#define QUEST_SOURCE_ITEM_IDS_COUNT
Definition QuestDef.h:40
#define QUEST_REWARD_CHOICES_COUNT
Definition QuestDef.h:41
@ QUEST_SPECIAL_FLAGS_AUTO_ACCEPT
Definition QuestDef.h:163
#define sQuestPoolMgr
Definition QuestPools.h:63
@ QUEST_TYPE_RAID
@ QUEST_TYPE_RAID_25
@ QUEST_TYPE_RAID_10
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
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, size_t locale)
Definition ObjectMgr.h:1525
int32 GetQuestLevel(Quest const *quest) const
Definition Player.h:1253
bool IsMaxLevel() const
Definition Player.cpp:2501
uint32 _emoteOnIncomplete
Definition QuestDef.h:389
int32 GetRewArenaPoints() const
Definition QuestDef.h:258
std::string _areaDescription
Definition QuestDef.h:377
uint32 ItemDropQuantity[QUEST_SOURCE_ITEM_IDS_COUNT]
Definition QuestDef.h:307
int32 GetRepObjectiveValue() const
Definition QuestDef.h:241
bool HasFlag(uint32 flag) const
Definition QuestDef.h:219
uint32 DetailsEmote[QUEST_EMOTE_COUNT]
Definition QuestDef.h:317
uint32 OfferRewardEmote[QUEST_EMOTE_COUNT]
Definition QuestDef.h:319
uint32 GetRewSpell() const
Definition QuestDef.h:274
uint32 GetRewMoneyMaxLevel() const
Definition QuestDef.cpp:300
int32 _level
Definition QuestDef.h:355
std::string _details
Definition QuestDef.h:373
int32 _prevQuestId
Definition QuestDef.h:396
uint32 _requiredSkillPoints
Definition QuestDef.h:403
int32 RequiredNpcOrGo[QUEST_OBJECTIVES_COUNT]
Definition QuestDef.h:308
WorldPacket BuildQueryData(LocaleConstant loc) const
Definition QuestDef.cpp:382
int32 GetRepObjectiveValue2() const
Definition QuestDef.h:243
uint32 _suggestedPlayers
Definition QuestDef.h:362
uint32 _rewardBonusMoney
Definition QuestDef.h:382
uint32 GetRepObjectiveFaction() const
Definition QuestDef.h:240
uint32 GetXPReward(Player const *player) const
Definition QuestDef.cpp:202
int32 _breadcrumbForQuestId
Definition QuestDef.h:399
uint32 _requiredClasses
Definition QuestDef.h:394
float _rewardKillHonor
Definition QuestDef.h:380
uint32 RequiredNpcOrGoCount[QUEST_OBJECTIVES_COUNT]
Definition QuestDef.h:309
void LoadQuestDetails(Field *fields)
Definition QuestDef.cpp:123
int32 _rewardMoney
Definition QuestDef.h:381
uint32 _requiredFactionId2
Definition QuestDef.h:360
static void AddQuestLevelToTitle(std::string &title, int32 level)
Definition QuestDef.cpp:494
static bool IsTakingQuestEnabled(uint32 questId)
Definition QuestDef.cpp:230
uint32 GetRepObjectiveFaction2() const
Definition QuestDef.h:242
Quest(Field *questRecord)
Definition QuestDef.cpp:29
uint32 GetCharTitleId() const
Definition QuestDef.h:255
uint32 _rewardTalents
Definition QuestDef.h:367
int32 _rewardSpell
Definition QuestDef.h:384
float GetPOIy() const
Definition QuestDef.h:281
uint32 RewardItemIdCount[QUEST_REWARDS_COUNT]
Definition QuestDef.h:313
void LoadQuestRequestItems(Field *fields)
Definition QuestDef.cpp:140
uint32 GetMinLevel() const
Definition QuestDef.h:232
WorldPacket QueryData[TOTAL_LOCALES]
Definition QuestDef.h:340
float _poiY
Definition QuestDef.h:387
uint32 _requiredMinRepFaction
Definition QuestDef.h:404
uint32 _requiredSkillId
Definition QuestDef.h:402
uint32 _startItemCount
Definition QuestDef.h:408
std::string const & GetObjectives() const
Definition QuestDef.h:265
int32 _requiredMinRepValue
Definition QuestDef.h:405
uint32 _rewItemsCount
Definition QuestDef.h:347
uint32 _flags
Definition QuestDef.h:364
uint32 RewardChoiceItemId[QUEST_REWARD_CHOICES_COUNT]
Definition QuestDef.h:310
uint32 _rewChoiceItemsCount
Definition QuestDef.h:346
static uint32 RoundXPValue(uint32 xp)
Definition QuestDef.cpp:504
uint32 GetPOIContinent() const
Definition QuestDef.h:279
uint32 ItemDrop[QUEST_SOURCE_ITEM_IDS_COUNT]
Definition QuestDef.h:306
uint32 _timeAllowed
Definition QuestDef.h:363
uint32 _nextQuestId
Definition QuestDef.h:397
int32 _rewardArenaPoints
Definition QuestDef.h:368
bool IsDFQuest() const
Definition QuestDef.h:296
uint32 _rewardHonor
Definition QuestDef.h:379
void LoadQuestMailSender(Field *fields)
Definition QuestDef.cpp:197
int32 RewardFactionValueIdOverride[QUEST_REPUTATIONS_COUNT]
Definition QuestDef.h:316
uint32 _rewardXPDifficulty
Definition QuestDef.h:370
std::string _requestItemsText
Definition QuestDef.h:376
uint32 _reqItemsCount
Definition QuestDef.h:344
uint32 DetailsEmoteDelay[QUEST_EMOTE_COUNT]
Definition QuestDef.h:318
std::string const & GetDetails() const
Definition QuestDef.h:264
int32 _requiredFactionValue2
Definition QuestDef.h:361
bool IsRepeatable() const
Definition QuestDef.h:285
int32 GetZoneOrSort() const
Definition QuestDef.h:231
int32 _exclusiveGroup
Definition QuestDef.h:398
std::string _objectives
Definition QuestDef.h:374
int32 GetQuestLevel() const
Definition QuestDef.h:234
float GetRewHonorMultiplier() const
Definition QuestDef.h:272
bool IsAutoComplete() const
Definition QuestDef.cpp:315
uint32 GetRewHonorAddition() const
Definition QuestDef.h:271
uint32 _requiredFactionId1
Definition QuestDef.h:358
uint32 RewardChoiceItemCount[QUEST_REWARD_CHOICES_COUNT]
Definition QuestDef.h:311
uint32 GetFlags() const
Definition QuestDef.h:288
int32 _requiredMaxRepValue
Definition QuestDef.h:407
uint32 GetPlayersSlain() const
Definition QuestDef.h:256
void BuildQuestRewards(WorldPackets::Quest::QuestRewards &rewards, Player *player, bool sendHiddenRewards=false) const
Definition QuestDef.cpp:238
std::string const & GetCompletedText() const
Definition QuestDef.h:269
uint32 CalculateHonorGain(uint8 level) const
Definition QuestDef.cpp:348
uint32 _requiredMaxRepFaction
Definition QuestDef.h:406
uint32 OfferRewardEmoteDelay[QUEST_EMOTE_COUNT]
Definition QuestDef.h:320
uint32 _allowableRaces
Definition QuestDef.h:357
uint32 _method
Definition QuestDef.h:352
uint32 GetQuestId() const
Definition QuestDef.h:229
uint32 _reqCreatureOrGOcount
Definition QuestDef.h:345
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT]
Definition QuestDef.h:302
uint32 _rewardNextQuest
Definition QuestDef.h:369
void LoadQuestOfferReward(Field *fields)
Definition QuestDef.cpp:154
uint32 _rewardMailDelay
Definition QuestDef.h:401
uint32 _requiredPlayerKills
Definition QuestDef.h:366
bool IsAutoAccept() const
Definition QuestDef.cpp:310
uint32 GetType() const
Definition QuestDef.h:235
uint32 RequiredItemCount[QUEST_ITEM_OBJECTIVES_COUNT]
Definition QuestDef.h:305
bool IsDaily() const
Definition QuestDef.h:289
uint32 _poiContinent
Definition QuestDef.h:385
uint32 GetPointOpt() const
Definition QuestDef.h:282
bool IsRaidQuest(Difficulty difficulty) const
Definition QuestDef.cpp:320
uint32 _sourceSpellid
Definition QuestDef.h:395
uint32 _rewardDisplaySpell
Definition QuestDef.h:383
std::string _title
Definition QuestDef.h:372
uint32 RequiredItemId[QUEST_ITEM_OBJECTIVES_COUNT]
Definition QuestDef.h:304
uint32 _type
Definition QuestDef.h:356
uint32 GetXPId() const
Definition QuestDef.h:259
uint32 _specialFlags
Definition QuestDef.h:410
uint32 _minLevel
Definition QuestDef.h:354
int32 GetRewOrReqMoney(Player const *player=nullptr) const
Definition QuestDef.cpp:287
void InitializeQueryData()
Definition QuestDef.cpp:376
std::string const & GetAreaDescription() const
Definition QuestDef.h:268
uint32 _poiPriority
Definition QuestDef.h:388
uint32 _startItem
Definition QuestDef.h:371
bool IsAllowedInRaid(Difficulty difficulty) const
Definition QuestDef.cpp:340
uint32 GetSrcItemId() const
Definition QuestDef.h:260
bool IsWeekly() const
Definition QuestDef.h:290
uint32 RewardFactionId[QUEST_REPUTATIONS_COUNT]
Definition QuestDef.h:314
bool IsSeasonal() const
Definition QuestDef.h:292
std::string const & GetTitle() const
Definition QuestDef.h:263
uint32 _maxLevel
Definition QuestDef.h:393
float GetPOIx() const
Definition QuestDef.h:280
int32 _requiredFactionValue1
Definition QuestDef.h:359
int32 RewardFactionValueId[QUEST_REPUTATIONS_COUNT]
Definition QuestDef.h:315
uint32 _id
Definition QuestDef.h:351
uint32 _rewardMailSenderEntry
Definition QuestDef.h:409
float _poiX
Definition QuestDef.h:386
int32 GetRewSpellCast() const
Definition QuestDef.h:275
uint32 _emoteOnComplete
Definition QuestDef.h:390
bool IsMonthly() const
Definition QuestDef.h:291
std::string _completedText
Definition QuestDef.h:378
int32 _zoneOrSort
Definition QuestDef.h:353
uint32 _rewardTitleId
Definition QuestDef.h:365
uint32 RewardItemId[QUEST_REWARDS_COUNT]
Definition QuestDef.h:312
uint32 GetBonusTalents() const
Definition QuestDef.h:257
std::string _offerRewardText
Definition QuestDef.h:375
uint32 GetQuestMethod() const
Definition QuestDef.h:230
uint32 _rewardMailTemplateId
Definition QuestDef.h:400
void LoadQuestTemplateAddon(Field *fields)
Definition QuestDef.cpp:173
uint32 GetNextQuestInChain() const
Definition QuestDef.h:254
bool CanIncreaseRewardedQuestCounters() const
Definition QuestDef.cpp:369
uint32 GetSuggestedPlayers() const
Definition QuestDef.h:248
uint8 GetLevel() const
Definition Unit.h:889
WorldPacket const * Write() override
WorldPacket && Move()
Definition Packet.h:53
#define sWorld
Definition World.h:900
@ CONFIG_MIN_QUEST_SCALED_XP_RATIO
Definition World.h:254
@ RATE_MONEY_MAX_LEVEL_QUEST
Definition World.h:474
@ RATE_MONEY_QUEST
Definition World.h:473
@ RATE_XP_QUEST
Definition World.h:431
@ 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]
int32 RewardFactionValueOverride[QUEST_REPUTATIONS_COUNT]
uint32 RewardAmount[QUEST_REWARDS_COUNT]
uint32 ItemDrop[QUEST_SOURCE_ITEM_IDS_COUNT]
uint32 RequiredNpcOrGoCount[QUEST_OBJECTIVES_COUNT]
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT]
uint32 RewardFactionID[QUEST_REPUTATIONS_COUNT]
uint32 RewardItems[QUEST_REWARDS_COUNT]
uint32 RequiredItemCount[QUEST_ITEM_OBJECTIVES_COUNT]
int32 RequiredFactionValue[PVP_TEAMS_COUNT]
QuestInfoChoiceItem UnfilteredChoiceItems[QUEST_REWARD_CHOICES_COUNT]
int32 RewardFactionValue[QUEST_REPUTATIONS_COUNT]
uint32 RequiredItemId[QUEST_ITEM_OBJECTIVES_COUNT]
int32 RequiredNpcOrGo[QUEST_OBJECTIVES_COUNT]
uint32 RequiredFactionId[PVP_TEAMS_COUNT]
std::array< int32, QUEST_REPUTATIONS_COUNT > RewardFactionValueOverride
std::vector< QuestChoiceItem > RewardItems
std::array< uint32, QUEST_REPUTATIONS_COUNT > RewardFactionID
std::vector< QuestChoiceItem > UnfilteredChoiceItems
std::array< int32, QUEST_REPUTATIONS_COUNT > RewardFactionValue