From e1d35cba6ddf6bb1589dca62d5d0adf99f0995b0 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 15 Aug 2010 11:58:20 +0000 Subject: [PATCH] (svn r20497) -Fix [FS#3960]: non-dedicated servers failing to load a game caused the introgame to be the server's game causing desyncs when people tried to join --- src/network/network.cpp | 3 +++ src/openttd.cpp | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/src/network/network.cpp b/src/network/network.cpp index 3ad86d8438..e868bbd2f5 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -937,6 +937,9 @@ void NetworkDisconnect(bool blocking) DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0); NetworkClose(); + + /* Reinitialize the UDP stack, i.e. close all existing connections. */ + NetworkUDPInitialize(); } /** diff --git a/src/openttd.cpp b/src/openttd.cpp index cf61ab9d1c..20e3bae0cc 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -877,6 +877,7 @@ bool SafeSaveOrLoad(const char *filename, int mode, GameMode newgm, Subdirectory case SL_OK: return true; case SL_REINIT: +#ifdef ENABLE_NETWORK if (_network_dedicated) { /* * We need to reinit a network map... @@ -888,6 +889,11 @@ bool SafeSaveOrLoad(const char *filename, int mode, GameMode newgm, Subdirectory MakeNewGame(false, true); return false; } + if (_network_server) { + /* We can't load the intro game as server, so disconnect first. */ + NetworkDisconnect(); + } +#endif /* ENABLE_NETWORK */ switch (ogm) { default: