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 <SmallJoker@users.noreply.github.com>
Fri, 9 Jun 2017 19:39:25 +0000 (21:39 +0200)
Also remove `disable_escape_sequences` since it's not needed anymore.

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

index d162bc0a2873a8c12cce18df32fe8def347cfe58..f9b572d9f88dd61789bdab4bfe06e556e72217a8 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 6a6b958ccde14aeac3d0e1f30f6c200bf3d64232..08cc1fff2abe5562796f8d35aa5169264e971143 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 0351fa13b5403147b9473984e6be8e36d26f3dfe..52eb9760867bc5a3e35872f60ccd8a72fd2c5ba9 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);
        }
 }