diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index cc4cbab7..c69a1055 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -132,16 +132,21 @@ void CallFuncBuff::ProcAddMinorMode() float dur_time = meta->GetBuffParam3(this); Skill* skill = owner->GetSkill(skill_meta->skill_id()); if (skill) { + auto owner_ptr = owner->GetWeakPtrRef(); + auto meta_ptr = meta; + auto skill_meta_ptr = skill_meta; skill->AddMinorMode ( meta->_int_buff_param2, dur_time * 1000, - [this] (int action) + [owner_ptr, meta_ptr, skill_meta_ptr] (int action) mutable { - if (action == 0) { - owner->TryAddBuff(owner, meta->_int_buff_param4, skill_meta); - } else if (action) { - owner->TryAddBuff(owner, meta->_int_buff_param5, skill_meta); + if (owner_ptr.Get()) { + if (action == 1) { + owner_ptr.Get()->TryAddBuff(owner_ptr.Get(), meta_ptr->_int_buff_param4, skill_meta_ptr); + } else if (action) { + owner_ptr.Get()->TryAddBuff(owner_ptr.Get(), meta_ptr->_int_buff_param5, skill_meta_ptr); + } } }); } diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 54e768cd..44c55138 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -828,8 +828,7 @@ bool Creature::CanUseSkill(int skill_id) if (HasBuffEffect(kBET_Vertigo) || HasBuffEffect(kBET_Jump) || HasBuffEffect(kBET_Fly) || - HasBuffEffect(kBET_MachineGun) || - HasBuffEffect(kBET_Sprint)) { + HasBuffEffect(kBET_MachineGun)) { return false; } if (skill->force_use_times > 0) { diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index f897a43b..56753a31 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -186,7 +186,9 @@ void Skill::AddMinorMode( minor_type_ = SMT_NONE; minor_cd_time_ = 0; minor_frameno_ = 0; - minor_cb_(0); + if (minor_cb_) { + minor_cb_(0); + } minor_cb_ = nullptr; } },