mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-24 23:53:54 -07:00
* fix #2624 * feedback++
This commit is contained in:
parent
38ad71b06a
commit
29904c49da
8 changed files with 48 additions and 16 deletions
|
|
@ -5,4 +5,11 @@ message Event_Leave {
|
|||
extend GameEvent {
|
||||
optional Event_Leave ext = 1001;
|
||||
}
|
||||
enum LeaveReason {
|
||||
OTHER = 1;
|
||||
USER_KICKED = 2;
|
||||
USER_LEFT = 3;
|
||||
USER_DISCONNECTED = 4;
|
||||
}
|
||||
optional LeaveReason reason = 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -471,7 +471,7 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
|
|||
createGameJoinedEvent(newPlayer, rc, false);
|
||||
}
|
||||
|
||||
void Server_Game::removePlayer(Server_Player *player)
|
||||
void Server_Game::removePlayer(Server_Player *player, Event_Leave::LeaveReason reason)
|
||||
{
|
||||
room->getServer()->removePersistentPlayer(QString::fromStdString(player->getUserInfo()->name()), room->getId(), gameId, player->getPlayerId());
|
||||
players.remove(player->getPlayerId());
|
||||
|
|
@ -479,7 +479,10 @@ void Server_Game::removePlayer(Server_Player *player)
|
|||
GameEventStorage ges;
|
||||
removeArrowsRelatedToPlayer(ges, player);
|
||||
unattachCards(ges, player);
|
||||
ges.enqueueGameEvent(Event_Leave(), player->getPlayerId());
|
||||
|
||||
Event_Leave event;
|
||||
event.set_reason(reason);
|
||||
ges.enqueueGameEvent(event, player->getPlayerId());
|
||||
ges.sendToGame(this);
|
||||
|
||||
bool playerActive = activePlayer == player->getPlayerId();
|
||||
|
|
@ -585,7 +588,7 @@ bool Server_Game::kickPlayer(int playerId)
|
|||
playerToKick->sendGameEvent(*gec);
|
||||
delete gec;
|
||||
|
||||
removePlayer(playerToKick);
|
||||
removePlayer(playerToKick, Event_Leave::USER_KICKED);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include "server_response_containers.h"
|
||||
#include "pb/response.pb.h"
|
||||
#include "pb/serverinfo_game.pb.h"
|
||||
#include "pb/event_leave.pb.h"
|
||||
|
||||
class QTimer;
|
||||
class GameEventContainer;
|
||||
|
|
@ -103,7 +104,7 @@ public:
|
|||
Response::ResponseCode checkJoin(ServerInfo_User *user, const QString &_password, bool spectator, bool overrideRestrictions);
|
||||
bool containsUser(const QString &userName) const;
|
||||
void addPlayer(Server_AbstractUserInterface *userInterface, ResponseContainer &rc, bool spectator, bool broadcastUpdate = true);
|
||||
void removePlayer(Server_Player *player);
|
||||
void removePlayer(Server_Player *player, Event_Leave::LeaveReason reason);
|
||||
void removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Player *player);
|
||||
void unattachCards(GameEventStorage &ges, Server_Player *player);
|
||||
bool kickPlayer(int playerId);
|
||||
|
|
|
|||
|
|
@ -616,7 +616,7 @@ Response::ResponseCode Server_Player::setCardAttrHelper(GameEventStorage &ges, c
|
|||
|
||||
Response::ResponseCode Server_Player::cmdLeaveGame(const Command_LeaveGame & /*cmd*/, ResponseContainer & /*rc*/, GameEventStorage & /*ges*/)
|
||||
{
|
||||
game->removePlayer(this);
|
||||
game->removePlayer(this, Event_Leave::USER_LEFT);
|
||||
return Response::RespOk;
|
||||
}
|
||||
|
||||
|
|
@ -1715,7 +1715,7 @@ void Server_Player::setUserInterface(Server_AbstractUserInterface *_userInterfac
|
|||
void Server_Player::disconnectClient()
|
||||
{
|
||||
if (!(userInfo->user_level() & ServerInfo_User::IsRegistered) || spectator)
|
||||
game->removePlayer(this);
|
||||
game->removePlayer(this, Event_Leave::USER_DISCONNECTED);
|
||||
else
|
||||
setUserInterface(0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue