TrinityCore
Loading...
Searching...
No Matches
MailPackets.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 "MailPackets.h"
19#include "GameTime.h"
20#include "Item.h"
21#include "Mail.h"
22#include "PacketOperators.h"
23#include "Player.h"
24
26{
28{
29 Position = pos;
30 AttachID = item->GetGUID().GetCounter();
31 Item.Initialize(item);
32 Count = item->GetCount();
33 Charges = item->GetSpellCharges();
34 MaxDurability = item->m_itemData->MaxDurability;
35 Durability = item->m_itemData->Durability;
36 Unlocked = !item->IsLocked();
37
38 for (uint8 j = 0; j < MAX_INSPECTED_ENCHANTMENT_SLOT; j++)
39 {
41 if (!item->GetEnchantmentId(slot))
42 continue;
43
44 Enchants.emplace_back(item->GetEnchantmentId(slot), item->GetEnchantmentDuration(slot), item->GetEnchantmentCharges(slot), j);
45 }
46
47 uint8 i = 0;
48 for (UF::SocketedGem const& gemData : item->m_itemData->Gems)
49 {
50 if (gemData.ItemID)
51 {
53 gem.Slot = i;
54 gem.Item.Initialize(&gemData);
55 Gems.push_back(gem);
56 }
57 ++i;
58 }
59}
60
62{
63 data << uint8(att.Position);
64 data << uint64(att.AttachID);
65 data << int32(att.Count);
66 data << int32(att.Charges);
67 data << uint32(att.MaxDurability);
68 data << int32(att.Durability);
69 data << att.Item;
70 data << BitsSize<4>(att.Enchants);
71 data << BitsSize<2>(att.Gems);
72 data << Bits<1>(att.Unlocked);
73 data.FlushBits();
74
75 for (Item::ItemGemData const& gem : att.Gems)
76 data << gem;
77
78 for (Item::ItemEnchantData const& en : att.Enchants)
79 data << en;
80
81 return data;
82}
83
85{
86 MailID = mail->messageID;
87 SenderType = mail->messageType;
88
89 switch (mail->messageType)
90 {
91 case MAIL_NORMAL:
92 SenderCharacter = ObjectGuid::Create<HighGuid::Player>(mail->sender);
93 break;
94 case MAIL_CREATURE:
95 case MAIL_GAMEOBJECT:
96 case MAIL_AUCTION:
97 case MAIL_CALENDAR:
100 case MAIL_AUCTION_2:
102 AltSenderID = mail->sender;
103 break;
104 }
105
106 Cod = mail->COD;
107 StationeryID = mail->stationery;
108 SentMoney = mail->money;
109 Flags = mail->checked;
110 DaysLeft = float(mail->expire_time - GameTime::GetGameTime()) / float(DAY);
112 Subject = mail->subject;
113 Body = mail->body;
114
115 for (uint8 i = 0; i < mail->items.size(); i++)
116 {
117 if (::Item* item = player->GetMItem(mail->items[i].item_guid))
118 Attachments.emplace_back(item, i);
119 }
120}
121
123{
124 data << uint64(entry.MailID);
125 data << uint32(entry.SenderType);
126 data << uint64(entry.Cod);
127 data << int32(entry.StationeryID);
128 data << uint64(entry.SentMoney);
129 data << int32(entry.Flags);
130 data << float(entry.DaysLeft);
131 data << int32(entry.MailTemplateID);
132 data << WorldPackets::Size<uint32>(entry.Attachments);
133
134 switch (entry.SenderType)
135 {
136 case MAIL_NORMAL:
137 data << entry.SenderCharacter;
138 break;
139 case MAIL_AUCTION:
140 case MAIL_CREATURE:
141 case MAIL_GAMEOBJECT:
142 case MAIL_CALENDAR:
143 case MAIL_BLACKMARKET:
145 case MAIL_AUCTION_2:
147 data << int32(entry.AltSenderID);
148 break;
149 default:
150 break;
151 }
152
153 data << SizedString::BitsSize<8>(entry.Subject);
154 data << SizedString::BitsSize<13>(entry.Body);
155 data.FlushBits();
156
157 for (MailAttachedItem const& att : entry.Attachments)
158 data << att;
159
160 data << SizedString::Data(entry.Subject);
161 data << SizedString::Data(entry.Body);
162
163 return data;
164}
165
167{
169}
170
172{
173 _worldPacket << Size<uint32>(Mails);
175
176 for (MailListEntry const& mail : Mails)
177 _worldPacket << mail;
178
179 return &_worldPacket;
180}
181
187
189{
190 data >> attachment.AttachPosition;
191 data >> attachment.ItemGUID;
192
193 return data;
194}
195
197{
202
203 _worldPacket >> SizedString::BitsSize<9>(Info.Target);
204 _worldPacket >> SizedString::BitsSize<9>(Info.Subject);
205 _worldPacket >> SizedString::BitsSize<11>(Info.Body);
206 _worldPacket >> BitsSize<5>(Info.Attachments);
207
211
213 _worldPacket >> att;
214}
215
221
233
239
245
252
259
261{
262 switch (mail->messageType)
263 {
264 case MAIL_NORMAL:
265 SenderGuid = ObjectGuid::Create<HighGuid::Player>(mail->sender);
266 break;
267 case MAIL_AUCTION:
268 case MAIL_CREATURE:
269 case MAIL_GAMEOBJECT:
270 case MAIL_CALENDAR:
271 case MAIL_BLACKMARKET:
273 case MAIL_AUCTION_2:
275 AltSenderID = mail->sender;
276 break;
277 default:
278 break;
279 }
280
283 StationeryID = mail->stationery;
284}
285
287{
288 _worldPacket << float(NextMailTime);
289 _worldPacket << Size<int32>(Next);
290
291 for (MailNextTimeEntry const& entry : Next)
292 {
293 _worldPacket << entry.SenderGuid;
294 _worldPacket << float(entry.TimeLeft);
295 _worldPacket << int32(entry.AltSenderID);
296 _worldPacket << int32(entry.AltSenderType);
297 _worldPacket << int32(entry.StationeryID);
298 }
299
300 return &_worldPacket;
301}
302
304{
305 _worldPacket << float(Delay);
306
307 return &_worldPacket;
308}
309}
@ DAY
Definition Common.h:34
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint32_t uint32
Definition Define.h:154
EnchantmentSlot
@ MAX_INSPECTED_ENCHANTMENT_SLOT
@ MAIL_AUCTION
Definition Mail.h:40
@ MAIL_BLACKMARKET
Definition Mail.h:44
@ MAIL_GAMEOBJECT
Definition Mail.h:42
@ MAIL_CREATURE
Definition Mail.h:41
@ MAIL_COMMERCE_AUCTION
Definition Mail.h:45
@ MAIL_AUCTION_2
Definition Mail.h:46
@ MAIL_CALENDAR
Definition Mail.h:43
@ MAIL_NORMAL
Definition Mail.h:39
@ MAIL_ARTISANS_CONSORTIUM
Definition Mail.h:47
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
void FlushBits()
Definition ByteBuffer.h:141
Definition Item.h:179
uint32 GetEnchantmentId(EnchantmentSlot slot) const
Definition Item.h:308
uint32 GetEnchantmentDuration(EnchantmentSlot slot) const
Definition Item.h:309
bool IsLocked() const
Definition Item.h:261
UF::UpdateField< UF::ItemData, uint32(WowCS::EntityFragment::CGObject), TYPEID_ITEM > m_itemData
Definition Item.h:459
uint32 GetEnchantmentCharges(EnchantmentSlot slot) const
Definition Item.h:310
uint32 GetCount() const
Definition Item.h:283
int32 GetSpellCharges(ItemEffectEntry const *effect=nullptr) const
Definition Item.cpp:623
LowType GetCounter() const
Definition ObjectGuid.h:336
Item * GetMItem(ObjectGuid::LowType id)
Definition Player.cpp:22448
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< MailListEntry > Mails
Definition MailPackets.h:85
WorldPacket const * Write() override
std::vector< MailNextTimeEntry > Next
WorldPacket const * Write() override
WorldPacket _worldPacket
Definition Packet.h:43
time_t GetGameTime()
Definition GameTime.cpp:52
ByteBuffer & operator<<(ByteBuffer &data, MailAttachedItem const &att)
ByteBuffer & operator>>(ByteBuffer &data, SendMail::StructSendMail::MailAttachment &attachment)
DataWriter< Container > Data(Container const &value)
Definition Mail.h:175
uint64 messageID
Definition Mail.h:176
uint8 messageType
Definition Mail.h:177
uint64 money
Definition Mail.h:188
uint64 COD
Definition Mail.h:189
time_t expire_time
Definition Mail.h:186
uint8 stationery
Definition Mail.h:178
ObjectGuid::LowType sender
Definition Mail.h:180
std::string subject
Definition Mail.h:182
std::string body
Definition Mail.h:183
std::vector< MailItemInfo > items
Definition Mail.h:184
time_t deliver_time
Definition Mail.h:187
uint32 checked
Definition Mail.h:190
uint16 mailTemplateId
Definition Mail.h:179
void Initialize(::Item const *item)
std::vector< Item::ItemEnchantData > Enchants
Definition MailPackets.h:44
std::vector< Item::ItemGemData > Gems
Definition MailPackets.h:45
MailAttachedItem(::Item const *item, uint8 pos)
MailListEntry(::Mail const *mail, ::Player *player)
std::vector< MailAttachedItem > Attachments
Definition MailPackets.h:64
std::vector< MailAttachment > Attachments