@ -969,37 +969,51 @@ bool SafeLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileTy
_game_mode = newgm ;
_game_mode = newgm ;
switch ( lf = = nullptr ? SaveOrLoad ( filename , fop , dft , subdir ) : LoadWithFilter ( lf ) ) {
SaveOrLoadResult result = ( lf = = nullptr ) ? SaveOrLoad ( filename , fop , dft , subdir ) : LoadWithFilter ( lf ) ;
case SL_OK : return true ;
if ( result = = SL_OK ) return true ;
case SL_REINIT :
if ( _network_dedicated & & ogm = = GM_MENU ) {
if ( _network_dedicated ) {
/*
/*
* If we are a dedicated server * and * we just were in the menu , then we
* We need to reinit a network map . . .
* are loading the first savegame . If that fails , not starting the
* We can ' t simply load the intro game here as that game has many
* server is a better reaction than starting the server with a newly
* special cases which make clients desync immediately . So we fall
* generated map as it is quite likely to be started from a script .
* back to just generating a new game with the current settings .
*/
*/
Debug ( net , 0 , " Loading requested map failed; closing server. " ) ;
Debug ( net , 0 , " Loading game failed, so a new (random) game will be started " ) ;
_exit_game = true ;
MakeNewGame ( false , true ) ;
return false ;
return false ;
}
}
if ( _network_server ) {
/* We can't load the intro game as server, so disconnect first. */
NetworkDisconnect ( ) ;
}
switch ( ogm ) {
if ( result ! = SL_REINIT ) {
default :
_game_mode = ogm ;
case GM_MENU : LoadIntroGame ( ) ; break ;
return false ;
case GM_EDITOR : MakeNewEditorWorld ( ) ; break ;
}
}
return false ;
if ( _network_dedicated ) {
/*
* If we are a dedicated server , have already loaded / started a game ,
* and then loading the savegame fails in a manner that we need to
* reinitialize everything . We must not fall back into the menu mode
* with the intro game , as that is unjoinable by clients . So there is
* nothing else to do than start a new game , as it might have failed
* trying to reload the originally loaded savegame / scenario .
*/
Debug ( net , 0 , " Loading game failed, so a new (random) game will be started " ) ;
MakeNewGame ( false , true ) ;
return false ;
}
if ( _network_server ) {
/* We can't load the intro game as server, so disconnect first. */
NetworkDisconnect ( ) ;
}
switch ( ogm ) {
default :
default :
_game_mode = ogm ;
case GM_MENU : LoadIntroGame ( ) ; break ;
return false ;
case GM_EDITOR : MakeNewEditorWorld ( ) ; break ;
}
}
return false ;
}
}
void SwitchToMode ( SwitchMode new_mode )
void SwitchToMode ( SwitchMode new_mode )