Fix sending color codes to clients that don't support them. (#5950)
authorred-001 <red-001@outlook.ie>
Fri, 9 Jun 2017 19:39:25 +0000 (20:39 +0100)
committerSmallJoker <mk939@ymail.com>
Sun, 3 Jun 2018 15:31:59 +0000 (17:31 +0200)
Also remove `disable_escape_sequences` since it's not needed anymore.

builtin/common/misc_helpers.lua
builtin/settingtypes.txt
src/server.cpp

index 68481f7c8e79f262e1e53d6e51c5a0d7d195d02d..0bdd4b02ad9f14a8ab22f6265d6ce85e7c1df8e7 100644 (file)
@@ -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
index ba3339d32017ac571264851633d4899761f10b09..5182cb3f712ed5227ceb32922160b6ecbef704b7 100644 (file)
@@ -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).
index 1e8e6a5d2a78ec3c828e8579cc990830ff6a8cda..e9ccc3d79a8d1ce12facbeeab41bcc28e359f9b4 100644 (file)
@@ -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);
        }
 }