This commit is contained in:
aozhiwei 2023-02-25 09:19:48 +08:00
parent 1c94dc6148
commit 147bff1082

View File

@ -5,6 +5,7 @@
#include "battledatacontext.h" #include "battledatacontext.h"
#include "trigger.h" #include "trigger.h"
#include "room.h" #include "room.h"
#include "effect.h"
#include "mt/GraspBuff.h" #include "mt/GraspBuff.h"
#include "mt/Grasp.h" #include "mt/Grasp.h"
@ -21,7 +22,7 @@ struct GraspBuff
std::tuple<const mt::GraspBuff*, const mt::GraspBuff*> buffs; std::tuple<const mt::GraspBuff*, const mt::GraspBuff*> buffs;
std::function<void()> on_remove; std::function<void()> on_remove;
a8::Attacher xtimer_attacher; a8::Attacher xtimer_attacher;
std::vector<std::tuple<CreatureWeakPtr, std::weak_ptr<Effect>>> effect_list; std::vector<std::weak_ptr<Effect>> effect_list;
void ProcSignet(GunGrasp* gun_grasp, int count, Creature* enemy) void ProcSignet(GunGrasp* gun_grasp, int count, Creature* enemy)
{ {
@ -92,15 +93,16 @@ private:
void ProcEffectList(Creature* target, const mt::GraspBuff* buff, int buff_time, int attr_num) void ProcEffectList(Creature* target, const mt::GraspBuff* buff, int buff_time, int attr_num)
{ {
for (int effect_id : buff->_effect_list) { for (int effect_id : buff->_effect_list) {
effect_list.push_back(std::make_tuple(target->GetWeakPtrRef(), target->AddEffect(effect_id))); effect_list.push_back(target->AddEffect(effect_id));
} }
} }
void ClearEffectList() void ClearEffectList()
{ {
for (auto& tuple : effect_list) { for (auto& effect : effect_list) {
if (std::get<0>(tuple).Get()) { if (!effect.expired()) {
std::get<0>(tuple).Get()->RemoveEffect(std::get<1>(tuple)); auto p = effect.lock();
p->owner->RemoveEffect(effect);
} }
} }
effect_list.clear(); effect_list.clear();