From 3f8476db88d6ac25ca9eff63fe9acec1728f7f83 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Wed, 3 Aug 2022 18:34:44 +0200 Subject: [PATCH] Logging system light refactor * Use responceid from server to determine in which context to log. * Moved all script loggers from combined enums to minus instead (SERVER = -3, CLIENT = -2, UI = -1 SERVER_CODE = 0, etc), this makes it much easier to align stuff in combined systems such as the RUI logger or NetMsg(). * Color log networked RCON messages properly on the client. * Added dedicated logger for all received RCON messages (net_console.log). * Log commands submitted through in-game console (allows for easier debugging when going through log files). --- r5dev/core/logdef.cpp | 19 +-- r5dev/engine/client/cl_rcon.cpp | 44 +------ r5dev/engine/server/sv_rcon.cpp | 6 +- r5dev/engine/server/sv_rcon.h | 2 +- r5dev/engine/sys_dll.cpp | 6 +- r5dev/engine/sys_utils.cpp | 2 +- r5dev/gameui/IConsole.cpp | 2 +- r5dev/squirrel/sqvm.cpp | 54 +++++++- r5dev/tier0/dbg.cpp | 221 ++++++++++++++++++++++++++++++-- r5dev/tier0/dbg.h | 5 +- r5dev/vgui/vgui_debugpanel.cpp | 2 + r5dev/vgui/vgui_debugpanel.h | 3 +- 12 files changed, 285 insertions(+), 81 deletions(-) diff --git a/r5dev/core/logdef.cpp b/r5dev/core/logdef.cpp index 077f426b..9246affe 100644 --- a/r5dev/core/logdef.cpp +++ b/r5dev/core/logdef.cpp @@ -45,14 +45,17 @@ void SpdLog_Init(void) * ROTATE LOGGER SETUP * ************************/ { - spdlog::rotating_logger_mt("sqvm_warn" , "platform\\logs\\sqvm_warn.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); - spdlog::rotating_logger_mt("sqvm_info" , "platform\\logs\\sqvm_info.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); - spdlog::rotating_logger_mt("sdk_info" , "platform\\logs\\sdk_info.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); - spdlog::rotating_logger_mt("sdk_warn" , "platform\\logs\\sdk_warn.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); - spdlog::rotating_logger_mt("sdk_error" , "platform\\logs\\sdk_error.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); - spdlog::rotating_logger_mt("qhull_info", "platform\\logs\\qhull_info.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); - spdlog::rotating_logger_mt("net_trace" , "platform\\logs\\net_trace.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); - spdlog::rotating_logger_mt("fs_warn" , "platform\\logs\\fs_warn.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); + spdlog::rotating_logger_mt("sqvm_warn" , "platform\\logs\\sqvm_warn.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); + spdlog::rotating_logger_mt("sqvm_info" , "platform\\logs\\sqvm_info.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); + spdlog::rotating_logger_mt("sdk_info" , "platform\\logs\\sdk_info.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); + spdlog::rotating_logger_mt("sdk_warn" , "platform\\logs\\sdk_warn.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); + spdlog::rotating_logger_mt("sdk_error" , "platform\\logs\\sdk_error.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); + spdlog::rotating_logger_mt("qhull_info", "platform\\logs\\qhull_info.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); + spdlog::rotating_logger_mt("net_trace" , "platform\\logs\\net_trace.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); +#ifndef DEDICATED + spdlog::rotating_logger_mt("net_con" , "platform\\logs\\net_console.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); +#endif // !DEDICATED + spdlog::rotating_logger_mt("fs_warn" , "platform\\logs\\fs_warn.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v"); } spdlog::set_level(spdlog::level::trace); diff --git a/r5dev/engine/client/cl_rcon.cpp b/r5dev/engine/client/cl_rcon.cpp index b28f7fc0..47c73480 100644 --- a/r5dev/engine/client/cl_rcon.cpp +++ b/r5dev/engine/client/cl_rcon.cpp @@ -289,49 +289,7 @@ void CRConClient::ProcessMessage(const sv_rcon::response& sv_response) const } case sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG: { - // !TODO: Network the enum for this. - if (svOut.find(SQVM_LOG_T[0])) - { - SQVM_PrintFunc(nullptr, const_cast("%s"), svOut.c_str()); - } - else // This has to be done for RUI color logging. - { - if (svOut.find(sDLL_T[0])) - { - StringReplace(svOut, sDLL_T[0], ""); - DevMsg(eDLL_T::SERVER, "%s", svOut.c_str()); - } - if (svOut.find(sDLL_T[1])) - { - StringReplace(svOut, sDLL_T[1], ""); - DevMsg(eDLL_T::CLIENT, "%s", svOut.c_str()); - } - if (svOut.find(sDLL_T[2])) - { - StringReplace(svOut, sDLL_T[2], ""); - DevMsg(eDLL_T::UI, "%s", svOut.c_str()); - } - if (svOut.find(sDLL_T[3])) - { - StringReplace(svOut, sDLL_T[3], ""); - DevMsg(eDLL_T::ENGINE, "%s", svOut.c_str()); - } - if (svOut.find(sDLL_T[4])) - { - StringReplace(svOut, sDLL_T[4], ""); - DevMsg(eDLL_T::FS, "%s", svOut.c_str()); - } - if (svOut.find(sDLL_T[5])) - { - StringReplace(svOut, sDLL_T[5], ""); - DevMsg(eDLL_T::RTECH, "%s", svOut.c_str()); - } - if (svOut.find(sDLL_T[6])) - { - StringReplace(svOut, sDLL_T[6], ""); - DevMsg(eDLL_T::MS, "%s", svOut.c_str()); - } - } + NetMsg(sv_response.responseid(), svOut.c_str()); break; } default: diff --git a/r5dev/engine/server/sv_rcon.cpp b/r5dev/engine/server/sv_rcon.cpp index 293475e3..3116d2c4 100644 --- a/r5dev/engine/server/sv_rcon.cpp +++ b/r5dev/engine/server/sv_rcon.cpp @@ -195,7 +195,7 @@ void CRConServer::Send(SocketHandle_t hSocket, const std::string& svMessage) con void CRConServer::Recv(void) { int nCount = m_pSocket->GetAcceptedSocketCount(); - static char szRecvBuf[1024]{}; + static char szRecvBuf[1024]; for (m_nConnIndex = nCount - 1; m_nConnIndex >= 0; m_nConnIndex--) { @@ -250,11 +250,11 @@ void CRConServer::Recv(void) // response_t - // Output : serialized results as string //----------------------------------------------------------------------------- -std::string CRConServer::Serialize(const std::string& svRspBuf, const std::string& svRspVal, sv_rcon::response_t response_t) const +std::string CRConServer::Serialize(const std::string& svRspBuf, const std::string& svRspVal, sv_rcon::response_t response_t, int nResponseId) const { sv_rcon::response sv_response; - sv_response.set_responseid(-1); // TODO + sv_response.set_responseid(nResponseId); sv_response.set_responsetype(response_t); switch (response_t) diff --git a/r5dev/engine/server/sv_rcon.h b/r5dev/engine/server/sv_rcon.h index 5aeb801b..1274e652 100644 --- a/r5dev/engine/server/sv_rcon.h +++ b/r5dev/engine/server/sv_rcon.h @@ -26,7 +26,7 @@ public: void Send(SocketHandle_t hSocket, const std::string& svMessage) const; void Recv(void); - std::string Serialize(const std::string& svRspBuf, const std::string& svRspVal, sv_rcon::response_t response_t) const; + std::string Serialize(const std::string& svRspBuf, const std::string& svRspVal, sv_rcon::response_t response_t, int nResponseId = -4) const; cl_rcon::request Deserialize(const std::string& svBuf) const; void Authenticate(const cl_rcon::request& cl_request, CConnectedNetConsoleData* pData); diff --git a/r5dev/engine/sys_dll.cpp b/r5dev/engine/sys_dll.cpp index 3b8a9674..bd674b63 100644 --- a/r5dev/engine/sys_dll.cpp +++ b/r5dev/engine/sys_dll.cpp @@ -8,10 +8,10 @@ int HSys_Error_Internal(char* fmt, va_list args) { char buffer[2048]{}; - Error(eDLL_T::NONE, "_______________________________________________________________\n"); - Error(eDLL_T::NONE, "] ENGINE ERROR ################################################\n"); + Error(eDLL_T::COMMON, "_______________________________________________________________\n"); + Error(eDLL_T::COMMON, "] ENGINE ERROR ################################################\n"); vsprintf(buffer, fmt, args); - Error(eDLL_T::NONE, "%s\n", buffer); + Error(eDLL_T::COMMON, "%s\n", buffer); /////////////////////////////////////////////////////////////////////////// return Sys_Error_Internal(fmt, args); diff --git a/r5dev/engine/sys_utils.cpp b/r5dev/engine/sys_utils.cpp index 816a14ea..d1e6b6e7 100644 --- a/r5dev/engine/sys_utils.cpp +++ b/r5dev/engine/sys_utils.cpp @@ -58,7 +58,7 @@ void* HSys_Warning(int level, char* fmt, ...) va_end(args); }///////////////////////////// - Warning(eDLL_T::NONE, "Warning(%d):%s\n", level, buf); + Warning(eDLL_T::COMMON, "Warning(%d):%s\n", level, buf); return v_Sys_Warning(level, buf); } diff --git a/r5dev/gameui/IConsole.cpp b/r5dev/gameui/IConsole.cpp index 067463df..74e31820 100644 --- a/r5dev/gameui/IConsole.cpp +++ b/r5dev/gameui/IConsole.cpp @@ -528,7 +528,7 @@ void CConsole::FindFromPartial(void) //----------------------------------------------------------------------------- void CConsole::ProcessCommand(const char* pszCommand) { - AddLog(ImVec4(1.00f, 0.80f, 0.60f, 1.00f), "%s] %s\n", Plat_GetProcessUpTime(), pszCommand); + DevMsg(eDLL_T::COMMON, "] %s\n", pszCommand); std::thread t(CEngineClient_CommandExecute, this, pszCommand); t.detach(); // Detach from render thread. diff --git a/r5dev/squirrel/sqvm.cpp b/r5dev/squirrel/sqvm.cpp index d317f9ce..6cb515ba 100644 --- a/r5dev/squirrel/sqvm.cpp +++ b/r5dev/squirrel/sqvm.cpp @@ -32,20 +32,25 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...) { SQCONTEXT context; + int nResponseId; // We use the sqvm pointer as index for SDK usage as the function prototype has to match assembly. switch (static_cast(reinterpret_cast(v))) { case SQCONTEXT::SERVER: context = SQCONTEXT::SERVER; + nResponseId = -3; break; case SQCONTEXT::CLIENT: context = SQCONTEXT::CLIENT; + nResponseId = -2; break; case SQCONTEXT::UI: context = SQCONTEXT::UI; + nResponseId = -1; break; case SQCONTEXT::NONE: context = SQCONTEXT::NONE; + nResponseId = -4; break; default: #if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1) && !defined (GAMEDLL_S2) @@ -53,8 +58,27 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...) #else // Nothing equal to 'rdx + 18h' exist in the vm structs for anything below S3. context = SQVM_GetContextIndex(v); #endif + switch (context) + { + case SQCONTEXT::SERVER: + nResponseId = -3; + break; + case SQCONTEXT::CLIENT: + nResponseId = -2; + break; + case SQCONTEXT::UI: + nResponseId = -1; + break; + case SQCONTEXT::NONE: + nResponseId = -4; + break; + default: + nResponseId = -4; + break; + } break; } + static SQChar buf[4096] = {}; static std::string vmStr; static std::regex rxAnsiExp("\\\033\\[.*?m"); @@ -89,7 +113,7 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...) { wconsole->debug(vmStr); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(vmStr, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(vmStr, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, nResponseId)); #endif // DEDICATED } else @@ -135,7 +159,7 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...) vmStrAnsi.append(buf); wconsole->debug(vmStrAnsi); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(vmStrAnsi, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(vmStrAnsi, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, nResponseId)); #endif // DEDICATED } @@ -175,7 +199,7 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...) } g_pConsole->AddLog(ConLog_t(g_spd_sys_w_oss.str(), color)); - g_pLogSystem.AddLog(static_cast(context), g_spd_sys_w_oss.str()); + g_pLogSystem.AddLog(static_cast(nResponseId), g_spd_sys_w_oss.str()); g_spd_sys_w_oss.str(""); g_spd_sys_w_oss.clear(); @@ -198,6 +222,7 @@ SQRESULT SQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...) SQRESULT SQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger* nStringSize, SQChar** ppString) { static void* retaddr = reinterpret_cast(p_SQVM_WarningCmd.Offset(0x10).FindPatternSelf("85 ?? ?? 99", CMemory::Direction::DOWN).GetPtr()); + int nResponseId; SQCONTEXT context; SQRESULT result = v_SQVM_WarningFunc(v, a2, a3, nStringSize, ppString); @@ -213,6 +238,25 @@ SQRESULT SQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger* context = SQVM_GetContextIndex(v); #endif + switch (context) + { + case SQCONTEXT::SERVER: + nResponseId = -3; + break; + case SQCONTEXT::CLIENT: + nResponseId = -2; + break; + case SQCONTEXT::UI: + nResponseId = -1; + break; + case SQCONTEXT::NONE: + nResponseId = -4; + break; + default: + nResponseId = -4; + break; + } + static std::shared_ptr iconsole = spdlog::get("game_console"); static std::shared_ptr wconsole = spdlog::get("win_console"); static std::shared_ptr sqlogger = spdlog::get("sqvm_warn"); @@ -229,7 +273,7 @@ SQRESULT SQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger* { wconsole->debug(vmStr); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(vmStr, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(vmStr, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, nResponseId)); #endif // DEDICATED } else @@ -239,7 +283,7 @@ SQRESULT SQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger* vmStrAnsi.append(svConstructor); wconsole->debug(vmStrAnsi); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(vmStrAnsi, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(vmStrAnsi, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, nResponseId)); #endif // DEDICATED } diff --git a/r5dev/tier0/dbg.cpp b/r5dev/tier0/dbg.cpp index a719166d..7d2c7d8c 100644 --- a/r5dev/tier0/dbg.cpp +++ b/r5dev/tier0/dbg.cpp @@ -11,7 +11,7 @@ #include "tier0/dbg.h" #include "tier0/platform.h" #include "tier0/threadtools.h" -#include +#include "tier0/commandline.h" #ifndef DEDICATED #include "vgui/vgui_debugpanel.h" #include "gameui/IConsole.h" @@ -89,9 +89,199 @@ PLATFORM_INTERFACE void AssertValidWStringPtr(const wchar_t* ptr, int maxchar/* #endif } +//----------------------------------------------------------------------------- +// Purpose: Netconsole log +// Input : context - +// *fmt - ... - +//----------------------------------------------------------------------------- +void NetMsg(int context, const char* fmt, ...) +{ +#ifndef DEDICATED + static char szBuf[4096] = {}; + static std::string svOut; + static std::regex rxAnsiExp("\\\033\\[.*?m"); + static std::shared_ptr iconsole = spdlog::get("game_console"); + static std::shared_ptr wconsole = spdlog::get("win_console"); + static std::shared_ptr ntlogger = spdlog::get("net_con"); + switch (context) + { + case -3: + case -2: + case -1: + { + s_LogMutex.lock(); + {///////////////////////////// + va_list args{}; + va_start(args, fmt); + + vsnprintf(szBuf, sizeof(szBuf), fmt, args); + + szBuf[sizeof(szBuf) - 1] = 0; + va_end(args); + }///////////////////////////// + + svOut = szBuf; + if (svOut.back() != '\n') + { + svOut.append("\n"); + } + ImVec4 color; + + if (svOut.find("\033[38;2;255;255;000m") != std::string::npos) + { // Warning. + color = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); + context = static_cast(LogType_t::WARNING_C); + } + else if (svOut.find("\033[38;2;255;000;000m") != std::string::npos) + { // Error. + color = ImVec4(1.00f, 0.00f, 0.00f, 0.80f); + context = static_cast(LogType_t::ERROR_C); + } + else + { + switch (context) + { + case -3: // [ SERVER ] + color = ImVec4(0.59f, 0.58f, 0.73f, 1.00f); + break; + case -2: // [ CLIENT ] + color = ImVec4(0.59f, 0.58f, 0.63f, 1.00f); + break; + case -1: // [ UI ] + color = ImVec4(0.59f, 0.48f, 0.53f, 1.00f); + break; + default: + color = ImVec4(0.59f, 0.58f, 0.63f, 1.00f); + break; + } + } + + if (g_bSpdLog_UseAnsiClr) + { + wconsole->debug(svOut); + svOut = std::regex_replace(svOut, rxAnsiExp, ""); + } + else + { + svOut = std::regex_replace(svOut, rxAnsiExp, ""); + wconsole->debug(svOut); + } + + ntlogger->debug(svOut); + iconsole->debug(svOut); + + g_pConsole->AddLog(ConLog_t(g_spd_sys_w_oss.str(), color)); + g_pLogSystem.AddLog(static_cast(context), g_spd_sys_w_oss.str()); + + g_spd_sys_w_oss.str(""); + g_spd_sys_w_oss.clear(); + + s_LogMutex.unlock(); + + break; + } + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + { + s_LogMutex.lock(); + {///////////////////////////// + va_list args{}; + va_start(args, fmt); + + vsnprintf(szBuf, sizeof(szBuf), fmt, args); + + szBuf[sizeof(szBuf) - 1] = 0; + va_end(args); + }///////////////////////////// + + svOut = szBuf; + if (svOut.back() != '\n') + { + svOut.append("\n"); + } + ImVec4 color; + + if (svOut.find("\033[38;2;255;255;000;") != std::string::npos) + { // Warning. + color = ImVec4(1.00f, 1.00f, 0.00f, 0.80f); + context = static_cast(LogType_t::WARNING_C); + } + else if (svOut.find("\033[38;2;255;000;000;") != std::string::npos) + { // Error. + color = ImVec4(1.00f, 0.00f, 0.00f, 0.80f); + context = static_cast(LogType_t::ERROR_C); + } + else + { + switch (static_cast(context)) + { + case eDLL_T::SERVER: + color = ImVec4(0.23f, 0.47f, 0.85f, 1.00f); + break; + case eDLL_T::CLIENT: + color = ImVec4(0.46f, 0.46f, 0.46f, 1.00f); + break; + case eDLL_T::UI: + color = ImVec4(0.59f, 0.35f, 0.46f, 1.00f); + break; + case eDLL_T::ENGINE: + color = ImVec4(0.70f, 0.70f, 0.70f, 1.00f); + break; + case eDLL_T::FS: + color = ImVec4(0.32f, 0.64f, 0.72f, 1.00f); + break; + case eDLL_T::RTECH: + color = ImVec4(0.36f, 0.70f, 0.35f, 1.00f); + break; + case eDLL_T::MS: + color = ImVec4(0.75f, 0.41f, 0.67f, 1.00f); + break; + case eDLL_T::NETCON: + color = ImVec4(0.81f, 0.81f, 0.81f, 1.00f); + break; + case eDLL_T::COMMON: + color = ImVec4(1.00f, 0.80f, 0.60f, 1.00f); + break; + default: + color = ImVec4(0.81f, 0.81f, 0.81f, 1.00f); + break; + } + } + + if (g_bSpdLog_UseAnsiClr) + { + wconsole->debug(svOut); + svOut = std::regex_replace(svOut, rxAnsiExp, ""); + } + else + { + svOut = std::regex_replace(svOut, rxAnsiExp, ""); + wconsole->debug(svOut); + } + + ntlogger->debug(svOut); + iconsole->info(svOut); + + g_pConsole->AddLog(ConLog_t(g_spd_sys_w_oss.str(), color)); + g_pLogSystem.AddLog(static_cast(context), g_spd_sys_w_oss.str()); + + g_spd_sys_w_oss.str(""); + g_spd_sys_w_oss.clear(); + s_LogMutex.unlock(); + break; + } + } +#endif // !DEDICATED +} + //----------------------------------------------------------------------------- // Purpose: Show logs to all console interfaces -// Input : idx - +// Input : context - // *fmt - ... - //----------------------------------------------------------------------------- void DevMsg(eDLL_T context, const char* fmt, ...) @@ -132,7 +322,7 @@ void DevMsg(eDLL_T context, const char* fmt, ...) { wconsole->debug(svOut); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast(context))); #endif // DEDICATED } else @@ -147,7 +337,7 @@ void DevMsg(eDLL_T context, const char* fmt, ...) } wconsole->debug(svAnsiOut); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast(context))); #endif // DEDICATED } @@ -156,10 +346,9 @@ void DevMsg(eDLL_T context, const char* fmt, ...) #ifndef DEDICATED iconsole->info(svOut); - int nLog = static_cast(context) + 3; // RUI log enum is shifted by 3 for scripts. - LogType_t tLog = static_cast(nLog); - + LogType_t tLog = static_cast(context); ImVec4 color; + switch (context) { case eDLL_T::SERVER: @@ -183,6 +372,12 @@ void DevMsg(eDLL_T context, const char* fmt, ...) case eDLL_T::MS: color = ImVec4(0.75f, 0.41f, 0.67f, 1.00f); break; + case eDLL_T::NETCON: + color = ImVec4(0.81f, 0.81f, 0.81f, 1.00f); + break; + case eDLL_T::COMMON: + color = ImVec4(1.00f, 0.80f, 0.60f, 1.00f); + break; default: color = ImVec4(0.81f, 0.81f, 0.81f, 1.00f); break; @@ -199,7 +394,7 @@ void DevMsg(eDLL_T context, const char* fmt, ...) //----------------------------------------------------------------------------- // Purpose: Print engine and SDK errors -// Input : idx - +// Input : context - // *fmt - ... - //----------------------------------------------------------------------------- void Warning(eDLL_T context, const char* fmt, ...) @@ -240,7 +435,7 @@ void Warning(eDLL_T context, const char* fmt, ...) { wconsole->debug(svOut); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast(context))); #endif // DEDICATED } else @@ -256,7 +451,7 @@ void Warning(eDLL_T context, const char* fmt, ...) } wconsole->debug(svAnsiOut); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast(context))); #endif // DEDICATED } @@ -276,7 +471,7 @@ void Warning(eDLL_T context, const char* fmt, ...) //----------------------------------------------------------------------------- // Purpose: Print engine and SDK errors -// Input : idx - +// Input : context - // *fmt - ... - //----------------------------------------------------------------------------- void Error(eDLL_T context, const char* fmt, ...) @@ -317,7 +512,7 @@ void Error(eDLL_T context, const char* fmt, ...) { wconsole->debug(svOut); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(svOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast(context))); #endif // DEDICATED } else @@ -333,7 +528,7 @@ void Error(eDLL_T context, const char* fmt, ...) } wconsole->debug(svAnsiOut); #ifdef DEDICATED - RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG)); + RCONServer()->Send(RCONServer()->Serialize(svAnsiOut, "", sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG, static_cast(context))); #endif // DEDICATED } diff --git a/r5dev/tier0/dbg.h b/r5dev/tier0/dbg.h index d1d202fb..e05f8d66 100644 --- a/r5dev/tier0/dbg.h +++ b/r5dev/tier0/dbg.h @@ -23,7 +23,7 @@ enum class eDLL_T : int RTECH = 5, // RTech API MS = 6, // Material System NETCON = 7, // Net Console - NONE = 8 + COMMON = 8 }; const string sDLL_T[9] = @@ -49,7 +49,7 @@ const static string sANSI_DLL_T[9] = "\033[38;2;092;181;089mNative(R):", "\033[38;2;192;105;173mNative(M):", "\033[38;2;204;204;204mNetcon(X):", - "" + "\033[38;2;255;204;153m" }; extern std::mutex s_LogMutex; @@ -58,6 +58,7 @@ extern std::mutex s_LogMutex; ////////////////////////////////////////////////////////////////////////// // These functions do not return. +PLATFORM_INTERFACE void NetMsg(int context, const char* fmt, ...) FMTFUNCTION(2, 3); PLATFORM_INTERFACE void DevMsg(eDLL_T context, const char* fmt, ...) FMTFUNCTION(2, 3); PLATFORM_INTERFACE void Warning(eDLL_T context, const char* fmt, ...) FMTFUNCTION(1, 2); PLATFORM_INTERFACE void Error(eDLL_T context, const char* fmt, ...) FMTFUNCTION(1, 2); diff --git a/r5dev/vgui/vgui_debugpanel.cpp b/r5dev/vgui/vgui_debugpanel.cpp index bec9f963..e845d981 100644 --- a/r5dev/vgui/vgui_debugpanel.cpp +++ b/r5dev/vgui/vgui_debugpanel.cpp @@ -256,6 +256,8 @@ Color CLogSystem::GetLogColorForType(LogType_t type) const return { cl_conoverlay_native_ms_clr->GetColor() }; case LogType_t::NETCON_S: return { cl_conoverlay_netcon_clr->GetColor() }; + case LogType_t::COMMON_C: + return { cl_conoverlay_common_clr->GetColor() }; case LogType_t::WARNING_C: return { cl_conoverlay_warning_clr->GetColor() }; case LogType_t::ERROR_C: diff --git a/r5dev/vgui/vgui_debugpanel.h b/r5dev/vgui/vgui_debugpanel.h index bedb4150..6ec1b2f6 100644 --- a/r5dev/vgui/vgui_debugpanel.h +++ b/r5dev/vgui/vgui_debugpanel.h @@ -4,7 +4,7 @@ enum class LogType_t : int { - SCRIPT_SERVER, + SCRIPT_SERVER = -3, SCRIPT_CLIENT, SCRIPT_UI, NATIVE_SERVER, @@ -15,6 +15,7 @@ enum class LogType_t : int NATIVE_RTECH, NATIVE_MS, NETCON_S, + COMMON_C, WARNING_C, ERROR_C, NONE