diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index f0284783..dcd6b032 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -105,7 +105,7 @@ void Android::InternalUpdate(int delta_time) #endif Global::Instance()->verify_set_pos = 0; } - f8::BtMgr::Instance()->BtExec(agent_); + agent_->Exec(); } void Android::GiveEquip() diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index a5b77775..88e5f3f4 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -6,6 +6,8 @@ #include "human.h" #include "movehelper.h" +#include "framework/cpp/btmgr.h" + BaseAgent::BaseAgent():behaviac::Agent() { @@ -20,6 +22,11 @@ bool BaseAgent::IsGameOver() return GetOwner()->room->IsGameOver(); } +void BaseAgent::Exec() +{ + last_exec_status_ = f8::BtMgr::Instance()->BtExec(this); +} + bool BaseAgent::HasTarget(float range) { Human* enemy = GetOwner()->room->FindEnemy(GetOwner()->AsHuman(), range); @@ -33,7 +40,9 @@ behaviac::EBTStatus BaseAgent::DoRunningCb() } status_ = status_runing_cb_(); #ifdef DEBUG - if ((GetOwner()->room->GetFrameNo() - status_frameno_) % SERVER_FRAME_RATE == 0) { + if ((GetOwner()->room->GetFrameNo() - status_frameno_) % SERVER_FRAME_RATE == 0 || + last_status_ != status_) { + last_status_ = status_; a8::XPrintf("Running Status:%s %d\n", {status_name_, status_}); } #endif @@ -47,6 +56,7 @@ behaviac::EBTStatus BaseAgent::StartCoroutine(std::functionroom->GetFrameNo(); status_name_ = name; #endif diff --git a/server/gameserver/base_agent.h b/server/gameserver/base_agent.h index 39e35991..65bb878f 100644 --- a/server/gameserver/base_agent.h +++ b/server/gameserver/base_agent.h @@ -13,6 +13,9 @@ public: BEHAVIAC_DECLARE_AGENTTYPE(BaseAgent, behaviac::Agent) + void Exec(); + behaviac::EBTStatus GetLastExecStatus() { return last_exec_status_; }; + bool IsGameOver(); bool HasTarget(float range); @@ -29,9 +32,11 @@ protected: protected: #ifdef DEBUG + behaviac::EBTStatus last_status_ = behaviac::BT_INVALID; long long status_frameno_ = 0; const char* status_name_ = nullptr; #endif + behaviac::EBTStatus last_exec_status_ = behaviac::BT_INVALID; behaviac::EBTStatus status_= behaviac::BT_SUCCESS; std::function status_runing_cb_;