diff --git a/server/gameserver/battledatacontext.cc b/server/gameserver/battledatacontext.cc index 6a4c24ef..824fe50a 100644 --- a/server/gameserver/battledatacontext.cc +++ b/server/gameserver/battledatacontext.cc @@ -887,3 +887,8 @@ int BattleDataContext::GetLevel() { return std::max(level_, 1); } + +float BattleDataContext::GetBrainLifePct() +{ + return hero_ability_->GetBrainLifePct(); +} diff --git a/server/gameserver/battledatacontext.h b/server/gameserver/battledatacontext.h index 8f7047ea..c0477cb5 100644 --- a/server/gameserver/battledatacontext.h +++ b/server/gameserver/battledatacontext.h @@ -61,6 +61,7 @@ struct BattleDataContext int GetReloadTime(Creature* c, Weapon* weapon); float GetHeroTotalAtk(); float GetExtRecoverHp(); + float GetBrainLifePct(); void SetReviveCoin(int num); int GetReviveCoin(); diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index a01f22ae..52a53e74 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -297,6 +297,15 @@ void Car::OnBulletHit(IBullet* bullet) bullet->GetSender().Get()->GetUniId(), bullet->GetSender().Get()->GetName(), dmg_out); + if (bullet->GetSender().Get() && + !bullet->GetSender().Get()->dead && + dmg_out > 0.0f && + !bullet->GetSkillMeta() && + bullet->GetSender().Get()->GetBattleContext()->GetBrainLifePct() > 0.0f) { + float recover_hp = dmg_out * + bullet->GetSender().Get()->GetBattleContext()->GetBrainLifePct(); + bullet->GetSender().Get()->AddHp(recover_hp); + } } if (bullet->GetBulletMeta()->_buff_meta) { MustBeAddBuff(this, bullet->GetBulletMeta()->buffid()); diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index d5664833..fdc14138 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -179,6 +179,15 @@ void Hero::OnBulletHit(IBullet* bullet) bullet->GetSender().Get()->GetUniId(), bullet->GetSender().Get()->GetName(), dmg_out); + if (bullet->GetSender().Get() && + !bullet->GetSender().Get()->dead && + dmg_out > 0.0f && + !bullet->GetSkillMeta() && + bullet->GetSender().Get()->GetBattleContext()->GetBrainLifePct() > 0.0f) { + float recover_hp = dmg_out * + bullet->GetSender().Get()->GetBattleContext()->GetBrainLifePct(); + bullet->GetSender().Get()->AddHp(recover_hp); + } } } } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index adf88927..2c01b610 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2140,6 +2140,15 @@ void Human::OnBulletHit(IBullet* bullet) bullet->GetPassenger().Get()->GetName(), dmg_out); bullet->GetSender().Get()->GetTrigger()->DmgOut(this, dmg_out); + if (bullet->GetSender().Get() && + !bullet->GetSender().Get()->dead && + dmg_out > 0.0f && + !bullet->GetSkillMeta() && + bullet->GetSender().Get()->GetBattleContext()->GetBrainLifePct() > 0.0f) { + float recover_hp = dmg_out * + bullet->GetSender().Get()->GetBattleContext()->GetBrainLifePct(); + bullet->GetSender().Get()->AddHp(recover_hp); + } } } else { if (!bullet->IsPreBattleBullet()) { @@ -2156,6 +2165,15 @@ void Human::OnBulletHit(IBullet* bullet) bullet->GetSender().Get()->GetName(), dmg_out); bullet->GetSender().Get()->GetTrigger()->DmgOut(this, dmg_out); + if (bullet->GetSender().Get() && + !bullet->GetSender().Get()->dead && + dmg_out > 0.0f && + !bullet->GetSkillMeta() && + bullet->GetSender().Get()->GetBattleContext()->GetBrainLifePct() > 0.0f) { + float recover_hp = dmg_out * + bullet->GetSender().Get()->GetBattleContext()->GetBrainLifePct(); + bullet->GetSender().Get()->AddHp(recover_hp); + } } } }