diff options
| author | Carbenium <keresztesschmidt@gmail.com> | 2015-02-03 23:11:07 +0100 |
|---|---|---|
| committer | Carbenium <keresztesschmidt@gmail.com> | 2015-02-07 12:43:25 +0100 |
| commit | 829e11b6623f967672143d79cd8d31772f54866d (patch) | |
| tree | e2fcced6ddde99843b23abda068f8c2d2aeade70 /src/server/game/Server | |
| parent | 919ab9157e7458257e300546e05312049b0872cd (diff) | |
Core/Packets: Implement all mail system relevant packets
Thanks @joschiwald, @DDuarte and @Warpten
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/MailPackets.cpp | 272 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MailPackets.h | 257 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QueryPackets.cpp | 15 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QueryPackets.h | 1 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 31 |
6 files changed, 581 insertions, 22 deletions
diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp new file mode 100644 index 00000000000..c712fe0d5b0 --- /dev/null +++ b/src/server/game/Server/Packets/MailPackets.cpp @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "Mail.h" +#include "MailPackets.h" +#include "Player.h" +#include "World.h" + +WorldPackets::Mail::MailAttachedItem::MailAttachedItem(::Item const* item, uint8 pos) +{ + Position = pos; + AttachID = item->GetGUID().GetCounter(); + Count = item->GetCount(); + Charges = item->GetSpellCharges(); + MaxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); + Durability = item->GetUInt32Value(ITEM_FIELD_DURABILITY); + Unlocked = !item->IsLocked(); //TODO: Check + + for (uint8 j = 0; j < MAX_INSPECTED_ENCHANTMENT_SLOT; j++) + { + Enchants[j].Enchant = item->GetEnchantmentId((EnchantmentSlot)j); + Enchants[j].Duration = item->GetEnchantmentDuration((EnchantmentSlot)j); + Enchants[j].Charges = item->GetEnchantmentCharges((EnchantmentSlot)j); + } +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Mail::MailAttachedItem const& att) +{ + data << uint8(att.Position); + data << uint32(att.AttachID); + data << WorldPackets::Item::ItemInstance(att.Item); + + for (auto const& en : att.Enchants) + { + data << int32(en.Enchant); + data << int32(en.Duration); + data << int32(en.Charges); + } + + data << int32(att.Count); + data << int32(att.Charges); + data << int32(att.MaxDurability); + data << int32(att.Durability); + data.WriteBit(att.Unlocked); + data.FlushBits(); + + return data; +} + +WorldPackets::Mail::MailListEntry::MailListEntry(::Mail const* mail, ::Player* player) +{ + MailID = mail->messageID; + SenderType = mail->messageType; + + switch (mail->messageType) + { + case MAIL_NORMAL: + SenderCharacter.Set(ObjectGuid::Create<HighGuid::Player>(mail->sender)); + SenderHint.NativeRealmAddress.Set(GetVirtualRealmAddress()); + SenderHint.VirtualRealmAddress.Set(GetVirtualRealmAddress()); + break; + case MAIL_CREATURE: + case MAIL_GAMEOBJECT: + case MAIL_AUCTION: + case MAIL_CALENDAR: + AltSenderID.Set(mail->sender); + break; + } + + Cod = mail->COD; + PackageID = 0; + StationeryID = mail->stationery; + SentMoney = mail->money; + Flags = mail->checked; + DaysLeft = float(mail->expire_time - time(nullptr)) / DAY; + MailTemplateID = mail->mailTemplateId; + Subject = mail->subject; + Body = mail->body; + + for (uint8 i = 0; i < mail->items.size(); i++) + { + if (::Item* item = player->GetMItem(mail->items[i].item_guid)) + Attachments.emplace_back(item, i); + } +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Mail::MailListEntry const& entry) +{ + data << int32(entry.MailID); + data << int8(entry.SenderType); + + data << entry.SenderHint; + + data << int64(entry.Cod); + data << int32(entry.PackageID); + data << int32(entry.StationeryID); + data << int64(entry.SentMoney); + data << int32(entry.Flags); + data << float(entry.DaysLeft); + data << int32(entry.MailTemplateID); + + data << int32(entry.Attachments.size()); + + for (auto const& att : entry.Attachments) + data << att; + + data.WriteBit(entry.SenderCharacter.HasValue); + data.WriteBit(entry.AltSenderID.HasValue); + data.WriteBits(entry.Subject.size(), 8); + data.WriteBits(entry.Body.size(), 13); + data.FlushBits(); + + return data; +} + +void WorldPackets::Mail::MailGetList::Read() +{ + _worldPacket >> Mailbox; + LowGuids.resize(_worldPacket.read<int32>()); + + for (auto& l : LowGuids) + _worldPacket >> l; +} + +WorldPacket const* WorldPackets::Mail::MailListResult::Write() +{ + _worldPacket << int32(Mails.size()); + _worldPacket << int32(TotalNumRecords); + + for (auto const& mail : Mails) + _worldPacket << mail; + + return &_worldPacket; +} + +void WorldPackets::Mail::MailCreateTextItem::Read() +{ + _worldPacket >> Mailbox; + _worldPacket >> MailID; +} + +void WorldPackets::Mail::SendMail::Read() +{ + _worldPacket >> Info.Mailbox; + _worldPacket >> Info.StationeryID; + _worldPacket >> Info.PackageID; + _worldPacket >> Info.SendMoney; + _worldPacket >> Info.Cod; + + uint32 targetLength = _worldPacket.ReadBits(9); + uint32 subjectLength = _worldPacket.ReadBits(9); + uint32 bodyLength = _worldPacket.ReadBits(11); + + Info.Attachments.resize(_worldPacket.ReadBits(5)); + + Info.Target = _worldPacket.ReadString(targetLength); + Info.Subject = _worldPacket.ReadString(subjectLength); + Info.Body = _worldPacket.ReadString(bodyLength); + + for (auto& att : Info.Attachments) + { + _worldPacket >> att.AttachPosition; + _worldPacket >> att.ItemGUID; + } +} + +void WorldPackets::Mail::MailReturnToSender::Read() +{ + _worldPacket >> MailID; + _worldPacket >> SenderGUID; +} + +WorldPacket const* WorldPackets::Mail::MailCommandResult::Write() +{ + _worldPacket << uint32(MailID); + _worldPacket << uint32(Command); + _worldPacket << uint32(ErrorCode); + _worldPacket << uint32(BagResult); + _worldPacket << uint32(AttachID); + _worldPacket << uint32(QtyInInventory); + + return &_worldPacket; +} + +void WorldPackets::Mail::MailMarkAsRead::Read() +{ + _worldPacket >> Mailbox; + _worldPacket >> MailID; + BiReceipt = _worldPacket.ReadBit(); +} + +void WorldPackets::Mail::MailDelete::Read() +{ + _worldPacket >> MailID; + _worldPacket >> DeleteReason; +} + +void WorldPackets::Mail::MailTakeItem::Read() +{ + _worldPacket >> Mailbox; + _worldPacket >> MailID; + _worldPacket >> AttachID; +} + +void WorldPackets::Mail::MailTakeMoney::Read() +{ + _worldPacket >> Mailbox; + _worldPacket >> MailID; + _worldPacket >> Money; +} + +WorldPackets::Mail::MailQueryNextTimeResult::MailNextTimeEntry::MailNextTimeEntry(::Mail const* mail) +{ + switch (mail->messageType) + { + case MAIL_NORMAL: + SenderGuid = ObjectGuid::Create<HighGuid::Player>(mail->sender); + SenderHint.NativeRealmAddress.Set(GetVirtualRealmAddress()); + SenderHint.VirtualRealmAddress.Set(GetVirtualRealmAddress()); + break; + case MAIL_AUCTION: + case MAIL_CREATURE: + case MAIL_GAMEOBJECT: + case MAIL_CALENDAR: + AltSenderID = mail->sender; + break; + } + + TimeLeft = mail->deliver_time - time(nullptr); + AltSenderType = mail->messageType; + StationeryID = mail->stationery; +} + +WorldPacket const* WorldPackets::Mail::MailQueryNextTimeResult::Write() +{ + _worldPacket << float(NextMailTime); + _worldPacket << int32(Next.size()); + + for (auto const& entry : Next) + { + _worldPacket << entry.SenderGuid; + _worldPacket << entry.SenderHint; + + _worldPacket << float(entry.TimeLeft); + _worldPacket << int32(entry.AltSenderID); + _worldPacket << int8(entry.AltSenderType); + _worldPacket << int32(entry.StationeryID); + } + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Mail::NotifyRecievedMail::Write() +{ + _worldPacket << float(Delay); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/MailPackets.h b/src/server/game/Server/Packets/MailPackets.h new file mode 100644 index 00000000000..8019c274191 --- /dev/null +++ b/src/server/game/Server/Packets/MailPackets.h @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef MailPackets_h__ +#define MailPackets_h__ + +#include "ItemPackets.h" +#include "Packet.h" +#include "QueryPackets.h" +#include "ObjectGuid.h" + +struct Mail; + +namespace WorldPackets +{ + namespace Mail + { + struct MailAttachedItemEnchant + { + int32 Enchant = 0; + int32 Duration = 0; + int32 Charges = 0; + }; + + struct MailAttachedItem + { + MailAttachedItem(::Item const* item, uint8 pos); + + uint8 Position = 0; + int32 AttachID = 0; + Item::ItemInstance Item; + int32 Count = 0; + int32 Charges = 0; + int32 MaxDurability = 0; + int32 Durability = 0; + bool Unlocked = false; + MailAttachedItemEnchant Enchants[8]; + }; + + struct MailListEntry + { + MailListEntry(::Mail const* mail, ::Player* player); + + int32 MailID = 0; + uint8 SenderType = 0; + Optional<ObjectGuid> SenderCharacter; + Query::PlayerGuidLookupHint SenderHint; + Optional<uint32> AltSenderID; + int64 Cod = 0; + int32 PackageID = 0; + int32 StationeryID = 0; + int64 SentMoney = 0; + int32 Flags = 0; + float DaysLeft = 0.0f; + int32 MailTemplateID = 0; + std::string Subject; + std::string Body; + std::vector<MailAttachedItem> Attachments; + }; + + class MailGetList final : public ClientPacket + { + public: + MailGetList(WorldPacket&& packet) : ClientPacket(CMSG_GET_MAIL_LIST, std::move(packet)) { } + + void Read() override; + + ObjectGuid Mailbox; + std::vector<ObjectGuid::LowType> LowGuids; + }; + + class MailListResult final : public ServerPacket + { + public: + MailListResult() : ServerPacket(SMSG_MAIL_LIST_RESULT, 8) { } + + WorldPacket const* Write() override; + + int32 TotalNumRecords = 0; + std::vector<MailListEntry> Mails; + }; + + class MailCreateTextItem final : public ClientPacket + { + public: + MailCreateTextItem(WorldPacket&& packet) : ClientPacket(CMSG_MAIL_CREATE_TEXT_ITEM, std::move(packet)) { } + + void Read() override; + + ObjectGuid Mailbox; + uint32 MailID = 0; + }; + + class SendMail final : public ClientPacket + { + public: + struct StructSendMail + { + struct MailAttachment + { + uint8 AttachPosition = 0; + ObjectGuid ItemGUID; + }; + + ObjectGuid Mailbox; + int32 StationeryID = 0; + int32 PackageID = 0; + int64 SendMoney = 0; + int64 Cod = 0; + std::string Target; + std::string Subject; + std::string Body; + std::vector<MailAttachment> Attachments; + }; + + SendMail(WorldPacket&& packet) : ClientPacket(CMSG_SEND_MAIL, std::move(packet)) { } + + void Read() override; + + StructSendMail Info; + }; + + class MailCommandResult final : public ServerPacket + { + public: + MailCommandResult() : ServerPacket(SMSG_SEND_MAIL_RESULT) { } + + WorldPacket const* Write() override; + + uint32 MailID = 0; + uint32 Command = 0; + uint32 ErrorCode = 0; + uint32 BagResult = 0; + uint32 AttachID = 0; + uint32 QtyInInventory = 0; + }; + + class MailReturnToSender final : public ClientPacket + { + public: + MailReturnToSender(WorldPacket&& packet) : ClientPacket(CMSG_MAIL_RETURN_TO_SENDER, std::move(packet)) { } + + void Read() override; + + int32 MailID = 0; + ObjectGuid SenderGUID; + }; + + class MailMarkAsRead final : public ClientPacket + { + public: + MailMarkAsRead(WorldPacket&& packet) : ClientPacket(CMSG_MAIL_MARK_AS_READ, std::move(packet)) { } + + void Read() override; + + ObjectGuid Mailbox; + int32 MailID = 0; + bool BiReceipt = false; + }; + + class MailDelete final : public ClientPacket + { + public: + MailDelete(WorldPacket&& packet) : ClientPacket(CMSG_MAIL_DELETE, std::move(packet)) { } + + void Read() override; + + int32 MailID = 0; + int32 DeleteReason = 0; + }; + + class MailTakeItem final : public ClientPacket + { + public: + MailTakeItem(WorldPacket&& packet) : ClientPacket(CMSG_MAIL_TAKE_ITEM, std::move(packet)) { } + + void Read() override; + + ObjectGuid Mailbox; + int32 MailID = 0; + int32 AttachID = 0; + }; + + class MailTakeMoney final : public ClientPacket + { + public: + MailTakeMoney(WorldPacket&& packet) : ClientPacket(CMSG_MAIL_TAKE_MONEY, std::move(packet)) { } + + void Read() override; + + ObjectGuid Mailbox; + int32 MailID = 0; + int64 Money = 0; + }; + + class MailQueryNextMailTime final : public ClientPacket + { + public: + MailQueryNextMailTime(WorldPacket&& packet) : ClientPacket(CMSG_QUERY_NEXT_MAIL_TIME, std::move(packet)) { } + + void Read() override { } + }; + + class MailQueryNextTimeResult final : public ServerPacket + { + public: + struct MailNextTimeEntry + { + MailNextTimeEntry(::Mail const* mail); + + ObjectGuid SenderGuid; + Query::PlayerGuidLookupHint SenderHint; + float TimeLeft = 0.0f; + int32 AltSenderID = 0; + int8 AltSenderType = 0; + int32 StationeryID = 0; + }; + + MailQueryNextTimeResult() : ServerPacket(SMSG_MAIL_QUERY_NEXT_TIME_RESULT, 8) { } + + WorldPacket const* Write() override; + + float NextMailTime = 0.0f; + std::vector<MailNextTimeEntry> Next; + }; + + class NotifyRecievedMail : ServerPacket + { + public: + NotifyRecievedMail() : ServerPacket(SMSG_NOTIFY_RECEIVED_MAIL, 4) { } + + WorldPacket const* Write() override; + + float Delay = 0.0f; + }; + + } +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Mail::MailAttachedItem const& att); +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Mail::MailListEntry const& entry); + +#endif // MailPackets_h__ diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 4dfd01dfcaa..d9e48ca1205 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -106,6 +106,21 @@ void WorldPackets::Query::QueryPlayerName::Read() _worldPacket >> Hint.NativeRealmAddress.Value; } +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupHint const& lookupHint) +{ + data.WriteBit(lookupHint.VirtualRealmAddress.HasValue); + data.WriteBit(lookupHint.NativeRealmAddress.HasValue); + data.FlushBits(); + + if (lookupHint.VirtualRealmAddress.HasValue) + data << uint32(lookupHint.VirtualRealmAddress.Value); + + if (lookupHint.NativeRealmAddress.HasValue) + data << uint32(lookupHint.NativeRealmAddress.Value); + + return data; +} + bool WorldPackets::Query::PlayerGuidLookupData::Initialize(ObjectGuid const& guid, Player const* player /*= nullptr*/) { CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid); diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 3907476129c..97648385a50 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -323,6 +323,7 @@ namespace WorldPackets } } +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupHint const& lookupHint); ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupData const& lookupData); #endif // QueryPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 9b9bb079729..e2c097c8fc4 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -33,6 +33,7 @@ #include "Packets/InspectPackets.h" #include "Packets/ItemPackets.h" #include "Packets/LootPackets.h" +#include "Packets/MailPackets.h" #include "Packets/MiscPackets.h" #include "Packets/MovementPackets.h" #include "Packets/NPCPackets.h" @@ -377,7 +378,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_CHALLENGE_MODE_REWARDS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_GARRISON_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_HANDLER(CMSG_GET_ITEM_PURCHASE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::GetItemPurchaseData, &WorldSession::HandleGetItemPurchaseData); - DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_MAIL_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGetMailList ); + DEFINE_HANDLER(CMSG_GET_MAIL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailGetList, &WorldSession::HandleGetMailList); DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_MIRROR_IMAGE_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMirrorImageDataRequest ); DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_SHIPMENT_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_TROPHY_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -529,12 +530,12 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER_OLD(CMSG_LOOT_ROLL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLootRoll ); DEFINE_OPCODE_HANDLER_OLD(CMSG_LOW_LEVEL_RAID1, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_LOW_LEVEL_RAID2, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_MAIL_CREATE_TEXT_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMailCreateTextItem ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_MAIL_DELETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMailDelete ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_MAIL_MARK_AS_READ, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMailMarkAsRead ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_MAIL_RETURN_TO_SENDER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMailReturnToSender ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_MAIL_TAKE_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMailTakeItem ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_MAIL_TAKE_MONEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMailTakeMoney ); + DEFINE_HANDLER(CMSG_MAIL_CREATE_TEXT_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailCreateTextItem, &WorldSession::HandleMailCreateTextItem); + DEFINE_HANDLER(CMSG_MAIL_DELETE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailDelete, &WorldSession::HandleMailDelete); + DEFINE_HANDLER(CMSG_MAIL_MARK_AS_READ, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailMarkAsRead, &WorldSession::HandleMailMarkAsRead); + DEFINE_HANDLER(CMSG_MAIL_RETURN_TO_SENDER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailReturnToSender, &WorldSession::HandleMailReturnToSender); + DEFINE_HANDLER(CMSG_MAIL_TAKE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailTakeItem, &WorldSession::HandleMailTakeItem); + DEFINE_HANDLER(CMSG_MAIL_TAKE_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailTakeMoney, &WorldSession::HandleMailTakeMoney); DEFINE_OPCODE_HANDLER_OLD(CMSG_MASTER_LOOT_ITEM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_MEETINGSTONE_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_MESSAGECHAT_ADDON_CHANNEL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -690,7 +691,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_COUNTDOWN_TIMER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_GUILD_XP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryXPOpcode ); DEFINE_HANDLER(CMSG_QUERY_INSPECT_ACHIEVEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Inspect::QueryInspectAchievements, &WorldSession::HandleQueryInspectAchievements); - DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_NEXT_MAIL_TIME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryNextMailTime ); + DEFINE_HANDLER(CMSG_QUERY_NEXT_MAIL_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailQueryNextMailTime, &WorldSession::HandleQueryNextMailTime); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_PETITION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_SCENARIO_POI, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_HANDLER(CMSG_QUERY_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryTime, &WorldSession::HandleQueryTimeOpcode); @@ -768,7 +769,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER_OLD(CMSG_SELF_RES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSelfResOpcode ); DEFINE_HANDLER(CMSG_SELL_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::SellItem, &WorldSession::HandleSellItemOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_SEND_CONTACT_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleContactListOpcode ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_SEND_MAIL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSendMail ); + DEFINE_HANDLER(CMSG_SEND_MAIL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::SendMail, &WorldSession::HandleSendMail); DEFINE_OPCODE_HANDLER_OLD(CMSG_SEND_SOR_REQUEST_VIA_ADDRESS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_SEND_SOR_REQUEST_VIA_BNET_ACCOUNT_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_SERVERTIME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -1477,8 +1478,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ROLL_WON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_SLOT_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOSS_OF_CONTROL_AURA_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAIL_LIST_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAIL_QUERY_NEXT_TIME_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAIL_LIST_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAIL_QUERY_NEXT_TIME_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJECTIVES_INIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJ_EVENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MASTER_LOOT_CANDIDATE_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1594,7 +1595,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_DEST_LOC_SPELL_CAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_MONEY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_RECEIVED_MAIL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_RECEIVED_MAIL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NPC_TEXT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NPC_WONT_TALK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OFFER_PETITION_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1782,7 +1783,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SELL_ITEM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SELL_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_ITEM_PASSIVES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_MAIL_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_MAIL_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_RAID_TARGET_UPDATE_ALL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_RAID_TARGET_UPDATE_SINGLE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_CHARGES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 029d97ce9bd..d90cb1f1770 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -198,6 +198,19 @@ namespace WorldPackets class LootMoney; } + namespace Mail + { + class MailCreateTextItem; + class MailDelete; + class MailGetList; + class MailMarkAsRead; + class MailQueryNextMailTime; + class MailReturnToSender; + class MailTakeItem; + class MailTakeMoney; + class SendMail; + } + namespace Misc { class AreaTrigger; @@ -937,16 +950,16 @@ class WorldSession // Black Market void HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& packet); - void HandleGetMailList(WorldPacket& recvData); - void HandleSendMail(WorldPacket& recvData); - void HandleMailTakeMoney(WorldPacket& recvData); - void HandleMailTakeItem(WorldPacket& recvData); - void HandleMailMarkAsRead(WorldPacket& recvData); - void HandleMailReturnToSender(WorldPacket& recvData); - void HandleMailDelete(WorldPacket& recvData); + void HandleGetMailList(WorldPackets::Mail::MailGetList& packet); + void HandleSendMail(WorldPackets::Mail::SendMail& packet); + void HandleMailTakeMoney(WorldPackets::Mail::MailTakeMoney& packet); + void HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& packet); + void HandleMailMarkAsRead(WorldPackets::Mail::MailMarkAsRead& packet); + void HandleMailReturnToSender(WorldPackets::Mail::MailReturnToSender& packet); + void HandleMailDelete(WorldPackets::Mail::MailDelete& packet); void HandleItemTextQuery(WorldPacket& recvData); - void HandleMailCreateTextItem(WorldPacket& recvData); - void HandleQueryNextMailTime(WorldPacket& recvData); + void HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextItem& packet); + void HandleQueryNextMailTime(WorldPackets::Mail::MailQueryNextMailTime& packet); void HandleCancelChanneling(WorldPacket& recvData); void SendItemPageInfo(ItemTemplate* itemProto); |
