修复:队伍中角色全部倒地时,没有立即结束
This commit is contained in:
parent
905201e78e
commit
0c3a1baa4c
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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()
|
||||
|
2
third_party/a8engine
vendored
2
third_party/a8engine
vendored
@ -1 +1 @@
|
||||
Subproject commit 4a78121aa74d10eaa73cbfa817f4308bcf627a33
|
||||
Subproject commit fc99a3615db9aabc1a77489e069a4e6af26d50d5
|
Loading…
x
Reference in New Issue
Block a user