diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame.cpp index bb0dc23d9db..7339e96b66a 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame.cpp @@ -2,6 +2,10 @@ #include "GameLogic/VictoryConditions.h" #include "Common/PlayerList.h" #include "GameLogic/GameLogic.h" + // Initialize slot pointers first to ensure they're valid + cleanUpSlotPointers(); + + #include "GameNetwork/FileTransfer.h" #include "GameClient/MapUtil.h" #include "GameClient/GameText.h" @@ -542,4 +546,4 @@ void NGMPGame::StartCountdown() { pWS->SendData_CountdownStarted(); } -} +} diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame_fixed.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame_fixed.cpp new file mode 100644 index 00000000000..41994e80fbf --- /dev/null +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame_fixed.cpp @@ -0,0 +1,58 @@ +#include "GameNetwork/GeneralsOnline/NGMPGame.h" +#include "GameLogic/VictoryConditions.h" +#include "Common/PlayerList.h" +#include "GameLogic/GameLogic.h" +#include "GameNetwork/FileTransfer.h" +#include "GameClient/MapUtil.h" +#include "GameClient/GameText.h" +#include "GameNetwork/GameSpyOverlay.h" +#include "Common/RandomValue.h" +#include "GameNetwork/GeneralsOnline/NGMP_interfaces.h" +#include "GameNetwork/NetworkInterface.h" +#include "Common/GlobalData.h" +#include "GameClient/View.h" + +NGMPGameSlot::NGMPGameSlot() +{ + GameSlot(); + m_profileID = 0; + m_wins = 0; + m_losses = 0; + m_rankPoints = 0; + m_favoriteSide = 0; + m_pingInt = 0; + m_profileID = 0; + m_pingStr.clear(); +} + +// NGMPGame ---------------------------------------- + +NGMPGame::NGMPGame() +{ + // Initialize slot pointers first to ensure they're valid + cleanUpSlotPointers(); + + NGMP_OnlineServices_LobbyInterface* pLobbyInterface = NGMP_OnlineServicesManager::GetInterface(); + if (pLobbyInterface == nullptr) + { + // Ensure m_inGame is set to false even if we return early + m_inGame = false; + return; + } + + setLocalIP(0); + + m_ladderIP.clear(); + m_ladderPort = 0; + + enterGame(); // this is done on join in the GS impl, and must be called before setMap + + // NGMP: Store map + setMap(pLobbyInterface->GetCurrentLobbyMapPath()); + + // init + //init(); + + // NGMP: Populate slots + UpdateSlotsFromCurrentLobby(); +} \ No newline at end of file diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame_new.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame_new.cpp new file mode 100644 index 00000000000..41994e80fbf --- /dev/null +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame_new.cpp @@ -0,0 +1,58 @@ +#include "GameNetwork/GeneralsOnline/NGMPGame.h" +#include "GameLogic/VictoryConditions.h" +#include "Common/PlayerList.h" +#include "GameLogic/GameLogic.h" +#include "GameNetwork/FileTransfer.h" +#include "GameClient/MapUtil.h" +#include "GameClient/GameText.h" +#include "GameNetwork/GameSpyOverlay.h" +#include "Common/RandomValue.h" +#include "GameNetwork/GeneralsOnline/NGMP_interfaces.h" +#include "GameNetwork/NetworkInterface.h" +#include "Common/GlobalData.h" +#include "GameClient/View.h" + +NGMPGameSlot::NGMPGameSlot() +{ + GameSlot(); + m_profileID = 0; + m_wins = 0; + m_losses = 0; + m_rankPoints = 0; + m_favoriteSide = 0; + m_pingInt = 0; + m_profileID = 0; + m_pingStr.clear(); +} + +// NGMPGame ---------------------------------------- + +NGMPGame::NGMPGame() +{ + // Initialize slot pointers first to ensure they're valid + cleanUpSlotPointers(); + + NGMP_OnlineServices_LobbyInterface* pLobbyInterface = NGMP_OnlineServicesManager::GetInterface(); + if (pLobbyInterface == nullptr) + { + // Ensure m_inGame is set to false even if we return early + m_inGame = false; + return; + } + + setLocalIP(0); + + m_ladderIP.clear(); + m_ladderPort = 0; + + enterGame(); // this is done on join in the GS impl, and must be called before setMap + + // NGMP: Store map + setMap(pLobbyInterface->GetCurrentLobbyMapPath()); + + // init + //init(); + + // NGMP: Populate slots + UpdateSlotsFromCurrentLobby(); +} \ No newline at end of file diff --git a/tmp/test_ngmp.cpp b/tmp/test_ngmp.cpp new file mode 100644 index 00000000000..41994e80fbf --- /dev/null +++ b/tmp/test_ngmp.cpp @@ -0,0 +1,58 @@ +#include "GameNetwork/GeneralsOnline/NGMPGame.h" +#include "GameLogic/VictoryConditions.h" +#include "Common/PlayerList.h" +#include "GameLogic/GameLogic.h" +#include "GameNetwork/FileTransfer.h" +#include "GameClient/MapUtil.h" +#include "GameClient/GameText.h" +#include "GameNetwork/GameSpyOverlay.h" +#include "Common/RandomValue.h" +#include "GameNetwork/GeneralsOnline/NGMP_interfaces.h" +#include "GameNetwork/NetworkInterface.h" +#include "Common/GlobalData.h" +#include "GameClient/View.h" + +NGMPGameSlot::NGMPGameSlot() +{ + GameSlot(); + m_profileID = 0; + m_wins = 0; + m_losses = 0; + m_rankPoints = 0; + m_favoriteSide = 0; + m_pingInt = 0; + m_profileID = 0; + m_pingStr.clear(); +} + +// NGMPGame ---------------------------------------- + +NGMPGame::NGMPGame() +{ + // Initialize slot pointers first to ensure they're valid + cleanUpSlotPointers(); + + NGMP_OnlineServices_LobbyInterface* pLobbyInterface = NGMP_OnlineServicesManager::GetInterface(); + if (pLobbyInterface == nullptr) + { + // Ensure m_inGame is set to false even if we return early + m_inGame = false; + return; + } + + setLocalIP(0); + + m_ladderIP.clear(); + m_ladderPort = 0; + + enterGame(); // this is done on join in the GS impl, and must be called before setMap + + // NGMP: Store map + setMap(pLobbyInterface->GetCurrentLobbyMapPath()); + + // init + //init(); + + // NGMP: Populate slots + UpdateSlotsFromCurrentLobby(); +} \ No newline at end of file