Client side vote kick changes - tab closes now. Server side fixes.
This commit is contained in:
@@ -151,6 +151,7 @@ protected:
|
|||||||
void ClearGameInfoMap();
|
void ClearGameInfoMap();
|
||||||
|
|
||||||
void StartPetition(unsigned petitionId, unsigned proposingPlayerId, unsigned kickPlayerId, int timeoutSec, int numVotesToKick);
|
void StartPetition(unsigned petitionId, unsigned proposingPlayerId, unsigned kickPlayerId, int timeoutSec, int numVotesToKick);
|
||||||
|
void EndPetition(unsigned petitionId);
|
||||||
|
|
||||||
void UpdateStatData(const ServerStats &stats);
|
void UpdateStatData(const ServerStats &stats);
|
||||||
|
|
||||||
|
|||||||
@@ -771,10 +771,16 @@ AbstractClientStateReceiving::Process(ClientThread &client)
|
|||||||
}
|
}
|
||||||
else if (tmpPacket->ToNetPacketStartKickPlayerPetition())
|
else if (tmpPacket->ToNetPacketStartKickPlayerPetition())
|
||||||
{
|
{
|
||||||
NetPacketStartKickPlayerPetition::Data petitionData;
|
NetPacketStartKickPlayerPetition::Data startPetitionData;
|
||||||
tmpPacket->ToNetPacketStartKickPlayerPetition()->GetData(petitionData);
|
tmpPacket->ToNetPacketStartKickPlayerPetition()->GetData(startPetitionData);
|
||||||
client.StartPetition(petitionData.petitionId, petitionData.proposingPlayerId,
|
client.StartPetition(startPetitionData.petitionId, startPetitionData.proposingPlayerId,
|
||||||
petitionData.kickPlayerId, petitionData.kickTimeoutSec, petitionData.numVotesNeededToKick);
|
startPetitionData.kickPlayerId, startPetitionData.kickTimeoutSec, startPetitionData.numVotesNeededToKick);
|
||||||
|
}
|
||||||
|
else if (tmpPacket->ToNetPacketEndKickPlayerPetition())
|
||||||
|
{
|
||||||
|
NetPacketEndKickPlayerPetition::Data endPetitionData;
|
||||||
|
tmpPacket->ToNetPacketEndKickPlayerPetition()->GetData(endPetitionData);
|
||||||
|
client.EndPetition(endPetitionData.petitionId);
|
||||||
}
|
}
|
||||||
else if (tmpPacket->ToNetPacketAvatarHeader())
|
else if (tmpPacket->ToNetPacketAvatarHeader())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1037,6 +1037,18 @@ ClientThread::StartPetition(unsigned petitionId, unsigned proposingPlayerId, uns
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ClientThread::EndPetition(unsigned petitionId)
|
||||||
|
{
|
||||||
|
bool isCurPetition;
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_curPetitionIdMutex);
|
||||||
|
isCurPetition = m_curPetitionId == petitionId;
|
||||||
|
}
|
||||||
|
if (isCurPetition)
|
||||||
|
GetGui().endVoteOnKick();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ClientThread::UpdateStatData(const ServerStats &stats)
|
ClientThread::UpdateStatData(const ServerStats &stats)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#define SERVER_CHECK_VOTE_KICK_INTERVAL_MSEC 500
|
#define SERVER_CHECK_VOTE_KICK_INTERVAL_MSEC 500
|
||||||
|
#define SERVER_KICK_TIMEOUT_ADD_DELAY_SEC 2
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -239,7 +240,6 @@ ServerGameThread::VoteKickAction()
|
|||||||
endPetitionData.numVotesInFavourOfKicking = m_voteKickData->numVotesInFavourOfKicking;
|
endPetitionData.numVotesInFavourOfKicking = m_voteKickData->numVotesInFavourOfKicking;
|
||||||
endPetitionData.playerKicked = doKick;
|
endPetitionData.playerKicked = doKick;
|
||||||
endPetitionData.endReason = reason;
|
endPetitionData.endReason = reason;
|
||||||
m_voteKickData.reset();
|
|
||||||
|
|
||||||
static_cast<NetPacketEndKickPlayerPetition *>(endPetition.get())->SetData(endPetitionData);
|
static_cast<NetPacketEndKickPlayerPetition *>(endPetition.get())->SetData(endPetitionData);
|
||||||
SendToAllPlayers(endPetition, SessionData::Game);
|
SendToAllPlayers(endPetition, SessionData::Game);
|
||||||
@@ -247,6 +247,8 @@ ServerGameThread::VoteKickAction()
|
|||||||
// Perform kick.
|
// Perform kick.
|
||||||
if (doKick)
|
if (doKick)
|
||||||
InternalKickPlayer(m_voteKickData->kickPlayerId);
|
InternalKickPlayer(m_voteKickData->kickPlayerId);
|
||||||
|
// This petition has ended.
|
||||||
|
m_voteKickData.reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -328,7 +330,7 @@ ServerGameThread::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWh
|
|||||||
m_voteKickData->petitionId = m_curPetitionId++;
|
m_voteKickData->petitionId = m_curPetitionId++;
|
||||||
m_voteKickData->kickPlayerId = playerIdWho;
|
m_voteKickData->kickPlayerId = playerIdWho;
|
||||||
m_voteKickData->numVotesToKick = static_cast<int>(ceil(numPlayers / 3. * 2.));
|
m_voteKickData->numVotesToKick = static_cast<int>(ceil(numPlayers / 3. * 2.));
|
||||||
m_voteKickData->timeLimitSec = timeoutSec;
|
m_voteKickData->timeLimitSec = timeoutSec + SERVER_KICK_TIMEOUT_ADD_DELAY_SEC;
|
||||||
// Consider first vote.
|
// Consider first vote.
|
||||||
m_voteKickData->numVotesInFavourOfKicking = 1;
|
m_voteKickData->numVotesInFavourOfKicking = 1;
|
||||||
m_voteKickData->votedPlayerIds.push_back(playerIdByWhom);
|
m_voteKickData->votedPlayerIds.push_back(playerIdByWhom);
|
||||||
@@ -338,7 +340,7 @@ ServerGameThread::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWh
|
|||||||
startPetitionData.petitionId = m_voteKickData->petitionId;
|
startPetitionData.petitionId = m_voteKickData->petitionId;
|
||||||
startPetitionData.proposingPlayerId = playerIdByWhom;
|
startPetitionData.proposingPlayerId = playerIdByWhom;
|
||||||
startPetitionData.kickPlayerId = m_voteKickData->kickPlayerId;
|
startPetitionData.kickPlayerId = m_voteKickData->kickPlayerId;
|
||||||
startPetitionData.kickTimeoutSec = m_voteKickData->timeLimitSec;
|
startPetitionData.kickTimeoutSec = timeoutSec;
|
||||||
startPetitionData.numVotesNeededToKick = m_voteKickData->numVotesToKick;
|
startPetitionData.numVotesNeededToKick = m_voteKickData->numVotesToKick;
|
||||||
|
|
||||||
static_cast<NetPacketStartKickPlayerPetition *>(startPetition.get())->SetData(startPetitionData);
|
static_cast<NetPacketStartKickPlayerPetition *>(startPetition.get())->SetData(startPetitionData);
|
||||||
|
|||||||
Reference in New Issue
Block a user