Skip to content

Commit

Permalink
Merge pull request godotengine#95194 from Faless/mp/fix_relay_negativ…
Browse files Browse the repository at this point in the history
…e_target

[MP] Fix relay protocol routing with negative targets
  • Loading branch information
akien-mga committed Aug 8, 2024
2 parents 32eb97f + c5fa735 commit 03afb92
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions modules/multiplayer/scene_multiplayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit 03afb92

Please sign in to comment.