aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2023-02-22 23:08:44 +0000
committerGitHub <noreply@github.com>2023-02-22 23:08:44 +0000
commit6aaac4cd452878acc59d9748bcd2d0e072d2a432 (patch)
treeea1d643962b2740d9bd5ec1480666a42c01b15b7
parent8468f509d4ede30e0c457db4448c83909464e83c (diff)
downloadNorthstarLauncher-6aaac4cd452878acc59d9748bcd2d0e072d2a432.tar.gz
NorthstarLauncher-6aaac4cd452878acc59d9748bcd2d0e072d2a432.zip
Implement `dedi_sendPrintsToClient` (#418)
* add CGlobals class and g_pGlobals, and update scripts to support * don't automatically enable antispeedhack (oops) * add dedicated.cpp * format * bad push oops * reformat again * implement dedi_sendPrintsToClient * update formatting
-rw-r--r--NorthstarDLL/NorthstarDLL.vcxproj8
-rw-r--r--NorthstarDLL/NorthstarDLL.vcxproj.filters14
-rw-r--r--NorthstarDLL/dedicated/dedicated.cpp4
-rw-r--r--NorthstarDLL/dedicated/dedicatedlogtoclient.cpp49
-rw-r--r--NorthstarDLL/dedicated/dedicatedlogtoclient.h11
5 files changed, 79 insertions, 7 deletions
diff --git a/NorthstarDLL/NorthstarDLL.vcxproj b/NorthstarDLL/NorthstarDLL.vcxproj
index bb28d575..7aa68841 100644
--- a/NorthstarDLL/NorthstarDLL.vcxproj
+++ b/NorthstarDLL/NorthstarDLL.vcxproj
@@ -413,6 +413,7 @@
<ClInclude Include="core\structs.h" />
<ClInclude Include="core\tier0.h" />
<ClInclude Include="dedicated\dedicated.h" />
+ <ClInclude Include="dedicated\dedicatedlogtoclient.h" />
<ClInclude Include="dllmain.h" />
<ClInclude Include="engine\hoststate.h" />
<ClInclude Include="engine\r2engine.h" />
@@ -449,7 +450,7 @@
<ClInclude Include="squirrel\squirreldatatypes.h" />
<ClInclude Include="util\utils.h" />
<ClInclude Include="util\version.h" />
- <ClInclude Include="util\wininfo.h" />
+ <ClInclude Include="util\wininfo.h" />
</ItemGroup>
<ItemGroup>
<None Include="..\include\spdlog\fmt\bundled\LICENSE.rst" />
@@ -483,6 +484,7 @@
<ClCompile Include="core\sourceinterface.cpp" />
<ClCompile Include="core\tier0.cpp" />
<ClCompile Include="dedicated\dedicated.cpp" />
+ <ClCompile Include="dedicated\dedicatedlogtoclient.cpp" />
<ClCompile Include="dedicated\dedicatedmaterialsystem.cpp" />
<ClCompile Include="dllmain.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Use</PrecompiledHeader>
@@ -540,7 +542,7 @@
<ClCompile Include="util\printmaps.cpp" />
<ClCompile Include="util\utils.cpp" />
<ClCompile Include="util\version.cpp" />
- <ClCompile Include="util\wininfo.cpp" />
+ <ClCompile Include="util\wininfo.cpp" />
</ItemGroup>
<ItemGroup>
<MASM Include="audio_asm.asm" />
@@ -549,4 +551,4 @@
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
</ImportGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/NorthstarDLL/NorthstarDLL.vcxproj.filters b/NorthstarDLL/NorthstarDLL.vcxproj.filters
index d8437ba5..bb880580 100644
--- a/NorthstarDLL/NorthstarDLL.vcxproj.filters
+++ b/NorthstarDLL/NorthstarDLL.vcxproj.filters
@@ -1173,12 +1173,15 @@
<ClInclude Include="core\macros.h">
<Filter>Header Files\core</Filter>
</ClInclude>
- <ClInclude Include="util\wininfo.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="util\wininfo.h">
+ <Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="util\utils.h">
<Filter>Header Files\util</Filter>
</ClInclude>
+ <ClInclude Include="dedicated\dedicatedlogtoclient.h">
+ <Filter>Header Files\dedicated</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\include\spdlog\fmt\bundled\LICENSE.rst">
@@ -1429,10 +1432,13 @@
<ClCompile Include="util\utils.cpp">
<Filter>Source Files\util</Filter>
</ClCompile>
+ <ClCompile Include="dedicated\dedicatedlogtoclient.cpp">
+ <Filter>Source Files\dedicated</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<MASM Include="audio_asm.asm">
- <Filter>Source Files</Filter>
+ <Filter>Source Files\client</Filter>
</MASM>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/NorthstarDLL/dedicated/dedicated.cpp b/NorthstarDLL/dedicated/dedicated.cpp
index 267fbe92..1aff0f34 100644
--- a/NorthstarDLL/dedicated/dedicated.cpp
+++ b/NorthstarDLL/dedicated/dedicated.cpp
@@ -1,4 +1,5 @@
#include "dedicated.h"
+#include "dedicatedlogtoclient.h"
#include "core/tier0.h"
#include "playlist.h"
#include "engine/r2engine.h"
@@ -226,6 +227,9 @@ ON_DLL_LOAD_DEDI_RELIESON("engine.dll", DedicatedServer, ServerPresence, (CModul
DedicatedConsoleServerPresence* presenceReporter = new DedicatedConsoleServerPresence;
g_pServerPresence->AddPresenceReporter(presenceReporter);
+ // setup dedicated printing to client
+ RegisterCustomSink(std::make_shared<DedicatedServerLogToClientSink>());
+
// Disable Quick Edit mode to reduce chance of user unintentionally hanging their server by selecting something.
if (!Tier0::CommandLine()->CheckParm("-bringbackquickedit"))
{
diff --git a/NorthstarDLL/dedicated/dedicatedlogtoclient.cpp b/NorthstarDLL/dedicated/dedicatedlogtoclient.cpp
new file mode 100644
index 00000000..bb62cb36
--- /dev/null
+++ b/NorthstarDLL/dedicated/dedicatedlogtoclient.cpp
@@ -0,0 +1,49 @@
+#include "pch.h"
+#include "dedicatedlogtoclient.h"
+#include "engine/r2engine.h"
+
+void (*CGameClient__ClientPrintf)(R2::CBaseClient* pClient, const char* fmt, ...);
+
+void DedicatedServerLogToClientSink::custom_sink_it_(const custom_log_msg& msg)
+{
+ if (*R2::g_pServerState == R2::server_state_t::ss_dead)
+ return;
+
+ enum class eSendPrintsToClient
+ {
+ NONE = -1,
+ FIRST,
+ ALL
+ };
+
+ static const ConVar* Cvar_dedi_sendPrintsToClient = R2::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 < R2::g_pGlobals->m_nMaxClients; i++)
+ {
+ R2::CBaseClient* pClient = &R2::g_pClientArray[i];
+
+ if (pClient->m_Signon >= R2::eSignonState::CONNECTED)
+ {
+ CGameClient__ClientPrintf(pClient, sLogMessage.c_str());
+
+ if (eSendPrints == eSendPrintsToClient::FIRST)
+ break;
+ }
+ }
+}
+
+void DedicatedServerLogToClientSink::sink_it_(const spdlog::details::log_msg& 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).As<void (*)(R2::CBaseClient*, const char*, ...)>();
+}
diff --git a/NorthstarDLL/dedicated/dedicatedlogtoclient.h b/NorthstarDLL/dedicated/dedicatedlogtoclient.h
new file mode 100644
index 00000000..16f1e584
--- /dev/null
+++ b/NorthstarDLL/dedicated/dedicatedlogtoclient.h
@@ -0,0 +1,11 @@
+#pragma once
+#include "logging/logging.h"
+#include "core/convar/convar.h"
+
+class DedicatedServerLogToClientSink : public CustomSink
+{
+ protected:
+ void custom_sink_it_(const custom_log_msg& msg);
+ void sink_it_(const spdlog::details::log_msg& msg) override;
+ void flush_() override;
+};