diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 09a70479..8fd940de 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -17,6 +17,7 @@ #include "bullet.h" #include "glmhelper.h" #include "pbutils.h" +#include "creature.h" #include "mt/Param.h" #include "mt/Buff.h" @@ -40,6 +41,9 @@ void Buff::Init() INIT_LIST_HEAD(&depend_entry); INIT_LIST_HEAD(&cond_entry); INIT_LIST_HEAD(&on_remove_contexts); + for (int effect_id : meta->_effect_list) { + effect_list_.push_back(owner->AddEffect(effect_id)); + } } void Buff::UnInit() @@ -59,6 +63,10 @@ void Buff::UnInit() list_del_init(&cb->entry); } ClearEventHandlers(); + for (auto& effect : effect_list_) { + owner->RemoveEffect(effect); + } + effect_list_.clear(); } int Buff::GetLeftTime() diff --git a/server/gameserver/buff.h b/server/gameserver/buff.h index 2ec2a3ea..89b81d86 100644 --- a/server/gameserver/buff.h +++ b/server/gameserver/buff.h @@ -66,7 +66,7 @@ protected: std::list hold_weapons_; std::list> event_handlers_; CreatureWeakPtr caster_; - std::list> effect_list_; + std::list> effect_list_; friend class PBUtils; }; diff --git a/server/gameserver/mt/Buff.cc b/server/gameserver/mt/Buff.cc index fb3fbe7d..9caa9cb1 100644 --- a/server/gameserver/mt/Buff.cc +++ b/server/gameserver/mt/Buff.cc @@ -30,11 +30,9 @@ namespace mt { std::vector strings; a8::Split(effect_list(), strings, '|'); - #if 0 for (auto& str : strings) { - _child_buff_list.push_back(a8::XValue(str)); + _effect_list.push_back(a8::XValue(str)); } - #endif } { std::vector strings;