From ef830ecbab4a2baf9b92cfed4b159bcc51b98bbf Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 17 Mar 2023 16:08:50 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/cond_add.cc | 18 ++++++++++++++++++ server/gameserver/trigger.cc | 5 +++++ server/gameserver/trigger.h | 4 +++- 3 files changed, 26 insertions(+), 1 deletion(-) 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);