Consider new "allow spectators" game flag in server (#215)
This commit is contained in:
@@ -326,6 +326,7 @@ message JoinGameFailedMessage {
|
|||||||
invalidSettings = 9;
|
invalidSettings = 9;
|
||||||
ipAddressBlocked = 10;
|
ipAddressBlocked = 10;
|
||||||
rejoinFailed = 11;
|
rejoinFailed = 11;
|
||||||
|
noSpectatorsAllowed = 12;
|
||||||
}
|
}
|
||||||
required JoinGameFailureReason joinGameFailureReason = 2;
|
required JoinGameFailureReason joinGameFailureReason = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1370,13 +1370,19 @@ ServerLobbyThread::HandleNetPacketJoinGame(boost::shared_ptr<SessionData> sessio
|
|||||||
if (pos != m_gameMap.end()) {
|
if (pos != m_gameMap.end()) {
|
||||||
boost::shared_ptr<ServerGame> game = pos->second;
|
boost::shared_ptr<ServerGame> game = pos->second;
|
||||||
const GameData &tmpData = game->GetGameData();
|
const GameData &tmpData = game->GetGameData();
|
||||||
// As guest, you are only allowed to join normal games or to join as spectator.
|
if (joinGame.spectateonly()) {
|
||||||
|
if (!tmpData.allowSpectators) {
|
||||||
|
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_NO_SPECTATORS);
|
||||||
|
} else {
|
||||||
|
MoveSessionToGame(game, session, joinGame.autoleave(), true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// As guest, you are only allowed to join normal games.
|
||||||
if (session->GetPlayerData()->GetRights() == PLAYER_RIGHTS_GUEST
|
if (session->GetPlayerData()->GetRights() == PLAYER_RIGHTS_GUEST
|
||||||
&& tmpData.gameType != GAME_TYPE_NORMAL && !joinGame.spectateonly()) {
|
&& tmpData.gameType != GAME_TYPE_NORMAL) {
|
||||||
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_GUEST_FORBIDDEN);
|
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_GUEST_FORBIDDEN);
|
||||||
} else if (tmpData.gameType == GAME_TYPE_INVITE_ONLY
|
} else if (tmpData.gameType == GAME_TYPE_INVITE_ONLY
|
||||||
&& !game->IsPlayerInvited(session->GetPlayerData()->GetUniqueId())
|
&& !game->IsPlayerInvited(session->GetPlayerData()->GetUniqueId())) {
|
||||||
&& !joinGame.spectateonly()) {
|
|
||||||
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_NOT_INVITED);
|
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_NOT_INVITED);
|
||||||
} else if (!game->CheckPassword(password)) {
|
} else if (!game->CheckPassword(password)) {
|
||||||
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_INVALID_PASSWORD);
|
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_INVALID_PASSWORD);
|
||||||
@@ -1388,7 +1394,8 @@ ServerLobbyThread::HandleNetPacketJoinGame(boost::shared_ptr<SessionData> sessio
|
|||||||
&& game->IsClientAddressConnected(session->GetClientAddr())) {
|
&& game->IsClientAddressConnected(session->GetClientAddr())) {
|
||||||
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_IP_BLOCKED);
|
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_IP_BLOCKED);
|
||||||
} else {
|
} else {
|
||||||
MoveSessionToGame(game, session, joinGame.autoleave(), joinGame.spectateonly());
|
MoveSessionToGame(game, session, joinGame.autoleave(), false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_GAME_INVALID);
|
SendJoinGameFailed(session, joinGame.gameid(), NTF_NET_JOIN_GAME_INVALID);
|
||||||
@@ -2099,6 +2106,9 @@ ServerLobbyThread::SendJoinGameFailed(boost::shared_ptr<SessionData> s, unsigned
|
|||||||
case NTF_NET_JOIN_REJOIN_FAILED :
|
case NTF_NET_JOIN_REJOIN_FAILED :
|
||||||
netJoinFailed->set_joingamefailurereason(JoinGameFailedMessage::rejoinFailed);
|
netJoinFailed->set_joingamefailurereason(JoinGameFailedMessage::rejoinFailed);
|
||||||
break;
|
break;
|
||||||
|
case NTF_NET_JOIN_NO_SPECTATORS :
|
||||||
|
netJoinFailed->set_joingamefailurereason(JoinGameFailedMessage::noSpectatorsAllowed);
|
||||||
|
break;
|
||||||
default :
|
default :
|
||||||
netJoinFailed->set_joingamefailurereason(JoinGameFailedMessage::invalidGame);
|
netJoinFailed->set_joingamefailurereason(JoinGameFailedMessage::invalidGame);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -130,10 +130,11 @@
|
|||||||
#define NTF_NET_JOIN_INVALID_SETTINGS 218
|
#define NTF_NET_JOIN_INVALID_SETTINGS 218
|
||||||
#define NTF_NET_JOIN_IP_BLOCKED 219
|
#define NTF_NET_JOIN_IP_BLOCKED 219
|
||||||
#define NTF_NET_JOIN_REJOIN_FAILED 220
|
#define NTF_NET_JOIN_REJOIN_FAILED 220
|
||||||
|
#define NTF_NET_JOIN_NO_SPECTATORS 221
|
||||||
|
|
||||||
// Notifications - version
|
// Notifications - version
|
||||||
#define NTF_NET_NEW_RELEASE_AVAILABLE 221
|
#define NTF_NET_NEW_RELEASE_AVAILABLE 231
|
||||||
#define NTF_NET_OUTDATED_BETA 222
|
#define NTF_NET_OUTDATED_BETA 232
|
||||||
|
|
||||||
// This is an internal message which is not reported.
|
// This is an internal message which is not reported.
|
||||||
#define MSG_SOCK_INTERNAL_PENDING 0
|
#define MSG_SOCK_INTERNAL_PENDING 0
|
||||||
|
|||||||
+2
@@ -8386,6 +8386,7 @@ bool JoinGameFailedMessage_JoinGameFailureReason_IsValid(int value) {
|
|||||||
case 9:
|
case 9:
|
||||||
case 10:
|
case 10:
|
||||||
case 11:
|
case 11:
|
||||||
|
case 12:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
@@ -8404,6 +8405,7 @@ const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::badGame
|
|||||||
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::invalidSettings;
|
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::invalidSettings;
|
||||||
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::ipAddressBlocked;
|
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::ipAddressBlocked;
|
||||||
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::rejoinFailed;
|
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::rejoinFailed;
|
||||||
|
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::noSpectatorsAllowed;
|
||||||
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::JoinGameFailureReason_MIN;
|
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::JoinGameFailureReason_MIN;
|
||||||
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::JoinGameFailureReason_MAX;
|
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage::JoinGameFailureReason_MAX;
|
||||||
const int JoinGameFailedMessage::JoinGameFailureReason_ARRAYSIZE;
|
const int JoinGameFailedMessage::JoinGameFailureReason_ARRAYSIZE;
|
||||||
|
|||||||
+4
-2
@@ -201,11 +201,12 @@ enum JoinGameFailedMessage_JoinGameFailureReason {
|
|||||||
JoinGameFailedMessage_JoinGameFailureReason_badGameName = 8,
|
JoinGameFailedMessage_JoinGameFailureReason_badGameName = 8,
|
||||||
JoinGameFailedMessage_JoinGameFailureReason_invalidSettings = 9,
|
JoinGameFailedMessage_JoinGameFailureReason_invalidSettings = 9,
|
||||||
JoinGameFailedMessage_JoinGameFailureReason_ipAddressBlocked = 10,
|
JoinGameFailedMessage_JoinGameFailureReason_ipAddressBlocked = 10,
|
||||||
JoinGameFailedMessage_JoinGameFailureReason_rejoinFailed = 11
|
JoinGameFailedMessage_JoinGameFailureReason_rejoinFailed = 11,
|
||||||
|
JoinGameFailedMessage_JoinGameFailureReason_noSpectatorsAllowed = 12
|
||||||
};
|
};
|
||||||
bool JoinGameFailedMessage_JoinGameFailureReason_IsValid(int value);
|
bool JoinGameFailedMessage_JoinGameFailureReason_IsValid(int value);
|
||||||
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage_JoinGameFailureReason_JoinGameFailureReason_MIN = JoinGameFailedMessage_JoinGameFailureReason_invalidGame;
|
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage_JoinGameFailureReason_JoinGameFailureReason_MIN = JoinGameFailedMessage_JoinGameFailureReason_invalidGame;
|
||||||
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage_JoinGameFailureReason_JoinGameFailureReason_MAX = JoinGameFailedMessage_JoinGameFailureReason_rejoinFailed;
|
const JoinGameFailedMessage_JoinGameFailureReason JoinGameFailedMessage_JoinGameFailureReason_JoinGameFailureReason_MAX = JoinGameFailedMessage_JoinGameFailureReason_noSpectatorsAllowed;
|
||||||
const int JoinGameFailedMessage_JoinGameFailureReason_JoinGameFailureReason_ARRAYSIZE = JoinGameFailedMessage_JoinGameFailureReason_JoinGameFailureReason_MAX + 1;
|
const int JoinGameFailedMessage_JoinGameFailureReason_JoinGameFailureReason_ARRAYSIZE = JoinGameFailedMessage_JoinGameFailureReason_JoinGameFailureReason_MAX + 1;
|
||||||
|
|
||||||
enum GamePlayerLeftMessage_GamePlayerLeftReason {
|
enum GamePlayerLeftMessage_GamePlayerLeftReason {
|
||||||
@@ -4077,6 +4078,7 @@ class JoinGameFailedMessage : public ::google::protobuf::MessageLite {
|
|||||||
static const JoinGameFailureReason invalidSettings = JoinGameFailedMessage_JoinGameFailureReason_invalidSettings;
|
static const JoinGameFailureReason invalidSettings = JoinGameFailedMessage_JoinGameFailureReason_invalidSettings;
|
||||||
static const JoinGameFailureReason ipAddressBlocked = JoinGameFailedMessage_JoinGameFailureReason_ipAddressBlocked;
|
static const JoinGameFailureReason ipAddressBlocked = JoinGameFailedMessage_JoinGameFailureReason_ipAddressBlocked;
|
||||||
static const JoinGameFailureReason rejoinFailed = JoinGameFailedMessage_JoinGameFailureReason_rejoinFailed;
|
static const JoinGameFailureReason rejoinFailed = JoinGameFailedMessage_JoinGameFailureReason_rejoinFailed;
|
||||||
|
static const JoinGameFailureReason noSpectatorsAllowed = JoinGameFailedMessage_JoinGameFailureReason_noSpectatorsAllowed;
|
||||||
static inline bool JoinGameFailureReason_IsValid(int value) {
|
static inline bool JoinGameFailureReason_IsValid(int value) {
|
||||||
return JoinGameFailedMessage_JoinGameFailureReason_IsValid(value);
|
return JoinGameFailedMessage_JoinGameFailureReason_IsValid(value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18994,6 +18994,10 @@ public final class ProtoBuf {
|
|||||||
* <code>rejoinFailed = 11;</code>
|
* <code>rejoinFailed = 11;</code>
|
||||||
*/
|
*/
|
||||||
rejoinFailed(10, 11),
|
rejoinFailed(10, 11),
|
||||||
|
/**
|
||||||
|
* <code>noSpectatorsAllowed = 12;</code>
|
||||||
|
*/
|
||||||
|
noSpectatorsAllowed(11, 12),
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -19040,6 +19044,10 @@ public final class ProtoBuf {
|
|||||||
* <code>rejoinFailed = 11;</code>
|
* <code>rejoinFailed = 11;</code>
|
||||||
*/
|
*/
|
||||||
public static final int rejoinFailed_VALUE = 11;
|
public static final int rejoinFailed_VALUE = 11;
|
||||||
|
/**
|
||||||
|
* <code>noSpectatorsAllowed = 12;</code>
|
||||||
|
*/
|
||||||
|
public static final int noSpectatorsAllowed_VALUE = 12;
|
||||||
|
|
||||||
|
|
||||||
public final int getNumber() { return value; }
|
public final int getNumber() { return value; }
|
||||||
@@ -19057,6 +19065,7 @@ public final class ProtoBuf {
|
|||||||
case 9: return invalidSettings;
|
case 9: return invalidSettings;
|
||||||
case 10: return ipAddressBlocked;
|
case 10: return ipAddressBlocked;
|
||||||
case 11: return rejoinFailed;
|
case 11: return rejoinFailed;
|
||||||
|
case 12: return noSpectatorsAllowed;
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user