From e33ff7833c538d66c5d89d12c6d9d75ff40418aa Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 12 Oct 2022 14:27:16 +0800 Subject: [PATCH] 1 --- server/gameserver/skill.cc | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index be7bd0e1..f7ce98f3 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -663,23 +663,35 @@ void Skill::ProcMYXY() void Skill::ProcGZJS() { - float dmg_ruduce_rate = 0; + float dmg_ruduce_rate = meta->number_meta->float_ratio2; + std::weak_ptr dmg_ruduce_timer; owner->GetTrigger()->AddListener ( kFlyHookCreateEvent, - [this, dmg_ruduce_rate] (const std::vector& params) + [this, dmg_ruduce_rate, dmg_ruduce_timer] (const std::vector& params) mutable { Buff* buff = std::any_cast(params.at(0)); if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { return; } - #if 0 - owner->GetAbility()->AddSpeedAddition(speed_rate); - owner->GetAbility()->AddDefAddition(def_rate); - owner->GetAbility()->IncImmuneVertigo(); - #endif - } - ); + if (!dmg_ruduce_timer.expired()) { + owner->room->xtimer.DeleteTimer(dmg_ruduce_timer); + } + owner->GetAbility()->AddDmgRuduce(dmg_ruduce_rate); + xtimer_list* timer = owner->room->xtimer.AddDeadLineTimerAndAttach + ( + meta->number_meta->float_time * 1000 / FRAME_RATE_MS, + a8::XParams() + .SetSender(this) + .SetParam1(dmg_ruduce_rate), + [] (const a8::XParams& param) + { + Skill* skill = (Skill*)param.sender.GetUserData(); + skill->owner->GetAbility()->DelDmgRuduce(param.param1.GetDouble()); + }, + &xtimer_attacher.timer_list_); + dmg_ruduce_timer = owner->room->xtimer.GetTimerPtr(timer); + }); owner->GetTrigger()->AddListener ( kFlyHookDestoryEvent, @@ -689,11 +701,6 @@ void Skill::ProcGZJS() if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { return; } - #if 0 - owner->GetAbility()->DelSpeedAddition(speed_rate); - owner->GetAbility()->DelDefAddition(def_rate); - owner->GetAbility()->DecImmuneVertigo(); - #endif } ); }