This commit is contained in:
aozhiwei 2022-10-13 13:32:03 +08:00
parent 72f4bbe89c
commit 12aa63a45a

View File

@ -613,43 +613,57 @@ void Skill::ProcMYXY()
{ {
float speed_rate = SkillHelper::GetMyxySpeedRate(meta); float speed_rate = SkillHelper::GetMyxySpeedRate(meta);
float atk_rate = SkillHelper::GetMyxyAtkRate(meta); float atk_rate = SkillHelper::GetMyxyAtkRate(meta);
std::shared_ptr<int> immune_buff_uniid = std::make_shared<int>(0);
owner->GetTrigger()->AddListener owner->GetTrigger()->AddListener
( (
kStartSwitchWeaponBuffEvent, kStartSwitchWeaponBuffEvent,
[this, speed_rate, atk_rate] (const std::vector<std::any>& params) [this, speed_rate, atk_rate, immune_buff_uniid] (const std::vector<std::any>& params)
{ {
Buff* buff = std::any_cast<Buff*>(params.at(0)); Buff* buff = std::any_cast<Buff*>(params.at(0));
if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) {
return; return;
} }
owner->GetAbility()->AddSpeedAddition(speed_rate); 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 owner->GetTrigger()->AddListener
( (
kEndSwitchWeaponBuffEvent, kEndSwitchWeaponBuffEvent,
[this, speed_rate, atk_rate] (const std::vector<std::any>& params) [this, speed_rate, atk_rate, immune_buff_uniid] (const std::vector<std::any>& params)
{ {
Buff* buff = std::any_cast<Buff*>(params.at(0)); Buff* buff = std::any_cast<Buff*>(params.at(0));
if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) {
return; return;
} }
if (*immune_buff_uniid) {
owner->RemoveBuffByUniId(*immune_buff_uniid);
*immune_buff_uniid = 0;
}
owner->GetAbility()->DelSpeedAddition(speed_rate); owner->GetAbility()->DelSpeedAddition(speed_rate);
} }
); );
#ifdef DEBUG #ifdef DEBUG
{
std::string dbg_msg = a8::Format
(
"skill_id:%d 免疫眩晕 攻击力:%f 移动提升:%f",
{ {
std::string dbg_msg = a8::Format meta->i->skill_id(),
( atk_rate,
"skill_id:%d 免疫眩晕 攻击力:%f 移动提升:%f", speed_rate
{ });
meta->i->skill_id(), owner->SendDebugMsg(dbg_msg);
atk_rate, a8::XPrintf("%s\n", {dbg_msg});
speed_rate }
});
owner->SendDebugMsg(dbg_msg);
a8::XPrintf("%s\n", {dbg_msg});
}
#endif #endif
} }
@ -657,10 +671,12 @@ void Skill::ProcGZJS()
{ {
float dmg_ruduce_rate = meta->number_meta->float_ratio2; float dmg_ruduce_rate = meta->number_meta->float_ratio2;
std::weak_ptr<a8::XTimerPtr> dmg_ruduce_timer; std::weak_ptr<a8::XTimerPtr> dmg_ruduce_timer;
std::shared_ptr<int> immune_buff_uniid = std::make_shared<int>(0);
owner->GetTrigger()->AddListener owner->GetTrigger()->AddListener
( (
kFlyHookCreateEvent, kFlyHookCreateEvent,
[this, dmg_ruduce_rate, dmg_ruduce_timer] (const std::vector<std::any>& params) mutable [this, dmg_ruduce_rate, dmg_ruduce_timer, immune_buff_uniid]
(const std::vector<std::any>& params) mutable
{ {
Buff* buff = std::any_cast<Buff*>(params.at(0)); Buff* buff = std::any_cast<Buff*>(params.at(0));
if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) {
@ -683,20 +699,42 @@ void Skill::ProcGZJS()
}, },
&xtimer_attacher.timer_list_); &xtimer_attacher.timer_list_);
dmg_ruduce_timer = owner->room->xtimer.GetTimerPtr(timer); dmg_ruduce_timer = owner->room->xtimer.GetTimerPtr(timer);
owner->TryAddBuffAndSetTime(owner,
meta->number_meta->pb->buff_id(), if (*immune_buff_uniid) {
meta->number_meta->float_time 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 owner->GetTrigger()->AddListener
( (
kFlyHookDestoryEvent, kFlyHookDestoryEvent,
[this, dmg_ruduce_rate] (const std::vector<std::any>& params) [this, dmg_ruduce_rate, immune_buff_uniid] (const std::vector<std::any>& params)
{ {
Buff* buff = std::any_cast<Buff*>(params.at(0)); Buff* buff = std::any_cast<Buff*>(params.at(0));
if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) {
return; return;
} }
if (*immune_buff_uniid) {
owner->RemoveBuffByUniId(*immune_buff_uniid);
*immune_buff_uniid = 0;
}
} }
); );
} }