From 3f93af11d649b1264fcd882a02bba7759e67d32b Mon Sep 17 00:00:00 2001 From: ZehMatt Date: Mon, 2 Oct 2017 18:02:50 +0200 Subject: [PATCH] Fix game actions executing wrong callbacks. --- src/openrct2/network/Network.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/openrct2/network/Network.cpp b/src/openrct2/network/Network.cpp index 15810a8aa3..d4b5023a9c 100644 --- a/src/openrct2/network/Network.cpp +++ b/src/openrct2/network/Network.cpp @@ -2133,12 +2133,17 @@ void Network::Client_Handle_GAME_ACTION(NetworkConnection& connection, NetworkPa } action->Serialise(ds); - auto itr = _gameActionCallbacks.find(action->GetNetworkId()); - if (itr != _gameActionCallbacks.end()) + if (player_id == action->GetPlayer()) { - action->SetCallback(itr->second); + // Only execute callbacks that belong to us, + // clients can have identical network ids assigned. + auto itr = _gameActionCallbacks.find(action->GetNetworkId()); + if (itr != _gameActionCallbacks.end()) + { + action->SetCallback(itr->second); - _gameActionCallbacks.erase(itr); + _gameActionCallbacks.erase(itr); + } } game_command_queue.emplace(tick, std::move(action), _commandId++);