diff --git a/modules/multiplayer/scene_multiplayer.cpp b/modules/multiplayer/scene_multiplayer.cpp index 6694376b3068..e245101eebd3 100644 --- a/modules/multiplayer/scene_multiplayer.cpp +++ b/modules/multiplayer/scene_multiplayer.cpp @@ -321,21 +321,24 @@ void SceneMultiplayer::_process_sys(int p_from, const uint8_t *p_packet, int p_p multiplayer_peer->set_transfer_mode(p_mode); multiplayer_peer->set_transfer_channel(p_channel); if (peer > 0) { + // Single destination. multiplayer_peer->set_target_peer(peer); _send(data.ptr(), relay_buffer->get_position()); } else { + // Multiple destinations. for (const int &P : connected_peers) { // Not to sender, nor excluded. - if (P == p_from || (peer < 0 && P != -peer)) { + if (P == p_from || P == -peer) { continue; } multiplayer_peer->set_target_peer(P); _send(data.ptr(), relay_buffer->get_position()); } - } - if (peer == 0 || peer == -1) { - should_process = true; - peer = p_from; // Process as the source. + if (peer != -1) { + // The server is one of the targets, process the packet with sender as source. + should_process = true; + peer = p_from; + } } } else { ERR_FAIL_COND(p_from != 1); // Bug.