diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index 45b49fab..3941ab80 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -10,7 +10,7 @@ flaginfo flaginfos[2]; void mode(int n) { - if(!m_botmode || !multiplayer()) addmsg(SV_GAMEMODE, "ri", nextmode = n); + if(m_mp(n) || !multiplayer()) addmsg(SV_GAMEMODE, "ri", nextmode = n); }; COMMAND(mode, ARG_1INT); diff --git a/source/src/cube.h b/source/src/cube.h index c99fd83d..5f6ad1f3 100644 --- a/source/src/cube.h +++ b/source/src/cube.h @@ -93,6 +93,7 @@ #define m_teammode (gamemode==0 || gamemode==4 || gamemode==5 || gamemode==7 || gamemode==11) #define m_tarena (m_arena && m_teammode) #define m_botmode (gamemode==7 || gamemode == 8) +#define m_mp(mode) ((mode)>=0 && (mode)<=11 && (mode)!=7 && (mode)!=8) typedef vector cvector; typedef vector ivector; diff --git a/source/src/server.cpp b/source/src/server.cpp index 1b342252..b2bbd99c 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -607,7 +607,7 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1 { getstring(text, p); int reqmode = getint(p); - if(reqmode<0) reqmode = 0; + if(cl->type==ST_TCPIP && !m_mp(reqmode)) reqmode = 0; if(smapname[0] && !mapreload && !vote(text, reqmode, sender)) return; resetmap(text, reqmode); break;