From a443e3ea92568229e6918fdc91bb1a4af80f9e5e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 4 Jan 2023 13:00:55 +0800 Subject: [PATCH] 1 --- server/gameserver/buff.cc | 2 +- server/gameserver/creature.cc | 13 +++++++++++-- third_party/a8 | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 7e76770d..b55ad699 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -31,7 +31,7 @@ Buff::Buff() Buff::~Buff() { - + int i = 0; } void Buff::Init() diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 6b85bbe5..ebdbe75a 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -219,10 +219,16 @@ int Creature::AddBuff(Creature* caster, buff->remover_timer = room->xtimer.SetTimeoutWpEx ( buff_meta->duration_time() * SERVER_FRAME_RATE, - [buff] (int event, const a8::Args* args) + [buff_wp = (std::weak_ptr)buff] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { - buff->owner->RemoveBuffByUniId(buff->buff_uniid); + if (!buff_wp.expired()) { + Buff* buff = nullptr; + { + buff = buff_wp.lock().get(); + } + buff->owner->RemoveBuffByUniId(buff->buff_uniid); + } } }, &buff->xtimer_attacher); @@ -408,6 +414,9 @@ void Creature::RemoveBuffByUniId(int buff_uniid) OnBuffRemove(*buff.get()); buff->UnInit(); buff_list_.erase(itr); + if (buff.use_count() > 1) { + abort(); + } break; } } diff --git a/third_party/a8 b/third_party/a8 index dfc2c950..c72553f5 160000 --- a/third_party/a8 +++ b/third_party/a8 @@ -1 +1 @@ -Subproject commit dfc2c950b9ff2fd0c839034b4f173b3b22fc329e +Subproject commit c72553f5429074e2c74316f81e660236fc4c2fd8