diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index b65d696bc2..ad91907634 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -142,6 +142,7 @@ https://account.veloren.net."#, "main.login.client_crashed": "Client crashed", "main.login.not_on_whitelist": "You need a Whitelist entry by an Admin to join", "main.login.banned": "You have been banned with the following reason", + "main.login.kicked": "You have been kicked with the following reason", /// End Main screen section diff --git a/client/src/error.rs b/client/src/error.rs index 1b1cf0d435..cb3a4a6122 100644 --- a/client/src/error.rs +++ b/client/src/error.rs @@ -17,6 +17,7 @@ pub enum Error { AuthClientError(AuthClientError), AuthServerNotTrusted, Banned(String), + Kicked(String), /// Persisted character data is invalid or missing InvalidCharacter, //TODO: InvalidAlias, diff --git a/client/src/lib.rs b/client/src/lib.rs index 342fed6550..5313baf9dd 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -59,6 +59,7 @@ pub enum Event { Disconnect, DisconnectionNotification(u64), InventoryUpdated(InventoryUpdateEvent), + Kicked(String), Notification(Notification), SetViewDistance(u32), Outcome(Outcome), @@ -1395,6 +1396,10 @@ impl Client { self.singleton_stream.send(ClientMsg::Terminate)?; break Ok(()); }, + ServerMsg::Kicked(reason) => { + frontend_events.push(Event::Kicked(reason.clone())); + self.singleton_stream.send(ClientMsg::Terminate)?; + } ServerMsg::CharacterListUpdate(character_list) => { self.character_list.characters = character_list; self.character_list.loading = false; diff --git a/common/src/msg/server.rs b/common/src/msg/server.rs index e2838f63ab..a22d71dd9e 100644 --- a/common/src/msg/server.rs +++ b/common/src/msg/server.rs @@ -239,6 +239,7 @@ pub enum ServerMsg { }, TerrainBlockUpdates(HashMap, Block>), Disconnect, + Kicked(String), Shutdown, TooManyPlayers, /// Send a popup notification such as "Waypoint Saved" diff --git a/server/src/cmd.rs b/server/src/cmd.rs index f5351cf3aa..d55f30a832 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -1832,7 +1832,7 @@ fn handle_kick( if let Some(target_player) = target_player_opt { server.notify_client( target_player, - ServerMsg::Disconnect + ServerMsg::Kicked(reason.clone()) ); server.notify_client( client, diff --git a/voxygen/src/menu/main/mod.rs b/voxygen/src/menu/main/mod.rs index c069cf25d9..0fcf59a8db 100644 --- a/voxygen/src/menu/main/mod.rs +++ b/voxygen/src/menu/main/mod.rs @@ -132,6 +132,13 @@ impl PlayState for MainMenuState { reason ) }, + client::Error::Kicked(reason) => { + format!( + "{}: {}", + localized_strings.get("main.login.kicked"), + reason + ) + } client::Error::InvalidCharacter => { localized_strings.get("main.login.invalid_character").into() }, diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index 69c43df27b..7800270df8 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -163,6 +163,16 @@ impl SessionState { message, }); }, + client::Event::Kicked(reason) => { + global_state.info_message = Some( + format!( + "{}: {}", + self.voxygen_i18n.get("main.login.kicked").to_string(), + reason + ) + ); + return Ok(TickAction::Disconnect) + }, client::Event::Notification(n) => { self.hud.new_notification(n); },