diff --git a/server/gameserver/new_hero_agent.cc b/server/gameserver/new_hero_agent.cc index d0b61a30..65327b56 100644 --- a/server/gameserver/new_hero_agent.cc +++ b/server/gameserver/new_hero_agent.cc @@ -333,20 +333,14 @@ behaviac::EBTStatus HeroAgent::CoIdle(int min_val, int max_val) } auto context = MAKE_BTCONTEXT ( - a8::XTimerWp timer_ptr; + int time = 0; ); - context->timer_ptr = owner_->room->xtimer.SetTimeoutWpEx - ( - a8::RandEx(min_val, max_val) / FRAME_RATE_MS, - [] (int event, const a8::Args* args) - { - }, - &owner_->xtimer_attacher); + context->time = a8::RandEx(min_val, max_val); auto co = std::make_shared(context, "CoIdle"); co->runing_cb = [this, context] () { - if (!context->timer_ptr.expired()) { + if (GetRoom()->GetFrameNo() - context->frameno < context->time) { return behaviac::BT_RUNNING; } else { return behaviac::BT_SUCCESS; diff --git a/server/gameserver/new_hero_agent.h b/server/gameserver/new_hero_agent.h index 6fb8d802..5ee5c9ea 100644 --- a/server/gameserver/new_hero_agent.h +++ b/server/gameserver/new_hero_agent.h @@ -9,10 +9,12 @@ class Context : public BtContext \ {public: \ __VA_ARGS__; \ std::function _destory_cb; \ + long long frameno = 0; \ ~Context() { if (_destory_cb) { _destory_cb(); };}; \ }; \ auto context = std::make_shared(); \ context->SetOwner(owner); \ +context->frameno = owner.Get()->room->GetFrameNo(); \ return context; \ }(owner_->GetWeakPtrRef(), this)