1
This commit is contained in:
parent
7cd76949bf
commit
0b84b9cd37
@ -224,17 +224,41 @@ void Creature::MustBeAddBuff(Creature* caster, int buff_id)
|
|||||||
|
|
||||||
void Creature::RemoveBuffById(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) {
|
for (auto itr = buff_list_.begin(); itr != buff_list_.end(); ++itr) {
|
||||||
const Buff& buff = *itr;
|
const Buff& buff = *itr;
|
||||||
if (buff.meta->i->buff_id() == buff_id) {
|
if (buff.meta->i->buff_id() == buff_id) {
|
||||||
if (buff_effect_[buff.meta->i->buff_effect()] == &(*itr)) {
|
if (buff_effect_[buff.meta->i->buff_effect()] == &(*itr)) {
|
||||||
buff_effect_[buff.meta->i->buff_effect()] = nullptr;
|
buff_effect_[buff.meta->i->buff_effect()] = nullptr;
|
||||||
}
|
}
|
||||||
|
removed_buffs.push_back(buff.meta);
|
||||||
OnBuffRemove(buff);
|
OnBuffRemove(buff);
|
||||||
buff_list_.erase(itr);
|
buff_list_.erase(itr);
|
||||||
break;
|
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();
|
RecalcBuffAttr();
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
SendDebugMsg(a8::Format("移除buff_id:%d",
|
SendDebugMsg(a8::Format("移除buff_id:%d",
|
||||||
@ -283,8 +307,9 @@ void Creature::OnBuffRemove(const Buff& buff)
|
|||||||
void Creature::RemoveBuffByEffectId(int buff_effect_id)
|
void Creature::RemoveBuffByEffectId(int buff_effect_id)
|
||||||
{
|
{
|
||||||
Buff* buff = GetBuffByEffectId(buff_effect_id);
|
Buff* buff = GetBuffByEffectId(buff_effect_id);
|
||||||
if (buff) {
|
while (buff) {
|
||||||
RemoveBuffById(buff->meta->i->buff_id());
|
RemoveBuffById(buff->meta->i->buff_id());
|
||||||
|
buff = GetBuffByEffectId(buff_effect_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user