aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-06-07 19:56:40 +0200
committerShauren <shauren.trinity@gmail.com>2016-06-07 19:56:40 +0200
commit6226f04cafbcecb5b936cdb320b5bc05db3e4369 (patch)
treef3982dbc46ed43e1ed3816f0a730c78b4bc4324d /src/server/game/Server
parent737469cfaaaf45fe700ae8a9673015b88afd0b00 (diff)
Core/PacketIO: Updated query opcodes
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h1
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp105
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h20
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp18
5 files changed, 81 insertions, 65 deletions
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 4da78116d90..16b3b98646f 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -511,7 +511,7 @@ WorldPacket const* WorldPackets::Movement::MoveTeleport::Write()
_worldPacket << uint32(SequenceIndex);
_worldPacket << Pos.PositionXYZStream();
_worldPacket << float(Facing);
- _worldPacket << uint8(0); //! New in 7.x (gets written into movement queue node)
+ _worldPacket << uint8(PreloadWorld);
_worldPacket.WriteBit(Vehicle.is_initialized());
_worldPacket.WriteBit(TransportGUID.is_initialized());
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 8a89dba4c79..7b56074db28 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -255,6 +255,7 @@ namespace WorldPackets
ObjectGuid MoverGUID;
Optional<ObjectGuid> TransportGUID;
float Facing = 0.0f;
+ uint8 PreloadWorld = 0;
};
struct MovementForce
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index aeaf43e6e8a..aa7a970d125 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -18,6 +18,7 @@
#include "QueryPackets.h"
#include "BattlenetAccountMgr.h"
#include "Player.h"
+#include "PacketUtilities.h"
#include "World.h"
#include "ObjectMgr.h"
@@ -58,24 +59,23 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
for (uint8 i = 0; i < 2; ++i)
_worldPacket << Stats.Flags[i];
- _worldPacket << Stats.CreatureType;
- _worldPacket << Stats.CreatureFamily;
- _worldPacket << Stats.Classification;
+ _worldPacket << int32(Stats.CreatureType);
+ _worldPacket << int32(Stats.CreatureFamily);
+ _worldPacket << int32(Stats.Classification);
for (uint32 i = 0; i < MAX_KILL_CREDIT; ++i)
- _worldPacket << Stats.ProxyCreatureID[i];
+ _worldPacket << int32(Stats.ProxyCreatureID[i]);
for (uint32 i = 0; i < MAX_CREATURE_MODELS; ++i)
- _worldPacket << Stats.CreatureDisplayID[i];
-
- _worldPacket << Stats.HpMulti;
- _worldPacket << Stats.EnergyMulti;
-
- _worldPacket << int32(Stats.QuestItems.size());
- _worldPacket << Stats.CreatureMovementInfoID;
- _worldPacket << Stats.RequiredExpansion;
+ _worldPacket << int32(Stats.CreatureDisplayID[i]);
+ _worldPacket << float(Stats.HpMulti);
+ _worldPacket << float(Stats.EnergyMulti);
+ _worldPacket << uint32(Stats.QuestItems.size());
+ _worldPacket << int32(Stats.CreatureMovementInfoID);
+ _worldPacket << int32(Stats.RequiredExpansion);
_worldPacket << int32(0); // FlagQuest
+ _worldPacket << int32(0);
if (!Stats.Title.empty())
_worldPacket << Stats.Title;
@@ -196,6 +196,21 @@ void WorldPackets::Query::QueryPageText::Read()
_worldPacket >> ItemGUID;
}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::QueryPageTextResponse::PageTextInfo const& page)
+{
+ data << uint32(page.ID);
+ data << uint32(page.NextPageID);
+ data << int32(page.PlayerConditionID);
+ data << uint8(page.Flags);
+ data.WriteBits(page.Text.length(), 12);
+ data.FlushBits();
+
+ data.WriteString(page.Text);
+
+ return data;
+}
+
WorldPacket const* WorldPackets::Query::QueryPageTextResponse::Write()
{
_worldPacket << PageTextID;
@@ -205,12 +220,9 @@ WorldPacket const* WorldPackets::Query::QueryPageTextResponse::Write()
if (Allow)
{
- _worldPacket << Info.ID;
- _worldPacket << Info.NextPageID;
- _worldPacket.WriteBits(Info.Text.length(), 12);
- _worldPacket.FlushBits();
-
- _worldPacket.WriteString(Info.Text);
+ _worldPacket << uint32(Pages.size());
+ for (PageTextInfo const& pageText : Pages)
+ _worldPacket << pageText;
}
return &_worldPacket;
@@ -293,43 +305,47 @@ WorldPacket const* WorldPackets::Query::QueryGameObjectResponse::Write()
_worldPacket.WriteBit(Allow);
_worldPacket.FlushBits();
+ ByteBuffer statsData;
if (Allow)
{
- uint32 dataSize = Stats.GetDataSize();
-
- _worldPacket << uint32(dataSize);
- if (dataSize)
- {
- _worldPacket << Stats.Type;
- _worldPacket << Stats.DisplayID;
- for (int8 i = 0; i < 4; i++)
- _worldPacket << Stats.Name[i];
-
- _worldPacket << Stats.IconName;
- _worldPacket << Stats.CastBarCaption;
- _worldPacket << Stats.UnkString;
+ statsData << int32(Stats.Type);
+ statsData << int32(Stats.DisplayID);
+ for (int8 i = 0; i < 4; ++i)
+ statsData << Stats.Name[i];
- for (uint32 i = 0; i < MAX_GAMEOBJECT_DATA; i++)
- _worldPacket << Stats.Data[i];
+ statsData << Stats.IconName;
+ statsData << Stats.CastBarCaption;
+ statsData << Stats.UnkString;
- _worldPacket << Stats.Size;
+ for (uint32 i = 0; i < MAX_GAMEOBJECT_DATA; ++i)
+ statsData << int32(Stats.Data[i]);
- _worldPacket << uint8(Stats.QuestItems.size());
- for (int32 questItem : Stats.QuestItems)
- _worldPacket << questItem;
+ statsData << float(Stats.Size);
+ statsData << uint8(Stats.QuestItems.size());
+ for (int32 questItem : Stats.QuestItems)
+ statsData << int32(questItem);
- _worldPacket << Stats.Expansion;
- }
+ statsData << int32(Stats.Expansion);
}
+ _worldPacket << uint32(statsData.size());
+ if (!statsData.empty())
+ _worldPacket.append(statsData);
+
return &_worldPacket;
}
+void WorldPackets::Query::QueryCorpseLocationFromClient::Read()
+{
+ _worldPacket >> Player;
+}
+
WorldPacket const* WorldPackets::Query::CorpseLocation::Write()
{
_worldPacket.WriteBit(Valid);
_worldPacket.FlushBits();
+ _worldPacket << Player;
_worldPacket << ActualMapID;
_worldPacket << Position.x;
_worldPacket << Position.y;
@@ -342,14 +358,14 @@ WorldPacket const* WorldPackets::Query::CorpseLocation::Write()
void WorldPackets::Query::QueryCorpseTransport::Read()
{
+ _worldPacket >> Player;
_worldPacket >> Transport;
}
WorldPacket const* WorldPackets::Query::CorpseTransportQuery::Write()
{
- _worldPacket << Position.x;
- _worldPacket << Position.y;
- _worldPacket << Position.z;
+ _worldPacket << Player;
+ _worldPacket << Position;
_worldPacket << Facing;
return &_worldPacket;
@@ -357,8 +373,7 @@ WorldPacket const* WorldPackets::Query::CorpseTransportQuery::Write()
WorldPacket const* WorldPackets::Query::QueryTimeResponse::Write()
{
- _worldPacket << uint32(CurrentTime);
- _worldPacket << int32(TimeOutRequest);
+ _worldPacket << int32(CurrentTime);
return &_worldPacket;
}
@@ -483,8 +498,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::ItemTextCache cons
WorldPacket const* WorldPackets::Query::QueryItemTextResponse::Write()
{
_worldPacket.WriteBit(Valid);
- _worldPacket << Id;
_worldPacket << Item;
+ _worldPacket << Id;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index 10a8924477f..2d6e488e4be 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -140,12 +140,14 @@ namespace WorldPackets
{
uint32 ID = 0;
uint32 NextPageID = 0;
+ int32 PlayerConditionID = 0;
+ uint8 Flags = 0;
std::string Text;
};
- bool Allow = false;
- PageTextInfo Info;
uint32 PageTextID = 0;
+ bool Allow = false;
+ std::vector<PageTextInfo> Pages;
};
class QueryNPCText final : public ClientPacket
@@ -236,12 +238,6 @@ namespace WorldPackets
float Size = 0.0f;
std::vector<int32> QuestItems;
uint32 Expansion = 0;
-
- size_t GetDataSize() const
- {
- // [1..3] always empty '\0' '\0' '\0' '\0' QuestItems counter
- return sizeof(Type) + sizeof(DisplayID) + (Name->size() + (4 * 1)) + (IconName.size() + 1) + (CastBarCaption.size() + 1) + (UnkString.size() + 1) + sizeof(Data) + sizeof(Size) + sizeof(uint8) + (QuestItems.size() * sizeof(int32)) + sizeof(Expansion);
- }
};
class QueryGameObjectResponse final : public ServerPacket
@@ -261,7 +257,9 @@ namespace WorldPackets
public:
QueryCorpseLocationFromClient(WorldPacket&& packet) : ClientPacket(CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT, std::move(packet)) { }
- void Read() override { }
+ void Read() override;
+
+ ObjectGuid Player;
};
class CorpseLocation final : public ServerPacket
@@ -271,6 +269,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
+ ObjectGuid Player;
ObjectGuid Transport;
G3D::Vector3 Position;
int32 ActualMapID = 0;
@@ -285,6 +284,7 @@ namespace WorldPackets
void Read() override;
+ ObjectGuid Player;
ObjectGuid Transport;
};
@@ -295,6 +295,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
+ ObjectGuid Player;
G3D::Vector3 Position;
float Facing = 0.0f;
};
@@ -315,7 +316,6 @@ namespace WorldPackets
WorldPacket const* Write() override;
time_t CurrentTime = time_t(0);
- int32 TimeOutRequest = 0;
};
class QuestPOIQuery final : public ClientPacket
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 6519bd63cf1..ca6f86e8a18 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -579,8 +579,8 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_PUSH_QUEST_TO_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::PushQuestToParty, &WorldSession::HandlePushQuestToParty);
DEFINE_HANDLER(CMSG_PVP_LOG_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Battleground::PVPLogDataRequest, &WorldSession::HandlePVPLogDataOpcode);
DEFINE_HANDLER(CMSG_QUERY_BATTLE_PET_NAME, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryCorpseLocationFromClient, &WorldSession::HandleQueryCorpseLocation);
- DEFINE_HANDLER(CMSG_QUERY_CORPSE_TRANSPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryCorpseTransport, &WorldSession::HandleQueryCorpseTransport);
+ DEFINE_HANDLER(CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryCorpseLocationFromClient, &WorldSession::HandleQueryCorpseLocation);
+ DEFINE_HANDLER(CMSG_QUERY_CORPSE_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryCorpseTransport, &WorldSession::HandleQueryCorpseTransport);
DEFINE_HANDLER(CMSG_QUERY_COUNTDOWN_TIMER, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_QUERY_CREATURE, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Query::QueryCreature, &WorldSession::HandleCreatureQuery);
DEFINE_HANDLER(CMSG_QUERY_GAME_OBJECT, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Query::QueryGameObject, &WorldSession::HandleGameObjectQueryOpcode);
@@ -1007,9 +1007,9 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONTROL_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_COOLDOWN_CHEAT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_COOLDOWN_EVENT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_CORPSE_LOCATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CORPSE_LOCATION, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CORPSE_RECLAIM_DELAY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_CORPSE_TRANSPORT_QUERY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CORPSE_TRANSPORT_QUERY, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CREATE_CHAR, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CREATE_SHIPMENT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRITERIA_DELETED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1474,19 +1474,19 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_SEASON, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_CREATURE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GAME_OBJECT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_CREATURE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GAME_OBJECT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GUILD_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_ITEM_TEXT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_ITEM_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_NPC_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PAGE_TEXT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PAGE_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PETITION_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PET_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PLAYER_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUEST_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUEST_REWARD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_COMPLETION_NPC_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_FORCE_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);