TrinityCore
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
QuestPackets.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 "QuestPackets.h"
19
21{
23}
24
26{
27 _worldPacket << uint32(Info.QuestID);
28 _worldPacket << uint32(Info.QuestMethod);
29 _worldPacket << uint32(Info.QuestLevel);
30 _worldPacket << uint32(Info.QuestMinLevel);
31 _worldPacket << uint32(Info.QuestSortID);
32
33 _worldPacket << uint32(Info.QuestType);
34 _worldPacket << uint32(Info.SuggestedGroupNum);
35
36 for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i)
37 {
38 _worldPacket << uint32(Info.RequiredFactionId[i]);
39 _worldPacket << uint32(Info.RequiredFactionValue[i]);
40 }
41
42 _worldPacket << uint32(Info.RewardNextQuest);
43 _worldPacket << uint32(Info.RewardXPDifficulty);
44
45 if ((Info.Flags & QUEST_FLAGS_HIDDEN_REWARDS) != 0)
46 _worldPacket << uint32(0);
47 else
48 _worldPacket << uint32(Info.RewardMoney);
49
50 _worldPacket << uint32(Info.RewardBonusMoney);
51 _worldPacket << uint32(Info.RewardDisplaySpell);
52 _worldPacket << int32(Info.RewardSpell);
53
54 _worldPacket << uint32(Info.RewardHonor);
55 _worldPacket << float(Info.RewardKillHonor);
56 _worldPacket << uint32(Info.StartItem);
57 _worldPacket << uint32(Info.Flags & 0xFFFF);
58 _worldPacket << uint32(Info.RewardTitleId);
59 _worldPacket << uint32(Info.RequiredPlayerKills);
60 _worldPacket << uint32(Info.RewardTalents);
61 _worldPacket << uint32(Info.RewardArenaPoints);
62 _worldPacket << uint32(Info.RewardFactionFlags);
63
64 if ((Info.Flags & QUEST_FLAGS_HIDDEN_REWARDS) != 0)
65 {
66 for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
67 _worldPacket << uint32(0) << uint32(0);
68 for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
69 _worldPacket << uint32(0) << uint32(0);
70 }
71 else
72 {
73 for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
74 {
75 _worldPacket << uint32(Info.RewardItems[i]);
76 _worldPacket << uint32(Info.RewardAmount[i]);
77 }
78 for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
79 {
80 _worldPacket << uint32(Info.UnfilteredChoiceItems[i].ItemID);
81 _worldPacket << uint32(Info.UnfilteredChoiceItems[i].Quantity);
82 }
83 }
84
85 for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids
86 _worldPacket << uint32(Info.RewardFactionID[i]);
87
88 for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid+1 QuestFactionReward.dbc?
89 _worldPacket << int32(Info.RewardFactionValue[i]);
90
91 for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unk (0)
92 _worldPacket << int32(Info.RewardFactionValueOverride[i]);
93
94 _worldPacket << uint32(Info.POIContinent);
95 _worldPacket << float(Info.POIx);
96 _worldPacket << float(Info.POIy);
97 _worldPacket << uint32(Info.POIPriority);
98
99 _worldPacket << Info.Title;
100 _worldPacket << Info.Objectives;
101 _worldPacket << Info.Details;
102 _worldPacket << Info.AreaDescription;
103 _worldPacket << Info.CompletedText;
104
105 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
106 {
107 if (Info.RequiredNpcOrGo[i] < 0)
108 _worldPacket << uint32((Info.RequiredNpcOrGo[i] * (-1)) | 0x80000000); // client expects gameobject template id in form (id|0x80000000)
109 else
110 _worldPacket << uint32(Info.RequiredNpcOrGo[i]);
111
112 _worldPacket << uint32(Info.RequiredNpcOrGoCount[i]);
113
114 _worldPacket << uint32(Info.ItemDrop[i]);
115 _worldPacket << uint32(0); // req source count?
116 }
117
118 for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
119 {
120 _worldPacket << uint32(Info.RequiredItemId[i]);
121 _worldPacket << uint32(Info.RequiredItemCount[i]);
122 }
123
124 for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
125 _worldPacket << Info.ObjectiveText[i];
126
127 return &_worldPacket;
128}
129
131{
132 _worldPacket << QuestGiverGUID;
133 _worldPacket << InformUnit;
134 _worldPacket << uint32(QuestID);
135 _worldPacket << Title;
136 _worldPacket << Details;
137 _worldPacket << Objectives;
138 _worldPacket << uint8(AutoLaunched);
139 _worldPacket << uint32(Flags);
140 _worldPacket << uint32(SuggestedGroupNum);
141 _worldPacket << uint8(StartCheat);
142
143 _worldPacket << uint32(Rewards.UnfilteredChoiceItems.size());
144 for (WorldPackets::Quest::QuestChoiceItem const& item : Rewards.UnfilteredChoiceItems)
145 {
146 _worldPacket << uint32(item.ItemID);
147 _worldPacket << uint32(item.Quantity);
148 _worldPacket << uint32(item.DisplayID);
149 }
150
151 _worldPacket << uint32(Rewards.RewardItems.size());
152 for (WorldPackets::Quest::QuestChoiceItem const& item : Rewards.RewardItems)
153 {
154 _worldPacket << uint32(item.ItemID);
155 _worldPacket << uint32(item.Quantity);
156 _worldPacket << uint32(item.DisplayID);
157 }
158
159 _worldPacket << uint32(Rewards.RewardMoney);
160 _worldPacket << uint32(Rewards.RewardXPDifficulty);
161 _worldPacket << uint32(Rewards.RewardHonor);
162 _worldPacket << float(Rewards.RewardKillHonor);
163 _worldPacket << uint32(Rewards.RewardDisplaySpell);
164 _worldPacket << int32(Rewards.RewardSpell);
165 _worldPacket << uint32(Rewards.RewardTitleId);
166 _worldPacket << uint32(Rewards.RewardTalents);
167 _worldPacket << uint32(Rewards.RewardArenaPoints);
168 _worldPacket << uint32(Rewards.RewardFactionFlags);
169
170 for (uint32 factionId : Rewards.RewardFactionID)
171 _worldPacket << uint32(factionId);
172
173 for (int32 value : Rewards.RewardFactionValue)
174 _worldPacket << int32(value);
175
176 for (int32 valueOverride : Rewards.RewardFactionValueOverride)
177 _worldPacket << int32(valueOverride);
178
179 _worldPacket << int32(DescEmotes.size());
180 for (QuestDescEmote const& emote : DescEmotes)
181 {
182 _worldPacket << uint32(emote.Type);
183 _worldPacket << uint32(emote.Delay);
184 }
185
186 return &_worldPacket;
187}
188
190{
191 _worldPacket << QuestGiverGUID;
192 _worldPacket << uint32(QuestID);
193
194 _worldPacket << Title;
195 _worldPacket << RewardText;
196
197 _worldPacket << uint8(AutoLaunched);
198 _worldPacket << uint32(Flags);
199 _worldPacket << uint32(SuggestedGroupNum);
200
201 _worldPacket << uint32(Emotes.size());
203 {
204 _worldPacket << uint32(emote.Delay);
205 _worldPacket << uint32(emote.Type);
206 }
207
208 _worldPacket << uint32(Rewards.UnfilteredChoiceItems.size());
209 for (WorldPackets::Quest::QuestChoiceItem const& item : Rewards.UnfilteredChoiceItems)
210 {
211 _worldPacket << uint32(item.ItemID);
212 _worldPacket << uint32(item.Quantity);
213 _worldPacket << uint32(item.DisplayID);
214 }
215
216 _worldPacket << uint32(Rewards.RewardItems.size());
217 for (WorldPackets::Quest::QuestChoiceItem const& item : Rewards.RewardItems)
218 {
219 _worldPacket << uint32(item.ItemID);
220 _worldPacket << uint32(item.Quantity);
221 _worldPacket << uint32(item.DisplayID);
222 }
223
224 _worldPacket << uint32(Rewards.RewardMoney);
225 _worldPacket << uint32(Rewards.RewardXPDifficulty);
226
227 _worldPacket << uint32(Rewards.RewardHonor);
228 _worldPacket << float(Rewards.RewardKillHonor);
229 _worldPacket << uint32(0); // Unknown value. Read in the packet handler but unused
230 _worldPacket << uint32(Rewards.RewardDisplaySpell);
231 _worldPacket << int32(Rewards.RewardSpell);
232 _worldPacket << uint32(Rewards.RewardTitleId);
233 _worldPacket << uint32(Rewards.RewardTalents);
234 _worldPacket << uint32(Rewards.RewardArenaPoints);
235 _worldPacket << uint32(Rewards.RewardFactionFlags);
236
237 for (uint32 factionId : Rewards.RewardFactionID)
238 _worldPacket << uint32(factionId);
239
240 for (uint32 value : Rewards.RewardFactionValue)
241 _worldPacket << int32(value);
242
243 for (uint32 valueOverride : Rewards.RewardFactionValueOverride)
244 _worldPacket << int32(valueOverride);
245
246 return &_worldPacket;
247}
uint8_t uint8
Definition: Define.h:135
int32_t int32
Definition: Define.h:129
uint32_t uint32
Definition: Define.h:133
#define QUEST_REWARDS_COUNT
Definition: QuestDef.h:42
#define QUEST_ITEM_OBJECTIVES_COUNT
Definition: QuestDef.h:39
#define QUEST_OBJECTIVES_COUNT
Definition: QuestDef.h:38
@ QUEST_FLAGS_HIDDEN_REWARDS
Definition: QuestDef.h:142
#define QUEST_REPUTATIONS_COUNT
Definition: QuestDef.h:44
#define QUEST_REWARD_CHOICES_COUNT
Definition: QuestDef.h:41
uint8 constexpr PVP_TEAMS_COUNT
WorldPacket _worldPacket
Definition: Packet.h:42
WorldPacket const * Write() override
WorldPacket const * Write() override