From 3db1f6773e7a66140341fedfc1e809bfe402feaa Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Tue, 4 Jun 2024 16:45:02 +0200 Subject: [PATCH] add mod download warning --- include/Network/network.h | 3 +++ src/Network/Core.cpp | 13 +++++++++++++ src/Network/Resources.cpp | 17 ++++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/include/Network/network.h b/include/Network/network.h index 4c3bdf6..6c3aa7f 100755 --- a/include/Network/network.h +++ b/include/Network/network.h @@ -13,6 +13,8 @@ void NetReset(); extern bool Dev; extern int ping; +extern bool ModWarningConfirmed; + [[noreturn]] void CoreNetwork(); extern int ProxyPort; extern int ClientID; @@ -46,3 +48,4 @@ void TCPClientMain(const std::string& IP,int Port); void UDPClientMain(const std::string& IP,int Port); void TCPGameServer(const std::string& IP, int Port); + diff --git a/src/Network/Core.cpp b/src/Network/Core.cpp index 0f1139e..1331aaa 100755 --- a/src/Network/Core.cpp +++ b/src/Network/Core.cpp @@ -58,6 +58,8 @@ bool IsAllowedLink(const std::string& Link) { return std::regex_search(Link,link_match, link_pattern) && link_match.position() == 0; } +bool ModWarningConfirmed = false; + void Parse(std::string Data,SOCKET CSocket){ char Code = Data.at(0), SubCode = 0; if(Data.length() > 1)SubCode = Data.at(1); @@ -87,6 +89,17 @@ void Parse(std::string Data,SOCKET CSocket){ } Data.clear(); break; + // response to "WMODS_FOUND" message, either Y (yes ok) or N (no) + case 'W': { + if (SubCode == 'Y') { + ModWarningConfirmed = true; + } else if (SubCode == 'N') { + ModWarningConfirmed = false; + NetReset(); + Terminate = true; + TCPTerminate = true; + } + } case 'P': Data = Code + std::to_string(ProxyPort); break; diff --git a/src/Network/Resources.cpp b/src/Network/Resources.cpp index 29de1cb..10ab10e 100755 --- a/src/Network/Resources.cpp +++ b/src/Network/Resources.cpp @@ -221,6 +221,21 @@ void SyncResources(SOCKET Sock){ std::string Ret = Auth(Sock); if(Ret.empty())return; + ModWarningConfirmed = false; + + GameSend("WMODS_FOUND"); + + while (!Terminate && !ModWarningConfirmed) { + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + + if (!ModWarningConfirmed) { + UlStatus = "UlMods rejected!"; + info("Mods rejected by user!"); + // game has already cancelled by now + return; + } + info("Checking Resources..."); CheckForDir(); @@ -322,4 +337,4 @@ void SyncResources(SOCKET Sock){ UlStatus = "Ulstart"; info("Connection Terminated!"); } -} \ No newline at end of file +}