修复:队伍中角色全部倒地时,没有立即结束

This commit is contained in:
aozhiwei 2019-05-13 11:47:55 +08:00
parent 905201e78e
commit 0c3a1baa4c
5 changed files with 50 additions and 6 deletions

View File

@ -125,7 +125,9 @@ void Bullet::OnHit(std::set<Entity*>& objects)
float dmg = gun_meta->i->atk() * (1 + player->buff.damage_add);
float def = 0;
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
#if 0
player->stats.damage_amount_out += finaly_dmg;
#endif
obstacle->health = std::max(0.0f, obstacle->health - finaly_dmg);
obstacle->dead = obstacle->health <= 0.01f;

View File

@ -546,13 +546,32 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
}
}
}
if (!HasLiveTeammate() && !leave_) {
if (!HasNoDownedTeammate() && !leave_) {
if (team_members) {
for (auto& member : *team_members) {
member->SendGameOver();
if (member == this) {
member->SendGameOver();
} else {
if (member->dead) {
member->SendGameOver();
} else if (member->downed) {
a8::XParams& timer_param = room->xtimer.GetTimerXParams(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->health = 0.0f;
member->dead_frameno = room->frame_no;
member->room->OnHumanDie(this);
member->SyncAroundPlayers();
member->SendGameOver();
room->xtimer.DeleteTimer(member->downed_timer);
member->downed_timer = nullptr;
}
}
}
} else {
SendGameOver();
SendGameOver();
}
}
}
@ -594,7 +613,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, i
downed_timer = nullptr;
BeKill(killer_id, killer_name, weapon_id);
} else {
if (HasLiveTeammate()) {
if (HasNoDownedTeammate()) {
health = MetaMgr::Instance()->GetSysParamAsInt("downed_recover_hp");
downed = true;
downed_timer = room->xtimer.AddRepeatTimerAndAttach(
@ -645,7 +664,19 @@ bool Human::HasLiveTeammate()
{
if (team_members) {
for (auto& hum : *team_members) {
if (!hum->dead) {
if (hum != this && !hum->dead) {
return true;
}
}
}
return false;
}
bool Human::HasNoDownedTeammate()
{
if (team_members) {
for (auto& hum : *team_members) {
if (hum != this && (!hum->dead || !hum->downed)) {
return true;
}
}

View File

@ -136,6 +136,7 @@ class Human : public Entity
void AddOutObjects(Entity* entity);
void RemoveOutObjects(Entity* entity);
bool HasLiveTeammate();
bool HasNoDownedTeammate();
void Land();
void DoJump();
void DoSkill();

View File

@ -218,6 +218,11 @@ void Room::ShuaAndroid()
grid_service.AddHuman(hum);
hum->FindLocation();
hum->RefreshView();
{
hum->team_id = NewTeam();
hum->team_members = &team_hash_[hum->team_id];
hum->team_members->insert(hum);
}
}
}
@ -958,6 +963,11 @@ void Room::MatchTeam(Human* hum)
}
}
}
if (hum->team_id == 0) {
hum->team_id = NewTeam();
hum->team_members = &team_hash_[hum->team_id];
hum->team_members->insert(hum);
}
}
void Room::InitAirDrop()

@ -1 +1 @@
Subproject commit 4a78121aa74d10eaa73cbfa817f4308bcf627a33
Subproject commit fc99a3615db9aabc1a77489e069a4e6af26d50d5