diff --git a/voxygen/src/menu/char_selection/ui/mod.rs b/voxygen/src/menu/char_selection/ui/mod.rs index 7dd69f485e..aa3d948f07 100644 --- a/voxygen/src/menu/char_selection/ui/mod.rs +++ b/voxygen/src/menu/char_selection/ui/mod.rs @@ -400,15 +400,29 @@ impl Controls { ref mut yes_button, ref mut no_button, } => { - // If no character is selected then select the first one - // Note: we don't need to persist this because it is the default - if self.selected.is_none() { - self.selected = client - .character_list() - .characters - .get(0) - .and_then(|i| i.character.id); + match self.selected { + Some(character_id) => { + // If the selected character no longer exists, deselect it. + if !client + .character_list() + .characters + .iter() + .any(|char| char.character.id.map_or(false, |id| id == character_id)) + { + self.selected = None; + } + }, + None => { + // If no character is selected then select the first one + // Note: we don't need to persist this because it is the default + self.selected = client + .character_list() + .characters + .get(0) + .and_then(|i| i.character.id); + }, } + // Get the index of the selected character let selected = self.selected.and_then(|id| { client @@ -1725,7 +1739,10 @@ impl CharSelectionUi { if self.enter_pressed { self.enter_pressed = false; - messages.push(Message::EnterWorld); + messages.push(match self.controls.mode { + Mode::Select { .. } => Message::EnterWorld, + Mode::CreateOrEdit { .. } => Message::CreateCharacter, + }); } if let Some(id) = self.select_character.take() {