Deny ask kick if the player is not/no longer present.
This commit is contained in:
@@ -830,6 +830,7 @@ Deny Reason:
|
|||||||
0x0001: Kick not possible due to number of players.
|
0x0001: Kick not possible due to number of players.
|
||||||
0x0002: Another kick cannot be requested at this time.
|
0x0002: Another kick cannot be requested at this time.
|
||||||
0x0003: Kick request is already in progress.
|
0x0003: Kick request is already in progress.
|
||||||
|
0x0004: Invalid player ID.
|
||||||
0xFFFF: Other reason.
|
0xFFFF: Other reason.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ enum DenyKickPlayerReason
|
|||||||
KICK_DENIED_TOO_FEW_PLAYERS,
|
KICK_DENIED_TOO_FEW_PLAYERS,
|
||||||
KICK_DENIED_TEMPORARY,
|
KICK_DENIED_TEMPORARY,
|
||||||
KICK_DENIED_OTHER_IN_PROGRESS,
|
KICK_DENIED_OTHER_IN_PROGRESS,
|
||||||
|
KICK_DENIED_INVALID_PLAYER_ID,
|
||||||
KICK_DENIED_OTHER_REASON
|
KICK_DENIED_OTHER_REASON
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ using namespace std;
|
|||||||
#define NET_ASK_KICK_DENIED_TOO_FEW_PLAYERS 0x0001
|
#define NET_ASK_KICK_DENIED_TOO_FEW_PLAYERS 0x0001
|
||||||
#define NET_ASK_KICK_DENIED_TEMPORARY 0x0002
|
#define NET_ASK_KICK_DENIED_TEMPORARY 0x0002
|
||||||
#define NET_ASK_KICK_DENIED_OTHER_IN_PROGRESS 0x0003
|
#define NET_ASK_KICK_DENIED_OTHER_IN_PROGRESS 0x0003
|
||||||
|
#define NET_ASK_KICK_DENIED_INVALID_PLAYER_ID 0x0004
|
||||||
#define NET_ASK_KICK_DENIED_OTHER_REASON 0xFFFF
|
#define NET_ASK_KICK_DENIED_OTHER_REASON 0xFFFF
|
||||||
|
|
||||||
// Vote types
|
// Vote types
|
||||||
@@ -4526,6 +4527,9 @@ NetPacketAskKickPlayerDenied::SetData(const NetPacketAskKickPlayerDenied::Data &
|
|||||||
case KICK_DENIED_OTHER_IN_PROGRESS:
|
case KICK_DENIED_OTHER_IN_PROGRESS:
|
||||||
tmpData->denyReason = htons(NET_ASK_KICK_DENIED_OTHER_IN_PROGRESS);
|
tmpData->denyReason = htons(NET_ASK_KICK_DENIED_OTHER_IN_PROGRESS);
|
||||||
break;
|
break;
|
||||||
|
case KICK_DENIED_INVALID_PLAYER_ID:
|
||||||
|
tmpData->denyReason = htons(NET_ASK_KICK_DENIED_INVALID_PLAYER_ID);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
tmpData->denyReason = htons(NET_ASK_KICK_DENIED_OTHER_REASON);
|
tmpData->denyReason = htons(NET_ASK_KICK_DENIED_OTHER_REASON);
|
||||||
break;
|
break;
|
||||||
@@ -4555,6 +4559,9 @@ NetPacketAskKickPlayerDenied::GetData(NetPacketAskKickPlayerDenied::Data &outDat
|
|||||||
case NET_ASK_KICK_DENIED_OTHER_IN_PROGRESS:
|
case NET_ASK_KICK_DENIED_OTHER_IN_PROGRESS:
|
||||||
outData.denyReason = KICK_DENIED_OTHER_IN_PROGRESS;
|
outData.denyReason = KICK_DENIED_OTHER_IN_PROGRESS;
|
||||||
break;
|
break;
|
||||||
|
case NET_ASK_KICK_DENIED_INVALID_PLAYER_ID:
|
||||||
|
outData.denyReason = KICK_DENIED_INVALID_PLAYER_ID;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
outData.denyReason = KICK_DENIED_OTHER_REASON;
|
outData.denyReason = KICK_DENIED_OTHER_REASON;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ ServerGameThread::VoteKickAction()
|
|||||||
abortPetition = true;
|
abortPetition = true;
|
||||||
}
|
}
|
||||||
// 3. The kick has become invalid because the player to be kicked left.
|
// 3. The kick has become invalid because the player to be kicked left.
|
||||||
else if (find(playerIds.begin(), playerIds.end(), m_voteKickData->kickPlayerId) == playerIds.end())
|
else if (!IsValidPlayer(m_voteKickData->kickPlayerId))
|
||||||
{
|
{
|
||||||
reason = PETITION_END_PLAYER_LEFT;
|
reason = PETITION_END_PLAYER_LEFT;
|
||||||
abortPetition = true;
|
abortPetition = true;
|
||||||
@@ -326,6 +326,9 @@ ServerGameThread::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWh
|
|||||||
// Retrieve only the number of human players.
|
// Retrieve only the number of human players.
|
||||||
size_t numPlayers = GetSessionManager().GetPlayerIdList().size();
|
size_t numPlayers = GetSessionManager().GetPlayerIdList().size();
|
||||||
if (numPlayers > 2)
|
if (numPlayers > 2)
|
||||||
|
{
|
||||||
|
// Check whether the player to be kicked exists.
|
||||||
|
if (IsValidPlayer(playerIdWho))
|
||||||
{
|
{
|
||||||
// Lock the vote kick data.
|
// Lock the vote kick data.
|
||||||
boost::mutex::scoped_lock lock(m_voteKickDataMutex);
|
boost::mutex::scoped_lock lock(m_voteKickDataMutex);
|
||||||
@@ -356,6 +359,9 @@ ServerGameThread::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWh
|
|||||||
else
|
else
|
||||||
InternalDenyAskVoteKick(byWhom, playerIdWho, KICK_DENIED_OTHER_IN_PROGRESS);
|
InternalDenyAskVoteKick(byWhom, playerIdWho, KICK_DENIED_OTHER_IN_PROGRESS);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
InternalDenyAskVoteKick(byWhom, playerIdWho, KICK_DENIED_INVALID_PLAYER_ID);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
InternalDenyAskVoteKick(byWhom, playerIdWho, KICK_DENIED_TOO_FEW_PLAYERS);
|
InternalDenyAskVoteKick(byWhom, playerIdWho, KICK_DENIED_TOO_FEW_PLAYERS);
|
||||||
}
|
}
|
||||||
@@ -693,6 +699,16 @@ ServerGameThread::AssignPlayerNumbers()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ServerGameThread::IsValidPlayer(unsigned playerId) const
|
||||||
|
{
|
||||||
|
bool retVal = false;
|
||||||
|
const PlayerIdList list(GetPlayerIdList());
|
||||||
|
if (find(list.begin(), list.end(), playerId) != list.end())
|
||||||
|
retVal = true;
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
SessionManager &
|
SessionManager &
|
||||||
ServerGameThread::GetSessionManager()
|
ServerGameThread::GetSessionManager()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ protected:
|
|||||||
void RemoveDisconnectedPlayers();
|
void RemoveDisconnectedPlayers();
|
||||||
size_t GetCurNumberOfPlayers() const;
|
size_t GetCurNumberOfPlayers() const;
|
||||||
void AssignPlayerNumbers();
|
void AssignPlayerNumbers();
|
||||||
|
bool IsValidPlayer(unsigned playerId) const;
|
||||||
|
|
||||||
ServerLobbyThread &GetLobbyThread();
|
ServerLobbyThread &GetLobbyThread();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user