From ed770a8b7467446bc22cb98366bda1020a603514 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Fri, 3 Feb 2023 20:53:37 -0800 Subject: [PATCH] fix chat shell command for pc and bb --- src/ServerShell.cc | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/ServerShell.cc b/src/ServerShell.cc index 81733eae..d06abcc7 100644 --- a/src/ServerShell.cc +++ b/src/ServerShell.cc @@ -608,19 +608,29 @@ session with ID 17205AE4, run the command `on 17205AE4 sc 1D 00 04 00`.\n\ } else if ((command_name == "chat") || (command_name == "dchat")) { auto session = this->get_proxy_session(session_name); + bool is_dchat = (command_name == "dchat"); - string data(8, '\0'); - data.push_back('\x09'); - data.push_back('E'); - if (command_name == "dchat") { - data += parse_data_string(command_args); + if (!is_dchat && (session->version == GameVersion::PC || session->version == GameVersion::BB)) { + u16string data(4, u'\0'); + data.push_back(u'\x09'); + data.push_back(u'E'); + data += decode_sjis(command_args); + data.push_back(u'\0'); + data.resize((data.size() + 1) & (~1)); + session->server_channel.send(0x06, 0x00, data.data(), data.size() * sizeof(char16_t)); } else { - data += command_args; + string data(8, '\0'); + data.push_back('\x09'); + data.push_back('E'); + if (is_dchat) { + data += parse_data_string(command_args); + } else { + data += command_args; + data.push_back('\0'); + } + data.resize((data.size() + 3) & (~3)); + session->server_channel.send(0x06, 0x00, data); } - data.push_back('\0'); - data.resize((data.size() + 3) & (~3)); - - session->server_channel.send(0x06, 0x00, data); } else if (command_name == "marker") { auto session = this->get_proxy_session(session_name);