aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-05-18 23:52:58 +0200
committerShauren <shauren.trinity@gmail.com>2017-05-18 23:53:25 +0200
commitc5d3dd90bea3889ef5fcd33c9ef0d59d7c544f8a (patch)
treeaa7fde6f924fc39da54908bd6eeeb0be422e5fc3 /src/server/game/Server
parent74456703146194de72424ec98c4ea76402077be6 (diff)
Core/Game: Include cleanup
* Mostly aimed at removing Log/DatabaseEnv includes from other headers * Fix most packet headers including other packet headers - moved common structures such as ItemInstance to their own files * Moved SAI function definitions to source files (massive or requiring many different dependencies)
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packet.cpp9
-rw-r--r--src/server/game/Server/Packets/AchievementPackets.h2
-rw-r--r--src/server/game/Server/Packets/ArtifactPackets.h2
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.cpp9
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.h12
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.cpp20
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.h22
-rw-r--r--src/server/game/Server/Packets/BankPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/BankPackets.h3
-rw-r--r--src/server/game/Server/Packets/BattlePetPackets.cpp11
-rw-r--r--src/server/game/Server/Packets/BattlePetPackets.h12
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.h7
-rw-r--r--src/server/game/Server/Packets/BattlenetPackets.h2
-rw-r--r--src/server/game/Server/Packets/BlackMarketPackets.cpp29
-rw-r--r--src/server/game/Server/Packets/BlackMarketPackets.h7
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.h4
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.cpp70
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.h32
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h1
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h3
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.h3
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp218
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h63
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.cpp237
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.h103
-rw-r--r--src/server/game/Server/Packets/LFGPackets.cpp20
-rw-r--r--src/server/game/Server/Packets/LFGPackets.h13
-rw-r--r--src/server/game/Server/Packets/LFGPacketsCommon.cpp38
-rw-r--r--src/server/game/Server/Packets/LFGPacketsCommon.h41
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h28
-rw-r--r--src/server/game/Server/Packets/PacketUtilities.h2
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp9
-rw-r--r--src/server/game/Server/Packets/PetPackets.h1
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h1
-rw-r--r--src/server/game/Server/Packets/TaxiPackets.h30
-rw-r--r--src/server/game/Server/Packets/TicketPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/TicketPackets.h2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp34
-rw-r--r--src/server/game/Server/Protocol/PacketLog.cpp28
-rw-r--r--src/server/game/Server/Protocol/PacketLog.h15
-rw-r--r--src/server/game/Server/WorldPacket.h3
-rw-r--r--src/server/game/Server/WorldSession.cpp58
-rw-r--r--src/server/game/Server/WorldSession.h79
-rw-r--r--src/server/game/Server/WorldSocket.cpp20
-rw-r--r--src/server/game/Server/WorldSocket.h24
-rw-r--r--src/server/game/Server/WorldSocketMgr.cpp4
50 files changed, 717 insertions, 633 deletions
diff --git a/src/server/game/Server/Packet.cpp b/src/server/game/Server/Packet.cpp
index 09fdb85571f..b68d8d74382 100644
--- a/src/server/game/Server/Packet.cpp
+++ b/src/server/game/Server/Packet.cpp
@@ -18,8 +18,7 @@
#include "Packet.h"
#include "Errors.h"
-WorldPackets::Packet::Packet(WorldPacket&& worldPacket)
- : _worldPacket(std::move(worldPacket))
+WorldPackets::Packet::Packet(WorldPacket&& worldPacket) : _worldPacket(std::move(worldPacket))
{
}
@@ -33,14 +32,12 @@ void WorldPackets::ServerPacket::Read()
ASSERT(!"Read not implemented for server packets.");
}
-WorldPackets::ClientPacket::ClientPacket(OpcodeClient expectedOpcode, WorldPacket&& packet)
- : Packet(std::move(packet))
+WorldPackets::ClientPacket::ClientPacket(OpcodeClient expectedOpcode, WorldPacket&& packet) : Packet(std::move(packet))
{
ASSERT(GetOpcode() == expectedOpcode);
}
-WorldPackets::ClientPacket::ClientPacket(WorldPacket&& packet)
- : Packet(std::move(packet))
+WorldPackets::ClientPacket::ClientPacket(WorldPacket&& packet) : Packet(std::move(packet))
{
}
diff --git a/src/server/game/Server/Packets/AchievementPackets.h b/src/server/game/Server/Packets/AchievementPackets.h
index 5a8841e0180..0ce2b11b1fa 100644
--- a/src/server/game/Server/Packets/AchievementPackets.h
+++ b/src/server/game/Server/Packets/AchievementPackets.h
@@ -18,8 +18,8 @@
#ifndef game_AchievementPackets_h__
#define game_AchievementPackets_h__
-#include "ObjectGuid.h"
#include "Packet.h"
+#include "ObjectGuid.h"
namespace WorldPackets
{
diff --git a/src/server/game/Server/Packets/ArtifactPackets.h b/src/server/game/Server/Packets/ArtifactPackets.h
index 30336cdbf50..3bc70b92c04 100644
--- a/src/server/game/Server/Packets/ArtifactPackets.h
+++ b/src/server/game/Server/Packets/ArtifactPackets.h
@@ -19,8 +19,8 @@
#define ArtifactPackets_h__
#include "Packet.h"
-#include "PacketUtilities.h"
#include "ObjectGuid.h"
+#include "PacketUtilities.h"
namespace WorldPackets
{
diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp
index 56c38d5d18e..aa18575a2f6 100644
--- a/src/server/game/Server/Packets/AuctionHousePackets.cpp
+++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp
@@ -18,6 +18,7 @@
#include "AuctionHousePackets.h"
#include "AuctionHouseMgr.h"
#include "ObjectGuid.h"
+#include "MailPackets.h"
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::AuctionHouse::AuctionItem const& auctionItem)
{
@@ -268,6 +269,14 @@ void WorldPackets::AuctionHouse::AuctionListOwnerItems::Read()
_worldPacket >> Offset;
}
+WorldPackets::AuctionHouse::AuctionListPendingSalesResult::AuctionListPendingSalesResult() : ServerPacket(SMSG_AUCTION_LIST_PENDING_SALES_RESULT, 140)
+{
+}
+
+WorldPackets::AuctionHouse::AuctionListPendingSalesResult::~AuctionListPendingSalesResult()
+{
+}
+
WorldPacket const* WorldPackets::AuctionHouse::AuctionListPendingSalesResult::Write()
{
_worldPacket << uint32(Mails.size());
diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h
index 17d7ee89e56..9e358e94107 100644
--- a/src/server/game/Server/Packets/AuctionHousePackets.h
+++ b/src/server/game/Server/Packets/AuctionHousePackets.h
@@ -19,14 +19,19 @@
#define AuctionHousePackets_h__
#include "Packet.h"
+#include "DBCEnums.h"
+#include "ItemPacketsCommon.h"
#include "ObjectGuid.h"
-#include "ItemPackets.h"
-#include "MailPackets.h"
struct AuctionEntry;
namespace WorldPackets
{
+ namespace Mail
+ {
+ struct MailListEntry;
+ }
+
namespace AuctionHouse
{
struct AuctionItem
@@ -284,7 +289,8 @@ namespace WorldPackets
class AuctionListPendingSalesResult final : public ServerPacket
{
public:
- AuctionListPendingSalesResult() : ServerPacket(SMSG_AUCTION_LIST_PENDING_SALES_RESULT, 140) { }
+ AuctionListPendingSalesResult();
+ ~AuctionListPendingSalesResult();
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp
index 9ed123f4872..c13608bb429 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.cpp
+++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp
@@ -16,8 +16,11 @@
*/
#include "AuthenticationPackets.h"
+#include "BigNumber.h"
#include "CharacterTemplateDataStore.h"
#include "HmacHash.h"
+#include "ObjectMgr.h"
+#include "Util.h"
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Auth::VirtualRealmNameInfo const& virtualRealmInfo)
{
@@ -339,11 +342,6 @@ WorldPackets::Auth::ConnectTo::ConnectTo() : ServerPacket(SMSG_CONNECT_TO, 8 + 4
HexStrToByteArray("F41DCB2D728CF3337A4FF338FA89DB01BBBE9C3B65E9DA96268687353E48B94C", Payload.PanamaKey);
Payload.Adler32 = 0xA0A66C10;
- p.SetBinary(P, 128);
- q.SetBinary(Q, 128);
- dmp1.SetBinary(DP, 128);
- dmq1.SetBinary(DQ, 128);
- iqmp.SetBinary(InverseQ, 128);
}
WorldPacket const* WorldPackets::Auth::ConnectTo::Write()
@@ -372,6 +370,18 @@ WorldPacket const* WorldPackets::Auth::ConnectTo::Write()
BigNumber bnData;
bnData.SetBinary(payload.contents(), payload.size());
+ BigNumber p;
+ BigNumber q;
+ BigNumber dmp1;
+ BigNumber dmq1;
+ BigNumber iqmp;
+
+ p.SetBinary(P, 128);
+ q.SetBinary(Q, 128);
+ dmp1.SetBinary(DP, 128);
+ dmq1.SetBinary(DQ, 128);
+ iqmp.SetBinary(InverseQ, 128);
+
BigNumber m1 = (bnData % p).ModExp(dmp1, p);
BigNumber m2 = (bnData % q).ModExp(dmq1, q);
BigNumber h = (iqmp * (m1 - m2)) % p;
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h
index 2c7a17d217d..27e7a4c08ae 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.h
+++ b/src/server/game/Server/Packets/AuthenticationPackets.h
@@ -19,16 +19,13 @@
#define AuthenticationPacketsWorld_h__
#include "Packet.h"
-#include "ObjectMgr.h"
-#include "Common.h"
-#include "BigNumber.h"
-#include "SHA1.h"
-#include <boost/asio/ip/tcp.hpp>
+#include "Define.h"
+#include "Optional.h"
+#include <array>
+#include <unordered_map>
struct CharacterTemplate;
-using boost::asio::ip::tcp;
-
namespace WorldPackets
{
namespace Auth
@@ -155,8 +152,8 @@ namespace WorldPackets
std::vector<VirtualRealmInfo> VirtualRealms; ///< list of realms connected to this one (inclusive) @todo implement
std::vector<CharacterTemplate const*> Templates; ///< list of pre-made character templates.
- ExpansionRequirementContainer const* AvailableClasses = nullptr; ///< the minimum AccountExpansion required to select the classes
- ExpansionRequirementContainer const* AvailableRaces = nullptr; ///< the minimum AccountExpansion required to select the races
+ std::unordered_map<uint8, uint8> const* AvailableClasses = nullptr; ///< the minimum AccountExpansion required to select the classes
+ std::unordered_map<uint8, uint8> const* AvailableRaces = nullptr; ///< the minimum AccountExpansion required to select the races
bool IsExpansionTrial = false;
bool ForceCharacterTemplate = false; ///< forces the client to always use a character template when creating a new character. @see Templates. @todo implement
@@ -233,13 +230,6 @@ namespace WorldPackets
ConnectToSerial Serial = ConnectToSerial::None;
ConnectPayload Payload;
uint8 Con = 0;
-
- private:
- BigNumber p;
- BigNumber q;
- BigNumber dmp1;
- BigNumber dmq1;
- BigNumber iqmp;
};
class AuthContinuedSession final : public EarlyProcessClientPacket
diff --git a/src/server/game/Server/Packets/BankPackets.cpp b/src/server/game/Server/Packets/BankPackets.cpp
index 4def6d9f9e3..880fc7e2bbc 100644
--- a/src/server/game/Server/Packets/BankPackets.cpp
+++ b/src/server/game/Server/Packets/BankPackets.cpp
@@ -16,7 +16,6 @@
*/
#include "BankPackets.h"
-#include "ItemPackets.h"
void WorldPackets::Bank::AutoBankItem::Read()
{
diff --git a/src/server/game/Server/Packets/BankPackets.h b/src/server/game/Server/Packets/BankPackets.h
index b2083364f6d..df12753f2a4 100644
--- a/src/server/game/Server/Packets/BankPackets.h
+++ b/src/server/game/Server/Packets/BankPackets.h
@@ -18,10 +18,9 @@
#ifndef BankPackets_h__
#define BankPackets_h__
-#include "ItemPackets.h"
#include "Packet.h"
+#include "ItemPacketsCommon.h"
#include "ObjectGuid.h"
-#include "WorldSession.h"
namespace WorldPackets
{
diff --git a/src/server/game/Server/Packets/BattlePetPackets.cpp b/src/server/game/Server/Packets/BattlePetPackets.cpp
index 8b7141b3a22..0f724c8d15f 100644
--- a/src/server/game/Server/Packets/BattlePetPackets.cpp
+++ b/src/server/game/Server/Packets/BattlePetPackets.cpp
@@ -16,7 +16,6 @@
*/
#include "BattlePetPackets.h"
-#include "World.h"
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::BattlePet::BattlePetSlot const& slot)
{
@@ -45,17 +44,17 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::BattlePet::BattlePet cons
data << uint32(pet.Speed);
data << uint8(pet.Quality);
data.WriteBits(pet.Name.size(), 7);
- data.WriteBit(!pet.Owner.IsEmpty()); // HasOwnerInfo
+ data.WriteBit(pet.OwnerInfo.is_initialized());
data.WriteBit(pet.Name.empty()); // NoRename
data.FlushBits();
data.WriteString(pet.Name);
- if (!pet.Owner.IsEmpty())
+ if (pet.OwnerInfo)
{
- data << pet.Owner;
- data << uint32(GetVirtualRealmAddress()); // Virtual
- data << uint32(GetVirtualRealmAddress()); // Native
+ data << pet.OwnerInfo->Guid;
+ data << uint32(pet.OwnerInfo->PlayerVirtualRealm);
+ data << uint32(pet.OwnerInfo->PlayerNativeRealm);
}
return data;
diff --git a/src/server/game/Server/Packets/BattlePetPackets.h b/src/server/game/Server/Packets/BattlePetPackets.h
index 745c7723c2c..bbaa1d95617 100644
--- a/src/server/game/Server/Packets/BattlePetPackets.h
+++ b/src/server/game/Server/Packets/BattlePetPackets.h
@@ -20,12 +20,20 @@
#include "Packet.h"
#include "ObjectGuid.h"
-#include "Unit.h"
+#include "Optional.h"
+#include "UnitDefines.h"
namespace WorldPackets
{
namespace BattlePet
{
+ struct BattlePetOwnerInfo
+ {
+ ObjectGuid Guid;
+ uint32 PlayerVirtualRealm = 0;
+ uint32 PlayerNativeRealm = 0;
+ };
+
struct BattlePet
{
ObjectGuid Guid;
@@ -41,7 +49,7 @@ namespace WorldPackets
uint32 MaxHealth = 0;
uint32 Speed = 0;
uint8 Quality = 0;
- ObjectGuid Owner; // for non-account wide pets only? (Guild Page, Guild Herald)
+ Optional<BattlePetOwnerInfo> OwnerInfo;
std::string Name;
};
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h
index 90dd5ccf529..ff38b48e00d 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.h
+++ b/src/server/game/Server/Packets/BattlegroundPackets.h
@@ -18,12 +18,11 @@
#ifndef BattlegroundPackets_h__
#define BattlegroundPackets_h__
-#include "Common.h"
-#include "ObjectGuid.h"
-#include "LFGPackets.h"
-#include "Position.h"
#include "Packet.h"
+#include "LFGPacketsCommon.h"
+#include "ObjectGuid.h"
#include "Optional.h"
+#include "Position.h"
namespace WorldPackets
{
diff --git a/src/server/game/Server/Packets/BattlenetPackets.h b/src/server/game/Server/Packets/BattlenetPackets.h
index ba3f4299ab9..6d89ba8a170 100644
--- a/src/server/game/Server/Packets/BattlenetPackets.h
+++ b/src/server/game/Server/Packets/BattlenetPackets.h
@@ -19,8 +19,8 @@
#define BattlenetPackets_h__
#include "Packet.h"
-#include "MessageBuffer.h"
#include "BattlenetRpcErrorCodes.h"
+#include "MessageBuffer.h"
#include <array>
namespace WorldPackets
diff --git a/src/server/game/Server/Packets/BlackMarketPackets.cpp b/src/server/game/Server/Packets/BlackMarketPackets.cpp
index 9f95582b4ae..74e3b9411c2 100644
--- a/src/server/game/Server/Packets/BlackMarketPackets.cpp
+++ b/src/server/game/Server/Packets/BlackMarketPackets.cpp
@@ -16,35 +16,6 @@
*/
#include "BlackMarketPackets.h"
-#include "BlackMarketMgr.h"
-#include "Player.h"
-
-void WorldPackets::BlackMarket::BlackMarketItem::Initialize(BlackMarketEntry *const entry, Player* player)
-{
- BlackMarketTemplate const* templ = entry->GetTemplate();
-
- MarketID = entry->GetMarketId();
- SellerNPC = templ->SellerNPC;
- Item = templ->Item;
- Quantity = templ->Quantity;
-
- // No bids yet
- if (!entry->GetNumBids())
- {
- MinBid = templ->MinBid;
- MinIncrement = 1;
- }
- else
- {
- MinIncrement = entry->GetMinIncrement(); // 5% increment minimum
- MinBid = entry->GetCurrentBid() + MinIncrement;
- }
-
- CurrentBid = entry->GetCurrentBid();
- SecondsRemaining = entry->GetSecondsRemaining();
- HighBid = (entry->GetBidder() == player->GetGUID().GetCounter());
- NumBids = entry->GetNumBids();
-}
void WorldPackets::BlackMarket::BlackMarketOpen::Read()
{
diff --git a/src/server/game/Server/Packets/BlackMarketPackets.h b/src/server/game/Server/Packets/BlackMarketPackets.h
index ed67800cd8b..61d28a3d18e 100644
--- a/src/server/game/Server/Packets/BlackMarketPackets.h
+++ b/src/server/game/Server/Packets/BlackMarketPackets.h
@@ -19,11 +19,8 @@
#define BlackMarketPackets_h__
#include "Packet.h"
+#include "ItemPacketsCommon.h"
#include "ObjectGuid.h"
-#include "ItemPackets.h"
-
-class Player;
-class BlackMarketEntry;
namespace WorldPackets
{
@@ -31,8 +28,6 @@ namespace WorldPackets
{
struct BlackMarketItem
{
- void Initialize(BlackMarketEntry *const entry, Player* player);
-
int32 MarketID = 0;
int32 SellerNPC = 0;
Item::ItemInstance Item;
diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp
index d045d3434fc..2c0e6a72bf9 100644
--- a/src/server/game/Server/Packets/CalendarPackets.cpp
+++ b/src/server/game/Server/Packets/CalendarPackets.cpp
@@ -16,7 +16,6 @@
*/
#include "CalendarPackets.h"
-#include "CalendarMgr.h"
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Calendar::CalendarSendCalendarEventInfo const& eventInfo)
{
diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h
index 7c417b123ef..61791b551f2 100644
--- a/src/server/game/Server/Packets/CalendarPackets.h
+++ b/src/server/game/Server/Packets/CalendarPackets.h
@@ -18,10 +18,10 @@
#ifndef CalendarPackets_h__
#define CalendarPackets_h__
-#include "ObjectGuid.h"
#include "Packet.h"
-#include "PacketUtilities.h"
#include "CalendarMgr.h"
+#include "ObjectGuid.h"
+#include "PacketUtilities.h"
namespace WorldPackets
{
diff --git a/src/server/game/Server/Packets/ChannelPackets.cpp b/src/server/game/Server/Packets/ChannelPackets.cpp
index 7ddcf009a99..31464337e74 100644
--- a/src/server/game/Server/Packets/ChannelPackets.cpp
+++ b/src/server/game/Server/Packets/ChannelPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "ChannelPackets.h"
+#include "Channel.h"
#include "Errors.h"
WorldPacket const* WorldPackets::Channel::ChannelListResponse::Write()
@@ -119,35 +120,29 @@ WorldPacket const* WorldPackets::Channel::UserlistUpdate::Write()
return &_worldPacket;
}
-WorldPackets::Channel::ChannelPlayerCommand::ChannelPlayerCommand(WorldPacket&& packet) : ClientPacket(std::move(packet))
+WorldPackets::Channel::ChannelCommand::ChannelCommand(WorldPacket&& packet) : ClientPacket(std::move(packet))
{
- switch (GetOpcode())
+ switch (packet.GetOpcode())
{
- default:
- ABORT();
case CMSG_CHAT_CHANNEL_ANNOUNCEMENTS:
- case CMSG_CHAT_CHANNEL_BAN:
case CMSG_CHAT_CHANNEL_DECLINE_INVITE:
case CMSG_CHAT_CHANNEL_DISPLAY_LIST:
- case CMSG_CHAT_CHANNEL_INVITE:
- case CMSG_CHAT_CHANNEL_KICK:
case CMSG_CHAT_CHANNEL_LIST:
case CMSG_CHAT_CHANNEL_MODERATE:
- case CMSG_CHAT_CHANNEL_MODERATOR:
- case CMSG_CHAT_CHANNEL_MUTE:
case CMSG_CHAT_CHANNEL_OWNER:
- case CMSG_CHAT_CHANNEL_PASSWORD:
- case CMSG_CHAT_CHANNEL_SET_OWNER:
- case CMSG_CHAT_CHANNEL_SILENCE_ALL:
- case CMSG_CHAT_CHANNEL_UNBAN:
- case CMSG_CHAT_CHANNEL_UNMODERATOR:
- case CMSG_CHAT_CHANNEL_UNMUTE:
- case CMSG_CHAT_CHANNEL_UNSILENCE_ALL:
+ break;
+ default:
+ ABORT();
break;
}
}
-void WorldPackets::Channel::ChannelPlayerCommand::Read()
+void WorldPackets::Channel::ChannelCommand::Read()
+{
+ ChannelName = _worldPacket.ReadString(_worldPacket.ReadBits(7));
+}
+
+WorldPackets::Channel::ChannelPlayerCommand::ChannelPlayerCommand(WorldPacket&& packet) : ClientPacket(std::move(packet))
{
switch (GetOpcode())
{
@@ -162,36 +157,29 @@ void WorldPackets::Channel::ChannelPlayerCommand::Read()
case CMSG_CHAT_CHANNEL_UNMODERATOR:
case CMSG_CHAT_CHANNEL_UNMUTE:
case CMSG_CHAT_CHANNEL_UNSILENCE_ALL:
- {
- uint32 channelNameLength = _worldPacket.ReadBits(7);
- uint32 nameLength = _worldPacket.ReadBits(9);
- ChannelName = _worldPacket.ReadString(channelNameLength);
- Name = _worldPacket.ReadString(nameLength);
- break;
- }
- case CMSG_CHAT_CHANNEL_ANNOUNCEMENTS:
- case CMSG_CHAT_CHANNEL_DECLINE_INVITE:
- case CMSG_CHAT_CHANNEL_DISPLAY_LIST:
- case CMSG_CHAT_CHANNEL_LIST:
- case CMSG_CHAT_CHANNEL_MODERATE:
- case CMSG_CHAT_CHANNEL_OWNER:
- {
- ChannelName = _worldPacket.ReadString(_worldPacket.ReadBits(7));
- break;
- }
- case CMSG_CHAT_CHANNEL_PASSWORD:
- {
- uint32 channelNameLength = _worldPacket.ReadBits(7);
- uint32 nameLength = _worldPacket.ReadBits(7);
- ChannelName = _worldPacket.ReadString(channelNameLength);
- Name = _worldPacket.ReadString(nameLength);
break;
- }
default:
+ ABORT();
break;
}
}
+void WorldPackets::Channel::ChannelPlayerCommand::Read()
+{
+ uint32 channelNameLength = _worldPacket.ReadBits(7);
+ uint32 nameLength = _worldPacket.ReadBits(9);
+ ChannelName = _worldPacket.ReadString(channelNameLength);
+ Name = _worldPacket.ReadString(nameLength);
+}
+
+void WorldPackets::Channel::ChannelPassword::Read()
+{
+ uint32 channelNameLength = _worldPacket.ReadBits(7);
+ uint32 passwordLength = _worldPacket.ReadBits(7);
+ ChannelName = _worldPacket.ReadString(channelNameLength);
+ Password = _worldPacket.ReadString(passwordLength);
+}
+
void WorldPackets::Channel::JoinChannel::Read()
{
_worldPacket >> ChatChannelId;
diff --git a/src/server/game/Server/Packets/ChannelPackets.h b/src/server/game/Server/Packets/ChannelPackets.h
index e0ecf8f82f9..85a11ec36f3 100644
--- a/src/server/game/Server/Packets/ChannelPackets.h
+++ b/src/server/game/Server/Packets/ChannelPackets.h
@@ -19,7 +19,6 @@
#define ChannelPackets_h__
#include "Packet.h"
-#include "Channel.h"
#include "ObjectGuid.h"
namespace WorldPackets
@@ -103,8 +102,8 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid AddedUserGUID;
- uint32 _ChannelFlags = CHANNEL_FLAG_NONE; ///< @see enum ChannelFlags
- uint8 UserFlags = MEMBER_FLAG_NONE;
+ uint32 _ChannelFlags = 0; ///< @see enum ChannelFlags
+ uint8 UserFlags = 0; ///< @see enum ChannelMemberFlags
int32 ChannelID = 0;
std::string ChannelName;
};
@@ -117,7 +116,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid RemovedUserGUID;
- uint32 _ChannelFlags = CHANNEL_FLAG_NONE; ///< @see enum ChannelFlags
+ uint32 _ChannelFlags = 0; ///< @see enum ChannelFlags
uint32 ChannelID = 0;
std::string ChannelName;
};
@@ -130,12 +129,22 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid UpdatedUserGUID;
- uint32 _ChannelFlags = CHANNEL_FLAG_NONE; ///< @see enum ChannelFlags
- uint8 UserFlags = MEMBER_FLAG_NONE;
+ uint32 _ChannelFlags = 0; ///< @see enum ChannelFlags
+ uint8 UserFlags = 0; ///< @see enum ChannelMemberFlags
int32 ChannelID = 0;
std::string ChannelName;
};
+ class ChannelCommand final : public ClientPacket
+ {
+ public:
+ ChannelCommand(WorldPacket&& packet);
+
+ void Read() override;
+
+ std::string ChannelName;
+ };
+
class ChannelPlayerCommand final : public ClientPacket
{
public:
@@ -147,6 +156,17 @@ namespace WorldPackets
std::string Name;
};
+ class ChannelPassword final : public ClientPacket
+ {
+ public:
+ ChannelPassword(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_CHANNEL_PASSWORD, std::move(packet)) { }
+
+ void Read() override;
+
+ std::string ChannelName;
+ std::string Password;
+ };
+
class JoinChannel final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index 095f14c3783..f65626179fa 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -16,6 +16,7 @@
*/
#include "CharacterPackets.h"
+#include "Field.h"
#include "ObjectMgr.h"
#include "PacketUtilities.h"
#include "World.h"
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index 79f35e4b8ad..70767bea1f0 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -19,6 +19,7 @@
#define CharacterPackets_h__
#include "Packet.h"
+#include "Optional.h"
#include "Player.h"
#include "PacketUtilities.h"
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h
index e79ae8978ae..4723c7561c4 100644
--- a/src/server/game/Server/Packets/ChatPackets.h
+++ b/src/server/game/Server/Packets/ChatPackets.h
@@ -19,9 +19,10 @@
#define ChatPackets_h__
#include "Packet.h"
-#include "SharedDefines.h"
+#include "Common.h"
#include "ObjectGuid.h"
#include "PacketUtilities.h"
+#include "SharedDefines.h"
class WorldObject;
diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h
index cf01534348c..0ddbad174d6 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.h
+++ b/src/server/game/Server/Packets/GarrisonPackets.h
@@ -22,6 +22,9 @@
#include "ObjectGuid.h"
#include "Position.h"
#include "PacketUtilities.h"
+#include <list>
+#include <unordered_set>
+#include <vector>
struct GarrAbilityEntry;
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index 501732d3d4e..2470dca41c9 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -18,17 +18,6 @@
#include "ItemPackets.h"
#include "Player.h"
-bool WorldPackets::Item::ItemBonusInstanceData::operator==(ItemBonusInstanceData const& r) const
-{
- if (Context != r.Context)
- return false;
-
- if (BonusListIDs.size() != r.BonusListIDs.size())
- return false;
-
- return std::is_permutation(BonusListIDs.begin(), BonusListIDs.end(), r.BonusListIDs.begin());
-}
-
void WorldPackets::Item::BuyBackItem::Read()
{
_worldPacket >> VendorGUID;
@@ -162,213 +151,6 @@ WorldPacket const* WorldPackets::Item::SetProficiency::Write()
return &_worldPacket;
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceData const& itemBonusInstanceData)
-{
- data << uint8(itemBonusInstanceData.Context);
- data << uint32(itemBonusInstanceData.BonusListIDs.size());
- for (uint32 bonusID : itemBonusInstanceData.BonusListIDs)
- data << uint32(bonusID);
-
- return data;
-}
-
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceData& itemBonusInstanceData)
-{
- uint32 bonusListIdSize;
-
- data >> itemBonusInstanceData.Context;
- data >> bonusListIdSize;
-
- for (uint32 i = 0u; i < bonusListIdSize; ++i)
- {
- uint32 bonusId;
- data >> bonusId;
- itemBonusInstanceData.BonusListIDs.push_back(bonusId);
- }
-
- return data;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const& itemInstance)
-{
- data << int32(itemInstance.ItemID);
- data << int32(itemInstance.RandomPropertiesSeed);
- data << int32(itemInstance.RandomPropertiesID);
-
- data.WriteBit(itemInstance.ItemBonus.is_initialized());
- data.WriteBit(itemInstance.Modifications.is_initialized());
- data.FlushBits();
-
- if (itemInstance.ItemBonus)
- data << *itemInstance.ItemBonus;
-
- if (itemInstance.Modifications)
- data << *itemInstance.Modifications;
-
- return data;
-}
-
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemInstance& itemInstance)
-{
- data >> itemInstance.ItemID;
- data >> itemInstance.RandomPropertiesSeed;
- data >> itemInstance.RandomPropertiesID;
-
- bool hasItemBonus = data.ReadBit();
- bool hasModifications = data.ReadBit();
- data.ResetBitPos();
-
- if (hasItemBonus)
- {
- itemInstance.ItemBonus = boost::in_place();
- data >> *itemInstance.ItemBonus;
- }
-
- if (hasModifications)
- {
- itemInstance.Modifications = boost::in_place();
- data >> *itemInstance.Modifications;
- }
-
- return data;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemEnchantData const& itemEnchantData)
-{
- data << int32(itemEnchantData.ID);
- data << uint32(itemEnchantData.Expiration);
- data << int32(itemEnchantData.Charges);
- data << uint8(itemEnchantData.Slot);
- return data;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemGemData const& itemGemData)
-{
- data << uint8(itemGemData.Slot);
- data << itemGemData.Item;
- return data;
-}
-
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemGemData& itemGemData)
-{
- data >> itemGemData.Slot;
- data >> itemGemData.Item;
- return data;
-}
-
-ByteBuffer& WorldPackets::Item::operator>>(ByteBuffer& data, InvUpdate& invUpdate)
-{
- invUpdate.Items.resize(data.ReadBits(2));
- for (size_t i = 0; i < invUpdate.Items.size(); ++i)
- {
- data >> invUpdate.Items[i].ContainerSlot;
- data >> invUpdate.Items[i].Slot;
- }
-
- return data;
-}
-
-void WorldPackets::Item::ItemInstance::Initialize(::Item const* item)
-{
- ItemID = item->GetEntry();
- RandomPropertiesSeed = item->GetItemSuffixFactor();
- RandomPropertiesID = item->GetItemRandomPropertyId();
- std::vector<uint32> const& bonusListIds = item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS);
- if (!bonusListIds.empty())
- {
- ItemBonus = boost::in_place();
- ItemBonus->BonusListIDs.insert(ItemBonus->BonusListIDs.end(), bonusListIds.begin(), bonusListIds.end());
- ItemBonus->Context = item->GetUInt32Value(ITEM_FIELD_CONTEXT);
- }
-
- if (uint32 mask = item->GetUInt32Value(ITEM_FIELD_MODIFIERS_MASK))
- {
- Modifications = boost::in_place();
-
- for (size_t i = 0; mask != 0; mask >>= 1, ++i)
- if ((mask & 1) != 0)
- Modifications->Insert(i, item->GetModifier(ItemModifier(i)));
- }
-}
-
-void WorldPackets::Item::ItemInstance::Initialize(::ItemDynamicFieldGems const* gem)
-{
- ItemID = gem->ItemId;
-
- ItemBonusInstanceData bonus;
- bonus.Context = gem->Context;
- for (uint16 bonusListId : gem->BonusListIDs)
- if (bonusListId)
- bonus.BonusListIDs.push_back(bonusListId);
-
- if (bonus.Context || !bonus.BonusListIDs.empty())
- ItemBonus = bonus;
-}
-
-void WorldPackets::Item::ItemInstance::Initialize(::LootItem const& lootItem)
-{
- ItemID = lootItem.itemid;
- RandomPropertiesSeed = lootItem.randomSuffix;
- if (lootItem.randomPropertyId.Type != ItemRandomEnchantmentType::BonusList)
- RandomPropertiesID = lootItem.randomPropertyId.Id;
-
- if (!lootItem.BonusListIDs.empty())
- {
- ItemBonus = boost::in_place();
- ItemBonus->BonusListIDs = lootItem.BonusListIDs;
- ItemBonus->Context = lootItem.context;
- }
-
- if (lootItem.upgradeId)
- {
- Modifications = boost::in_place();
- Modifications->Insert(ITEM_MODIFIER_UPGRADE_ID, lootItem.upgradeId);
- }
-}
-
-void WorldPackets::Item::ItemInstance::Initialize(::VoidStorageItem const* voidItem)
-{
- ItemID = voidItem->ItemEntry;
- RandomPropertiesSeed = voidItem->ItemSuffixFactor;
- if (voidItem->ItemRandomPropertyId.Type != ItemRandomEnchantmentType::BonusList)
- RandomPropertiesID = voidItem->ItemRandomPropertyId.Id;
-
- if (voidItem->ItemUpgradeId || voidItem->FixedScalingLevel || voidItem->ArtifactKnowledgeLevel)
- {
- Modifications = boost::in_place();
- if (voidItem->ItemUpgradeId)
- Modifications->Insert(ITEM_MODIFIER_UPGRADE_ID, voidItem->ItemUpgradeId);
- if (voidItem->FixedScalingLevel)
- Modifications->Insert(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL, voidItem->FixedScalingLevel);
- if (voidItem->ArtifactKnowledgeLevel)
- Modifications->Insert(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, voidItem->ArtifactKnowledgeLevel);
- }
-
- if (!voidItem->BonusListIDs.empty())
- {
- ItemBonus = boost::in_place();
- ItemBonus->Context = voidItem->Context;
- ItemBonus->BonusListIDs = voidItem->BonusListIDs;
- }
-}
-
-bool WorldPackets::Item::ItemInstance::operator==(ItemInstance const& r) const
-{
- if (ItemID != r.ItemID || RandomPropertiesID != r.RandomPropertiesID || RandomPropertiesSeed != r.RandomPropertiesSeed)
- return false;
-
- if (ItemBonus.is_initialized() != r.ItemBonus.is_initialized() || Modifications.is_initialized() != r.Modifications.is_initialized())
- return false;
-
- if (Modifications.is_initialized() && *Modifications != *r.Modifications)
- return false;
-
- if (ItemBonus.is_initialized() && *ItemBonus != *r.ItemBonus)
- return false;
-
- return true;
-}
-
WorldPacket const* WorldPackets::Item::InventoryChangeFailure::Write()
{
_worldPacket << int8(BagResult);
diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h
index 012e6800174..4e677814083 100644
--- a/src/server/game/Server/Packets/ItemPackets.h
+++ b/src/server/game/Server/Packets/ItemPackets.h
@@ -20,6 +20,7 @@
#include "Packet.h"
#include "Item.h"
+#include "ItemPacketsCommon.h"
#include "PacketUtilities.h"
#include "Optional.h"
@@ -29,47 +30,6 @@ namespace WorldPackets
{
namespace Item
{
- struct ItemBonusInstanceData
- {
- uint8 Context = 0;
- std::vector<int32> BonusListIDs;
-
- bool operator==(ItemBonusInstanceData const& r) const;
- bool operator!=(ItemBonusInstanceData const& r) const { return !(*this == r); }
- };
-
- struct ItemInstance
- {
- void Initialize(::Item const* item);
- void Initialize(::ItemDynamicFieldGems const* gem);
- void Initialize(::LootItem const& lootItem);
- void Initialize(::VoidStorageItem const* voidItem);
-
- uint32 ItemID = 0;
- uint32 RandomPropertiesSeed = 0;
- uint32 RandomPropertiesID = 0;
- Optional<ItemBonusInstanceData> ItemBonus;
- Optional<CompactArray<int32>> Modifications;
-
- bool operator==(ItemInstance const& r) const;
- bool operator!=(ItemInstance const& r) const { return !(*this == r); }
- };
-
- struct ItemEnchantData
- {
- ItemEnchantData(int32 id, uint32 expiration, int32 charges, uint8 slot) : ID(id), Expiration(expiration), Charges(charges), Slot(slot) { }
- int32 ID = 0;
- uint32 Expiration = 0;
- int32 Charges = 0;
- uint8 Slot = 0;
- };
-
- struct ItemGemData
- {
- uint8 Slot;
- ItemInstance Item;
- };
-
class BuyBackItem final : public ClientPacket
{
public:
@@ -242,17 +202,6 @@ namespace WorldPackets
uint8 ProficiencyClass = 0;
};
- struct InvUpdate
- {
- struct InvItem
- {
- uint8 ContainerSlot = 0;
- uint8 Slot = 0;
- };
-
- std::vector<InvItem> Items;
- };
-
class InventoryChangeFailure final : public ServerPacket
{
public:
@@ -539,17 +488,7 @@ namespace WorldPackets
ObjectGuid Item;
};
-
- ByteBuffer& operator>>(ByteBuffer& data, InvUpdate& invUpdate);
}
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceData const& itemBonusInstanceData);
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceData& itemBonusInstanceData);
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const& itemInstance);
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemInstance& itemInstance);
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemEnchantData const& itemEnchantData);
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemGemData const& itemGemInstanceData);
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemGemData& itemGemInstanceData);
-
#endif // ItemPackets_h__
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
new file mode 100644
index 00000000000..dc2a6dad65e
--- /dev/null
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2008-2017 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 "ItemPacketsCommon.h"
+#include "Item.h"
+#include "Player.h"
+
+bool WorldPackets::Item::ItemBonusInstanceData::operator==(ItemBonusInstanceData const& r) const
+{
+ if (Context != r.Context)
+ return false;
+
+ if (BonusListIDs.size() != r.BonusListIDs.size())
+ return false;
+
+ return std::is_permutation(BonusListIDs.begin(), BonusListIDs.end(), r.BonusListIDs.begin());
+}
+
+void WorldPackets::Item::ItemInstance::Initialize(::Item const* item)
+{
+ ItemID = item->GetEntry();
+ RandomPropertiesSeed = item->GetItemSuffixFactor();
+ RandomPropertiesID = item->GetItemRandomPropertyId();
+ std::vector<uint32> const& bonusListIds = item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS);
+ if (!bonusListIds.empty())
+ {
+ ItemBonus = boost::in_place();
+ ItemBonus->BonusListIDs.insert(ItemBonus->BonusListIDs.end(), bonusListIds.begin(), bonusListIds.end());
+ ItemBonus->Context = item->GetUInt32Value(ITEM_FIELD_CONTEXT);
+ }
+
+ if (uint32 mask = item->GetUInt32Value(ITEM_FIELD_MODIFIERS_MASK))
+ {
+ Modifications = boost::in_place();
+
+ for (size_t i = 0; mask != 0; mask >>= 1, ++i)
+ if ((mask & 1) != 0)
+ Modifications->Insert(i, item->GetModifier(ItemModifier(i)));
+ }
+}
+
+void WorldPackets::Item::ItemInstance::Initialize(::ItemDynamicFieldGems const* gem)
+{
+ ItemID = gem->ItemId;
+
+ ItemBonusInstanceData bonus;
+ bonus.Context = gem->Context;
+ for (uint16 bonusListId : gem->BonusListIDs)
+ if (bonusListId)
+ bonus.BonusListIDs.push_back(bonusListId);
+
+ if (bonus.Context || !bonus.BonusListIDs.empty())
+ ItemBonus = bonus;
+}
+
+void WorldPackets::Item::ItemInstance::Initialize(::LootItem const& lootItem)
+{
+ ItemID = lootItem.itemid;
+ RandomPropertiesSeed = lootItem.randomSuffix;
+ if (lootItem.randomPropertyId.Type != ItemRandomEnchantmentType::BonusList)
+ RandomPropertiesID = lootItem.randomPropertyId.Id;
+
+ if (!lootItem.BonusListIDs.empty())
+ {
+ ItemBonus = boost::in_place();
+ ItemBonus->BonusListIDs = lootItem.BonusListIDs;
+ ItemBonus->Context = lootItem.context;
+ }
+
+ if (lootItem.upgradeId)
+ {
+ Modifications = boost::in_place();
+ Modifications->Insert(ITEM_MODIFIER_UPGRADE_ID, lootItem.upgradeId);
+ }
+}
+
+void WorldPackets::Item::ItemInstance::Initialize(::VoidStorageItem const* voidItem)
+{
+ ItemID = voidItem->ItemEntry;
+ RandomPropertiesSeed = voidItem->ItemSuffixFactor;
+ if (voidItem->ItemRandomPropertyId.Type != ItemRandomEnchantmentType::BonusList)
+ RandomPropertiesID = voidItem->ItemRandomPropertyId.Id;
+
+ if (voidItem->ItemUpgradeId || voidItem->FixedScalingLevel || voidItem->ArtifactKnowledgeLevel)
+ {
+ Modifications = boost::in_place();
+ if (voidItem->ItemUpgradeId)
+ Modifications->Insert(ITEM_MODIFIER_UPGRADE_ID, voidItem->ItemUpgradeId);
+ if (voidItem->FixedScalingLevel)
+ Modifications->Insert(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL, voidItem->FixedScalingLevel);
+ if (voidItem->ArtifactKnowledgeLevel)
+ Modifications->Insert(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, voidItem->ArtifactKnowledgeLevel);
+ }
+
+ if (!voidItem->BonusListIDs.empty())
+ {
+ ItemBonus = boost::in_place();
+ ItemBonus->Context = voidItem->Context;
+ ItemBonus->BonusListIDs = voidItem->BonusListIDs;
+ }
+}
+
+bool WorldPackets::Item::ItemInstance::operator==(ItemInstance const& r) const
+{
+ if (ItemID != r.ItemID || RandomPropertiesID != r.RandomPropertiesID || RandomPropertiesSeed != r.RandomPropertiesSeed)
+ return false;
+
+ if (ItemBonus.is_initialized() != r.ItemBonus.is_initialized() || Modifications.is_initialized() != r.Modifications.is_initialized())
+ return false;
+
+ if (Modifications.is_initialized() && *Modifications != *r.Modifications)
+ return false;
+
+ if (ItemBonus.is_initialized() && *ItemBonus != *r.ItemBonus)
+ return false;
+
+ return true;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceData const& itemBonusInstanceData)
+{
+ data << uint8(itemBonusInstanceData.Context);
+ data << uint32(itemBonusInstanceData.BonusListIDs.size());
+ for (uint32 bonusID : itemBonusInstanceData.BonusListIDs)
+ data << uint32(bonusID);
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceData& itemBonusInstanceData)
+{
+ uint32 bonusListIdSize;
+
+ data >> itemBonusInstanceData.Context;
+ data >> bonusListIdSize;
+
+ for (uint32 i = 0u; i < bonusListIdSize; ++i)
+ {
+ uint32 bonusId;
+ data >> bonusId;
+ itemBonusInstanceData.BonusListIDs.push_back(bonusId);
+ }
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const& itemInstance)
+{
+ data << int32(itemInstance.ItemID);
+ data << int32(itemInstance.RandomPropertiesSeed);
+ data << int32(itemInstance.RandomPropertiesID);
+
+ data.WriteBit(itemInstance.ItemBonus.is_initialized());
+ data.WriteBit(itemInstance.Modifications.is_initialized());
+ data.FlushBits();
+
+ if (itemInstance.ItemBonus)
+ data << *itemInstance.ItemBonus;
+
+ if (itemInstance.Modifications)
+ data << *itemInstance.Modifications;
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemInstance& itemInstance)
+{
+ data >> itemInstance.ItemID;
+ data >> itemInstance.RandomPropertiesSeed;
+ data >> itemInstance.RandomPropertiesID;
+
+ bool hasItemBonus = data.ReadBit();
+ bool hasModifications = data.ReadBit();
+
+ if (hasItemBonus)
+ {
+ itemInstance.ItemBonus = boost::in_place();
+ data >> *itemInstance.ItemBonus;
+ }
+
+ if (hasModifications)
+ {
+ itemInstance.Modifications = boost::in_place();
+ data >> *itemInstance.Modifications;
+ }
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemEnchantData const& itemEnchantData)
+{
+ data << int32(itemEnchantData.ID);
+ data << uint32(itemEnchantData.Expiration);
+ data << int32(itemEnchantData.Charges);
+ data << uint8(itemEnchantData.Slot);
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemGemData const& itemGemData)
+{
+ data << uint8(itemGemData.Slot);
+ data << itemGemData.Item;
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemGemData& itemGemData)
+{
+ data >> itemGemData.Slot;
+ data >> itemGemData.Item;
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::InvUpdate& invUpdate)
+{
+ invUpdate.Items.resize(data.ReadBits(2));
+ for (size_t i = 0; i < invUpdate.Items.size(); ++i)
+ {
+ data >> invUpdate.Items[i].ContainerSlot;
+ data >> invUpdate.Items[i].Slot;
+ }
+
+ return data;
+}
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.h b/src/server/game/Server/Packets/ItemPacketsCommon.h
new file mode 100644
index 00000000000..172e9d3e25d
--- /dev/null
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2008-2017 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 ItemPacketsCommon_h__
+#define ItemPacketsCommon_h__
+
+#include "Define.h"
+#include "PacketUtilities.h"
+#include "Optional.h"
+#include <vector>
+
+class ByteBuffer;
+class Item;
+struct ItemDynamicFieldGems;
+struct LootItem;
+struct VoidStorageItem;
+
+namespace WorldPackets
+{
+ namespace Item
+ {
+ struct ItemBonusInstanceData
+ {
+ uint8 Context = 0;
+ std::vector<int32> BonusListIDs;
+
+ bool operator==(ItemBonusInstanceData const& r) const;
+ bool operator!=(ItemBonusInstanceData const& r) const { return !(*this == r); }
+ };
+
+ struct ItemInstance
+ {
+ void Initialize(::Item const* item);
+ void Initialize(::ItemDynamicFieldGems const* gem);
+ void Initialize(::LootItem const& lootItem);
+ void Initialize(::VoidStorageItem const* voidItem);
+
+ uint32 ItemID = 0;
+ uint32 RandomPropertiesSeed = 0;
+ uint32 RandomPropertiesID = 0;
+ Optional<ItemBonusInstanceData> ItemBonus;
+ Optional<CompactArray<int32>> Modifications;
+
+ bool operator==(ItemInstance const& r) const;
+ bool operator!=(ItemInstance const& r) const { return !(*this == r); }
+ };
+
+ struct ItemEnchantData
+ {
+ ItemEnchantData(int32 id, uint32 expiration, int32 charges, uint8 slot) : ID(id), Expiration(expiration), Charges(charges), Slot(slot) { }
+ int32 ID = 0;
+ uint32 Expiration = 0;
+ int32 Charges = 0;
+ uint8 Slot = 0;
+ };
+
+ struct ItemGemData
+ {
+ uint8 Slot;
+ ItemInstance Item;
+ };
+
+ struct InvUpdate
+ {
+ struct InvItem
+ {
+ uint8 ContainerSlot = 0;
+ uint8 Slot = 0;
+ };
+
+ std::vector<InvItem> Items;
+ };
+ }
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceData const& itemBonusInstanceData);
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceData& itemBonusInstanceData);
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const& itemInstance);
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemInstance& itemInstance);
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemEnchantData const& itemEnchantData);
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemGemData const& itemGemInstanceData);
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemGemData& itemGemInstanceData);
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::InvUpdate& invUpdate);
+
+#endif // ItemPacketsCommon_h__
diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp
index a5078efdf5a..4ec8178035c 100644
--- a/src/server/game/Server/Packets/LFGPackets.cpp
+++ b/src/server/game/Server/Packets/LFGPackets.cpp
@@ -16,23 +16,3 @@
*/
#include "LFGPackets.h"
-
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket)
-{
- data >> ticket.RequesterGuid;
- data >> ticket.Id;
- data >> ticket.Type;
- data >> ticket.Time;
-
- return data;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::RideTicket const& ticket)
-{
- data << ticket.RequesterGuid;
- data << int32(ticket.Id);
- data << int32(ticket.Type);
- data << uint32(ticket.Time);
-
- return data;
-}
diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h
index 009018a43a0..18b8ef8620a 100644
--- a/src/server/game/Server/Packets/LFGPackets.h
+++ b/src/server/game/Server/Packets/LFGPackets.h
@@ -18,23 +18,14 @@
#ifndef LFGPackets_h__
#define LFGPackets_h__
-#include "ObjectGuid.h"
+#include "Packet.h"
+#include "LFGPacketsCommon.h"
namespace WorldPackets
{
namespace LFG
{
- struct RideTicket
- {
- ObjectGuid RequesterGuid;
- int32 Id = 0;
- int32 Type = 0;
- uint32 Time = 0;
- };
}
}
-ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket);
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::RideTicket const& ticket);
-
#endif // LFGPackets_h__
diff --git a/src/server/game/Server/Packets/LFGPacketsCommon.cpp b/src/server/game/Server/Packets/LFGPacketsCommon.cpp
new file mode 100644
index 00000000000..71af239d5aa
--- /dev/null
+++ b/src/server/game/Server/Packets/LFGPacketsCommon.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008-2017 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 "LFGPacketsCommon.h"
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket)
+{
+ data >> ticket.RequesterGuid;
+ data >> ticket.Id;
+ data >> ticket.Type;
+ data >> ticket.Time;
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::RideTicket const& ticket)
+{
+ data << ticket.RequesterGuid;
+ data << int32(ticket.Id);
+ data << int32(ticket.Type);
+ data << uint32(ticket.Time);
+
+ return data;
+}
diff --git a/src/server/game/Server/Packets/LFGPacketsCommon.h b/src/server/game/Server/Packets/LFGPacketsCommon.h
new file mode 100644
index 00000000000..957ed07f161
--- /dev/null
+++ b/src/server/game/Server/Packets/LFGPacketsCommon.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2008-2017 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 LFGPacketsCommon_h__
+#define LFGPacketsCommon_h__
+
+#include "Packet.h"
+#include "ObjectGuid.h"
+
+namespace WorldPackets
+{
+ namespace LFG
+ {
+ struct RideTicket
+ {
+ ObjectGuid RequesterGuid;
+ int32 Id = 0;
+ int32 Type = 0;
+ uint32 Time = 0;
+ };
+ }
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket);
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::RideTicket const& ticket);
+
+#endif // LFGPacketsCommon_h__
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 4880b750319..f3c5b1467d8 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -16,7 +16,7 @@
*/
#include "MiscPackets.h"
-#include "PacketUtilities.h"
+#include "Common.h"
WorldPacket const* WorldPackets::Misc::BindPointUpdate::Write()
{
@@ -467,12 +467,10 @@ WorldPacket const* WorldPackets::Misc::Dismount::Write()
void WorldPackets::Misc::SaveCUFProfiles::Read()
{
- uint32 count;
- _worldPacket >> count;
-
- for (uint8 i = 0; i < count && i < MAX_CUF_PROFILES; i++)
+ CUFProfiles.resize(_worldPacket.read<uint32>());
+ for (std::unique_ptr<CUFProfile>& cufProfile : CUFProfiles)
{
- std::unique_ptr<CUFProfile> cufProfile = Trinity::make_unique<CUFProfile>();
+ cufProfile = Trinity::make_unique<CUFProfile>();
uint8 strLen = _worldPacket.ReadBits(7);
@@ -496,8 +494,6 @@ void WorldPackets::Misc::SaveCUFProfiles::Read()
_worldPacket >> cufProfile->LeftOffset;
cufProfile->ProfileName = _worldPacket.ReadString(strLen);
-
- CUFProfiles.push_back(std::move(cufProfile));
}
}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 9617cc4b1e1..c4f05ff3b89 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -19,14 +19,20 @@
#define MiscPackets_h__
#include "Packet.h"
-#include "ObjectGuid.h"
-#include "WorldSession.h"
-#include "Object.h"
-#include "Unit.h"
-#include "Player.h"
-#include "Weather.h"
#include "CollectionMgr.h"
+#include "CUFProfile.h"
+#include "ObjectGuid.h"
+#include "Optional.h"
#include "PacketUtilities.h"
+#include "Position.h"
+#include "SharedDefines.h"
+#include <array>
+#include <map>
+#include <set>
+
+enum MountStatusFlags : uint8;
+enum UnitStandStateType : uint8;
+enum WeatherState : uint32;
namespace WorldPackets
{
@@ -39,7 +45,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- uint32 BindMapID = MAPID_INVALID;
+ uint32 BindMapID = 0;
TaggedPosition<Position::XYZ> BindPosition;
uint32 BindAreaID = 0;
};
@@ -387,7 +393,7 @@ namespace WorldPackets
bool Abrupt = false;
float Intensity = 0.0f;
- WeatherState WeatherID = WEATHER_STATE_FINE;
+ WeatherState WeatherID = WeatherState(0);
};
class StandStateChange final : public ClientPacket
@@ -397,7 +403,7 @@ namespace WorldPackets
void Read() override;
- UnitStandStateType StandState = UNIT_STAND_STATE_STAND;
+ UnitStandStateType StandState = UnitStandStateType(0);
};
class StandStateUpdate final : public ServerPacket
@@ -409,7 +415,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint32 AnimKitID = 0;
- UnitStandStateType State = UNIT_STAND_STATE_STAND;
+ UnitStandStateType State = UnitStandStateType(0);
};
class StartMirrorTimer final : public ServerPacket
@@ -783,7 +789,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
bool IsFullUpdate = false;
- HeirloomContainer const* Heirlooms = nullptr;
+ std::map<uint32, HeirloomData> const* Heirlooms = nullptr;
int32 Unk = 0;
};
diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h
index a7e73465949..44a4e22a74e 100644
--- a/src/server/game/Server/Packets/PacketUtilities.h
+++ b/src/server/game/Server/Packets/PacketUtilities.h
@@ -122,7 +122,7 @@ namespace WorldPackets
}
uint32 GetMask() const { return _mask; }
- T const& operator[](std::size_t index) const { return _contents.at(index); }
+ T const& operator[](std::size_t index) const { return _contents[index]; }
std::size_t GetSize() const { return _contents.size(); }
void Insert(std::size_t index, T const& value)
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index 6d5657d80b6..c4974e77f6e 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -16,12 +16,13 @@
*/
#include "PartyPackets.h"
-
-#include "Player.h"
#include "Pet.h"
-#include "Vehicle.h"
-#include "SpellAuras.h"
+#include "Player.h"
+#include "Realm.h"
#include "SpellAuraEffects.h"
+#include "SpellAuras.h"
+#include "Vehicle.h"
+#include "World.h"
WorldPacket const* WorldPackets::Party::PartyCommandResult::Write()
{
diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h
index 6e5787f1a7f..0a8fb5e7c06 100644
--- a/src/server/game/Server/Packets/PetPackets.h
+++ b/src/server/game/Server/Packets/PetPackets.h
@@ -21,6 +21,7 @@
#include "Packet.h"
#include "PacketUtilities.h"
#include "ObjectGuid.h"
+#include "Optional.h"
#include "Unit.h"
#include "WorldSession.h"
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index e57864f077b..88e9a24b030 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -18,7 +18,6 @@
#include "QueryPackets.h"
#include "BattlenetAccountMgr.h"
#include "Player.h"
-#include "PacketUtilities.h"
#include "World.h"
#include "ObjectMgr.h"
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index d0af1e0043d..3d2aeca3610 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -23,6 +23,7 @@
#include "Player.h"
#include "SpellAuras.h"
#include "Spell.h"
+#include "Optional.h"
namespace WorldPackets
{
diff --git a/src/server/game/Server/Packets/TaxiPackets.h b/src/server/game/Server/Packets/TaxiPackets.h
index c9d7ba8e061..0acba3d2f73 100644
--- a/src/server/game/Server/Packets/TaxiPackets.h
+++ b/src/server/game/Server/Packets/TaxiPackets.h
@@ -1,19 +1,19 @@
/*
-* Copyright (C) 2008-2017 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/>.
-*/
+ * Copyright (C) 2008-2017 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 TaxiPackets_h__
#define TaxiPackets_h__
diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp
index 9f1197b97df..cc60c57e908 100644
--- a/src/server/game/Server/Packets/TicketPackets.cpp
+++ b/src/server/game/Server/Packets/TicketPackets.cpp
@@ -15,13 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "LFGPackets.h"
#include "TicketPackets.h"
#include "PacketUtilities.h"
#include "SupportMgr.h"
-using namespace WorldPackets;
-
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketHeader& header)
{
data >> header.MapID;
diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h
index 048e387c046..b8c02a555b0 100644
--- a/src/server/game/Server/Packets/TicketPackets.h
+++ b/src/server/game/Server/Packets/TicketPackets.h
@@ -19,7 +19,7 @@
#define TicketPackets_h__
#include "Packet.h"
-#include "LFGPackets.h"
+#include "LFGPacketsCommon.h"
#include "Optional.h"
#include "Position.h"
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 5d8a6a7c14c..b9ac5fa4020 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -280,24 +280,24 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode);
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode);
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageWhisperOpcode);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_ANNOUNCEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand<&Channel::Announce>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_BAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::Ban>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_DECLINE_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand<&Channel::DeclineInvite>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_DISPLAY_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand<&Channel::List>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::Invite>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_KICK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::Kick>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand<&Channel::List>);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_ANNOUNCEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_BAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_DECLINE_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_DISPLAY_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_KICK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand);
DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::SetModerator>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MUTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::SetMute>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand<&Channel::SendWhoOwner>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_PASSWORD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::Password>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_SET_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::SetOwner>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_SILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::SilenceAll>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNBAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::UnBan>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::UnsetModerator>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMUTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::UnsetMute>);
- DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNSILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand<&Channel::UnsilenceAll>);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MUTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_PASSWORD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPassword);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_SET_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_SILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNBAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMUTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
+ DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNSILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand);
DEFINE_HANDLER(CMSG_CHAT_JOIN_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleJoinChannel);
DEFINE_HANDLER(CMSG_CHAT_LEAVE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveChannel);
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatMessageAFKOpcode);
diff --git a/src/server/game/Server/Protocol/PacketLog.cpp b/src/server/game/Server/Protocol/PacketLog.cpp
index d32ea43bfc2..7f0ffed44f2 100644
--- a/src/server/game/Server/Protocol/PacketLog.cpp
+++ b/src/server/game/Server/Protocol/PacketLog.cpp
@@ -17,9 +17,11 @@
#include "PacketLog.h"
#include "Config.h"
-#include "WorldPacket.h"
+#include "Realm.h"
#include "Timer.h"
#include "World.h"
+#include "WorldPacket.h"
+#include <boost/asio/ip/address.hpp>
#pragma pack(push, 1)
@@ -89,19 +91,21 @@ void PacketLog::Initialize()
{
_file = fopen((logsDir + logname).c_str(), "wb");
- LogHeader header;
- header.Signature[0] = 'P'; header.Signature[1] = 'K'; header.Signature[2] = 'T';
- header.FormatVersion = 0x0301;
- header.SnifferId = 'T';
- header.Build = realm.Build;
- header.Locale[0] = 'e'; header.Locale[1] = 'n'; header.Locale[2] = 'U'; header.Locale[3] = 'S';
- std::memset(header.SessionKey, 0, sizeof(header.SessionKey));
- header.SniffStartUnixtime = time(NULL);
- header.SniffStartTicks = getMSTime();
- header.OptionalDataSize = 0;
-
if (CanLogPacket())
+ {
+ LogHeader header;
+ header.Signature[0] = 'P'; header.Signature[1] = 'K'; header.Signature[2] = 'T';
+ header.FormatVersion = 0x0301;
+ header.SnifferId = 'T';
+ header.Build = realm.Build;
+ header.Locale[0] = 'e'; header.Locale[1] = 'n'; header.Locale[2] = 'U'; header.Locale[3] = 'S';
+ std::memset(header.SessionKey, 0, sizeof(header.SessionKey));
+ header.SniffStartUnixtime = time(NULL);
+ header.SniffStartTicks = getMSTime();
+ header.OptionalDataSize = 0;
+
fwrite(&header, sizeof(header), 1, _file);
+ }
}
}
diff --git a/src/server/game/Server/Protocol/PacketLog.h b/src/server/game/Server/Protocol/PacketLog.h
index acf5efe0ee5..2d7b1c1b1bc 100644
--- a/src/server/game/Server/Protocol/PacketLog.h
+++ b/src/server/game/Server/Protocol/PacketLog.h
@@ -19,9 +19,6 @@
#define TRINITY_PACKETLOG_H
#include "Common.h"
-#include "Opcodes.h"
-
-#include <boost/asio/ip/address.hpp>
#include <mutex>
enum Direction
@@ -31,6 +28,18 @@ enum Direction
};
class WorldPacket;
+enum ConnectionType : int8;
+
+namespace boost
+{
+ namespace asio
+ {
+ namespace ip
+ {
+ class address;
+ }
+ }
+}
class TC_GAME_API PacketLog
{
diff --git a/src/server/game/Server/WorldPacket.h b/src/server/game/Server/WorldPacket.h
index 11f72160067..a6c9ffe2ba0 100644
--- a/src/server/game/Server/WorldPacket.h
+++ b/src/server/game/Server/WorldPacket.h
@@ -19,9 +19,8 @@
#ifndef TRINITYCORE_WORLDPACKET_H
#define TRINITYCORE_WORLDPACKET_H
-#include "Common.h"
-#include "Opcodes.h"
#include "ByteBuffer.h"
+#include "Opcodes.h"
class WorldPacket : public ByteBuffer
{
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 8f1f87bcf18..2bcb75f4b4f 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -20,43 +20,34 @@
\ingroup u2w
*/
-#include "WorldSocket.h"
-#include "Config.h"
-#include "Common.h"
-#include "DatabaseEnv.h"
-#include "QueryCallback.h"
+#include "WorldSession.h"
#include "QueryHolder.h"
#include "AccountMgr.h"
-#include "Log.h"
-#include "Opcodes.h"
-#include "WorldPacket.h"
-#include "WorldSession.h"
-#include "Player.h"
-#include "Vehicle.h"
-#include "ObjectMgr.h"
-#include "GuildMgr.h"
-#include "Group.h"
-#include "Guild.h"
-#include "World.h"
-#include "ObjectAccessor.h"
-#include "BattlegroundMgr.h"
-#include "OutdoorPvPMgr.h"
-#include "SocialMgr.h"
-#include "ScriptMgr.h"
-#include "WardenWin.h"
#include "AuthenticationPackets.h"
+#include "BattlePetMgr.h"
+#include "BattlegroundMgr.h"
#include "BattlenetPackets.h"
#include "CharacterPackets.h"
-#include "ClientConfigPackets.h"
-#include "MiscPackets.h"
#include "ChatPackets.h"
-#include "BattlePetMgr.h"
-#include "PacketUtilities.h"
-#include "CollectionMgr.h"
+#include "DatabaseEnv.h"
+#include "Group.h"
+#include "Guild.h"
+#include "GuildMgr.h"
#include "Metric.h"
+#include "MiscPackets.h"
+#include "ObjectMgr.h"
+#include "OutdoorPvPMgr.h"
+#include "PacketUtilities.h"
+#include "Player.h"
+#include "QueryHolder.h"
#include "Random.h"
-
-#include <zlib.h>
+#include "RBAC.h"
+#include "Realm.h"
+#include "ScriptMgr.h"
+#include "SocialMgr.h"
+#include "WardenWin.h"
+#include "World.h"
+#include "WorldSocket.h"
namespace {
@@ -697,6 +688,11 @@ char const* WorldSession::GetTrinityString(uint32 entry) const
return sObjectMgr->GetTrinityString(entry, GetSessionDbLocaleIndex());
}
+void WorldSession::ResetTimeOutTime()
+{
+ m_timeOutTime = int32(sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME));
+}
+
void WorldSession::Handle_NULL(WorldPackets::Null& null)
{
TC_LOG_ERROR("network.opcode", "Received unhandled opcode %s from %s", GetOpcodeNameForLogging(null.GetOpcode()).c_str(), GetPlayerInfo().c_str());
@@ -1387,3 +1383,7 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) co
return maxPacketCounterAllowed;
}
+
+WorldSession::DosProtection::DosProtection(WorldSession* s) : Session(s), _policy((Policy)sWorld->getIntConfig(CONFIG_PACKET_SPOOF_POLICY))
+{
+}
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 20999763fcb..8b4c5e99743 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -24,39 +24,36 @@
#define __WORLDSESSION_H
#include "Common.h"
-#include "SharedDefines.h"
-#include "DatabaseEnv.h"
-#include "World.h"
+#include "DatabaseEnvFwd.h"
+#include "LockedQueue.h"
+#include "ObjectGuid.h"
#include "Packet.h"
-#include "Cryptography/BigNumber.h"
-#include "AccountMgr.h"
+#include "QueryCallbackProcessor.h"
+#include "SharedDefines.h"
+#include <array>
+#include <set>
+#include <unordered_map>
#include <unordered_set>
class BattlePetMgr;
-class Channel;
+class BigNumber;
+class BlackMarketEntry;
class CollectionMgr;
class Creature;
-class BlackMarketEntry;
-class GameObject;
class InstanceSave;
class Item;
class LoginQueryHolder;
-class Object;
class Player;
-class Quest;
-class SpellCastTargets;
class Unit;
class Warden;
-class WorldPacket;
class WorldSession;
class WorldSocket;
-struct AreaTableEntry;
struct AuctionEntry;
+struct BlackMarketTemplate;
struct DeclinedName;
struct ItemTemplate;
struct MovementInfo;
struct Position;
-struct BlackMarketTemplate;
namespace lfg
{
@@ -233,7 +230,9 @@ namespace WorldPackets
namespace Channel
{
+ class ChannelCommand;
class ChannelPlayerCommand;
+ class ChannelPassword;
class JoinChannel;
class LeaveChannel;
}
@@ -771,41 +770,6 @@ enum AccountDataType
#define GLOBAL_CACHE_MASK 0x15
#define PER_CHARACTER_CACHE_MASK 0xEA
-enum TutorialAction : uint8
-{
- TUTORIAL_ACTION_UPDATE = 0,
- TUTORIAL_ACTION_CLEAR = 1,
- TUTORIAL_ACTION_RESET = 2
-};
-
-/*
-enum Tutorials
-{
- TUTORIAL_TALENT = 0,
- TUTORIAL_SPEC = 1,
- TUTORIAL_GLYPH = 2,
- TUTORIAL_SPELLBOOK = 3,
- TUTORIAL_PROFESSIONS = 4,
- TUTORIAL_CORE_ABILITITES = 5,
- TUTORIAL_PET_JOURNAL = 6,
- TUTORIAL_WHAT_HAS_CHANGED = 7,
- TUTORIAL_GARRISON_BUILDING = 8,
- TUTORIAL_GARRISON_MISSION_LIST = 9,
- TUTORIAL_GARRISON_MISSION_PAGE = 10,
- TUTORIAL_GARRISON_LANDING = 11,
- TUTORIAL_GARRISON_ZONE_ABILITY = 12,
- TUTORIAL_WORLD_MAP_FRAME = 13,
- TUTORIAL_CLEAN_UP_BAGS = 14,
- TUTORIAL_BAG_SETTINGS = 15,
- TUTORIAL_REAGENT_BANK_UNLOCK = 16,
- TUTORIAL_TOYBOX_FAVORITE = 17,
- TUTORIAL_TOYBOX_MOUSEWHEEL_PAGING = 18,
- TUTORIAL_LFG_LIST = 19
-};
-*/
-
-#define MAX_ACCOUNT_TUTORIAL_VALUES 8
-
struct AccountData
{
time_t Time = 0;
@@ -862,9 +826,6 @@ enum DeclinedNameResult
DECLINED_NAMES_RESULT_ERROR = 1
};
-#define DB2_REPLY_SPARSE 2442913102
-#define DB2_REPLY_ITEM 1344507586
-
//class to deal with packet processing
//allows to determine if next packet is safe to be processed
class PacketFilter
@@ -1108,10 +1069,7 @@ class TC_GAME_API WorldSession
m_timeOutTime -= int32(diff);
}
- void ResetTimeOutTime()
- {
- m_timeOutTime = int32(sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME));
- }
+ void ResetTimeOutTime();
bool IsConnectionIdle() const
{
@@ -1516,12 +1474,9 @@ class TC_GAME_API WorldSession
void HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet);
void HandleLeaveChannel(WorldPackets::Channel::LeaveChannel& packet);
-
- template<void(Channel::*CommandFunction)(Player const*)>
- void HandleChannelCommand(WorldPackets::Channel::ChannelPlayerCommand& packet);
-
- template<void(Channel::*CommandFunction)(Player const*, std::string const&)>
+ void HandleChannelCommand(WorldPackets::Channel::ChannelCommand& packet);
void HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlayerCommand& packet);
+ void HandleChannelPassword(WorldPackets::Channel::ChannelPassword& channelPassword);
void HandleCompleteCinematic(WorldPackets::Misc::CompleteCinematic& packet);
void HandleNextCinematicCamera(WorldPackets::Misc::NextCinematicCamera& packet);
@@ -1787,7 +1742,7 @@ class TC_GAME_API WorldSession
{
friend class World;
public:
- DosProtection(WorldSession* s) : Session(s), _policy((Policy)sWorld->getIntConfig(CONFIG_PACKET_SPOOF_POLICY)) { }
+ DosProtection(WorldSession* s);
bool EvaluateOpcode(WorldPacket& p, time_t time) const;
protected:
enum Policy
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 8069220d270..1b0d7b7174a 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -19,19 +19,20 @@
#include "WorldSocket.h"
#include "AuthenticationPackets.h"
#include "BattlenetRpcErrorCodes.h"
-#include "BigNumber.h"
#include "CharacterPackets.h"
+#include "DatabaseEnv.h"
+#include "Errors.h"
#include "HmacHash.h"
-#include "Opcodes.h"
#include "PacketLog.h"
-#include "QueryCallback.h"
+#include "Realm.h"
+#include "RBAC.h"
#include "ScriptMgr.h"
#include "SessionKeyGeneration.h"
#include "SHA256.h"
#include "World.h"
-
+#include "WorldPacket.h"
+#include "WorldSession.h"
#include <zlib.h>
-#include <memory>
#pragma pack(push, 1)
@@ -42,6 +43,8 @@ struct CompressedWorldPacket
uint32 CompressedAdler;
};
+#pragma pack(pop)
+
class EncryptablePacket : public WorldPacket
{
public:
@@ -53,8 +56,6 @@ private:
bool _encrypt;
};
-#pragma pack(pop)
-
using boost::asio::ip::tcp;
std::string const WorldSocket::ServerConnectionInitialize("WORLD OF WARCRAFT CONNECTION - SERVER TO CLIENT");
@@ -995,3 +996,8 @@ bool WorldSocket::HandlePing(WorldPackets::Auth::Ping& ping)
SendPacketAndLogOpcode(*WorldPackets::Auth::Pong(ping.Serial).Write());
return true;
}
+
+bool PacketHeader::IsValidOpcode()
+{
+ return Command < NUM_OPCODE_HANDLERS;
+}
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index 337ef055e2a..57a1f05142b 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -20,19 +20,23 @@
#define __WORLDSOCKET_H__
#include "Common.h"
+#include "BigNumber.h"
+#include "DatabaseEnvFwd.h"
+#include "MessageBuffer.h"
#include "QueryCallbackProcessor.h"
-#include "WorldPacketCrypt.h"
#include "Socket.h"
-#include "Util.h"
-#include "WorldPacket.h"
-#include "WorldSession.h"
+#include "WorldPacketCrypt.h"
#include "MPSCQueue.h"
#include <chrono>
-#include <boost/asio/ip/tcp.hpp>
+#include <functional>
+#include <mutex>
-using boost::asio::ip::tcp;
-struct z_stream_s;
+typedef struct z_stream_s z_stream;
class EncryptablePacket;
+class WorldPacket;
+class WorldSession;
+enum ConnectionType : int8;
+enum OpcodeClient : uint32;
namespace WorldPackets
{
@@ -54,7 +58,7 @@ struct PacketHeader
uint16 Command;
bool IsValidSize() { return Size < 0x10000; }
- bool IsValidOpcode() { return Command < NUM_OPCODE_HANDLERS; }
+ bool IsValidOpcode();
};
#pragma pack(pop)
@@ -72,7 +76,7 @@ class TC_GAME_API WorldSocket : public Socket<WorldSocket>
typedef Socket<WorldSocket> BaseSocket;
public:
- WorldSocket(tcp::socket&& socket);
+ WorldSocket(boost::asio::ip::tcp::socket&& socket);
~WorldSocket();
WorldSocket(WorldSocket const& right) = delete;
@@ -145,7 +149,7 @@ private:
MPSCQueue<EncryptablePacket> _bufferQueue;
std::size_t _sendBufferSize;
- z_stream_s* _compressionStream;
+ z_stream* _compressionStream;
QueryCallbackProcessor _queryProcessor;
std::string _ipCountry;
diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp
index 42f34245adc..1fda984f969 100644
--- a/src/server/game/Server/WorldSocketMgr.cpp
+++ b/src/server/game/Server/WorldSocketMgr.cpp
@@ -16,12 +16,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "WorldSocketMgr.h"
#include "Config.h"
#include "NetworkThread.h"
#include "ScriptMgr.h"
#include "WorldSocket.h"
-#include "WorldSocketMgr.h"
-
+#include "World.h"
#include <boost/system/error_code.hpp>
static void OnSocketAccept(tcp::socket&& sock, uint32 threadIndex)