diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 1e3c9e1..23450ea 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -587,7 +587,9 @@ void Creature::RecalcBuffAttr() void Creature::OnBuffRemove(Buff& buff) { - + if (!buff.meta->i->only_server()) { + room->frame_event.RemoveBuff(GetWeakPtrRef(), buff.meta->i->buff_id()); + } } void Creature::RemoveBuffByEffectId(int buff_effect_id) diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 5c704ea..d65a87c 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -216,11 +216,11 @@ class Creature : public MoveableEntity protected: + virtual void OnBuffRemove(Buff& buff); private: virtual void AddBuffPostProc(Creature* caster, Buff* buff); - virtual void OnBuffRemove(Buff& buff); virtual void DoSkillPreProc(int skill_id, int target_id, const a8::Vec2& target_pos); virtual void DoSkillPostProc(bool used, int skill_id, int target_id, const a8::Vec2& target_pos); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 96a3551..0f1a8de 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3201,6 +3201,7 @@ void Human::ProcReliveAction() void Human::OnBuffRemove(Buff& buff) { + Creature::OnBuffRemove(buff); switch (buff.meta->i->buff_effect()) { case kBET_Jump: { @@ -3263,9 +3264,6 @@ void Human::OnBuffRemove(Buff& buff) } break; } - if (!buff.meta->i->only_server()) { - room->frame_event.RemoveBuff(GetWeakPtrRef(), buff.meta->i->buff_id()); - } } void Human::OnLand()