diff --git a/server/gameserver/buff/cond_add.cc b/server/gameserver/buff/cond_add.cc index 056856f5..9262c6ce 100644 --- a/server/gameserver/buff/cond_add.cc +++ b/server/gameserver/buff/cond_add.cc @@ -100,7 +100,25 @@ void CondAddBuff::ProcBulletHit() void CondAddBuff::ProcBulletKill() { + auto context = A8_MAKE_ANON_STRUCT_SHARED + ( + ); + handlers_.push_back + ( + owner->GetTrigger()->AddListener + ( + kBulletKill, + [this, context] + (const a8::Args& args) + { + IBullet* bullet = args.Get(0); + Creature* c = args.Get(0); + if (!owner->dead) { + owner->TryAddBuff(owner, meta->_int_buff_param4, skill_meta); + } + }) + ); } void CondAddBuff::ProcBulletEnd() diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index 19ba44bc..dc509619 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -507,3 +507,8 @@ void Trigger::EndJump(Creature* sender) { DispatchEvent(kEndJump, {}); } + +void Trigger::BulletKill(IBullet* bullet, Creature* target) +{ + DispatchEvent(kBulletKill, {bullet, target}); +} diff --git a/server/gameserver/trigger.h b/server/gameserver/trigger.h index e2d03c9c..adcd79da 100644 --- a/server/gameserver/trigger.h +++ b/server/gameserver/trigger.h @@ -41,7 +41,8 @@ enum EventId_e kAttacked, kStartJump, kEndJump, - kTakeonWeaponEvent + kTakeonWeaponEvent, + kBulletKill }; class Weapon; @@ -67,6 +68,7 @@ public: void ReceiveDmg(); void PreDie(int killer_id, int weapon_id); void Die(int killer_id, int weapon_id); + void BulletKill(IBullet* bullet, Creature* target); void ActiveBuff(const mt::Buff* buff_meta); void DeactiveBuff(const mt::Buff* buff_meta); void BulletHit(IBullet* bullet, Creature* target);