From 46cc7088a5919540ec3eee5ec55faf1f1d2dd8fb Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 21 Jun 2023 15:11:16 +0800 Subject: [PATCH] 1 --- server/gameserver/android_agent.cc | 1 + server/gameserver/base_agent.cc | 18 +++++++++++++++--- server/gameserver/base_agent.h | 24 ++++++++++++++++++++---- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/server/gameserver/android_agent.cc b/server/gameserver/android_agent.cc index e8fdbd2b..cf5fca16 100644 --- a/server/gameserver/android_agent.cc +++ b/server/gameserver/android_agent.cc @@ -52,6 +52,7 @@ behaviac::EBTStatus AndroidAgent::DoRandomWalk() CreatureWeakPtr last_attacker; long long last_attacked_frameno = 0; std::weak_ptr handler; + std::vector> events; ); context->owner = GetOwner()->GetWeakPtrRef(); diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index f0e5495f..98e6e53d 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -16,14 +16,26 @@ #include "mt/Hero.h" #include "mt/Param.h" +std::shared_ptr BtEvent::Create(int event_id, + a8::Args event_params, + std::function has_event_cb + ) +{ + return std::make_shared( + event_id, + event_params, + has_event_cb + ); +} + void BtEvent::FireEvent(BaseAgent* agent) { - switch (event_id) { + switch (event_id_) { case kBetOnAttack: { agent->FireEvent("OnAttacked", - event_params.at(0).GetInt(), - event_params.at(1).GetInt64()); + event_params_.Get(0), + event_params_.Get(1)); } break; case kBetOnCrazeMode: diff --git a/server/gameserver/base_agent.h b/server/gameserver/base_agent.h index 77230b33..a5e54dbd 100644 --- a/server/gameserver/base_agent.h +++ b/server/gameserver/base_agent.h @@ -28,13 +28,29 @@ enum BtEventType_e }; class BaseAgent; -struct BtEvent +class BtEvent { - int event_id = 0; - std::vector event_params; - std::function has_event_cb; +public: + int GetEventId() const { return event_id_; } + const a8::Args& GetParams() const { return event_params_; } + bool HasEvent() const { return has_event_cb_(); } void FireEvent(BaseAgent* agent); + + static std::shared_ptr Create(int event_id, + a8::Args event_params, + std::function has_event_cb + ); + + BtEvent(int event_id, + a8::Args event_params, + std::function has_event_cb): + event_id_(event_id), event_params_(event_params), has_event_cb_(has_event_cb) {} + +private: + int event_id_ = 0; + a8::Args event_params_; + std::function has_event_cb_; }; class Creature;