From 7e06d0e40b029ebae921603e58c4c4fe5a6e21bc Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 1 Nov 2023 11:26:57 +0800 Subject: [PATCH] 1 --- server/gameserver/hero_agent.cc | 46 ++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index a4a1fb40..2c3c3149 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -1156,17 +1156,45 @@ behaviac::EBTStatus HeroAgent::CoGetNextMobaModeRoadPoint() ++r; } if (paths.empty()) { + std::shared_ptr, int, int>> path; + int r = 0; + for (auto& road : GetRoom()->GetMapMeta()->moba_path_points) { + int p = 0; + for (auto itr = road.begin(); itr != road.end(); ++itr) { + auto& point = std::get<0>(*itr); + if (!path) { + path = std::make_shared, int, int>> + ( + std::make_tuple + ( + point, + r, + p + ) + ); + } else { + if (owner_->GetPos().Distance2D2(point->pos) < + owner_->GetPos().Distance2D2(std::get<0>(*path)->pos)) { - } else { - auto& path = paths.at(rand() % paths.size()); - owner_->road_idx = std::get<1>(path); - owner_->point_idx = std::get<2>(path); - if (owner_->path_dir == 1) { - out_point0 = std::get<0>(road.at(road.size() - owner_->point_idx - 1))->pos; - } else { - out_point0 = std::get<0>(road.at(owner_->point_idx))->pos; - out_point0 += dir * (float)a8::RandEx(0, 100); + } + } + ++p; + } + ++r; } + if (!path) { + abort(); + } + paths.push_back(*path); + } + auto& path = paths.at(rand() % paths.size()); + owner_->road_idx = std::get<1>(path); + owner_->point_idx = std::get<2>(path); + if (owner_->path_dir == 1) { + out_point0 = std::get<0>(road.at(road.size() - owner_->point_idx - 1))->pos; + } else { + out_point0 = std::get<0>(road.at(owner_->point_idx))->pos; + out_point0 += dir * (float)a8::RandEx(0, 100); } } return behaviac::BT_SUCCESS;