From d28dc6ecc46a6451ece3764f47a5d3bfb573c0eb Mon Sep 17 00:00:00 2001 From: FutureRave Date: Wed, 4 May 2022 00:03:11 +0100 Subject: [PATCH 1/2] [Dedicated] fix sv_lanOnly --- src/Components/Modules/Dedicated.cpp | 14 +++++++++++++- src/Components/Modules/Dedicated.hpp | 1 + src/Components/Modules/Node.cpp | 4 ++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Components/Modules/Dedicated.cpp b/src/Components/Modules/Dedicated.cpp index 6043607a..da207d22 100644 --- a/src/Components/Modules/Dedicated.cpp +++ b/src/Components/Modules/Dedicated.cpp @@ -3,7 +3,9 @@ namespace Components { SteamID Dedicated::PlayerGuids[18][2]; + Dvar::Var Dedicated::SVRandomMapRotation; + Dvar::Var Dedicated::SVLanOnly; bool Dedicated::IsEnabled() { @@ -290,7 +292,11 @@ namespace Components // Make sure all callbacks are handled Scheduler::OnFrame(Steam::SteamAPI_RunCallbacks); - Dvar::Register("sv_lanOnly", false, Game::dvar_flag::DVAR_NONE, "Don't act as node"); + Dvar::OnInit([] + { + Dedicated::SVLanOnly = Dvar::Register("sv_lanOnly", false, + Game::dvar_flag::DVAR_NONE, "Don't act as node"); + }); Utils::Hook(0x60BE98, Dedicated::InitDedicatedServer, HOOK_CALL).install()->quick(); @@ -380,6 +386,12 @@ namespace Components { static Utils::Time::Interval interval; + // Do not send an heartbeat if sv_lanOnly is set to true + if (Dedicated::SVLanOnly.get()) + { + return; + } + if (Dvar::Var("sv_maxclients").get() > 0 && interval.elapsed(2min)) { interval.update(); diff --git a/src/Components/Modules/Dedicated.hpp b/src/Components/Modules/Dedicated.hpp index cfcbc539..80b39795 100644 --- a/src/Components/Modules/Dedicated.hpp +++ b/src/Components/Modules/Dedicated.hpp @@ -8,6 +8,7 @@ namespace Components Dedicated(); static SteamID PlayerGuids[18][2]; + static Dvar::Var SVLanOnly; static bool IsEnabled(); diff --git a/src/Components/Modules/Node.cpp b/src/Components/Modules/Node.cpp index 60d1d18b..9ed8e9c9 100644 --- a/src/Components/Modules/Node.cpp +++ b/src/Components/Modules/Node.cpp @@ -114,7 +114,7 @@ namespace Components void Node::StoreNodes(bool force) { - if (Dedicated::IsEnabled() && Dvar::Var("sv_lanOnly").get()) return; + if (Dedicated::IsEnabled() && Dedicated::SVLanOnly.get()) return; static Utils::Time::Interval interval; if (!force && !interval.elapsed(1min)) return; @@ -168,7 +168,7 @@ namespace Components void Node::RunFrame() { if (ServerList::useMasterServer) return; - if (Dedicated::IsEnabled() && Dvar::Var("sv_lanOnly").get()) return; + if (Dedicated::IsEnabled() && Dedicated::SVLanOnly.get()) return; if (!Dedicated::IsEnabled() && *Game::clcState > 0) { From 219a10d6a0cdad0312e5afd6a39b9faecf605200 Mon Sep 17 00:00:00 2001 From: FutureRave Date: Wed, 4 May 2022 00:26:53 +0100 Subject: [PATCH 2/2] [Dedicated] Actually fix sv_lanOnly --- src/Components/Modules/Dedicated.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Components/Modules/Dedicated.cpp b/src/Components/Modules/Dedicated.cpp index da207d22..582bebb0 100644 --- a/src/Components/Modules/Dedicated.cpp +++ b/src/Components/Modules/Dedicated.cpp @@ -252,9 +252,15 @@ namespace Components } void Dedicated::Heartbeat() - { - int masterPort = Dvar::Var("masterPort").get(); - const char* masterServerName = Dvar::Var("masterServerName").get(); + { + // Do not send a heartbeat if sv_lanOnly is set to true + if (Dedicated::SVLanOnly.get()) + { + return; + } + + auto masterPort = Dvar::Var("masterPort").get(); + const auto* masterServerName = Dvar::Var("masterServerName").get(); Network::Address master(Utils::String::VA("%s:%u", masterServerName, masterPort)); @@ -386,12 +392,6 @@ namespace Components { static Utils::Time::Interval interval; - // Do not send an heartbeat if sv_lanOnly is set to true - if (Dedicated::SVLanOnly.get()) - { - return; - } - if (Dvar::Var("sv_maxclients").get() > 0 && interval.elapsed(2min)) { interval.update();