diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index 7ff5bfb..5fef5fa 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -255,7 +255,7 @@ void MatchTeam::UpdateMaster() TryCombineTeam(); } } - if (phase_left_time_ <= 0) { + if (phase_left_time_ <= 0 || GetPredictMemberNum() >= MAX_TEAM_NUM) { ChooseLeader(); phase_ = kMatchChoose; phase_start_tick_ = a8::XGetTickCount(); @@ -276,8 +276,8 @@ void MatchTeam::UpdateMaster() } } } - if (phase_left_time_ <= MetaMgr::Instance()->match_lock_time) { - for (int i = 0; i < 4; ++i) { + if ((phase_left_time_ <= MetaMgr::Instance()->match_lock_time) || IsAllPrepare()) { + for (int i = 0; i < MAX_TEAM_NUM; ++i) { AutoChoose(true); } for (auto& member : curr_member_hash_) { @@ -539,3 +539,14 @@ void MatchTeam::AutoChoose(bool force) } } } + +bool MatchTeam::IsAllPrepare() +{ + int num = 0; + for (auto& member : curr_member_hash_) { + if (member->state == kMatchPrepare) { + ++num; + } + } + return num >= MAX_TEAM_NUM; +} diff --git a/server/gameserver/matchteam.h b/server/gameserver/matchteam.h index bf6e76e..b3ee7ff 100644 --- a/server/gameserver/matchteam.h +++ b/server/gameserver/matchteam.h @@ -84,6 +84,7 @@ class MatchTeam void StartGame(); void ChooseLeader(); void AutoChoose(bool force = false); + bool IsAllPrepare(); private: long long phase_start_tick_ = 0;