From f6e6baa2932788b17169ba103b62a6f66ee7290a Mon Sep 17 00:00:00 2001 From: ForesterDev <11771800+ForesterDev@users.noreply.github.com> Date: Fri, 28 Feb 2020 22:29:05 +0400 Subject: Core/PacketIO: update SMSG_EMOTE / CMSG_EMOTE packets to new system (#24200) * Core/PacketIO: update SMSG_EMOTE / CMSG_EMOTE packets to new system * Change int32 to uint32 --- src/server/game/Entities/Unit/Unit.cpp | 11 +++--- src/server/game/Entities/Unit/Unit.h | 2 +- src/server/game/Handlers/ChatHandler.cpp | 18 ++++----- src/server/game/Server/Packets/AllPackets.h | 1 + src/server/game/Server/Packets/ChatPackets.cpp | 31 ++++++++++++++++ src/server/game/Server/Packets/ChatPackets.h | 51 ++++++++++++++++++++++++++ src/server/game/Server/WorldSession.h | 6 ++- 7 files changed, 104 insertions(+), 16 deletions(-) create mode 100644 src/server/game/Server/Packets/ChatPackets.cpp create mode 100644 src/server/game/Server/Packets/ChatPackets.h (limited to 'src') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f00332d27c1..0089a3f8801 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -24,6 +24,7 @@ #include "CellImpl.h" #include "CharacterCache.h" #include "Chat.h" +#include "ChatPackets.h" #include "ChatTextBuilder.h" #include "Common.h" #include "ConditionMgr.h" @@ -1526,12 +1527,12 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss) } } -void Unit::HandleEmoteCommand(uint32 anim_id) +void Unit::HandleEmoteCommand(uint32 emoteId) { - WorldPacket data(SMSG_EMOTE, 4 + 8); - data << uint32(anim_id); - data << uint64(GetGUID()); - SendMessageToSet(&data, true); + WorldPackets::Chat::Emote packet; + packet.EmoteID = emoteId; + packet.Guid = GetGUID(); + SendMessageToSet(packet.Write(), true); } /*static*/ bool Unit::IsDamageReducedByArmor(SpellSchoolMask schoolMask, SpellInfo const* spellInfo /*= nullptr*/) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 73e5897322a..0ba397f4551 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -947,7 +947,7 @@ class TC_GAME_API Unit : public WorldObject DamageInfo* damageInfo, HealInfo* healInfo); void TriggerAurasProcOnEvent(ProcEventInfo& eventInfo, AuraApplicationProcContainer& procAuras); - void HandleEmoteCommand(uint32 anim_id); + void HandleEmoteCommand(uint32 emoteId); void AttackerStateUpdate (Unit* victim, WeaponAttackType attType = BASE_ATTACK, bool extra = false); void CalculateMeleeDamage(Unit* victim, CalcDamageInfo* damageInfo, WeaponAttackType attackType = BASE_ATTACK); diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 1d11c671d24..cb3cb3e33a4 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -22,6 +22,7 @@ #include "Channel.h" #include "ChannelMgr.h" #include "Chat.h" +#include "ChatPackets.h" #include "DatabaseEnv.h" #include "DBCStores.h" #include "GameTime.h" @@ -568,20 +569,19 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) } } -void WorldSession::HandleEmoteOpcode(WorldPacket& recvData) +void WorldSession::HandleEmoteOpcode(WorldPackets::Chat::EmoteClient& packet) { - if (!GetPlayer()->IsAlive() || GetPlayer()->HasUnitState(UNIT_STATE_DIED)) - return; - - uint32 emote; - recvData >> emote; + uint32 emoteId = packet.EmoteID; // restrict to the only emotes hardcoded in client - if (emote != EMOTE_ONESHOT_NONE && emote != EMOTE_ONESHOT_WAVE) + if (emoteId != EMOTE_ONESHOT_NONE && emoteId != EMOTE_ONESHOT_WAVE) + return; + + if (!_player->IsAlive() || _player->HasUnitState(UNIT_STATE_DIED)) return; - sScriptMgr->OnPlayerEmote(GetPlayer(), emote); - GetPlayer()->HandleEmoteCommand(emote); + sScriptMgr->OnPlayerEmote(_player, emoteId); + _player->HandleEmoteCommand(emoteId); } namespace Trinity diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h index afcf072b91d..c161bc8d871 100644 --- a/src/server/game/Server/Packets/AllPackets.h +++ b/src/server/game/Server/Packets/AllPackets.h @@ -18,6 +18,7 @@ #ifndef AllPackets_h__ #define AllPackets_h__ +#include "ChatPackets.h" #include "NPCPackets.h" #include "MiscPackets.h" #include "QueryPackets.h" diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp new file mode 100644 index 00000000000..966f10e6078 --- /dev/null +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -0,0 +1,31 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * 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 . + */ + +#include "ChatPackets.h" + +WorldPacket const* WorldPackets::Chat::Emote::Write() +{ + _worldPacket << EmoteID; + _worldPacket << Guid; + + return &_worldPacket; +} + +void WorldPackets::Chat::EmoteClient::Read() +{ + _worldPacket >> EmoteID; +} diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h new file mode 100644 index 00000000000..b299b3b3e4e --- /dev/null +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -0,0 +1,51 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * 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 . + */ + +#ifndef ChatPackets_h__ +#define ChatPackets_h__ + +#include "Packet.h" +#include "ObjectGuid.h" + +namespace WorldPackets +{ + namespace Chat + { + class Emote final : public ServerPacket + { + public: + Emote() : ServerPacket(SMSG_EMOTE, 4 + 8) { } + + WorldPacket const* Write() override; + + uint32 EmoteID = 0; + ObjectGuid Guid; + }; + + class EmoteClient final : public ClientPacket + { + public: + EmoteClient(WorldPacket&& packet) : ClientPacket(CMSG_EMOTE, std::move(packet)) { } + + void Read() override; + + uint32 EmoteID = 0; + }; + } +} + +#endif // ChatPackets_h__ diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 66b1a9b99b5..182f13bd478 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -78,6 +78,10 @@ class RBACData; namespace WorldPackets { + namespace Chat + { + class EmoteClient; + } namespace NPC { class Hello; @@ -560,7 +564,7 @@ class TC_GAME_API WorldSession void HandleZoneUpdateOpcode(WorldPacket& recvPacket); void HandleSetSelectionOpcode(WorldPacket& recvPacket); void HandleStandStateChangeOpcode(WorldPacket& recvPacket); - void HandleEmoteOpcode(WorldPacket& recvPacket); + void HandleEmoteOpcode(WorldPackets::Chat::EmoteClient& packet); // Social void HandleContactListOpcode(WorldPacket& recvPacket); -- cgit v1.2.3