From f2b56ee58261af3052ed63979b7c3f93ea715edb Mon Sep 17 00:00:00 2001 From: BobTheBob <32057864+BobTheBob9@users.noreply.github.com> Date: Fri, 25 Feb 2022 00:15:28 +0000 Subject: use vanilla chat logic if codecallbacks are missing --- NorthstarDedicatedTest/clientchathooks.cpp | 48 ++++++++++++++++-------------- NorthstarDedicatedTest/serverchathooks.cpp | 20 ++++++++----- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/NorthstarDedicatedTest/clientchathooks.cpp b/NorthstarDedicatedTest/clientchathooks.cpp index 81413002..62166cb2 100644 --- a/NorthstarDedicatedTest/clientchathooks.cpp +++ b/NorthstarDedicatedTest/clientchathooks.cpp @@ -17,32 +17,36 @@ struct ChatTags static void CHudChat__AddGameLineHook(void* self, const char* message, int inboxId, bool isTeam, bool isDead) { - // This hook is called for each HUD, but we only want our logic to run once. - if (!IsFirstHud(self)) + if (g_ClientSquirrelManager->setupfunc("CHudChat_ProcessMessageStartThread") != SQRESULT_ERROR) { - return; - } + // This hook is called for each HUD, but we only want our logic to run once. + if (!IsFirstHud(self)) + { + return; + } - int senderId = inboxId & CUSTOM_MESSAGE_INDEX_MASK; - bool isAnonymous = senderId == 0; - bool isCustom = isAnonymous || (inboxId & CUSTOM_MESSAGE_INDEX_BIT); + int senderId = inboxId & CUSTOM_MESSAGE_INDEX_MASK; + bool isAnonymous = senderId == 0; + bool isCustom = isAnonymous || (inboxId & CUSTOM_MESSAGE_INDEX_BIT); - // Type is set to 0 for non-custom messages, custom messages have a type encoded as the first byte - int type = 0; - const char* payload = message; - if (isCustom) - { - type = message[0]; - payload = message + 1; - } + // Type is set to 0 for non-custom messages, custom messages have a type encoded as the first byte + int type = 0; + const char* payload = message; + if (isCustom) + { + type = message[0]; + payload = message + 1; + } - g_ClientSquirrelManager->setupfunc("CHudChat_ProcessMessageStartThread"); - g_ClientSquirrelManager->pusharg((int)senderId - 1); - g_ClientSquirrelManager->pusharg(payload); - g_ClientSquirrelManager->pusharg(isTeam); - g_ClientSquirrelManager->pusharg(isDead); - g_ClientSquirrelManager->pusharg(type); - g_ClientSquirrelManager->call(5); + g_ClientSquirrelManager->pusharg((int)senderId - 1); + g_ClientSquirrelManager->pusharg(payload); + g_ClientSquirrelManager->pusharg(isTeam); + g_ClientSquirrelManager->pusharg(isDead); + g_ClientSquirrelManager->pusharg(type); + g_ClientSquirrelManager->call(5); + } + else + CHudChat__AddGameLine(self, message, inboxId, isTeam, isDead); } // void NSChatWrite( int context, string str ) diff --git a/NorthstarDedicatedTest/serverchathooks.cpp b/NorthstarDedicatedTest/serverchathooks.cpp index 93f7f383..4766bf9b 100644 --- a/NorthstarDedicatedTest/serverchathooks.cpp +++ b/NorthstarDedicatedTest/serverchathooks.cpp @@ -15,7 +15,7 @@ class CRecipientFilter char unknown[58]; }; -CServerGameDLL* gServer; +CServerGameDLL* g_pServerGameDLL; typedef void(__fastcall* CServerGameDLL__OnReceivedSayTextMessageType)( CServerGameDLL* self, unsigned int senderPlayerId, const char* text, int channelId); @@ -76,18 +76,22 @@ static void CServerGameDLL__OnReceivedSayTextMessageHook(CServerGameDLL* self, u return; } - g_ServerSquirrelManager->setupfunc("CServerGameDLL_ProcessMessageStartThread"); - g_ServerSquirrelManager->pusharg((int)senderPlayerId - 1); - g_ServerSquirrelManager->pusharg(text); - g_ServerSquirrelManager->pusharg(isTeam); - g_ServerSquirrelManager->call(3); + if (g_ServerSquirrelManager->setupfunc("CServerGameDLL_ProcessMessageStartThread") != SQRESULT_ERROR) + { + g_ServerSquirrelManager->pusharg((int)senderPlayerId - 1); + g_ServerSquirrelManager->pusharg(text); + g_ServerSquirrelManager->pusharg(isTeam); + g_ServerSquirrelManager->call(3); + } + else + CServerGameDLL__OnReceivedSayTextMessageHookBase(self, senderPlayerId, text, isTeam); } void ChatSendMessage(unsigned int playerIndex, const char* text, bool isteam) { isSkippingHook = true; CServerGameDLL__OnReceivedSayTextMessage( - gServer, + g_pServerGameDLL, // Ensure the first bit isn't set, since this indicates a custom message (playerIndex + 1) & CUSTOM_MESSAGE_INDEX_MASK, text, isteam); } @@ -164,7 +168,7 @@ SQRESULT SQ_BroadcastMessage(void* sqvm) return SQRESULT_NULL; } -void InitialiseServerChatHooks_Engine(HMODULE baseAddress) { gServer = (CServerGameDLL*)((char*)baseAddress + 0x13F0AA98); } +void InitialiseServerChatHooks_Engine(HMODULE baseAddress) { g_pServerGameDLL = (CServerGameDLL*)((char*)baseAddress + 0x13F0AA98); } void InitialiseServerChatHooks_Server(HMODULE baseAddress) { -- cgit v1.2.3