diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 5ade276..0366eda 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3059,6 +3059,30 @@ void Human::ProcBuffEffect(Human* caster, Buff* buff) 0); } break; + case kBET_DelayAddBuff: + { + room->xtimer.AddDeadLineTimerAndAttach + ( + SERVER_FRAME_RATE * buff->meta->param1 / 1000.0f, + a8::XParams() + .SetSender(this) + .SetParam1(caster) + .SetParam2(buff->meta->param2) + .SetParam3(caster->skill_meta_), + [] (const a8::XParams& param) + { + Human* hum = (Human*)param.sender.GetUserData(); + Human* caster = (Human*)param.param1.GetUserData(); + int buff_id = param.param2; + MetaData::Skill* skill = (MetaData::Skill*)param.param3.GetUserData(); + MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id); + if (buff_meta && skill == caster->skill_meta_ && caster) { + hum->AddBuff(caster, buff_meta, caster->GetSkillLv(), skill); + } + }, + &buff->xtimer_attacher.timer_list_); + } + break; default: { }