diff options
Diffstat (limited to 'server/src/server.rs')
-rw-r--r-- | server/src/server.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index d8470fb8..18f78fc0 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -498,11 +498,14 @@ impl Server { }; if let Some(base_pid) = other_pid { - let [other, this] = self - .game - .players - .get_many_mut([&pid, &base_pid]) - .ok_or(tre!("s.error.self_interact"))?; + if pid == base_pid { + return Err(tre!("s.error.self_interact")); + } + let [Some(other), Some(this)] = + self.game.players.get_many_mut([&pid, &base_pid]) + else { + return Err(tre!("s.error.self_interact")); + }; if this.class == PlayerClass::Customer || other.class == PlayerClass::Customer { return Err(tre!("s.error.customer_interact")); @@ -633,8 +636,10 @@ impl Server { self.game .players_spatial_index .query(pos1, 2., |p2, _pos2| { - if let Some([a, b]) = self.game.players.get_many_mut([&p1, &p2]) { - a.movement.collide(&mut b.movement, dt) + if p1 != p2 { + if let [Some(a), Some(b)] = self.game.players.get_many_mut([&p1, &p2]) { + a.movement.collide(&mut b.movement, dt) + } } }) }); |