From d0d71818c70586d7e2fb806ced57f039bd1d12f6 Mon Sep 17 00:00:00 2001 From: troido Date: Wed, 8 Apr 2020 15:43:57 +0200 Subject: reject player if the savefile player id does not match actual player id --- src/world.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/world.rs') diff --git a/src/world.rs b/src/world.rs index 59b3aba..5105df2 100644 --- a/src/world.rs +++ b/src/world.rs @@ -66,7 +66,7 @@ impl <'a, 'b>World<'a, 'b> { } else { let mut room = Room::new(id.clone(), self.encyclopedia.clone(), None); let template = self.template_loader.load_room(id.clone())?; - room.load_from_template(&template); + room.load_from_template(&template)?; room }; if let Ok(state) = self.persistence.load_room(id.clone()){ @@ -96,6 +96,9 @@ impl <'a, 'b>World<'a, 'b> { .unwrap_or_else(|_err| // todo: what if player exists but can't be loaded for another reason? PlayerState::new(playerid.clone()) ); + if &state.id != playerid { + return Err(aerr!("Player ids do not match. Wanted {:?}, got {:?}", playerid, state.id)); + } if state.room == Some(purgatory::purgatory_id()){ state.respawn(); } -- cgit