diff options
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/AllPackets.h | 1 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/ChatPackets.cpp | 31 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/ChatPackets.h | 51 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 6 | 
7 files changed, 104 insertions, 16 deletions
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 <http://www.gnu.org/licenses/>. + */ + +#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 <http://www.gnu.org/licenses/>. + */ + +#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);  | 
