From f4dcab94dca440fa661b9f4e1c9b75369673ba10 Mon Sep 17 00:00:00 2001 From: troido Date: Tue, 3 Mar 2020 20:18:59 +0100 Subject: backup actions if room is unloadable --- src/world.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/world.rs b/src/world.rs index f297d16..0c7e0e9 100644 --- a/src/world.rs +++ b/src/world.rs @@ -75,7 +75,16 @@ impl <'a, 'b>World<'a, 'b> { if state.room == Some(purgatory::purgatory_id()){ state.respawn(); } - self.add_loaded_player(state) + + if let Err(_e) = self.add_loaded_player(state.clone()){ + state.room = None; + state.pos = RoomPos::Unknown; + if let Err(_e) = self.add_loaded_player(state.clone()) { + state.room = Some(purgatory::purgatory_id()); + self.add_loaded_player(state)?; + } + } + Ok(()) } fn discorporate_player(&mut self, playerid: &PlayerId) -> Result { @@ -99,9 +108,21 @@ impl <'a, 'b>World<'a, 'b> { fn migrate_player(&mut self, player: &PlayerId, destination: RoomId, roompos: RoomPos) -> Result<()> { let mut state = self.discorporate_player(player)?; + let old_room = state.room; state.room = Some(destination); state.pos = roompos; - self.add_loaded_player(state) + if let Err(_e) = self.add_loaded_player(state.clone()){ + state.room = old_room; + state.pos = RoomPos::Unknown; + if let Err(_e) = self.add_loaded_player(state.clone()) { + state.room = None; + if let Err(_e) = self.add_loaded_player(state.clone()) { + state.room = Some(purgatory::purgatory_id()); + self.add_loaded_player(state)?; + } + } + } + Ok(()) } -- cgit