This commit is contained in:
aozhiwei 2021-04-06 20:15:14 +08:00
parent 7cd76949bf
commit 0b84b9cd37

View File

@ -224,17 +224,41 @@ void Creature::MustBeAddBuff(Creature* caster, int buff_id)
void Creature::RemoveBuffById(int buff_id)
{
std::vector<MetaData::Buff*> removed_buffs;
for (auto itr = buff_list_.begin(); itr != buff_list_.end(); ++itr) {
const Buff& buff = *itr;
if (buff.meta->i->buff_id() == buff_id) {
if (buff_effect_[buff.meta->i->buff_effect()] == &(*itr)) {
buff_effect_[buff.meta->i->buff_effect()] = nullptr;
}
removed_buffs.push_back(buff.meta);
OnBuffRemove(buff);
buff_list_.erase(itr);
break;
}
}
for (MetaData::Buff* buff_meta : removed_buffs) {
for (const auto& tuple : buff_meta->post_remove_action) {
switch (std::get<0>(tuple)) {
case kRemoveBuffByIdAction:
{
for (int buff_id :std::get<1>(tuple)) {
RemoveBuffById(buff_id);
}
}
break;
case kRemoveBuffByEffectAction:
{
for (int buff_effect :std::get<1>(tuple)) {
RemoveBuffByEffectId(buff_effect);
}
}
break;
default:
break;
}
}
}
RecalcBuffAttr();
#ifdef DEBUG
SendDebugMsg(a8::Format("移除buff_id:%d",
@ -283,8 +307,9 @@ void Creature::OnBuffRemove(const Buff& buff)
void Creature::RemoveBuffByEffectId(int buff_effect_id)
{
Buff* buff = GetBuffByEffectId(buff_effect_id);
if (buff) {
while (buff) {
RemoveBuffById(buff->meta->i->buff_id());
buff = GetBuffByEffectId(buff_effect_id);
}
}