浏览代码

[MP] Fix complete_auth notifying the wrong peer

The SceneMultiplayer complete_auth method was not configuring the
multiplayer peer correctly, causing it to potentially send the
notification to the wrong peer, on the wrong channel, and/or with an
incorrect transfer mode.

(cherry picked from commit 4826c14d2042aa8044d9751d459aeab644bcb602)
Fabio Alessandrelli 1 年之前
父节点
当前提交
240f7dc21e
共有 1 个文件被更改,包括 5 次插入0 次删除
  1. 5 0
      modules/multiplayer/scene_multiplayer.cpp

+ 5 - 0
modules/multiplayer/scene_multiplayer.cpp

@@ -483,9 +483,14 @@ Error SceneMultiplayer::complete_auth(int p_peer) {
 	ERR_FAIL_COND_V(!pending_peers.has(p_peer), ERR_INVALID_PARAMETER);
 	ERR_FAIL_COND_V_MSG(pending_peers[p_peer].local, ERR_FILE_CANT_WRITE, "The authentication session was already marked as completed.");
 	pending_peers[p_peer].local = true;
+
 	// Notify the remote peer that the authentication has completed.
 	uint8_t buf[2] = { NETWORK_COMMAND_SYS, SYS_COMMAND_AUTH };
+	multiplayer_peer->set_target_peer(p_peer);
+	multiplayer_peer->set_transfer_channel(0);
+	multiplayer_peer->set_transfer_mode(MultiplayerPeer::TRANSFER_MODE_RELIABLE);
 	Error err = _send(buf, 2);
+
 	// The remote peer already reported the authentication as completed, so admit the peer.
 	// May generate new packets, so it must happen after sending confirmation.
 	if (pending_peers[p_peer].remote) {