diff --git a/core/RootConsoleMenu.cpp b/core/RootConsoleMenu.cpp index b38b9d79..de9a7a5c 100644 --- a/core/RootConsoleMenu.cpp +++ b/core/RootConsoleMenu.cpp @@ -67,23 +67,10 @@ void RootConsoleMenu::OnSourceModShutdown() void RootConsoleMenu::ConsolePrint(const char *fmt, ...) { - char buffer[512]; - va_list ap; va_start(ap, fmt); - size_t len = vsnprintf(buffer, sizeof(buffer), fmt, ap); + UTIL_ConsolePrintVa(fmt, ap); va_end(ap); - - if (len >= sizeof(buffer) - 1) - { - buffer[510] = '\n'; - buffer[511] = '\0'; - } else { - buffer[len++] = '\n'; - buffer[len] = '\0'; - } - - META_CONPRINT(buffer); } bool RootConsoleMenu::AddRootConsoleCommand(const char *cmd, const char *text, IRootConsoleCommand *pHandler) diff --git a/core/logic/intercom.h b/core/logic/intercom.h index 12a350c4..63b4f38c 100644 --- a/core/logic/intercom.h +++ b/core/logic/intercom.h @@ -52,7 +52,7 @@ using namespace SourceHook; * Add 1 to the RHS of this expression to bump the intercom file * This is to prevent mismatching core/logic binaries */ -#define SM_LOGIC_MAGIC (0x0F47C0DE - 36) +#define SM_LOGIC_MAGIC (0x0F47C0DE - 37) #if defined SM_LOGIC class IVEngineServer @@ -318,6 +318,7 @@ struct sm_core_t bool (*DescribePlayer)(int index, const char **namep, const char **authp, int *useridp); int (*MaxClients)(); int (*GetGlobalTarget)(); + void (*ConsolePrintVa)(const char *fmt, va_list ap); const char *gamesuffix; /* Data */ ServerGlobals *serverGlobals; diff --git a/core/logic_bridge.cpp b/core/logic_bridge.cpp index cda6ca06..e3c9b0e5 100644 --- a/core/logic_bridge.cpp +++ b/core/logic_bridge.cpp @@ -544,6 +544,30 @@ static int get_global_target() return g_SourceMod.GetGlobalTarget(); } +void UTIL_ConsolePrintVa(const char *fmt, va_list ap) +{ + char buffer[512]; + size_t len = ke::SafeVsprintf(buffer, sizeof(buffer), fmt, ap); + + if (len >= sizeof(buffer) - 1) + { + buffer[510] = '\n'; + buffer[511] = '\0'; + } else { + buffer[len++] = '\n'; + buffer[len] = '\0'; + } + META_CONPRINT(buffer); +} + +void UTIL_ConsolePrint(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + UTIL_ConsolePrintVa(fmt, ap); + va_end(ap); +} + #if defined METAMOD_PLAPI_VERSION #if SOURCE_ENGINE == SE_LEFT4DEAD #define GAMEFIX "2.l4d" @@ -636,6 +660,7 @@ static sm_core_t core_bridge = describe_player, get_max_clients, get_global_target, + UTIL_ConsolePrintVa, GAMEFIX, &serverGlobals, }; diff --git a/core/sourcemod.h b/core/sourcemod.h index cf847c93..c45a1f2f 100644 --- a/core/sourcemod.h +++ b/core/sourcemod.h @@ -151,6 +151,9 @@ private: CVector m_frame_hooks; }; +void UTIL_ConsolePrintVa(const char *fmt, va_list ap); +void UTIL_ConsolePrint(const char *fmt, ...); + extern bool g_Loaded; extern bool sm_show_debug_spew; extern SourceModBase g_SourceMod;