From cb5f01beffe8ea0320b8df9e7e4197a36b4d843d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 5 Apr 2023 14:46:41 +0800 Subject: [PATCH] 1 --- server/gameserver/hero_agent.cc | 48 +++++++++------------------------ 1 file changed, 12 insertions(+), 36 deletions(-) diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index c03c4ad6..429495ca 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -210,58 +210,34 @@ behaviac::EBTStatus HeroAgent::DoAttack() context->target = enemy->GetWeakPtrRef(); context->last_frameno = GetOwner()->room->GetFrameNo(); - #if 0 - std::weak_ptr handler; if (GetOwner()->AsHero()->master.Get()) { - handler = GetOwner()->AsHero()->master.Get()->GetTrigger()->AddListener + context->handler = GetOwner()->AsHero()->master.Get()->GetTrigger()->AddListener ( kBulletHitEvent, - [this, last_attacker, last_attacked_frameno] (const a8::Args& args) + [context_wp = context->GetWp()] (const a8::Args& args) { - Creature* c = args.Get(1); - *last_attacker = c->GetWeakPtrRef(); - *last_attacked_frameno = c->room->GetFrameNo(); + if (!context_wp.expired()) { + auto context = context_wp.lock(); + Creature* c = args.Get(1); + context->last_attacker = c->GetWeakPtrRef(); + context->last_attacked_frameno = c->room->GetFrameNo(); + } }); } - context->handler = GetOwner()->GetTrigger()->AddListener - ( - kAttacked, - [context_wp = context->GetWp()] (const a8::Args& args) - { - if (context_wp.expired()) { - auto context = context_wp.lock(); - Creature* c = args.Get(0); - context->last_attacker = c->GetWeakPtrRef(); - context->last_attacked_frameno = c->room->GetFrameNo(); - } - }); - #endif - #if 0 context->_destory_cb = ( [context = context.get()] () { - if (context->owner.Get()) { - context->owner.Get()->GetTrigger()->RemoveEventHandler(context->handler); - } - }); - - auto holder = std::make_shared - ( - [owner = GetOwner()->GetWeakPtrRef(), handler] (const a8::Args& args) mutable - { - if (!handler.expired() && owner.Get()) { - if (owner.Get()->IsEntityType(ET_Hero)) { - Hero* hero = (Hero*)owner.Get(); + if (!context->handler.expired() && context->owner.Get()) { + if (context->owner.Get()->IsEntityType(ET_Hero)) { + Hero* hero = (Hero*)context->owner.Get(); if (hero->master.Get()) { - hero->master.Get()->GetTrigger()->RemoveEventHandler(handler); + hero->master.Get()->GetTrigger()->RemoveEventHandler(context->handler); } } } }); - #endif - auto co = std::make_shared(context, "CoAttack"); co->runing_cb = [this, context] ()