summaryrefslogtreecommitdiff
path: root/src/world.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-03-03 20:18:59 +0100
committertroido <troido@protonmail.com>2020-03-03 20:18:59 +0100
commitf4dcab94dca440fa661b9f4e1c9b75369673ba10 (patch)
tree9b94d5e0ae9e25e20819fa8401ceb609fe13c50c /src/world.rs
parent42448500c1c2e3dd5d6a0a62c59f1f0367c12b04 (diff)
backup actions if room is unloadable
Diffstat (limited to 'src/world.rs')
-rw-r--r--src/world.rs25
1 files changed, 23 insertions, 2 deletions
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<PlayerState> {
@@ -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(())
}