From dfc0cc351bb8440377fb790d140e4df97a4fe56c Mon Sep 17 00:00:00 2001 From: "NG (Graham)" Date: Sun, 16 Nov 2025 14:46:41 -0500 Subject: [PATCH] Always skip sending to aliased connections (client AIs) #48 --- rc_multiplayer/src/matches/generic.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rc_multiplayer/src/matches/generic.rs b/rc_multiplayer/src/matches/generic.rs index 05ff8ae..ff2499a 100644 --- a/rc_multiplayer/src/matches/generic.rs +++ b/rc_multiplayer/src/matches/generic.rs @@ -283,6 +283,7 @@ impl GenericGamemodeEngine { pub(super) async fn rebroadcast(&self, user_id: i32, code: rlnl::event_code::NetworkEvent, property: literustlib::packet::Property, data: &T, in_game: bool) { for (player_id, conn) in self.users.read().await.iter() { if user_id == conn.user.user_id() { continue; } + if conn.aliases.contains(player_id) { continue; } if in_game { let mode = ConnectionMode::from_u8(self.user_descriptor(*player_id).unwrap().state.mode.load(std::sync::atomic::Ordering::Relaxed)); if !matches!(mode, ConnectionMode::InGame) { continue; } @@ -300,6 +301,7 @@ impl GenericGamemodeEngine { pub(super) async fn rebroadcast_dataless(&self, user_id: i32, code: rlnl::event_code::NetworkEvent, property: literustlib::packet::Property, in_game: bool) { for (player_id, conn) in self.users.read().await.iter() { if user_id == conn.user.user_id() { continue; } + if conn.aliases.contains(player_id) { continue; } if in_game { let mode = ConnectionMode::from_u8(self.user_descriptor(*player_id).unwrap().state.mode.load(std::sync::atomic::Ordering::Relaxed)); if !matches!(mode, ConnectionMode::InGame) { continue; } @@ -315,6 +317,7 @@ impl GenericGamemodeEngine { pub(super) async fn broadcast(&self, code: rlnl::event_code::NetworkEvent, property: literustlib::packet::Property, data: &T, in_game: bool) { for (player_id, conn) in self.users.read().await.iter() { + if conn.aliases.contains(player_id) { continue; } if in_game { let mode = ConnectionMode::from_u8(self.user_descriptor(*player_id).unwrap().state.mode.load(std::sync::atomic::Ordering::Relaxed)); if !matches!(mode, ConnectionMode::InGame) { continue; } @@ -331,6 +334,7 @@ impl GenericGamemodeEngine { pub(super) async fn broadcast_dataless(&self, code: rlnl::event_code::NetworkEvent, property: literustlib::packet::Property, in_game: bool) { for (player_id, conn) in self.users.read().await.iter() { + if conn.aliases.contains(player_id) { continue; } if in_game { let mode = ConnectionMode::from_u8(self.user_descriptor(*player_id).unwrap().state.mode.load(std::sync::atomic::Ordering::Relaxed)); if !matches!(mode, ConnectionMode::InGame) { continue; }