NorthstarLauncher/primedev/dedicated/dedicatedlogtoclient.cpp

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*, ...)>();
}