diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 4e3b313e..1c8119cf 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1020,11 +1020,15 @@ bool Room::BattleStarted() int Room::GetAliveTeamNum() { int num = 0; - for (auto& pair : team_hash_) { - if (!pair.second->IsViewTeam() && pair.second->HasAliveMember()) { - ++num; - } - } + TraverseTeams + ( + [&num] (Team* ele_team) -> bool + { + if (!ele_team->IsViewTeam() && ele_team->HasAliveMember()) { + ++num; + } + return true; + }); return num; } @@ -1183,12 +1187,18 @@ void Room::FillSMUiUpdate(cs::SMUiUpdate& msg) Team* Room::GetAliveTeam() { - for (auto& pair : team_hash_) { - if (!pair.second->IsViewTeam() && pair.second->HasAliveMember()) { - return pair.second.get(); - } - } - return nullptr; + Team* alive_team = nullptr; + TraverseTeams + ( + [&alive_team] (Team* ele_team) -> bool + { + if (!ele_team->IsViewTeam() && ele_team->HasAliveMember()) { + alive_team = ele_team; + return false; + } + return true; + }); + return alive_team; } std::shared_ptr Room::NewTeam() @@ -1624,12 +1634,16 @@ void Room::UpdateGasInactiveMoba() return true; }); App::Instance()->verify_set_pos = 0; - for (auto& pair : team_hash_) { - pair.second->GenBattleUuid(); - if (pair.second->HasPlayer()) { - batch_sync_->AddTeam(pair.second.get()); - } - } + TraverseTeams + ( + [this] (Team* ele_team) -> bool + { + ele_team->GenBattleUuid(); + if (ele_team->HasPlayer()) { + batch_sync_->AddTeam(ele_team); + } + return true; + }); #else CombineTeam(); FillTeam(); @@ -1829,25 +1843,29 @@ void Room::CombineTeam() int first_team_id = 0; int total_count = 0; - for (auto& pair : team_hash_) { - auto team = pair.second; - if (!team->AllIsRunAway()) { - team->TraverseMembers - ( - [this, team, &first_team_id, &total_count, &need_combine_teams] (Human* member) -> bool - { - if (member->auto_fill && !member->team_uuid.empty()) { - if (first_team_id == 0) { - first_team_id = team->GetTeamId(); - } - need_combine_teams[team->GetTeamId()] = team->GetMemberNum(); - total_count += team->GetMemberNum(); - return false; - } - return true; - }); - } - } + TraverseTeams + ( + [&need_combine_teams, &need_combine_teams_copy, &first_team_id, &total_count] + (Team* ele_team) -> bool + { + if (!ele_team->AllIsRunAway()) { + ele_team->TraverseMembers + ( + [ele_team, &first_team_id, &total_count, &need_combine_teams] (Human* member) -> bool + { + if (member->auto_fill && !member->team_uuid.empty()) { + if (first_team_id == 0) { + first_team_id = ele_team->GetTeamId(); + } + need_combine_teams[ele_team->GetTeamId()] = ele_team->GetMemberNum(); + total_count += ele_team->GetMemberNum(); + return false; + } + return true; + }); + } + return true; + }); if (total_count <= 1) { return; @@ -1920,8 +1938,8 @@ void Room::CombineTeam() if (pair1.second + pair2.second <= GetMaxTeamNum()) { int new_team_num = pair1.second + pair2.second; { - std::shared_ptr team1 = team_hash_[team_id1]; - std::shared_ptr team2 = team_hash_[team_id2]; + std::shared_ptr team1 = team_hash_.at(team_id1); + std::shared_ptr team2 = team_hash_.at(team_id2); if (team1->GetMemberNum() + team2->GetMemberNum() > GetMaxTeamNum()) { f8::UdpLog::Instance()->Warning("team_member > 4 :%d", { @@ -1994,11 +2012,15 @@ void Room::CombineTeam() void Room::FillTeam() { std::vector> free_team_list; - for (auto& pair : team_hash_) { - if (pair.second->IsFreeTeam()) { - free_team_list.push_back(pair.second); - } - } + TraverseTeams + ( + [] (Team* ele_team) -> bool + { + if (ele_team->IsFreeTeam()) { + free_team_list.push_back(ele_team); + } + return true; + }); std::random_shuffle(free_team_list.begin(), free_team_list.end()); for (auto& pair : accountid_hash_) { if (free_team_list.empty()) { @@ -2027,12 +2049,16 @@ void Room::FillTeam() } } } - for (auto& pair : team_hash_) { - pair.second->GenBattleUuid(); - if (pair.second->HasPlayer()) { - batch_sync_->AddTeam(pair.second.get()); - } - } + TraverseTeams + ( + [this] (Team* ele_team) -> bool + { + ele_team->GenBattleUuid(); + if (ele_team->HasPlayer()) { + batch_sync_->AddTeam(ele_team.get()); + } + return true; + }); } void Room::ShuaPlane()