TrinityCore
NPCPackets.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 "NPCPackets.h"
19#include "Util.h"
20
22{
23ByteBuffer& operator<<(ByteBuffer& data, TreasureItem const& treasureItem)
24{
25 data.WriteBits(AsUnderlyingType(treasureItem.Type), 1);
26 data << int32(treasureItem.ID);
27 data << int32(treasureItem.Quantity);
28
29 return data;
30}
31
32ByteBuffer& operator<<(ByteBuffer& data, TreasureLootList const& treasureLootList)
33{
34 data << uint32(treasureLootList.Items.size());
35 for (TreasureItem const& treasureItem : treasureLootList.Items)
36 data << treasureItem;
37
38 return data;
39}
40
42{
43 data << int32(gossipOption.GossipOptionID);
44 data << uint8(gossipOption.OptionNPC);
45 data << int8(gossipOption.OptionFlags);
46 data << int32(gossipOption.OptionCost);
47 data << uint32(gossipOption.OptionLanguage);
48 data << int32(gossipOption.Flags);
49 data << int32(gossipOption.OrderIndex);
50 data.WriteBits(gossipOption.Text.size(), 12);
51 data.WriteBits(gossipOption.Confirm.size(), 12);
52 data.WriteBits(AsUnderlyingType(gossipOption.Status), 2);
53 data.WriteBit(gossipOption.SpellID.has_value());
54 data.WriteBit(gossipOption.OverrideIconID.has_value());
55 data.FlushBits();
56
57 data << gossipOption.Treasure;
58
59 data.WriteString(gossipOption.Text);
60 data.WriteString(gossipOption.Confirm);
61
62 if (gossipOption.SpellID)
63 data << int32(*gossipOption.SpellID);
64
65 if (gossipOption.OverrideIconID)
66 data << int32(*gossipOption.OverrideIconID);
67
68 return data;
69}
70
72{
73 data << int32(gossipText.QuestID);
74 data << int32(gossipText.ContentTuningID);
75 data << int32(gossipText.QuestType);
76 data << int32(gossipText.QuestFlags[0]);
77 data << int32(gossipText.QuestFlags[1]);
78
79 data.WriteBit(gossipText.Repeatable);
80 data.WriteBit(gossipText.Important);
81 data.WriteBits(gossipText.QuestTitle.size(), 9);
82 data.FlushBits();
83
84 data.WriteString(gossipText.QuestTitle);
85
86 return data;
87}
88
90{
92}
93
95{
100
101 return &_worldPacket;
102}
103
105{
110 _worldPacket << uint32(GossipText.size());
111 _worldPacket.WriteBit(TextID.has_value());
114
115 for (ClientGossipOptions const& options : GossipOptions)
116 _worldPacket << options;
117
118 if (TextID)
120
121 if (BroadcastTextID)
123
124 for (ClientGossipText const& text : GossipText)
125 _worldPacket << text;
126
127 return &_worldPacket;
128}
129
131{
132 data << uint64(item.Price);
133 data << uint32(item.MuID);
134 data << int32(item.Type);
135 data << int32(item.Durability);
136 data << int32(item.StackCount);
137 data << int32(item.Quantity);
138 data << int32(item.ExtendedCostID);
139 data << int32(item.PlayerConditionFailed);
140 data.WriteBit(item.Locked);
141 data.WriteBit(item.DoNotFilterOnVendor);
142 data.WriteBit(item.Refundable);
143 data.FlushBits();
144
145 data << item.Item;
146
147 return data;
148}
149
151{
154 _worldPacket << uint32(Items.size());
155 for (VendorItem const& item : Items)
156 _worldPacket << item;
157
158 return &_worldPacket;
159}
160
162{
166
167 _worldPacket << uint32(Spells.size());
168 for (TrainerListSpell const& spell : Spells)
169 {
170 _worldPacket << int32(spell.SpellID);
171 _worldPacket << uint32(spell.MoneyCost);
172 _worldPacket << uint32(spell.ReqSkillLine);
173 _worldPacket << uint32(spell.ReqSkillRank);
174 _worldPacket.append(spell.ReqAbility.data(), spell.ReqAbility.size());
175 _worldPacket << uint8(spell.Usable);
176 _worldPacket << uint8(spell.ReqLevel);
177 }
178
179 _worldPacket.WriteBits(Greeting.length(), 11);
182
183 return &_worldPacket;
184}
185
187{
191
192 uint32 length = _worldPacket.ReadBits(8);
194}
195
197{
202
205
206 return &_worldPacket;
207}
208
210{
213
214 return &_worldPacket;
215}
216
218{
221 _worldPacket << Pos;
225 _worldPacket.WriteBits(Name.length(), 6);
228
229 return &_worldPacket;
230}
231
233{
235}
236
238{
241}
242
244{
248}
249
251{
255
256 return &_worldPacket;
257}
258
260{
262}
263
265{
269}
270}
uint8_t uint8
Definition: Define.h:144
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint32_t uint32
Definition: Define.h:142
Spells
Definition: PlayerAI.cpp:32
TrainerType
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
Definition: Util.h:491
uint32 ReadBits(int32 bits)
Definition: ByteBuffer.h:209
void WriteString(std::string const &str)
Definition: ByteBuffer.h:500
void append(T value)
Definition: ByteBuffer.h:143
bool WriteBit(bool bit)
Definition: ByteBuffer.h:175
void WriteBits(std::size_t value, int32 bits)
Definition: ByteBuffer.h:203
void FlushBits()
Definition: ByteBuffer.h:155
std::string ReadString(uint32 length, bool requireValidUtf8=true)
Definition: ByteBuffer.cpp:78
WorldPacket const * Write() override
Definition: NPCPackets.cpp:209
WorldPacket const * Write() override
Definition: NPCPackets.cpp:104
std::vector< ClientGossipOptions > GossipOptions
Definition: NPCPackets.h:115
Optional< int32 > BroadcastTextID
Definition: NPCPackets.h:120
std::vector< ClientGossipText > GossipText
Definition: NPCPackets.h:118
WorldPacket const * Write() override
Definition: NPCPackets.cpp:196
WorldPacket const * Write() override
Definition: NPCPackets.cpp:217
TaggedPosition< Position::XYZ > Pos
Definition: NPCPackets.h:221
void Read() override
Definition: NPCPackets.cpp:89
WorldPacket const * Write() override
Definition: NPCPackets.cpp:94
WorldPacket const * Write() override
Definition: NPCPackets.cpp:250
WorldPacket const * Write() override
Definition: NPCPackets.cpp:161
WorldPacket const * Write() override
Definition: NPCPackets.cpp:150
WorldPacket _worldPacket
Definition: Packet.h:43
ByteBuffer & operator<<(ByteBuffer &data, TreasureItem const &treasureItem)
Definition: NPCPackets.cpp:23
GossipOptionRewardType Type
Definition: NPCPackets.h:68
std::vector< TreasureItem > Items
Definition: NPCPackets.h:75
WorldPackets::Item::ItemInstance Item
Definition: NPCPackets.h:163