修复:队伍中角色全部倒地时,没有立即结束
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 dmg = gun_meta->i->atk() * (1 + player->buff.damage_add);
|
||||||
float def = 0;
|
float def = 0;
|
||||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||||
|
#if 0
|
||||||
player->stats.damage_amount_out += finaly_dmg;
|
player->stats.damage_amount_out += finaly_dmg;
|
||||||
|
#endif
|
||||||
|
|
||||||
obstacle->health = std::max(0.0f, obstacle->health - finaly_dmg);
|
obstacle->health = std::max(0.0f, obstacle->health - finaly_dmg);
|
||||||
obstacle->dead = obstacle->health <= 0.01f;
|
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) {
|
if (team_members) {
|
||||||
for (auto& member : *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 {
|
} 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;
|
downed_timer = nullptr;
|
||||||
BeKill(killer_id, killer_name, weapon_id);
|
BeKill(killer_id, killer_name, weapon_id);
|
||||||
} else {
|
} else {
|
||||||
if (HasLiveTeammate()) {
|
if (HasNoDownedTeammate()) {
|
||||||
health = MetaMgr::Instance()->GetSysParamAsInt("downed_recover_hp");
|
health = MetaMgr::Instance()->GetSysParamAsInt("downed_recover_hp");
|
||||||
downed = true;
|
downed = true;
|
||||||
downed_timer = room->xtimer.AddRepeatTimerAndAttach(
|
downed_timer = room->xtimer.AddRepeatTimerAndAttach(
|
||||||
@ -645,7 +664,19 @@ bool Human::HasLiveTeammate()
|
|||||||
{
|
{
|
||||||
if (team_members) {
|
if (team_members) {
|
||||||
for (auto& hum : *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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,6 +136,7 @@ class Human : public Entity
|
|||||||
void AddOutObjects(Entity* entity);
|
void AddOutObjects(Entity* entity);
|
||||||
void RemoveOutObjects(Entity* entity);
|
void RemoveOutObjects(Entity* entity);
|
||||||
bool HasLiveTeammate();
|
bool HasLiveTeammate();
|
||||||
|
bool HasNoDownedTeammate();
|
||||||
void Land();
|
void Land();
|
||||||
void DoJump();
|
void DoJump();
|
||||||
void DoSkill();
|
void DoSkill();
|
||||||
|
@ -218,6 +218,11 @@ void Room::ShuaAndroid()
|
|||||||
grid_service.AddHuman(hum);
|
grid_service.AddHuman(hum);
|
||||||
hum->FindLocation();
|
hum->FindLocation();
|
||||||
hum->RefreshView();
|
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()
|
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