Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
QuestDef.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "ObjectMgr.h"
7#include "Player.h"
8#include "QuestDef.h"
9#include "World.h"
10
11Quest::Quest(Field* questRecord)
12{
13 Id = questRecord[0].GetUInt32();
14 Method = questRecord[1].GetUInt8();
15 Level = questRecord[2].GetInt16();
16 MinLevel = uint32(questRecord[3].GetInt16());
17 MaxLevel = uint32(questRecord[4].GetInt16());
18 ZoneOrSort = questRecord[5].GetInt16();
19 Type = questRecord[6].GetUInt16();
20 SuggestedPlayers = questRecord[7].GetUInt8();
21 LimitTime = questRecord[8].GetUInt32();
22 RequiredClasses = questRecord[9].GetUInt16();
23 RequiredRaces = questRecord[10].GetUInt32();
24 RequiredSkillId = questRecord[11].GetUInt16();
25 RequiredSkillPoints = questRecord[12].GetUInt16();
26 RequiredMinRepFaction = questRecord[13].GetUInt16();
27 RequiredMaxRepFaction = questRecord[14].GetUInt16();
28 RequiredMinRepValue = questRecord[15].GetInt32();
29 RequiredMaxRepValue = questRecord[16].GetInt32();
30 PrevQuestId = questRecord[17].GetInt32();
31 NextQuestId = questRecord[18].GetInt32();
32 ExclusiveGroup = questRecord[19].GetInt32();
33 NextQuestIdChain = questRecord[20].GetUInt32();
34 RewardXPId = questRecord[21].GetUInt8();
35 RewardMoney = questRecord[22].GetInt32();
36 RewardMoneyMaxLevel = questRecord[23].GetUInt32();
37 RewardSpell = questRecord[24].GetUInt32();
38 RewardSpellCast = questRecord[25].GetInt32();
39 RewardHonor = questRecord[26].GetUInt32();
40 RewardHonorMultiplier = questRecord[27].GetFloat();
41 RewardMailTemplateId = questRecord[28].GetUInt32();
42 RewardMailDelay = questRecord[29].GetUInt32();
43 SourceItemId = questRecord[30].GetUInt32();
44 SourceSpellid = questRecord[31].GetUInt32();
45 Flags = questRecord[32].GetUInt32();
46 Flags2 = questRecord[33].GetUInt32();
47 SpecialFlags = questRecord[34].GetUInt8();
48 MinimapTargetMark = questRecord[35].GetUInt8();
49 RewardTitleId = questRecord[36].GetUInt8();
50 RewardTalents = questRecord[37].GetUInt8();
51 RewardArenaPoints = questRecord[38].GetUInt16();
52 RewardSkillId = questRecord[39].GetUInt16();
53 RewardSkillPoints = questRecord[40].GetUInt8();
54 RewardReputationMask = questRecord[41].GetUInt8();
55 QuestGiverPortrait = questRecord[42].GetUInt32();
56 QuestTurnInPortrait = questRecord[43].GetUInt32();
57 RewardPackageItemId = questRecord[44].GetUInt32();
58
59 for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
60 RewardItemId[i] = questRecord[45 + i].GetUInt32();
61
62 for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
63 RewardItemIdCount[i] = questRecord[49 + i].GetUInt16();
64
65 for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
66 RewardChoiceItemId[i] = questRecord[53 + i].GetUInt32();
67
68 for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
69 RewardChoiceItemCount[i] = questRecord[59 + i].GetUInt16();
70
71 for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
72 RewardFactionId[i] = questRecord[65 + i].GetUInt16();
73
74 for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
75 RewardFactionValueId[i] = questRecord[70 + i].GetInt32();
76
77 for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
78 RewardFactionValueIdOverride[i] = questRecord[75 + i].GetInt32();
79
80 PointMapId = questRecord[80].GetUInt16();
81 PointX = questRecord[81].GetFloat();
82 PointY = questRecord[82].GetFloat();
83 PointOption = questRecord[83].GetUInt32();
84 Title = questRecord[84].GetString();
85 Objectives = questRecord[85].GetString();
86 Details = questRecord[86].GetString();
87 EndText = questRecord[87].GetString();
88 OfferRewardText = questRecord[88].GetString();
89 RequestItemsText = questRecord[89].GetString();
90 CompletedText = questRecord[90].GetString();
91
92 for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
93 RequiredSourceItemId[i] = questRecord[91 + i].GetUInt32();
94
95 for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
96 RequiredSourceItemCount[i] = questRecord[95 + i].GetUInt16();
97
98 for (int i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
99 RewardCurrencyId[i] = questRecord[99 + i].GetUInt16();
100
101 for (int i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
102 RewardCurrencyCount[i] = questRecord[103 + i].GetUInt8();
103
104 QuestGiverTextWindow = questRecord[107].GetString();
105 QuestGiverTargetName = questRecord[108].GetString();
106 QuestTurnTextWindow = questRecord[109].GetString();
107 QuestTurnTargetName = questRecord[110].GetString();
108 SoundAccept = questRecord[111].GetUInt16();
109 SoundTurnIn = questRecord[112].GetUInt16();
110
111 for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
112 DetailsEmote[i] = questRecord[113 + i].GetUInt16();
113
114 for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
115 DetailsEmoteDelay[i] = questRecord[117 + i].GetUInt32();
116
117 EmoteOnIncomplete = questRecord[121].GetUInt16();
118 EmoteOnComplete = questRecord[122].GetUInt16();
119
120 for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
121 OfferRewardEmote[i] = questRecord[123 + i].GetInt16();
122
123 for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
124 OfferRewardEmoteDelay[i] = questRecord[127 + i].GetInt32();
125
126 int32 WDBVerified = questRecord[131].GetInt32();
127
130
131 _rewItemsCount = 0;
134
135 for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
136 if (RewardItemId[i])
138
139 for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
140 if (RewardChoiceItemId[i])
142
143 for (int i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
144 if (RewardCurrencyId[i])
146
148}
149
151{
152 if (player)
153 {
154 int32 quest_level = (Level == -1 ? player->getLevel() : Level);
155 const QuestXPEntry* xpentry = sQuestXPStore.LookupEntry(quest_level);
156 if (!xpentry)
157 return 0;
158
159 int32 diffFactor = 2 * (quest_level - player->getLevel()) + 20;
160 if (diffFactor < 1)
161 diffFactor = 1;
162 else if (diffFactor > 10)
163 diffFactor = 10;
164
165 uint32 xp = diffFactor * xpentry->Exp[RewardXPId] / 10;
166 if (xp <= 100)
167 xp = 5 * ((xp + 2) / 5);
168 else if (xp <= 500)
169 xp = 10 * ((xp + 5) / 10);
170 else if (xp <= 1000)
171 xp = 25 * ((xp + 12) / 25);
172 else
173 xp = 50 * ((xp + 25) / 50);
174
175 return xp;
176 }
177
178 return 0;
179}
180
182{
184}
185
187{
189 return 0;
190
191 return RewardMoneyMaxLevel;
192}
193
198
203
204bool Quest::IsRaidQuest(DifficultyID difficulty) const
205{
206 bool res = false;
207 switch (Type)
208 {
209 case QUEST_TYPE_RAID:
210 {
211 res = true;
212 break;
213 }
215 {
216 switch (difficulty)
217 {
220 {
221 res = true;
222 break;
223 }
224 default: break;
225 }
226 }
228 {
229 switch (difficulty)
230 {
233 {
234 res = true;
235 break;
236 }
237 default: break;
238 }
239 }
240 default: break;
241 }
242 return res;
243}
244
246{
247 if (IsRaidQuest(difficulty))
248 return true;
249
251}
252
254{
255 if (level > GT_MAX_LEVEL)
256 level = GT_MAX_LEVEL;
257
258 uint32 honor = 0;
259
260 /*if (GetRewHonorAddition() > 0 || GetRewHonorMultiplier() > 0.0f)
261 {
262 // values stored from 0.. for 1...
263 TeamContributionPointsEntry const* tc = sTeamContributionPointsStore.LookupEntry(level);
264 if (!tc)
265 return 0;
266
267 honor = uint32(tc->value * GetRewHonorMultiplier() * 0.1f);
268 honor += GetRewHonorAddition();
269 }*/
270
271 return honor;
272}
273
274// Note: These next two functions will need to be changed/extended once QuestPackageItem.db2 is implemented
276{
277 for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; i++)
278 if (RewardChoiceItemId[i] == itemId)
279 return true;
280
281 return false;
282}
283
285{
286 for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; i++)
287 if (RewardChoiceItemId[i] == itemId)
288 return RewardChoiceItemCount[i];
289
290 return 0;
291}
292
294{
295 for (QuestObjectiveSet::const_iterator citr = m_questObjectives.begin(); citr != m_questObjectives.end(); ++citr)
296 if ((*citr)->Id == objectiveId)
297 return *citr;
298
299 return NULL;
300}
301
303{
304 for (QuestObjectiveSet::const_iterator citr = m_questObjectives.begin(); citr != m_questObjectives.end(); ++citr)
305 if ((*citr)->Index == index)
306 return *citr;
307
308 return NULL;
309}
310
312{
313 for (QuestObjectiveSet::const_iterator citr = m_questObjectives.begin(); citr != m_questObjectives.end(); ++citr)
314 if ((*citr)->ObjectId == objectId)
315 return *citr;
316
317 return NULL;
318}
319
321{
322 if (type >= QUEST_OBJECTIVE_TYPE_END)
323 return 0;
324
325 return m_questObjecitveTypeCount[type];
326}
DifficultyID
Definition DBCEnums.h:330
@ DIFFICULTY_10MAN_HEROIC
Definition DBCEnums.h:336
@ DIFFICULTY_25MAN_NORMAL
Definition DBCEnums.h:335
@ DIFFICULTY_10MAN_NORMAL
Definition DBCEnums.h:334
@ DIFFICULTY_25MAN_HEROIC
Definition DBCEnums.h:337
DBCStorage< QuestXPEntry > sQuestXPStore(QuestXPfmt)
#define GT_MAX_LEVEL
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define QUEST_REWARDS_COUNT
Definition QuestDef.h:26
@ QUEST_OBJECTIVE_TYPE_END
Definition QuestDef.h:207
#define QUEST_EMOTE_COUNT
Definition QuestDef.h:29
#define QUEST_REWARD_CURRENCY_COUNT
Definition QuestDef.h:30
@ QUEST_FLAGS_NO_MONEY_FROM_XP
Definition QuestDef.h:123
@ QUEST_FLAGS_AUTO_ACCEPT
Definition QuestDef.h:134
@ QUEST_FLAGS_AUTOCOMPLETE
Definition QuestDef.h:131
#define QUEST_REPUTATIONS_COUNT
Definition QuestDef.h:28
#define QUEST_SOURCE_ITEM_IDS_COUNT
Definition QuestDef.h:24
#define QUEST_REWARD_CHOICES_COUNT
Definition QuestDef.h:25
@ QUEST_SPECIAL_FLAGS_AUTO_ACCEPT
Definition QuestDef.h:176
@ QUEST_TYPE_RAID
@ QUEST_TYPE_RAID_25
@ QUEST_TYPE_RAID_10
Definition Field.h:16
uint8 GetUInt8() const
Definition Field.h:26
std::string GetString() const
Definition Field.h:228
int16 GetInt16() const
Definition Field.h:87
uint16 GetUInt16() const
Definition Field.h:69
float GetFloat() const
Definition Field.h:177
uint32 GetUInt32() const
Definition Field.h:105
int32 GetInt32() const
Definition Field.h:123
int32 Level
Definition QuestDef.h:401
bool HasFlag(uint32 flag) const
Definition QuestDef.h:261
uint32 DetailsEmote[QUEST_EMOTE_COUNT]
Definition QuestDef.h:358
uint32 RewardMailDelay
Definition QuestDef.h:439
uint32 OfferRewardEmote[QUEST_EMOTE_COUNT]
Definition QuestDef.h:360
uint32 GetRewMoneyMaxLevel() const
Definition QuestDef.cpp:186
uint32 QuestGiverPortrait
Definition QuestDef.h:451
uint32 PointOption
Definition QuestDef.h:443
uint32 MinLevel
Definition QuestDef.h:399
uint32 RewardCurrencyCount[QUEST_REWARD_CURRENCY_COUNT]
Definition QuestDef.h:364
uint32 LimitTime
Definition QuestDef.h:412
uint32 RequiredMaxRepFaction
Definition QuestDef.h:409
int32 RewardSpellCast
Definition QuestDef.h:437
uint32 SourceSpellid
Definition QuestDef.h:424
uint32 RequiredMinRepFaction
Definition QuestDef.h:407
int32 ZoneOrSort
Definition QuestDef.h:398
int32 NextQuestId
Definition QuestDef.h:419
std::string RequestItemsText
Definition QuestDef.h:429
uint32 RequiredSourceItemId[QUEST_SOURCE_ITEM_IDS_COUNT]
Definition QuestDef.h:349
std::string QuestTurnTargetName
Definition QuestDef.h:456
Quest(Field *questRecord)
Definition QuestDef.cpp:11
uint32 RewardTitleId
Definition QuestDef.h:414
uint32 XPValue(Player *player) const
Definition QuestDef.cpp:150
uint8 GetQuestObjectiveCountType(uint8 type) const
Definition QuestDef.cpp:320
uint32 Type
Definition QuestDef.h:402
uint32 RewardItemIdCount[QUEST_REWARDS_COUNT]
Definition QuestDef.h:354
std::string QuestTurnTextWindow
Definition QuestDef.h:455
uint32 Method
Definition QuestDef.h:397
uint32 RewardPackageItemId
Definition QuestDef.h:461
QuestObjective const * GetQuestObjectiveXObjectId(uint32 objectId) const
Definition QuestDef.cpp:311
float PointX
Definition QuestDef.h:441
uint32 _rewItemsCount
Definition QuestDef.h:390
uint32 RewardChoiceItemId[QUEST_REWARD_CHOICES_COUNT]
Definition QuestDef.h:351
uint32 _rewChoiceItemsCount
Definition QuestDef.h:389
uint32 RewardReputationMask
Definition QuestDef.h:450
uint32 RewardMailTemplateId
Definition QuestDef.h:438
uint32 GetRewChoiceItemCount(uint32 itemId) const
Definition QuestDef.cpp:284
uint32 SoundTurnIn
Definition QuestDef.h:458
float PointY
Definition QuestDef.h:442
uint32 RequiredRaces
Definition QuestDef.h:404
uint32 RewardMoneyMaxLevel
Definition QuestDef.h:435
int32 RewardFactionValueIdOverride[QUEST_REPUTATIONS_COUNT]
Definition QuestDef.h:357
std::string QuestGiverTargetName
Definition QuestDef.h:454
uint32 DetailsEmoteDelay[QUEST_EMOTE_COUNT]
Definition QuestDef.h:359
std::string QuestGiverTextWindow
Definition QuestDef.h:453
uint32 EmoteOnComplete
Definition QuestDef.h:445
bool IsRewChoiceItemValid(uint32 itemId) const
Definition QuestDef.cpp:275
ObjectiveTypeCountVec m_questObjecitveTypeCount
Definition QuestDef.h:392
uint32 RequiredSkillPoints
Definition QuestDef.h:406
uint32 SourceItemId
Definition QuestDef.h:423
bool IsAutoComplete() const
Definition QuestDef.cpp:199
uint32 RewardTalents
Definition QuestDef.h:416
std::string EndText
Definition QuestDef.h:430
int32 RewardMoney
Definition QuestDef.h:434
uint32 RewardChoiceItemCount[QUEST_REWARD_CHOICES_COUNT]
Definition QuestDef.h:352
uint32 MinimapTargetMark
Definition QuestDef.h:447
uint32 MaxLevel
Definition QuestDef.h:400
uint32 CalculateHonorGain(uint8 level) const
Definition QuestDef.cpp:253
uint32 EmoteOnIncomplete
Definition QuestDef.h:444
uint32 OfferRewardEmoteDelay[QUEST_EMOTE_COUNT]
Definition QuestDef.h:361
uint32 Id
Definition QuestDef.h:396
int32 RequiredMaxRepValue
Definition QuestDef.h:410
uint32 RequiredClasses
Definition QuestDef.h:403
bool IsRaidQuest(DifficultyID difficulty) const
Definition QuestDef.cpp:204
uint32 RequiredSourceItemCount[QUEST_SOURCE_ITEM_IDS_COUNT]
Definition QuestDef.h:350
std::string CompletedText
Definition QuestDef.h:431
QuestObjectiveSet m_questObjectives
Definition QuestDef.h:378
bool IsAutoAccept() const
Definition QuestDef.cpp:194
int32 GetRewMoney() const
Definition QuestDef.cpp:181
uint32 Flags
Definition QuestDef.h:413
int32 RewardArenaPoints
Definition QuestDef.h:417
std::string Title
Definition QuestDef.h:425
uint32 NextQuestIdChain
Definition QuestDef.h:421
uint32 QuestTurnInPortrait
Definition QuestDef.h:452
uint32 RewardCurrencyId[QUEST_REWARD_CURRENCY_COUNT]
Definition QuestDef.h:363
std::string Objectives
Definition QuestDef.h:427
int32 PrevQuestId
Definition QuestDef.h:418
uint32 SuggestedPlayers
Definition QuestDef.h:411
uint32 RewardSkillId
Definition QuestDef.h:448
QuestObjective const * GetQuestObjectiveXIndex(uint8 index) const
Definition QuestDef.cpp:302
float RewardHonorMultiplier
Definition QuestDef.h:433
uint32 RewardFactionId[QUEST_REPUTATIONS_COUNT]
Definition QuestDef.h:355
uint32 RewardHonor
Definition QuestDef.h:432
uint32 RewardSpell
Definition QuestDef.h:436
uint32 SoundAccept
Definition QuestDef.h:457
int32 ExclusiveGroup
Definition QuestDef.h:420
std::string OfferRewardText
Definition QuestDef.h:428
std::string Details
Definition QuestDef.h:426
uint32 RequiredSkillId
Definition QuestDef.h:405
uint32 _rewCurrencyCount
Definition QuestDef.h:391
uint32 PointMapId
Definition QuestDef.h:440
int32 RewardFactionValueId[QUEST_REPUTATIONS_COUNT]
Definition QuestDef.h:356
bool IsAllowedInRaid(DifficultyID difficulty) const
Definition QuestDef.cpp:245
uint32 RewardXPId
Definition QuestDef.h:422
uint32 RewardItemId[QUEST_REWARDS_COUNT]
Definition QuestDef.h:353
uint32 Flags2
Definition QuestDef.h:460
uint32 RewardSkillPoints
Definition QuestDef.h:449
int32 RequiredMinRepValue
Definition QuestDef.h:408
uint32 SpecialFlags
Definition QuestDef.h:463
QuestObjective const * GetQuestObjective(uint32 objectiveId) const
Definition QuestDef.cpp:293
uint8 getLevel() const
Definition Unit.h:1528
#define sWorld
Definition World.h:910
@ CONFIG_QUEST_IGNORE_RAID
Definition World.h:113
@ CONFIG_QUEST_IGNORE_AUTO_ACCEPT
Definition World.h:156
@ CONFIG_QUEST_IGNORE_AUTO_COMPLETE
Definition World.h:157
@ RATE_DROP_MONEY
Definition World.h:396
uint32 Exp[10]