From 7a1ac8245bfe26bc201f5c4c443ff36780679ac9 Mon Sep 17 00:00:00 2001 From: Viste Date: Fri, 15 Nov 2019 12:28:54 +0300 Subject: [PATCH] feat(Core/PacketIO): restrict CMSG_EMOTE/CMSG_STANDSTATECHANGE to only allow emotes/stand states that client can send by itself (#2412) Co-authored-by: Shauren --- src/server/game/Handlers/ChatHandler.cpp | 5 +++++ src/server/game/Handlers/MiscHandler.cpp | 15 +++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index d70fb4ea3..251770952 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -642,6 +642,11 @@ void WorldSession::HandleEmoteOpcode(WorldPacket & recvData) uint32 emote; recvData >> emote; + + // restrict to the only emotes hardcoded in client + if (emote != EMOTE_ONESHOT_NONE && emote != EMOTE_ONESHOT_WAVE) + return; + sScriptMgr->OnPlayerEmote(GetPlayer(), emote); GetPlayer()->HandleEmoteCommand(emote); } diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 96c80da0b..fc9ed955e 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -549,13 +549,20 @@ void WorldSession::HandleSetSelectionOpcode(WorldPacket & recv_data) void WorldSession::HandleStandStateChangeOpcode(WorldPacket & recv_data) { -#if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) - // too many spam in log at lags/debug stop - sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_STANDSTATECHANGE"); -#endif uint32 animstate; recv_data >> animstate; + switch (animstate) + { + case UNIT_STAND_STATE_STAND: + case UNIT_STAND_STATE_SIT: + case UNIT_STAND_STATE_SLEEP: + case UNIT_STAND_STATE_KNEEL: + break; + default: + return; + } + _player->SetStandState(animstate); }