From 3dd9591303299b5a5f21db9930164f3a3fad2e8c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 11 May 2023 15:27:39 +0800 Subject: [PATCH 1/2] 1 --- server/gameserver/buff/callfunc.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index 41dc3b37..ca03e030 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -347,9 +347,10 @@ void CallFuncBuff::ProcFlashMove() void CallFuncBuff::ProcAddEnergyShield() { if (!owner->dead && !owner->downed) { + float dur_time = meta->GetBuffParam3(this) * FRAME_RATE_MS; if (owner->energy_shield > 0) { is_valid_ = false; - owner->GetTrigger()->UpdateEnergyShield(hold_param2_, meta->GetDurationTime(this) * FRAME_RATE_MS); + owner->GetTrigger()->UpdateEnergyShield(hold_param2_, dur_time); } else { owner->AddEnergyShield(hold_param2_); event_handlers_.push_back(owner->GetTrigger()->AddListener From b13848b90a676b0d26df381c6cf9bf0ccdd8f6a2 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 11 May 2023 15:47:44 +0800 Subject: [PATCH 2/2] 1 --- server/gameserver/buff/callfunc.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index ca03e030..10c9429b 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -348,6 +348,9 @@ void CallFuncBuff::ProcAddEnergyShield() { if (!owner->dead && !owner->downed) { float dur_time = meta->GetBuffParam3(this) * FRAME_RATE_MS; + if (dur_time < 0.00001f) { + dur_time = 99999999; + } if (owner->energy_shield > 0) { is_valid_ = false; owner->GetTrigger()->UpdateEnergyShield(hold_param2_, dur_time); @@ -369,6 +372,16 @@ void CallFuncBuff::ProcAddEnergyShield() { owner->RemoveBuffByUniId(buff_uniid); })); + owner->room->xtimer.SetTimeoutWpEx + ( + dur_time / FRAME_RATE_MS, + [owner = owner] (int event, const a8::Args* args) mutable + { + if (a8::TIMER_DELETE_EVENT == event) { + owner->ClearEnergyShield(); + } + }, + &owner->xtimer_attacher); } } }