diff options
| author | troido <troido@protonmail.com> | 2020-04-08 15:43:57 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-04-08 15:43:57 +0200 |
| commit | d0d71818c70586d7e2fb806ced57f039bd1d12f6 (patch) | |
| tree | d2ec5f8f64476daa4e004b17e577694087ac8a32 /src/world.rs | |
| parent | 7a4a62eb2804b6b19b4e71eee42d6b3d7ad08a3a (diff) | |
reject player if the savefile player id does not match actual player id
Diffstat (limited to 'src/world.rs')
| -rw-r--r-- | src/world.rs | 5 |
1 files changed, 4 insertions, 1 deletions
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(); } |
