50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
#include "dedicatedlogtoclient.h"
|
|
#include "engine/r2engine.h"
|
|
|
|
void (*CGameClient__ClientPrintf)(CBaseClient* pClient, const char* fmt, ...);
|
|
|
|
void DedicatedServerLogToClientSink::custom_sink_it_(const custom_log_msg& msg)
|
|
{
|
|
if (*g_pServerState == server_state_t::ss_dead)
|
|
return;
|
|
|
|
enum class eSendPrintsToClient
|
|
{
|
|
NONE = -1,
|
|
FIRST,
|
|
ALL
|
|
};
|
|
|
|
static const ConVar* Cvar_dedi_sendPrintsToClient = g_pCVar->FindVar("dedi_sendPrintsToClient");
|
|
eSendPrintsToClient eSendPrints = static_cast<eSendPrintsToClient>(Cvar_dedi_sendPrintsToClient->GetInt());
|
|
if (eSendPrints == eSendPrintsToClient::NONE)
|
|
return;
|
|
|
|
std::string sLogMessage = fmt::format("[DEDICATED SERVER] [{}] {}", level_names[msg.level], msg.payload);
|
|
for (int i = 0; i < g_pGlobals->m_nMaxClients; i++)
|
|
{
|
|
CBaseClient* pClient = &g_pClientArray[i];
|
|
|
|
if (pClient->m_Signon >= eSignonState::CONNECTED)
|
|
{
|
|
CGameClient__ClientPrintf(pClient, sLogMessage.c_str());
|
|
|
|
if (eSendPrints == eSendPrintsToClient::FIRST)
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void DedicatedServerLogToClientSink::sink_it_(const spdlog::details::log_msg& msg)
|
|
{
|
|
NOTE_UNUSED(msg);
|
|
throw std::runtime_error("sink_it_ called on DedicatedServerLogToClientSink with pure log_msg. This is an error!");
|
|
}
|
|
|
|
void DedicatedServerLogToClientSink::flush_() {}
|
|
|
|
ON_DLL_LOAD_DEDI("engine.dll", DedicatedServerLogToClient, (CModule module))
|
|
{
|
|
CGameClient__ClientPrintf = module.Offset(0x1016A0).RCast<void (*)(CBaseClient*, const char*, ...)>();
|
|
}
|