Try suppressing those annoying "incorrect state" messages without actually breaking net play. Alter prior checks on GoBack. NEEDS TESTING.
--- a/QTfrontend/game.cpp Sun Nov 28 13:12:00 2010 -0500
+++ b/QTfrontend/game.cpp Sun Nov 28 13:58:25 2010 -0500
@@ -40,6 +40,7 @@
this->config = config;
this->gamecfg = gamecfg;
TeamCount = 0;
+ netSuspend = false;
}
HWGame::~HWGame()
@@ -245,7 +246,7 @@
break;
}
default: {
- if (gameType == gtNet)
+ if (gameType == gtNet && !netSuspend)
{
emit SendNet(msg);
}
--- a/QTfrontend/game.h Sun Nov 28 13:12:00 2010 -0500
+++ b/QTfrontend/game.h Sun Nov 28 13:58:25 2010 -0500
@@ -55,6 +55,7 @@
void StartCampaign(const QString & file);
void KillAllTeams();
GameState gameState;
+ bool netSuspend;
protected:
virtual QStringList setArguments();
--- a/QTfrontend/hwform.cpp Sun Nov 28 13:12:00 2010 -0500
+++ b/QTfrontend/hwform.cpp Sun Nov 28 13:58:25 2010 -0500
@@ -513,6 +513,7 @@
// joining the lobby
else if(id == ID_PAGE_ROOMSLIST) {
if ( hwnet && game && game->gameState == gsStarted) { // abnormal exit - kick or room destruction - send kills.
+ game->netSuspend = true;
game->KillAllTeams();
}
ui.pageRoomsList->chatWidget->loadLists(ui.pageOptions->editNetNick->text());
@@ -938,6 +939,7 @@
void HWForm::GameStateChanged(GameState gameState)
{
+ quint8 id = ui.Pages->currentIndex();
switch(gameState) {
case gsStarted: {
Music(false);
@@ -956,11 +958,12 @@
case gsFinished: {
//setVisible(true);
setFocusPolicy(Qt::StrongFocus);
- if (!hwnet || (!hwnet->isRoomChief() || !hwnet->isInRoom())) GoBack();
+ if (id == ID_PAGE_INGAME) GoBack();
Music(ui.pageOptions->CBEnableFrontendMusic->isChecked());
if (wBackground) wBackground->startAnimation();
GoToPage(ID_PAGE_GAMESTATS);
- if (hwnet) hwnet->gameFinished();
+ if (hwnet && (!game || !game->netSuspend)) hwnet->gameFinished();
+ if (game) game->netSuspend = false;
break;
}
default: {
@@ -971,7 +974,7 @@
// was room chief and the game was aborted
(hwnet && hwnet->isRoomChief() && hwnet->isInRoom() &&
(gameState == gsInterrupted || gameState == gsStopped || gameState == gsDestroyed))) {
- if (!hwnet || (!hwnet->isRoomChief() || !hwnet->isInRoom())) GoBack();
+ if (id == ID_PAGE_INGAME) GoBack();
Music(ui.pageOptions->CBEnableFrontendMusic->isChecked());
if (wBackground) wBackground->startAnimation();
if (hwnet) hwnet->gameFinished();