From 147bff1082eb49347948c136978a0c7b65d0e51c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 25 Feb 2023 09:19:48 +0800 Subject: [PATCH] 1 --- server/gameserver/gungrasp.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/server/gameserver/gungrasp.cc b/server/gameserver/gungrasp.cc index 850b30da..ae0fe917 100644 --- a/server/gameserver/gungrasp.cc +++ b/server/gameserver/gungrasp.cc @@ -5,6 +5,7 @@ #include "battledatacontext.h" #include "trigger.h" #include "room.h" +#include "effect.h" #include "mt/GraspBuff.h" #include "mt/Grasp.h" @@ -21,7 +22,7 @@ struct GraspBuff std::tuple buffs; std::function on_remove; a8::Attacher xtimer_attacher; - std::vector>> effect_list; + std::vector> effect_list; 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) { 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() { - for (auto& tuple : effect_list) { - if (std::get<0>(tuple).Get()) { - std::get<0>(tuple).Get()->RemoveEffect(std::get<1>(tuple)); + for (auto& effect : effect_list) { + if (!effect.expired()) { + auto p = effect.lock(); + p->owner->RemoveEffect(effect); } } effect_list.clear();