From 9bc5b161129733beb36904293171586caa3c1b9d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 30 Sep 2021 07:20:04 +0000 Subject: [PATCH] 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;