From d759113332cdc26576fe2bb2310373bbca2ea2a7 Mon Sep 17 00:00:00 2001 From: JoKeRZH429 <83122870+JoKeRZH429@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:48:37 +0500 Subject: [PATCH] feat(quickmatch): Add minimum maps selection in quickmatch from playlist data --- .../OnlineServices_MatchmakingInterface.h | 1 + .../GUICallbacks/Menus/WOLQuickMatchMenu.cpp | 18 ++++++++++++++++++ .../OnlineServices_MatchmakingInterface.cpp | 1 + 3 files changed, 20 insertions(+) diff --git a/GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/OnlineServices_MatchmakingInterface.h b/GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/OnlineServices_MatchmakingInterface.h index 05948660b4b..7dd828ec9e1 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/OnlineServices_MatchmakingInterface.h +++ b/GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/OnlineServices_MatchmakingInterface.h @@ -15,6 +15,7 @@ struct PlaylistEntry std::string Name = std::string(); int MinPlayers = -1; int DesiredPlayers = -1; + int MinSelectedMaps = 0; bool AllowTeams = false; int TeamSize = -1; bool AllowArmySelection = false; diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLQuickMatchMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLQuickMatchMenu.cpp index 47a49e96e1c..938c23c7cd0 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLQuickMatchMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLQuickMatchMenu.cpp @@ -2218,6 +2218,7 @@ WindowMsgHandledType WOLQuickMatchMenuSystem( GameWindow *window, UnsignedInt ms std::vector vecSelectedMapIndexes; uint16_t playlistID = 0; + int minSelectedMaps = 0; // get maps and playlist ID std::list maps; @@ -2233,6 +2234,7 @@ WindowMsgHandledType WOLQuickMatchMenuSystem( GameWindow *window, UnsignedInt ms if (plEntry.PlaylistID != -1) { playlistID = plEntry.PlaylistID; + minSelectedMaps = plEntry.MinSelectedMaps; // maps Int numMaps = GadgetListBoxGetNumEntries(listboxMapSelect); @@ -2255,6 +2257,22 @@ WindowMsgHandledType WOLQuickMatchMenuSystem( GameWindow *window, UnsignedInt ms { // TODO_QUICKMATCH: Error? } + + if (static_cast(vecSelectedMapIndexes.size()) < minSelectedMaps) + { + UnicodeString msg; + msg.format(L"You must select at least %d maps.", minSelectedMaps); + Int index = GadgetListBoxAddEntryText(quickmatchTextWindow, msg, GameSpyColor[GSCOLOR_DEFAULT], -1, -1); + GadgetListBoxSetItemData(quickmatchTextWindow, (void*)-1, index); + + // buttons + buttonWiden->winEnable(FALSE); + buttonStart->winHide(FALSE); + buttonStart->winEnable(TRUE); + buttonStop->winHide(TRUE); + + break; + } // buttons buttonWiden->winEnable(FALSE); diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_MatchmakingInterface.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_MatchmakingInterface.cpp index 49d2167c317..bc485a6e1e1 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_MatchmakingInterface.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_MatchmakingInterface.cpp @@ -28,6 +28,7 @@ void NGMP_OnlineServices_MatchmakingInterface::RetrievePlaylists(std::function