diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index bb67003..6a209be 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2363,32 +2363,36 @@ void Human::OnDie() } } } - if (!HasNoDownedTeammate() && !leave_) { - if (team_members) { - for (auto& member : *team_members) { - if (member == this) { - member->SendGameOver(); - } else { - if (member->real_dead) { + if (!leave_) { + if (!HasNoDownedTeammate()) { + if (team_members) { + for (auto& member : *team_members) { + if (member == this) { member->SendGameOver(); - } else if (member->downed) { - a8::XParams* timer_param = room->xtimer.MutableParams(member->downed_timer); - member->stats.killer_id = timer_param->param1; - member->stats.killer_name = timer_param->param2.GetString(); - member->stats.weapon_id = timer_param->param2; - member->dead = true; - member->real_dead = true; - member->health = 0.0f; - member->dead_frameno = room->frame_no; - member->room->OnHumanDie(this); - member->SyncAroundPlayers(__FILE__, __LINE__, __func__); - member->SendGameOver(); - if (member->downed_timer) { - room->xtimer.DeleteTimer(member->downed_timer); + } else { + if (member->real_dead) { + member->SendGameOver(); + } else if (member->downed) { + a8::XParams* timer_param = room->xtimer.MutableParams(member->downed_timer); + member->stats.killer_id = timer_param->param1; + member->stats.killer_name = timer_param->param2.GetString(); + member->stats.weapon_id = timer_param->param2; + member->dead = true; + member->real_dead = true; + member->health = 0.0f; + member->dead_frameno = room->frame_no; + member->room->OnHumanDie(this); + member->SyncAroundPlayers(__FILE__, __LINE__, __func__); + member->SendGameOver(); + if (member->downed_timer) { + room->xtimer.DeleteTimer(member->downed_timer); + } + member->downed_timer = nullptr; } - member->downed_timer = nullptr; } } + } else { + SendGameOver(); } } else { SendGameOver();