From 0c3a1baa4c6543d0d1859c83553539ecfaa05974 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 13 May 2019 11:47:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=E9=98=9F=E4=BC=8D=E4=B8=AD?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=85=A8=E9=83=A8=E5=80=92=E5=9C=B0=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=B2=A1=E6=9C=89=E7=AB=8B=E5=8D=B3=E7=BB=93=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/bullet.cc | 2 ++ server/gameserver/human.cc | 41 ++++++++++++++++++++++++++++++++----- server/gameserver/human.h | 1 + server/gameserver/room.cc | 10 +++++++++ third_party/a8engine | 2 +- 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 31e5e0a..3d80af3 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -125,7 +125,9 @@ void Bullet::OnHit(std::set& 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; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 04c5c93..6d37788 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -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; } } diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 3133d08..3a86507 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -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(); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index bf8c41f..acc3c9c 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -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() diff --git a/third_party/a8engine b/third_party/a8engine index 4a78121..fc99a36 160000 --- a/third_party/a8engine +++ b/third_party/a8engine @@ -1 +1 @@ -Subproject commit 4a78121aa74d10eaa73cbfa817f4308bcf627a33 +Subproject commit fc99a3615db9aabc1a77489e069a4e6af26d50d5