aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/scripts/client/clientchathooks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'NorthstarDLL/scripts/client/clientchathooks.cpp')
-rw-r--r--NorthstarDLL/scripts/client/clientchathooks.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/NorthstarDLL/scripts/client/clientchathooks.cpp b/NorthstarDLL/scripts/client/clientchathooks.cpp
index 0fc68302..d4fa0c41 100644
--- a/NorthstarDLL/scripts/client/clientchathooks.cpp
+++ b/NorthstarDLL/scripts/client/clientchathooks.cpp
@@ -8,6 +8,25 @@
AUTOHOOK_INIT()
+static char* skip_valid_ansi_csi_sgr(char* str)
+{
+ if (*str++ != '\x1B')
+ return NULL;
+ if (*str++ != '[') // CSI
+ return NULL;
+ for (char* c = str; *c; c++)
+ {
+ if (*c >= '0' && *c <= '9')
+ continue;
+ if (*c == ';')
+ continue;
+ if (*c == 'm') // SGR
+ break;
+ return NULL;
+ }
+ return str;
+}
+
// clang-format off
AUTOHOOK(CHudChat__AddGameLine, client.dll + 0x22E580,
void, __fastcall, (void* self, const char* message, int inboxId, bool isTeam, bool isDead))
@@ -30,6 +49,14 @@ void, __fastcall, (void* self, const char* message, int inboxId, bool isTeam, bo
payload = message + 1;
}
+ for (char* c = const_cast<char*>(message); *c; c++)
+ {
+ if (*c == '\x1B' && (c = skip_valid_ansi_csi_sgr(c)))
+ c--;
+ else if (*c <= 9 || (*c >= 12 && *c <= 31))
+ *c = ' ';
+ }
+
SQRESULT result = g_pSquirrel<ScriptContext::CLIENT>->Call(
"CHudChat_ProcessMessageStartThread", static_cast<int>(senderId) - 1, payload, isTeam, isDead, type);
if (result == SQRESULT_ERROR)