diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 677d7443..2054eb09 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2787,7 +2787,7 @@ void Creature::ClearEnergyShield() kPropEnergyShield, energy_shield, max_energy_shield, - true); + false); } std::weak_ptr Creature::AddEffect(int effect_id) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 1c789b8a..1a2ebbab 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -702,6 +702,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string killer_name, in SetHP(std::max(0.0f, new_health)); if (old_health - GetHP() > 0.001f) { stats.damage_amount_in += old_health - GetHP(); + real_dmg_out = old_health - GetHP(); GetTrigger()->ReceiveDmg(); } if (GetHP() <= 0.0001f && !dead) { @@ -2559,6 +2560,7 @@ void Human::OnBulletHit(IBullet* bullet) bullet->GetPassenger().Get()->GetUniId(), bullet->GetPassenger().Get()->GetName(), dmg_out); + bullet->GetSender().Get()->GetTrigger()->DmgOut(this, dmg_out); } } else { if (!bullet->IsPreBattleBullet()) { @@ -2574,6 +2576,7 @@ void Human::OnBulletHit(IBullet* bullet) bullet->GetSender().Get()->GetUniId(), bullet->GetSender().Get()->GetName(), dmg_out); + bullet->GetSender().Get()->GetTrigger()->DmgOut(this, dmg_out); } } } diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index 0b3bbec7..1a7ef124 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -503,12 +503,16 @@ void Trigger::Attacked(Creature* sender) void Trigger::DmgOut(Creature* target, float dmg) { DispatchEvent(kDmgOutEvent, {target, dmg}); - TraverseCondBuffs - (kEventBuffDmgOut, - [this, dmg] (Buff* buff, bool& stop) - { - AddBuffs(buff, buff->meta->_int_buff_param1, buff->meta->_buff_param4_int_list); - }); + if (HasCondBuff(kEventBuffDmgOut)) { + TraverseCondBuffs + (kEventBuffDmgOut, + [this, dmg] (Buff* buff, bool& stop) + { + auto buff_vars = std::make_shared>(); + buff_vars->push_back(dmg); + AddBuffs(buff, buff->meta->_int_buff_param1, buff->meta->_buff_param4_int_list, buff_vars); + }); + } } void Trigger::BulletBlock(IBullet* bullet, const glm::vec3& pos)