diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 91aca042..f674976e 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -684,10 +684,11 @@ void Skill::ProcGZJS() float dmg_ruduce_rate = meta->number_meta->float_ratio2; std::weak_ptr dmg_ruduce_timer; std::shared_ptr immune_buff_uniid = std::make_shared(0); + std::shared_ptr hold_gun_buff_uniid = std::make_shared(0); owner->GetTrigger()->AddListener ( kFlyHookCreateEvent, - [this, dmg_ruduce_rate, dmg_ruduce_timer, immune_buff_uniid] + [this, dmg_ruduce_rate, dmg_ruduce_timer, immune_buff_uniid, hold_gun_buff_uniid] (const std::vector& params) mutable { Bullet* bullet = std::any_cast(params.at(0)); @@ -722,6 +723,16 @@ void Skill::ProcGZJS() meta->number_meta->float_time * 1000, meta); + if (*hold_gun_buff_uniid) { + owner->RemoveBuffByUniId(*hold_gun_buff_uniid); + *hold_gun_buff_uniid = 0; + } + *hold_gun_buff_uniid = owner->TryAddBuffAndSetTime + (owner, + meta->number_meta->pb->buff_id(), + meta->number_meta->float_time * 1000, + meta); + owner->TryAddBuffAndSetTime (owner, kDispelEffectBuffId, @@ -737,12 +748,16 @@ void Skill::ProcGZJS() owner->GetTrigger()->AddListener ( kFlyHookDestoryEvent, - [this, dmg_ruduce_rate, immune_buff_uniid] (const std::vector& params) + [this, dmg_ruduce_rate, immune_buff_uniid, hold_gun_buff_uniid] (const std::vector& params) { if (*immune_buff_uniid) { owner->RemoveBuffByUniId(*immune_buff_uniid); *immune_buff_uniid = 0; } + if (*hold_gun_buff_uniid) { + owner->RemoveBuffByUniId(*hold_gun_buff_uniid); + *hold_gun_buff_uniid = 0; + } } ); }