Przeglądaj źródła

Merge pull request #95194 from Faless/mp/fix_relay_negative_target

[MP] Fix relay protocol routing with negative targets
Rémi Verschelde 11 miesięcy temu
rodzic
commit
03afb92efa
1 zmienionych plików z 8 dodań i 5 usunięć
  1. 8 5
      modules/multiplayer/scene_multiplayer.cpp

+ 8 - 5
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_mode(p_mode);
 				multiplayer_peer->set_transfer_channel(p_channel);
 				multiplayer_peer->set_transfer_channel(p_channel);
 				if (peer > 0) {
 				if (peer > 0) {
+					// Single destination.
 					multiplayer_peer->set_target_peer(peer);
 					multiplayer_peer->set_target_peer(peer);
 					_send(data.ptr(), relay_buffer->get_position());
 					_send(data.ptr(), relay_buffer->get_position());
 				} else {
 				} else {
+					// Multiple destinations.
 					for (const int &P : connected_peers) {
 					for (const int &P : connected_peers) {
 						// Not to sender, nor excluded.
 						// Not to sender, nor excluded.
-						if (P == p_from || (peer < 0 && P != -peer)) {
+						if (P == p_from || P == -peer) {
 							continue;
 							continue;
 						}
 						}
 						multiplayer_peer->set_target_peer(P);
 						multiplayer_peer->set_target_peer(P);
 						_send(data.ptr(), relay_buffer->get_position());
 						_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 {
 			} else {
 				ERR_FAIL_COND(p_from != 1); // Bug.
 				ERR_FAIL_COND(p_from != 1); // Bug.