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 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<Team> 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<Team> team1 = team_hash_[team_id1];
std::shared_ptr<Team> team2 = team_hash_[team_id2];
std::shared_ptr<Team> team1 = team_hash_.at(team_id1);
std::shared_ptr<Team> 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<std::shared_ptr<Team>> 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()