This commit is contained in:
aozhiwei 2023-04-07 14:02:04 +08:00
parent 5ae637fec4
commit af77448d8b
2 changed files with 56 additions and 2 deletions

View File

@ -1023,8 +1023,7 @@ void Room::OnPlayerOffline(Player* hum)
{
if (a8::TIMER_EXEC_EVENT == event) {
if (GetOnlinePlayerNum() <= 0 && !added_to_over_room) {
GameLog::Instance()->ForceOver(this);
RoomMgr::Instance()->AddOverRoom(room_uuid_);
ForceOver();
}
}
},
@ -3660,3 +3659,57 @@ int Room::GetPvpMatchMode()
{
return GetRoomMode() == kPvpRankMode ? 1 : 0;
}
void Room::ForceOver()
{
if (added_to_over_room) {
return;
}
std::vector<Team*> alive_teams;
TraverseTeams
(
[&alive_teams] (Team* team)
{
if (team->HasAliveMember()) {
alive_teams.push_back(team);
}
return true;
});
std::sort(alive_teams.begin(), alive_teams.end(),
[] (Team* a, Team *b) -> bool
{
if (a->HasPlayer()) {
return true;
}
return false;
});
for (Team* team : alive_teams) {
team->TraverseMembers
(
[] (Human* member)
{
if (!member->dead) {
member->BeKill(VP_Gas,
TEXT("battle_server_killer_gas", "毒圈"),
VW_Gas,
VP_Gas,
TEXT("battle_server_killer_gas", "毒圈"));
}
return true;
});
}
GameLog::Instance()->ForceOver(this);
xtimer.SetTimeoutEx
(SERVER_FRAME_RATE * 5,
[this] (int event, const a8::Args* args)
{
if (a8::TIMER_EXEC_EVENT == event) {
if (!game_over_) {
game_over_ = true;
game_over_frameno_ = GetFrameNo();
OnGameOver();
}
}
},
&xtimer_attacher_);
}

View File

@ -235,6 +235,7 @@ public:
Team* GetVictoryTeam() { return victory_team_;};
int GetReportRoomMode();
int GetPvpMatchMode();
void ForceOver();
private:
void ShuaAndroid();