This commit is contained in:
aozhiwei 2022-11-23 10:26:13 +08:00
parent 8245e38da5
commit 3ebbdf55a0

View File

@ -980,66 +980,6 @@ void Human::FindPathInMapService()
void Human::FillSMGameOver(cs::SMGameOver& msg) void Human::FillSMGameOver(cs::SMGameOver& msg)
{ {
int alive_team_num = room->GetAliveTeamNum(); int alive_team_num = room->GetAliveTeamNum();
if (stats.rank <= 0) {
std::vector<Human*> human_list;
room->TraverseHumanList(a8::XParams(),
[&human_list] (Human* hum, a8::XParams& param) -> bool
{
if (hum->leave_frameno_ == 0 ||
hum->leave_frameno_ > hum->room->GetBattleStartFrameNo()) {
human_list.push_back(hum);
}
return true;
});
std::sort(human_list.begin(), human_list.end(),
[] (Human* a, Human* b )
{
if (a->real_dead && b->real_dead) {
if (a->dead_frameno == b->dead_frameno) {
return a->GetUniId() < b->GetUniId();
} else {
return a->dead_frameno == 0 ||
(b->dead_frameno != 0 && a->dead_frameno > b->dead_frameno);
}
} else {
if (a->real_dead) {
return false;
}
if (b->real_dead) {
return true;
}
return a->GetUniId() < b->GetUniId();
}
});
int rank = human_list.size();
for (size_t i = 0; i < human_list.size(); ++i) {
if (human_list[i] == this) {
rank = i + 1;
break;
}
}
if (alive_team_num == 1) {
if (room->GetAliveTeam() == GetTeam()) {
rank = 1;
}
}
stats.rank = rank;
if (room->IsPveRoom()) {
} else {
stats.victory = stats.rank == 1;
if (GetTeam()->GetAliveNum() <= 0) {
GetTeam()->team_rank = room->GetAliveTeamNum();
}
if (stats.victory) {
GetTeam()->team_rank = 1;
}
}
}
if (room->IsPveRoom()) {
if (stats.pve_kill_boss) {
stats.victory = true;
}
}
if (stats.victory) { if (stats.victory) {
msg.set_watchable(false); msg.set_watchable(false);
@ -1073,11 +1013,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg)
( (
[this, &msg] (Human* member) -> bool [this, &msg] (Human* member) -> bool
{ {
#if 1
{ {
#else
if (this != member) {
#endif
member->FillMFTeamData(this, msg.add_team_data(), true); member->FillMFTeamData(this, msg.add_team_data(), true);
cs::MFPlayerStats* p = msg.add_player_stats(); cs::MFPlayerStats* p = msg.add_player_stats();
member->FillMFPlayerStats(p); member->FillMFPlayerStats(p);
@ -1085,12 +1021,6 @@ void Human::FillSMGameOver(cs::SMGameOver& msg)
return true; return true;
}); });
} }
#if 0
{
cs::MFPlayerStats* p = msg.add_player_stats();
FillMFPlayerStats(p);
}
#endif
{ {
msg.set_total_team_num(room->GetTeamNum()); msg.set_total_team_num(room->GetTeamNum());
if (room->IsPveRoom()) { if (room->IsPveRoom()) {
@ -2215,8 +2145,21 @@ void Human::GenBattleReportData(a8::MutableXObject* params)
rank = 1; rank = 1;
} }
} }
}
stats.rank = rank; stats.rank = rank;
if (room->IsPveRoom()) {
if (stats.pve_kill_boss) {
stats.victory = true;
}
} else {
stats.victory = stats.rank == 1;
if (GetTeam()->GetAliveNum() <= 0) {
GetTeam()->team_rank = room->GetAliveTeamNum();
}
if (stats.victory) {
GetTeam()->team_rank = 1;
}
}
}
if (!stats.statemented) { if (!stats.statemented) {
stats.Statement(this); stats.Statement(this);
} }