Browse Source

Fix `SetName()` coloring chat messages sometimes

When setting a colored nickname, chat message was colored in last
letter's color. This patch fixes it by adding additional color tag.
pull/8/head
Anton Tarasenko 4 years ago
parent
commit
2824e89f51
  1. 16
      sources/Players/APlayer.uc

16
sources/Players/APlayer.uc

@ -163,6 +163,7 @@ public final function Text GetName()
*/ */
public final function SetName(Text newPlayerName) public final function SetName(Text newPlayerName)
{ {
local Text.Formatting endingFormatting;
local PlayerReplicationInfo myReplicationInfo; local PlayerReplicationInfo myReplicationInfo;
myReplicationInfo = GetRI(); myReplicationInfo = GetRI();
if (myReplicationInfo == none) return; if (myReplicationInfo == none) return;
@ -176,16 +177,25 @@ public final function SetName(Text newPlayerName)
else { else {
textName = newPlayerName.Copy(); textName = newPlayerName.Copy();
} }
hashedName = textName.ToColoredString(,, _.color.White); hashedName = textName.ToColoredString(,, _.color.white);
// To correctly display nicknames we want to drop default color tag // To correctly display nicknames we want to drop default color tag
// at the beginning (the one `ToColoredString()` adds if first character // at the beginning (the one `ToColoredString()` adds if first character
// has no defined color). // has no defined color).
// This is a compatibility consideration with vanilla UIs that use // This is a compatibility consideration with vanilla UIs that use
// color codes from `myReplicationInfo.playerName` for displaying nicknames // color codes from `myReplicationInfo.playerName` for displaying nicknames
// and whos expected behavior can get broken by default color tag. // and whose expected behavior can get broken by default color tag.
if (!newPlayerName.GetFormatting(0).isColored) { if (!textName.GetFormatting(0).isColored) {
hashedName = Mid(hashedName, 4); hashedName = Mid(hashedName, 4);
} }
// This is another compatibility consideration with vanilla UIs: unless
// we restore color to neutral white, Killing Floor will paint any chat
// messages we send in the color our nickname ended with.
endingFormatting = textName.GetFormatting(textName.GetLength() - 1);
if ( endingFormatting.isColored
&& !_.color.AreEqual(endingFormatting.color, _.color.white, true))
{
hashedName $= _.color.GetColorTag(_.color.white);
}
myReplicationInfo.playerName = hashedName; myReplicationInfo.playerName = hashedName;
} }

Loading…
Cancel
Save