mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 00:18:43 +01:00
Update and enable CMSG_GET_MIRROR_IMAGE_DATA, SMSG_MIRROR_IMAGE_CREATURE_DATA, SMSG_MIRROR_IMAGE_COMPONENTED_DATA.
This commit is contained in:
@@ -501,11 +501,9 @@ void WorldSession::HandleSpellClick(WorldPacket& recvData)
|
||||
unit->HandleSpellClick(_player);
|
||||
}
|
||||
|
||||
void WorldSession::HandleMirrorImageDataRequest(WorldPacket& recvData)
|
||||
void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorImageData& packet)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
recvData >> guid;
|
||||
recvData.read_skip<uint32>(); // DisplayId ?
|
||||
ObjectGuid guid = packet.UnitGUID;
|
||||
|
||||
// Get unit for which data is needed by client
|
||||
Unit* unit = ObjectAccessor::GetUnit(*_player, guid);
|
||||
@@ -520,27 +518,25 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPacket& recvData)
|
||||
if (!creator)
|
||||
return;
|
||||
|
||||
WorldPacket data(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, 68);
|
||||
data << guid;
|
||||
data << uint32(creator->GetDisplayId());
|
||||
data << uint8(creator->getRace());
|
||||
data << uint8(creator->getGender());
|
||||
data << uint8(creator->getClass());
|
||||
|
||||
if (creator->GetTypeId() == TYPEID_PLAYER)
|
||||
if (Player* player = creator->ToPlayer())
|
||||
{
|
||||
Player* player = creator->ToPlayer();
|
||||
Guild* guild = NULL;
|
||||
WorldPackets::Spells::MirrorImageComponentedData packet;
|
||||
packet.UnitGUID = guid;
|
||||
packet.DisplayID = creator->GetDisplayId();
|
||||
packet.RaceID = creator->getRace();
|
||||
packet.Gender = creator->getGender();
|
||||
packet.ClassID = creator->getClass();
|
||||
|
||||
if (ObjectGuid::LowType guildId = player->GetGuildId())
|
||||
guild = sGuildMgr->GetGuildById(guildId);
|
||||
Guild* guild = player->GetGuild();
|
||||
|
||||
data << uint8(player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID));
|
||||
data << uint8(player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID));
|
||||
data << uint8(player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID));
|
||||
data << uint8(player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID));
|
||||
data << uint8(player->GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE));
|
||||
data << (guild ? guild->GetGUID() : ObjectGuid::Empty);
|
||||
packet.SkinColor = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID);
|
||||
packet.FaceVariation = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID);
|
||||
packet.HairVariation = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID);
|
||||
packet.HairColor = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID);
|
||||
packet.BeardVariation = player->GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE);
|
||||
packet.GuildGUID = (guild ? guild->GetGUID() : ObjectGuid::Empty);
|
||||
|
||||
packet.ItemDisplayID.reserve(11);
|
||||
|
||||
static EquipmentSlots const itemSlots[] =
|
||||
{
|
||||
@@ -559,38 +555,28 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPacket& recvData)
|
||||
};
|
||||
|
||||
// Display items in visible slots
|
||||
for (EquipmentSlots const* itr = &itemSlots[0]; *itr != EQUIPMENT_SLOT_END; ++itr)
|
||||
for (auto const& slot : itemSlots)
|
||||
{
|
||||
if (*itr == EQUIPMENT_SLOT_HEAD && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM))
|
||||
data << uint32(0);
|
||||
else if (*itr == EQUIPMENT_SLOT_BACK && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK))
|
||||
data << uint32(0);
|
||||
else if (Item const* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, *itr))
|
||||
data << uint32(item->GetDisplayId());
|
||||
uint32 itemDisplayId;
|
||||
if ((slot == EQUIPMENT_SLOT_HEAD && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM)) ||
|
||||
(slot == EQUIPMENT_SLOT_BACK && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK)))
|
||||
itemDisplayId = 0;
|
||||
else if (Item const* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
|
||||
itemDisplayId = item->GetDisplayId();
|
||||
else
|
||||
data << uint32(0);
|
||||
itemDisplayId = 0;
|
||||
|
||||
packet.ItemDisplayID.push_back(itemDisplayId);
|
||||
}
|
||||
SendPacket(packet.Write());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Skip player data for creatures
|
||||
data << uint8(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
WorldPackets::Spells::MirrorImageCreatureData packet;
|
||||
packet.UnitGUID = guid;
|
||||
packet.DisplayID = creator->GetDisplayId();
|
||||
SendPacket(packet.Write());
|
||||
}
|
||||
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::HandleUpdateProjectilePosition(WorldPacket& recvPacket)
|
||||
|
||||
@@ -706,3 +706,39 @@ void WorldPackets::Spells::UnlearnSkill::Read()
|
||||
{
|
||||
_worldPacket >> SkillLine;
|
||||
}
|
||||
|
||||
void WorldPackets::Spells::GetMirrorImageData::Read()
|
||||
{
|
||||
_worldPacket >> UnitGUID;
|
||||
_worldPacket >> DisplayID;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Spells::MirrorImageComponentedData::Write()
|
||||
{
|
||||
_worldPacket << UnitGUID;
|
||||
_worldPacket << DisplayID;
|
||||
_worldPacket << RaceID;
|
||||
_worldPacket << Gender;
|
||||
_worldPacket << ClassID;
|
||||
_worldPacket << SkinColor;
|
||||
_worldPacket << FaceVariation;
|
||||
_worldPacket << HairVariation;
|
||||
_worldPacket << HairColor;
|
||||
_worldPacket << BeardVariation;
|
||||
_worldPacket << GuildGUID;
|
||||
|
||||
_worldPacket << uint32(ItemDisplayID.size());
|
||||
|
||||
for (auto const& itemDisplayId : ItemDisplayID)
|
||||
_worldPacket << itemDisplayId;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Spells::MirrorImageCreatureData::Write()
|
||||
{
|
||||
_worldPacket << UnitGUID;
|
||||
_worldPacket << DisplayID;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -694,6 +694,50 @@ namespace WorldPackets
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GetMirrorImageData final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GetMirrorImageData(WorldPacket&& packet) : ClientPacket(CMSG_GET_MIRROR_IMAGE_DATA, std::move(packet)) {}
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid UnitGUID;
|
||||
uint32 DisplayID = 0;
|
||||
};
|
||||
|
||||
class MirrorImageComponentedData final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
MirrorImageComponentedData() : ServerPacket(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, 8 + 4 + 8 * 1 + 8 + 11 * 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid UnitGUID;
|
||||
uint32 DisplayID = 0;
|
||||
uint8 RaceID = 0;
|
||||
uint8 Gender = 0;
|
||||
uint8 ClassID = 0;
|
||||
uint8 SkinColor = 0;
|
||||
uint8 FaceVariation = 0;
|
||||
uint8 HairVariation = 0;
|
||||
uint8 HairColor = 0;
|
||||
uint8 BeardVariation = 0;
|
||||
ObjectGuid GuildGUID;
|
||||
|
||||
std::vector<uint32> ItemDisplayID;
|
||||
};
|
||||
|
||||
class MirrorImageCreatureData final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
MirrorImageCreatureData() : ServerPacket(SMSG_MIRROR_IMAGE_CREATURE_DATA, 8 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid UnitGUID;
|
||||
uint32 DisplayID = 0;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -394,7 +394,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_GET_CHALLENGE_MODE_REWARDS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_GET_GARRISON_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Garrison::GetGarrisonInfo, &WorldSession::HandleGetGarrisonInfo);
|
||||
DEFINE_HANDLER(CMSG_GET_ITEM_PURCHASE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::GetItemPurchaseData, &WorldSession::HandleGetItemPurchaseData);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GET_MIRROR_IMAGE_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMirrorImageDataRequest );
|
||||
DEFINE_HANDLER(CMSG_GET_MIRROR_IMAGE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Spells::GetMirrorImageData, &WorldSession::HandleMirrorImageDataRequest);
|
||||
DEFINE_HANDLER(CMSG_GET_PVP_OPTIONS_ENABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Battleground::GetPVPOptionsEnabled, &WorldSession::HandleGetPVPOptionsEnabled);
|
||||
DEFINE_HANDLER(CMSG_GET_REMAINING_GAME_TIME, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_GET_TROPHY_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
@@ -1329,8 +1329,8 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MASTER_LOOT_CANDIDATE_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MESSAGE_BOX, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MINIMAP_PING, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_CREATURE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_CREATURE_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MISSILE_CANCEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MODIFY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOTD, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -498,6 +498,7 @@ namespace WorldPackets
|
||||
class SetActionButton;
|
||||
class UnlearnSkill;
|
||||
class SelfRes;
|
||||
class GetMirrorImageData;
|
||||
}
|
||||
|
||||
namespace Talent
|
||||
@@ -1496,7 +1497,7 @@ class WorldSession
|
||||
|
||||
// Miscellaneous
|
||||
void HandleSpellClick(WorldPacket& recvData);
|
||||
void HandleMirrorImageDataRequest(WorldPacket& recvData);
|
||||
void HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorImageData& packet);
|
||||
void HandleRemoveGlyph(WorldPacket& recvData);
|
||||
void HandleGuildSetFocusedAchievement(WorldPackets::Achievement::GuildSetFocusedAchievement& setFocusedAchievement);
|
||||
void HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipmentSet& packet);
|
||||
|
||||
Reference in New Issue
Block a user