Commit 29d8350a authored by mercury233's avatar mercury233

fix player leave when finger-guessing

parent 314d9d3a
...@@ -20,6 +20,7 @@ extern unsigned short time_limit; ...@@ -20,6 +20,7 @@ extern unsigned short time_limit;
extern unsigned char start_hand; extern unsigned char start_hand;
extern unsigned char draw_count; extern unsigned char draw_count;
bool runasserver = true; bool runasserver = true;
bool started_hand = false;
SingleDuel::SingleDuel(bool is_match) { SingleDuel::SingleDuel(bool is_match) {
match_mode = is_match; match_mode = is_match;
...@@ -196,7 +197,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) { ...@@ -196,7 +197,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
} }
if(dp->type == NETPLAYER_TYPE_OBSERVER) { if(dp->type == NETPLAYER_TYPE_OBSERVER) {
observers.erase(dp); observers.erase(dp);
if(!pduel) { if(!started_hand) {
STOC_HS_WatchChange scwc; STOC_HS_WatchChange scwc;
scwc.watch_count = observers.size(); scwc.watch_count = observers.size();
if(players[0]) if(players[0])
...@@ -208,7 +209,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) { ...@@ -208,7 +209,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
} }
NetServer::DisconnectPlayer(dp); NetServer::DisconnectPlayer(dp);
} else { } else {
if(!pduel && duel_count == 0) { if(!started_hand && duel_count == 0) {
STOC_HS_PlayerChange scpc; STOC_HS_PlayerChange scpc;
players[dp->type] = 0; players[dp->type] = 0;
ready[dp->type] = false; ready[dp->type] = false;
...@@ -221,7 +222,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) { ...@@ -221,7 +222,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc); NetServer::SendPacketToPlayer(*pit, STOC_HS_PLAYER_CHANGE, scpc);
NetServer::DisconnectPlayer(dp); NetServer::DisconnectPlayer(dp);
} else { } else {
if(!pduel) { if(!started_hand) {
if(!ready[0]) if(!ready[0])
NetServer::SendPacketToPlayer(players[0], STOC_DUEL_START); NetServer::SendPacketToPlayer(players[0], STOC_DUEL_START);
if(!ready[1]) if(!ready[1])
...@@ -367,6 +368,7 @@ void SingleDuel::StartDuel(DuelPlayer* dp) { ...@@ -367,6 +368,7 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
(*oit)->state = CTOS_LEAVE_GAME; (*oit)->state = CTOS_LEAVE_GAME;
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
} }
started_hand = true;
NetServer::SendPacketToPlayer(players[0], STOC_SELECT_HAND); NetServer::SendPacketToPlayer(players[0], STOC_SELECT_HAND);
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
hand_result[0] = 0; hand_result[0] = 0;
......
...@@ -19,6 +19,7 @@ extern unsigned int start_lp; ...@@ -19,6 +19,7 @@ extern unsigned int start_lp;
extern unsigned short time_limit; extern unsigned short time_limit;
extern unsigned char start_hand; extern unsigned char start_hand;
extern unsigned char draw_count; extern unsigned char draw_count;
bool started_hand_tag = false;
TagDuel::TagDuel() { TagDuel::TagDuel() {
for(int i = 0; i < 4; ++i) { for(int i = 0; i < 4; ++i) {
...@@ -174,7 +175,7 @@ void TagDuel::LeaveGame(DuelPlayer* dp) { ...@@ -174,7 +175,7 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
} }
if(dp->type == NETPLAYER_TYPE_OBSERVER) { if(dp->type == NETPLAYER_TYPE_OBSERVER) {
observers.erase(dp); observers.erase(dp);
if(!pduel) { if(!started_hand_tag) {
STOC_HS_WatchChange scwc; STOC_HS_WatchChange scwc;
scwc.watch_count = observers.size(); scwc.watch_count = observers.size();
for(int i = 0; i < 4; ++i) for(int i = 0; i < 4; ++i)
...@@ -185,7 +186,7 @@ void TagDuel::LeaveGame(DuelPlayer* dp) { ...@@ -185,7 +186,7 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
} }
NetServer::DisconnectPlayer(dp); NetServer::DisconnectPlayer(dp);
} else { } else {
if(!pduel) { if(!started_hand_tag) {
STOC_HS_PlayerChange scpc; STOC_HS_PlayerChange scpc;
players[dp->type] = 0; players[dp->type] = 0;
ready[dp->type] = false; ready[dp->type] = false;
...@@ -325,6 +326,7 @@ void TagDuel::StartDuel(DuelPlayer* dp) { ...@@ -325,6 +326,7 @@ void TagDuel::StartDuel(DuelPlayer* dp) {
(*oit)->state = CTOS_LEAVE_GAME; (*oit)->state = CTOS_LEAVE_GAME;
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
} }
started_hand_tag = true;
NetServer::SendPacketToPlayer(players[0], STOC_SELECT_HAND); NetServer::SendPacketToPlayer(players[0], STOC_SELECT_HAND);
NetServer::ReSendToPlayer(players[2]); NetServer::ReSendToPlayer(players[2]);
hand_result[0] = 0; hand_result[0] = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment