aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorChaouki Dhib <chaodhib@gmail.com>2021-05-22 14:54:58 +0200
committerGitHub <noreply@github.com>2021-05-22 14:54:58 +0200
commit19fa411431aa8a87a27206af116d4b0d1fb953ec (patch)
tree4377a2b9c373d49d6b5b4f1992d663608c1e8f2b /src/server/game/Server
parent3e2dd51eed0b4f4724cb795e1a14d0c94fff4453 (diff)
Core/Movement: Hotfix the crashes that can occur in the movement handlers (#26538)
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/GameClient.cpp6
-rw-r--r--src/server/game/Server/WorldSession.cpp3
2 files changed, 8 insertions, 1 deletions
diff --git a/src/server/game/Server/GameClient.cpp b/src/server/game/Server/GameClient.cpp
index f2a662d63dd..9dde28b3bfb 100644
--- a/src/server/game/Server/GameClient.cpp
+++ b/src/server/game/Server/GameClient.cpp
@@ -28,6 +28,9 @@ GameClient::GameClient(WorldSession* sessionToServer)
void GameClient::AddAllowedMover(Unit* unit)
{
+ if (GameClient* previousController = unit->GetGameClientMovingMe())
+ previousController->RemoveAllowedMover(unit);
+
_allowedMovers.insert(unit->GetGUID());
unit->SetGameClientMovingMe(this);
}
@@ -36,7 +39,10 @@ void GameClient::RemoveAllowedMover(Unit* unit)
{
_allowedMovers.erase(unit->GetGUID());
if (unit->GetGameClientMovingMe() == this)
+ {
unit->SetGameClientMovingMe(nullptr);
+ SetActivelyMovedUnit(nullptr);
+ }
}
bool GameClient::IsAllowedToMove(Unit* unit) const
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 2405631cd75..9cf46fba730 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -1665,9 +1665,10 @@ bool WorldSession::IsRightUnitBeingMoved(ObjectGuid guid)
GameClient* client = GetGameClient();
// the client is attempting to tamper movement data
+ // edit: this wouldn't happen in retail but it does in TC, even with a legitimate client.
if (!client->GetActivelyMovedUnit() || client->GetActivelyMovedUnit()->GetGUID() != guid)
{
- TC_LOG_INFO("entities.unit", "Attempt at tampering movement data by Player %s", _player->GetName().c_str());
+ TC_LOG_DEBUG("entities.unit", "Attempt at tampering movement data by Player %s", _player->GetName().c_str());
return false;
}