From 740b4bec07b0a43943c9d4a20a2dc1abf4c90db9 Mon Sep 17 00:00:00 2001 From: red-001 Date: Fri, 9 Jun 2017 20:39:25 +0100 Subject: [PATCH] Fix sending color codes to clients that don't support them. (#5950) Also remove `disable_escape_sequences` since it's not needed anymore. --- builtin/common/misc_helpers.lua | 44 ++++++++++----------------------- builtin/settingtypes.txt | 5 ---- src/server.cpp | 15 ++++++----- 3 files changed, 22 insertions(+), 42 deletions(-) diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index d162bc0a2..f9b572d9f 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -642,44 +642,26 @@ end local ESCAPE_CHAR = string.char(0x1b) --- Client-side mods don't have access to settings -if core.settings and core.settings:get_bool("disable_escape_sequences") then - - function core.get_color_escape_sequence(color) - return "" - end - - function core.get_background_escape_sequence(color) - return "" - end - - function core.colorize(color, message) - return message - end - -else - - function core.get_color_escape_sequence(color) - return ESCAPE_CHAR .. "(c@" .. color .. ")" - end - - function core.get_background_escape_sequence(color) - return ESCAPE_CHAR .. "(b@" .. color .. ")" - end +function core.get_color_escape_sequence(color) + return ESCAPE_CHAR .. "(c@" .. color .. ")" +end - function core.colorize(color, message) - local lines = tostring(message):split("\n", true) - local color_code = core.get_color_escape_sequence(color) +function core.get_background_escape_sequence(color) + return ESCAPE_CHAR .. "(b@" .. color .. ")" +end - for i, line in ipairs(lines) do - lines[i] = color_code .. line - end +function core.colorize(color, message) + local lines = tostring(message):split("\n", true) + local color_code = core.get_color_escape_sequence(color) - return table.concat(lines, "\n") .. core.get_color_escape_sequence("#ffffff") + for i, line in ipairs(lines) do + lines[i] = color_code .. line end + return table.concat(lines, "\n") .. core.get_color_escape_sequence("#ffffff") end + function core.strip_foreground_colors(str) return (str:gsub(ESCAPE_CHAR .. "%(c@[^)]+%)", "")) end diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 6a6b958cc..08cc1fff2 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -721,11 +721,6 @@ server_announce (Announce server) bool false # If you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net. serverlist_url (Serverlist URL) string servers.minetest.net -# Disable escape sequences, e.g. chat coloring. -# Use this if you want to run a server with pre-0.4.14 clients and you want to disable -# the escape sequences generated by mods. -disable_escape_sequences (Disable escape sequences) bool false - [*Network] # Network port to listen (UDP). diff --git a/src/server.cpp b/src/server.cpp index 0351fa13b..52eb97608 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1643,15 +1643,18 @@ void Server::SendInventory(PlayerSAO* playerSAO) void Server::SendChatMessage(u16 peer_id, const std::wstring &message) { DSTACK(FUNCTION_NAME); + if (peer_id != PEER_ID_INEXISTENT) { + NetworkPacket pkt(TOCLIENT_CHAT_MESSAGE, 0, peer_id); - NetworkPacket pkt(TOCLIENT_CHAT_MESSAGE, 0, peer_id); - pkt << message; + if (m_clients.getProtocolVersion(peer_id) < 27) + pkt << unescape_enriched(message); + else + pkt << message; - if (peer_id != PEER_ID_INEXISTENT) { Send(&pkt); - } - else { - m_clients.sendToAll(&pkt); + } else { + for (u16 id : m_clients.getClientIDs()) + SendChatMessage(id, message); } } -- 2.25.1