Ticket #3409: t3409_highlight_playernames_v10.patch
File t3409_highlight_playernames_v10.patch, 3.5 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/gui/common/functions_utility.js
function sortNameIgnoreCase(x, y) 54 54 else 55 55 return 0; 56 56 } 57 57 58 58 /** 59 * Colorizes playernames in the given text and escapes the remaining text. 60 * Requires g_PlayerAssignments and colorizePlayernameByGUID. 61 */ 62 function highlightPlayernames(text) 63 { 64 // Check longest playernames first, in case one playername is part of another 65 let sortedGUIDs = Object.keys(g_PlayerAssignments).sort((guidA, guidB) => 66 g_PlayerAssignments[guidB].name.length - g_PlayerAssignments[guidA].name.length 67 ); 68 69 let tmpBuffer = ""; 70 let output = ""; 71 let charIndex = 0; 72 73 // Replace all occurances of all playernames from left to right 74 while (charIndex < text.length) 75 { 76 let replaced = false; 77 for (let guid of sortedGUIDs) 78 { 79 let playername = g_PlayerAssignments[guid].name; 80 if (text.indexOf(playername, charIndex) != charIndex) 81 continue; 82 83 output += escapeText(tmpBuffer) + colorizePlayernameByGUID(guid); 84 charIndex += playername.length; 85 tmpBuffer = ""; 86 replaced = true; 87 break; 88 } 89 90 if (!replaced) 91 tmpBuffer += text[charIndex++]; 92 } 93 94 if (tmpBuffer.length) 95 output += escapeText(tmpBuffer); 96 97 return output; 98 } 99 100 /** 59 101 * Escape tag start and escape characters, so users cannot use special formatting. 60 102 * Also limit string length to 256 characters (not counting escape characters). 61 103 */ 62 104 function escapeText(text) 63 105 { -
binaries/data/mods/public/gui/gamesetup/gamesetup.js
const g_FormatChatMessage = { 45 45 "disconnect": (msg, user) => systemMessage(sprintf(translate("%(username)s has left"), { "username": user })), 46 46 "kicked": (msg, user) => systemMessage(sprintf(translate("%(username)s has been kicked"), { "username": user })), 47 47 "banned": (msg, user) => systemMessage(sprintf(translate("%(username)s has been banned"), { "username": user })), 48 48 "chat": (msg, user) => sprintf(translate("%(username)s %(message)s"), { 49 49 "username": senderFont(sprintf(translate("<%(username)s>"), { "username": user })), 50 "message": escapeText(msg.text || "")50 "message": highlightPlayernames(msg.text || "") 51 51 }), 52 52 "ready": (msg, user) => sprintf(translate("* %(username)s is ready!"), { 53 53 "username": user 54 54 }), 55 55 "not-ready": (msg, user) => sprintf(translate("* %(username)s is not ready."), { -
binaries/data/mods/public/gui/session/messages.js
function formatChatCommand(msg) 736 736 translateObjectKeys(parameters, msg.translateParameters); 737 737 msg.text = sprintf(msg.text, parameters); 738 738 } 739 739 } 740 740 else 741 msg.text = escapeText(msg.text);741 msg.text = highlightPlayernames(msg.text); 742 742 743 743 // GUID for players, playerID for AIs 744 744 let coloredUsername = msg.guid != -1 ? colorizePlayernameByGUID(msg.guid) : colorizePlayernameByID(msg.player); 745 745 746 746 return sprintf(g_ChatCommands[isMe ? "me" : "regular"][msg.context ? "context" : "no-context"], {