From d62d418f5098926553d15bff6723e617b1584e04 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Jun 2023 16:40:30 +0800 Subject: [PATCH] 1 --- server/gameserver/android_agent.h | 2 +- server/gameserver/base_agent.cc | 17 +++++++++++++++-- server/gameserver/base_agent.h | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/server/gameserver/android_agent.h b/server/gameserver/android_agent.h index bb0ad1b8..a0e68241 100644 --- a/server/gameserver/android_agent.h +++ b/server/gameserver/android_agent.h @@ -22,7 +22,7 @@ public: behaviac::EBTStatus DoPursuit(); private: - glm::vec3& AdjustShotDir(glm::vec3& shot_dir); + virtual glm::vec3& AdjustShotDir(glm::vec3& shot_dir) override; private: Android* owner_ = nullptr; diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index 2aa36833..b7e68249 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -446,7 +446,20 @@ bool BaseAgent::ShotCanReach(const glm::vec3& target_pos) behaviac::EBTStatus BaseAgent::CoShot() { - return behaviac::BT_FAILURE; + if (!current_target_.Get()) { + return behaviac::BT_FAILURE; + } + if (GlmHelper::IsEqual2D(GetOwner()->GetPos().ToGlmVec3(), + current_target_.Get()->GetPos().ToGlmVec3())) { + return behaviac::BT_FAILURE; + } + bool shot_ok = false; + glm::vec3 dir = GetOwner()->GetPos().CalcDir(current_target_.Get()->GetPos()); + GlmHelper::Normalize(dir); + GetOwner()->SetAttackDir(dir); + GetOwner()->shot_hold = true; + GetOwner()->Shot(AdjustShotDir(dir), shot_ok, 0, 0); + return behaviac::BT_SUCCESS; } bool BaseAgent::IsNearGas(float distance) @@ -461,7 +474,7 @@ behaviac::EBTStatus BaseAgent::CoRunGas() float BaseAgent::GetSafeAreaRadius() { - return 500; + return GetOwner()->room->GetGasData().gas_progress; } bool BaseAgent::IsDead() diff --git a/server/gameserver/base_agent.h b/server/gameserver/base_agent.h index 1959a672..6351e5db 100644 --- a/server/gameserver/base_agent.h +++ b/server/gameserver/base_agent.h @@ -81,6 +81,7 @@ public: public: void SetOwner(Creature* owner) { owner_ = owner; }; Creature* GetOwner() { return owner_; }; + virtual glm::vec3& AdjustShotDir(glm::vec3& shot_dir) { return shot_dir; }; protected: behaviac::EBTStatus DoRunningCb();