From f66025ad4ef1f94440ea99998b0a8d303bb885d9 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 14 Oct 2023 14:20:20 +0800 Subject: [PATCH] 1 --- server/gameserver/new_hero_agent.cc | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/server/gameserver/new_hero_agent.cc b/server/gameserver/new_hero_agent.cc index 33c21ba2..8e762c49 100644 --- a/server/gameserver/new_hero_agent.cc +++ b/server/gameserver/new_hero_agent.cc @@ -11,6 +11,7 @@ #include "weapon.h" #include "mapinstance.h" #include "collision.h" +#include "human.h" #include "mt/Hero.h" #include "mt/Equip.h" @@ -270,7 +271,32 @@ bool HeroAgent::MasterInRange(float range) behaviac::EBTStatus HeroAgent::SearchEnemy(float range) { - abort(); + Creature* myself = owner_; + Human* target = nullptr; + float last_distance = range + 1; + owner_->room->TraverseHumanList + ( + [myself, &last_distance, &target, range] (Human* hum) + { + if (!hum->dead && + !a8::HasBitFlag(hum->status, CS_Disable) && + !hum->HasBuffEffect(kBET_Hide) && + !hum->HasBuffEffect(kBET_Invincible) && + hum->team_id != myself->team_id) { + if (a8::HasBitFlag(myself->status, CS_DisableAttackAndroid) && + hum->IsAndroid()) { + } else { + float distance = hum->GetPos().Distance2D2(myself->GetPos()); + if (distance <= range) { + if (distance < last_distance) { + target = hum; + last_distance = distance; + } + } + } + } + return true; + }); } behaviac::EBTStatus HeroAgent::CoIdle(int min_val, int max_val)