From 12aa63a45a2a19ac2b2a0137f2a2d9320bad5c59 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 13 Oct 2022 13:32:03 +0800 Subject: [PATCH] 1 --- server/gameserver/skill.cc | 76 ++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 19 deletions(-) diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 23961dd9..2644de63 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -613,43 +613,57 @@ void Skill::ProcMYXY() { float speed_rate = SkillHelper::GetMyxySpeedRate(meta); float atk_rate = SkillHelper::GetMyxyAtkRate(meta); + std::shared_ptr immune_buff_uniid = std::make_shared(0); owner->GetTrigger()->AddListener ( kStartSwitchWeaponBuffEvent, - [this, speed_rate, atk_rate] (const std::vector& params) + [this, speed_rate, atk_rate, immune_buff_uniid] (const std::vector& params) { Buff* buff = std::any_cast(params.at(0)); if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { return; } owner->GetAbility()->AddSpeedAddition(speed_rate); + if (*immune_buff_uniid) { + owner->RemoveBuffByUniId(*immune_buff_uniid); + *immune_buff_uniid = 0; + } + *immune_buff_uniid = owner->TryAddBuffAndSetTime + (owner, + kImmuneEffectBuffId, + buff->skill_meta->i->skill_cd() * 1000, + meta); } ); owner->GetTrigger()->AddListener ( kEndSwitchWeaponBuffEvent, - [this, speed_rate, atk_rate] (const std::vector& params) + [this, speed_rate, atk_rate, immune_buff_uniid] (const std::vector& params) { Buff* buff = std::any_cast(params.at(0)); if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { return; } + if (*immune_buff_uniid) { + owner->RemoveBuffByUniId(*immune_buff_uniid); + *immune_buff_uniid = 0; + } owner->GetAbility()->DelSpeedAddition(speed_rate); } ); #ifdef DEBUG + { + std::string dbg_msg = a8::Format + ( + "skill_id:%d 免疫眩晕 攻击力:%f 移动提升:%f", { - std::string dbg_msg = a8::Format - ( - "skill_id:%d 免疫眩晕 攻击力:%f 移动提升:%f", - { - meta->i->skill_id(), - atk_rate, - speed_rate - }); - owner->SendDebugMsg(dbg_msg); - a8::XPrintf("%s\n", {dbg_msg}); - } + meta->i->skill_id(), + atk_rate, + speed_rate + }); + owner->SendDebugMsg(dbg_msg); + a8::XPrintf("%s\n", {dbg_msg}); + } #endif } @@ -657,10 +671,12 @@ 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); owner->GetTrigger()->AddListener ( kFlyHookCreateEvent, - [this, dmg_ruduce_rate, dmg_ruduce_timer] (const std::vector& params) mutable + [this, dmg_ruduce_rate, dmg_ruduce_timer, immune_buff_uniid] + (const std::vector& params) mutable { Buff* buff = std::any_cast(params.at(0)); if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { @@ -683,20 +699,42 @@ void Skill::ProcGZJS() }, &xtimer_attacher.timer_list_); dmg_ruduce_timer = owner->room->xtimer.GetTimerPtr(timer); - owner->TryAddBuffAndSetTime(owner, - meta->number_meta->pb->buff_id(), - meta->number_meta->float_time - ); + + if (*immune_buff_uniid) { + owner->RemoveBuffByUniId(*immune_buff_uniid); + *immune_buff_uniid = 0; + } + *immune_buff_uniid = owner->TryAddBuffAndSetTime + (owner, + kImmuneEffectBuffId, + meta->number_meta->float_time * 1000, + meta); + + owner->TryAddBuffAndSetTime + (owner, + kDispelEffectBuffId, + 0, + meta); + + owner->TryAddBuffAndSetTime + (owner, + meta->number_meta->pb->buff_id(), + meta->number_meta->float_time + ); }); owner->GetTrigger()->AddListener ( kFlyHookDestoryEvent, - [this, dmg_ruduce_rate] (const std::vector& params) + [this, dmg_ruduce_rate, immune_buff_uniid] (const std::vector& params) { Buff* buff = std::any_cast(params.at(0)); if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { return; } + if (*immune_buff_uniid) { + owner->RemoveBuffByUniId(*immune_buff_uniid); + *immune_buff_uniid = 0; + } } ); }