From 0fb2d1cd5a9e4dd6586e20eeace95cd42a45f1ac Mon Sep 17 00:00:00 2001
From: TheThirdSpartan <thethirdspartans@gmail.com>
Date: Wed, 9 Sep 2020 18:50:45 -0400
Subject: [PATCH] fixed empty chat messages for cli clients

---
 client/src/lib.rs | 113 +++++++++++++++++++++++++++++++++++-----------
 1 file changed, 86 insertions(+), 27 deletions(-)

diff --git a/client/src/lib.rs b/client/src/lib.rs
index 3583b8650e..dda0d38012 100644
--- a/client/src/lib.rs
+++ b/client/src/lib.rs
@@ -1609,38 +1609,97 @@ impl Client {
             // in voxygen/src/hud/chat.rs before being formatted here.
             // Kill messages are generated in server/src/events/entity_manipulation.rs
             // fn handle_destroy
-            comp::ChatType::Online(uid) => message.replace("{name}", &alias_of_uid(uid)),
-            comp::ChatType::Offline(uid) => message.replace("{name}", &alias_of_uid(uid)),
+            comp::ChatType::Online(uid) => {
+                // Default message formats if no localized message string is set by hud
+                // Needed for cli clients that don't set localization info
+                if message == "" {
+                    format!("[{}] came online", alias_of_uid(uid))
+                } else {
+                    message.replace("{name}", &alias_of_uid(uid))
+                }
+            },
+            comp::ChatType::Offline(uid) => {
+                // Default message formats if no localized message string is set by hud
+                // Needed for cli clients that don't set localization info
+                if message == "" {
+                    format!("[{}] went offline", alias_of_uid(uid))
+                } else {
+                    message.replace("{name}", &alias_of_uid(uid))
+                }
+            },
             comp::ChatType::CommandError => message.to_string(),
             comp::ChatType::CommandInfo => message.to_string(),
             comp::ChatType::Loot => message.to_string(),
             comp::ChatType::FactionMeta(_) => message.to_string(),
             comp::ChatType::GroupMeta(_) => message.to_string(),
-            comp::ChatType::Kill(kill_source, victim) => match kill_source {
-                KillSource::Player(attacker_uid, KillType::Melee) => message
-                    .replace("{attacker}", &alias_of_uid(attacker_uid))
-                    .replace("{victim}", &alias_of_uid(victim)),
-                KillSource::Player(attacker_uid, KillType::Projectile) => message
-                    .replace("{attacker}", &alias_of_uid(attacker_uid))
-                    .replace("{victim}", &alias_of_uid(victim)),
-                KillSource::Player(attacker_uid, KillType::Explosion) => message
-                    .replace("{attacker}", &alias_of_uid(attacker_uid))
-                    .replace("{victim}", &alias_of_uid(victim)),
-                KillSource::NonPlayer(attacker_name, KillType::Melee) => message
-                    .replace("{attacker}", attacker_name)
-                    .replace("{victim}", &alias_of_uid(victim)),
-                KillSource::NonPlayer(attacker_name, KillType::Projectile) => message
-                    .replace("{attacker}", attacker_name)
-                    .replace("{victim}", &alias_of_uid(victim)),
-                KillSource::NonPlayer(attacker_name, KillType::Explosion) => message
-                    .replace("{attacker}", attacker_name)
-                    .replace("{victim}", &alias_of_uid(victim)),
-                KillSource::Environment(environment) => message
-                    .replace("{name}", &alias_of_uid(victim))
-                    .replace("{environment}", environment),
-                KillSource::FallDamage => message.replace("{name}", &alias_of_uid(victim)),
-                KillSource::Suicide => message.replace("{name}", &alias_of_uid(victim)),
-                KillSource::Other => message.replace("{name}", &alias_of_uid(victim)),
+            comp::ChatType::Kill(kill_source, victim) => {
+                // Default message formats if no localized message string is set by hud
+                // Needed for cli clients that don't set localization info
+                if message == "" {
+                    match kill_source {
+                        KillSource::Player(attacker_uid, KillType::Melee) => format!(
+                            "[{}] killed [{}]",
+                            alias_of_uid(attacker_uid),
+                            alias_of_uid(victim)
+                        ),
+                        KillSource::Player(attacker_uid, KillType::Projectile) => format!(
+                            "[{}] shot [{}]",
+                            alias_of_uid(attacker_uid),
+                            alias_of_uid(victim)
+                        ),
+                        KillSource::Player(attacker_uid, KillType::Explosion) => format!(
+                            "[{}] blew up [{}]",
+                            alias_of_uid(attacker_uid),
+                            alias_of_uid(victim)
+                        ),
+                        KillSource::NonPlayer(attacker_name, KillType::Melee) => {
+                            format!("{} killed [{}]", attacker_name, alias_of_uid(victim))
+                        },
+                        KillSource::NonPlayer(attacker_name, KillType::Projectile) => {
+                            format!("{} shot [{}]", attacker_name, alias_of_uid(victim))
+                        },
+                        KillSource::NonPlayer(attacker_name, KillType::Explosion) => {
+                            format!("{} blew up [{}]", attacker_name, alias_of_uid(victim))
+                        },
+                        KillSource::Environment(environment) => {
+                            format!("[{}] died in {}", alias_of_uid(victim), environment)
+                        },
+                        KillSource::FallDamage => {
+                            format!("[{}] died from fall damage", alias_of_uid(victim))
+                        },
+                        KillSource::Suicide => {
+                            format!("[{}] died from self-inflicted wounds", alias_of_uid(victim))
+                        },
+                        KillSource::Other => format!("[{}] died", alias_of_uid(victim)),
+                    }
+                } else {
+                    match kill_source {
+                        KillSource::Player(attacker_uid, KillType::Melee) => message
+                            .replace("{attacker}", &alias_of_uid(attacker_uid))
+                            .replace("{victim}", &alias_of_uid(victim)),
+                        KillSource::Player(attacker_uid, KillType::Projectile) => message
+                            .replace("{attacker}", &alias_of_uid(attacker_uid))
+                            .replace("{victim}", &alias_of_uid(victim)),
+                        KillSource::Player(attacker_uid, KillType::Explosion) => message
+                            .replace("{attacker}", &alias_of_uid(attacker_uid))
+                            .replace("{victim}", &alias_of_uid(victim)),
+                        KillSource::NonPlayer(attacker_name, KillType::Melee) => message
+                            .replace("{attacker}", attacker_name)
+                            .replace("{victim}", &alias_of_uid(victim)),
+                        KillSource::NonPlayer(attacker_name, KillType::Projectile) => message
+                            .replace("{attacker}", attacker_name)
+                            .replace("{victim}", &alias_of_uid(victim)),
+                        KillSource::NonPlayer(attacker_name, KillType::Explosion) => message
+                            .replace("{attacker}", attacker_name)
+                            .replace("{victim}", &alias_of_uid(victim)),
+                        KillSource::Environment(environment) => message
+                            .replace("{name}", &alias_of_uid(victim))
+                            .replace("{environment}", environment),
+                        KillSource::FallDamage => message.replace("{name}", &alias_of_uid(victim)),
+                        KillSource::Suicide => message.replace("{name}", &alias_of_uid(victim)),
+                        KillSource::Other => message.replace("{name}", &alias_of_uid(victim)),
+                    }
+                }
             },
             comp::ChatType::Tell(from, to) => {
                 let from_alias = alias_of_uid(from);