From 38864c9bf48ad9aef25f9a0a00f5ea5b57e1dc98 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 10 May 2024 19:35:54 +0800 Subject: [PATCH] 1 --- server/gameserver/buff.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 78bb77c2..515dcdef 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -93,10 +93,11 @@ void Buff::InternalTimerAddBuff() auto caster_state = std::make_shared(); caster_.Get()->FillSkillCasterState(caster_state.get()); + auto add_buff_id = std::make_shared(0); const mt::Skill* skill = skill_meta; auto timer_func = - [this, caster_state, skill] (int event, const a8::Args* args) + [this, caster_state, skill, add_buff_id] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { if (!caster_state->caster.Get()) { @@ -112,8 +113,8 @@ void Buff::InternalTimerAddBuff() receiver->context_pos = receiver->GetPos(); #endif - int buff_id = meta->_int_buff_param2; - const mt::Buff* buff_meta = mt::Buff::GetById(buff_id); + //int buff_id = meta->_int_buff_param2; + const mt::Buff* buff_meta = mt::Buff::GetById(*add_buff_id); if (buff_meta) { SkillCasterState old_caster_state; caster.Get()->FillSkillCasterState(&old_caster_state); @@ -135,6 +136,7 @@ void Buff::InternalTimerAddBuff() switch (meta->buff_effect() ) { case kBET_DelayAddBuff: { + *add_buff_id = meta->_int_buff_param2; owner->room->xtimer.SetTimeoutEx ( param1 * SERVER_FRAME_RATE, @@ -145,6 +147,7 @@ void Buff::InternalTimerAddBuff() break; case kBET_IntervalAddBuff: { + *add_buff_id = meta->_int_buff_param2; owner->room->xtimer.SetIntervalEx ( param1 * SERVER_FRAME_RATE, @@ -155,10 +158,11 @@ void Buff::InternalTimerAddBuff() break; case kBET_PhaseAddBuff: { + *add_buff_id = meta->_int_buff_param1; meta->TraverseParams ( [this, timer_func] (int idx, const std::string& val) -> bool { - if (!val.empty()) { + if (!val.empty() && idx > 0) { float param = meta->GetBuffParam(this, idx); owner->room->xtimer.SetTimeoutEx (