From 7f49358f6f5d46b10ae9b10eefd5ac0a48c390ce Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 14 Oct 2023 14:53:11 +0800 Subject: [PATCH] 1 --- server/gameserver/btcontext.cc | 4 ---- server/gameserver/btcontext.h | 1 + server/gameserver/btevent.cc | 5 +---- server/gameserver/btevent.h | 1 + server/gameserver/new_hero_agent.cc | 16 ++++++++++++++-- server/gameserver/new_hero_agent.h | 10 ++++++++++ 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/server/gameserver/btcontext.cc b/server/gameserver/btcontext.cc index 14b6536f..7c8de631 100644 --- a/server/gameserver/btcontext.cc +++ b/server/gameserver/btcontext.cc @@ -1,8 +1,5 @@ #include "precompile.h" -#ifdef NEW_BT -#else - #include "btcontext.h" #include "creature.h" #include "trigger.h" @@ -46,4 +43,3 @@ void BtContext::FireEvent(BaseAgent* agent) } } } -#endif diff --git a/server/gameserver/btcontext.h b/server/gameserver/btcontext.h index 4d352a15..bb56a661 100644 --- a/server/gameserver/btcontext.h +++ b/server/gameserver/btcontext.h @@ -1,5 +1,6 @@ #pragma once +class HeroAgent; class BaseAgent; class BtEvent; struct EventHandlerPtr; diff --git a/server/gameserver/btevent.cc b/server/gameserver/btevent.cc index 98dec7d2..945402be 100644 --- a/server/gameserver/btevent.cc +++ b/server/gameserver/btevent.cc @@ -1,12 +1,10 @@ #include "precompile.h" -#ifdef NEW_BT -#else - #include "btevent.h" #include "creature.h" #include "trigger.h" #include "base_agent.h" +#include "new_base_agent.h" std::shared_ptr BtEvent::Create(int event_id, a8::Args event_params, @@ -42,4 +40,3 @@ void BtEvent::FireEvent(BaseAgent* agent) break; } } -#endif diff --git a/server/gameserver/btevent.h b/server/gameserver/btevent.h index cdb9b792..df6f5a7d 100644 --- a/server/gameserver/btevent.h +++ b/server/gameserver/btevent.h @@ -6,6 +6,7 @@ enum BtEventType_e kBetOnCrazeMode, }; +class HeroAgent; class BaseAgent; class BtEvent { diff --git a/server/gameserver/new_hero_agent.cc b/server/gameserver/new_hero_agent.cc index 8e762c49..b1d91f6f 100644 --- a/server/gameserver/new_hero_agent.cc +++ b/server/gameserver/new_hero_agent.cc @@ -1,5 +1,7 @@ #include "precompile.h" +#include + #include "new_hero_agent.h" #include "hero.h" @@ -12,6 +14,8 @@ #include "mapinstance.h" #include "collision.h" #include "human.h" +#include "btcoroutine.h" +#include "btcontext.h" #include "mt/Hero.h" #include "mt/Equip.h" @@ -27,7 +31,15 @@ HeroAgent::~HeroAgent() void HeroAgent::Exec() { - + behaviac::EBTStatus status = f8::BtMgr::Instance()->BtExec(this); + if (status == behaviac::BT_RUNNING && coroutine_ && coroutine_->GetContext()->HasEvent()) { + status_= behaviac::BT_INVALID; + auto old_coroutine = coroutine_; + coroutine_ = nullptr; + owner_->shot_hold = false; + old_coroutine->GetContext()->FireEvent(this); + old_coroutine = nullptr; + } } void HeroAgent::SetOwner(Creature* owner) @@ -239,7 +251,7 @@ int HeroAgent::IncV(int id, int val) int HeroAgent::DecV(int id, int val) { - IncV(id, -val); + return IncV(id, -val); } bool HeroAgent::HasBuffEffect(int effect_id) diff --git a/server/gameserver/new_hero_agent.h b/server/gameserver/new_hero_agent.h index ad6ba658..c97a928f 100644 --- a/server/gameserver/new_hero_agent.h +++ b/server/gameserver/new_hero_agent.h @@ -6,6 +6,7 @@ class Hero; class RoomAgent; class TeamAgent; class TargetAgent; +class BtCoroutine; class HeroAgent : public BaseAgent { public: @@ -103,4 +104,13 @@ private: bool bullet_trace_mode_ = false; long long flags_ = 0; std::map dyn_hash_; + +#ifdef DEBUG + behaviac::EBTStatus last_status_ = behaviac::BT_INVALID; + long long status_frameno_ = 0; + const char* status_name_ = nullptr; +#endif + behaviac::EBTStatus status_= behaviac::BT_SUCCESS; + std::shared_ptr coroutine_; + };