This commit is contained in:
aozhiwei 2024-02-03 14:05:33 +08:00
parent eed14c5cec
commit 5b8ec57bbe

View File

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