diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -19,6 +19,7 @@ #include "network/network_func.h" #include "network/network_base.h" #include "network/network_admin.h" +#include "network/network_client.h" #include "command_func.h" #include "settings_func.h" #include "fios.h" @@ -90,7 +91,7 @@ DEF_CONSOLE_HOOK(ConHookNeedNetwork) { if (!NetworkAvailable(echo)) return CHR_DISALLOW; - if (!_networking) { + if (!_networking || (!_network_server && !MyClient::IsConnected())) { if (echo) IConsoleError("Not connected. This command is only available in multiplayer."); return CHR_DISALLOW; } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -463,6 +463,15 @@ NetworkRecvStatus ClientNetworkGameSocke return NETWORK_RECV_STATUS_OKAY; } +/** + * Check whether the client is actually connected (and in the game). + * @return True when the client is connected. + */ +bool ClientNetworkGameSocketHandler::IsConnected() +{ + return my_client != NULL && my_client->status == STATUS_ACTIVE; +} + /*********** * Receiving functions diff --git a/src/network/network_client.h b/src/network/network_client.h --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -100,6 +100,8 @@ public: static NetworkRecvStatus SendRCon(const char *password, const char *command); static NetworkRecvStatus SendMove(CompanyID company, const char *password); + static bool IsConnected(); + static void Send(); static bool Receive(); static bool GameLoop();