From 9bc5b161129733beb36904293171586caa3c1b9d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 30 Sep 2021 07:20:04 +0000 Subject: [PATCH 1/3] 1 --- server/gameserver/matchteam.cc | 53 ++++++++++++++++++++++++++++++++-- server/gameserver/matchteam.h | 4 ++- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index 32d5401..7e6aed8 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -548,8 +548,10 @@ void MatchTeam::AutoChoose(bool force) if (member->choose_hero_times <= 0) { if (member->is_robot){ ++member->choose_hero_times; + break; } else if (force) { ++member->choose_hero_times; + break; } } } @@ -568,7 +570,30 @@ bool MatchTeam::IsAllPrepare() void MatchTeam::UpdateTeamState() { - + { + bool all_choose = true; + for (auto& member : curr_member_hash_) { + if (!member->is_robot && member->choose_hero_times <= 0 && member->socket_handle != 0) { + all_choose = false; + break; + } + } + if (all_choose) { + ++all_player_choose_times_; + } + } + { + bool all_prepare = true; + for (auto& member : curr_member_hash_) { + if (!member->is_robot && member->state != kMatchPrepare && member->socket_handle != 0) { + all_prepare = false; + break; + } + } + if (all_prepare) { + ++all_player_prepare_times_; + } + } } void MatchTeam::CheckChoose() @@ -582,7 +607,7 @@ void MatchTeam::CheckChoose() AutoChoose(); last_auto_choose_tick_ = a8::XGetTickCount(); } else { - if (a8::XGetTickCount() - last_auto_choose_tick_ > (last_auto_choose_tick_ % 3000)) { + if (a8::XGetTickCount() - last_auto_choose_tick_ > (last_auto_choose_tick_ % 2000)) { AutoChoose(); last_auto_choose_tick_ = a8::XGetTickCount(); } @@ -595,4 +620,28 @@ void MatchTeam::CheckPrepare() if (phase_ != kMatchChoose) { return; } + + if (phase_left_time_ <= 10 || all_player_prepare_times_ > 0) { + if (last_auto_prepare_tick_ <= 0) { + AutoPrepare(); + last_auto_prepare_tick_ = a8::XGetTickCount(); + } else { + if (a8::XGetTickCount() - last_auto_prepare_tick_ > (last_auto_prepare_tick_ % 2000)) { + AutoPrepare(); + last_auto_prepare_tick_ = a8::XGetTickCount(); + } + } + } +} + +void MatchTeam::AutoPrepare() +{ + for (auto& member : curr_member_hash_) { + if (member->choose_hero_times > 0 && + member->state != kMatchPrepare && + member->socket_handle == 0) { + member->state = kMatchPrepare; + break; + } + } } diff --git a/server/gameserver/matchteam.h b/server/gameserver/matchteam.h index 642f589..8454b08 100644 --- a/server/gameserver/matchteam.h +++ b/server/gameserver/matchteam.h @@ -83,6 +83,7 @@ class MatchTeam void StartGame(); void ChooseLeader(); void AutoChoose(bool force = false); + void AutoPrepare(); bool IsAllPrepare(); void UpdateTeamState(); void CheckChoose(); @@ -97,8 +98,9 @@ class MatchTeam std::map> raw_member_hash_; std::shared_ptr first_member_; long long last_auto_choose_tick_ = 0; + long long last_auto_prepare_tick_ = 0; int all_player_choose_times_ = 0; - int all_player_parpre_times_ = 0; + int all_player_prepare_times_ = 0; std::map combined_team_hash_; MatchTeam* master_team_ = nullptr; From 6d435c5f7a4bb1cd0776700d7d42e95a7c2f7ebd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 30 Sep 2021 07:35:02 +0000 Subject: [PATCH 2/3] 1 --- server/gameserver/matchteam.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index 7e6aed8..96dfbc0 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -219,7 +219,6 @@ void MatchTeam::Update() } else { UpdateSlave(); } - master_team_->SyncMatchInfo(); if (phase_ == kMatchStartGame && IsMasterTeam()) { StartGame(); } @@ -321,6 +320,7 @@ void MatchTeam::UpdateMaster() } break; } + master_team_->SyncMatchInfo(); } void MatchTeam::UpdateSlave() @@ -513,7 +513,19 @@ void MatchTeam::ShuaRobot() void MatchTeam::StartGame() { - RoomMgr::Instance()->JoinTeam(this); + { + int valid_socket_num = 0; + for (auto& member : curr_member_hash_) { + if (member->socket_handle != 0) { + if (MatchMgr::Instance()->GetMatchInfo(member->socket_handle)) { + ++valid_socket_num; + } + } + } + if (valid_socket_num > 0) { + RoomMgr::Instance()->JoinTeam(this); + } + } for (auto& member : curr_member_hash_) { if (member->socket_handle != 0) { MatchMgr::Instance()->RemoveSocket(member->socket_handle); From c83a969a847728a0d5185ebb7e7b9b306220f06c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 30 Sep 2021 07:44:44 +0000 Subject: [PATCH 3/3] 1 --- server/gameserver/matchteam.cc | 37 +++++++++++++++++++++++----------- server/gameserver/matchteam.h | 1 + 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index 96dfbc0..5525a5c 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -440,6 +440,16 @@ bool MatchTeam::CanCombine(MatchTeam* b) #endif return false; } + if (GetValidSocketNum() <= 0) { +#ifdef DEBUG + a8::XPrintf("CanCombine 21\n", {}); +#endif + } + if (b->GetValidSocketNum() <= 0) { +#ifdef DEBUG + a8::XPrintf("CanCombine 22\n", {}); +#endif + } if (HasSameCurrMember(b)) { #ifdef DEBUG a8::XPrintf("CanCombine 11\n", {}); @@ -513,18 +523,8 @@ void MatchTeam::ShuaRobot() void MatchTeam::StartGame() { - { - int valid_socket_num = 0; - for (auto& member : curr_member_hash_) { - if (member->socket_handle != 0) { - if (MatchMgr::Instance()->GetMatchInfo(member->socket_handle)) { - ++valid_socket_num; - } - } - } - if (valid_socket_num > 0) { - RoomMgr::Instance()->JoinTeam(this); - } + if (GetValidSocketNum() > 0) { + RoomMgr::Instance()->JoinTeam(this); } for (auto& member : curr_member_hash_) { if (member->socket_handle != 0) { @@ -657,3 +657,16 @@ void MatchTeam::AutoPrepare() } } } + +int MatchTeam::GetValidSocketNum() +{ + int valid_socket_num = 0; + for (auto& member : curr_member_hash_) { + if (member->socket_handle != 0) { + if (MatchMgr::Instance()->GetMatchInfo(member->socket_handle)) { + ++valid_socket_num; + } + } + } + return valid_socket_num; +} diff --git a/server/gameserver/matchteam.h b/server/gameserver/matchteam.h index 8454b08..e0d19ab 100644 --- a/server/gameserver/matchteam.h +++ b/server/gameserver/matchteam.h @@ -88,6 +88,7 @@ class MatchTeam void UpdateTeamState(); void CheckChoose(); void CheckPrepare(); + int GetValidSocketNum(); private: long long phase_start_tick_ = 0;