diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index d22ac756..b26264c1 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -882,9 +882,13 @@ bool MapInstance::SceneRaycast(const glm::vec3& orig, float max_distance, glm::vec3& hit_pos) { + if (max_distance <= 0.001f) { + return false; + } float nearest_distance = 0.0f; glm::vec3 nearest_pt(0.0f, 0.0f, 0.0f); int raycast_index = MapMgr::Instance()->IncCurrRaycastIndex(); + float len = 0.0f; while (true) { } diff --git a/server/gameserver/mapservice.cc b/server/gameserver/mapservice.cc index dd37bdf8..6de7a860 100644 --- a/server/gameserver/mapservice.cc +++ b/server/gameserver/mapservice.cc @@ -145,3 +145,17 @@ int MapService::GetGridId(float world_x, float world_y) int grid_id = (int)(world_x/cell_width_) + (int)(world_y/cell_width_) * map_width_; return grid_id; } + +void MapService::GetGridList(int grid_id, list_head* grid_list[9], int& grid_count) +{ + grid_count = 0; + if (grid_id <= 0 || grid_id >= max_grid_id_) { + return; + } + for (int i = 0; i < 9; ++i) { + int idx = grid_id + grid_offset_arr_[i]; + if (idx >= 0 && idx < max_grid_id_) { + grid_list[grid_count++] = &map_cells_[idx]; + } + } +} diff --git a/server/gameserver/mapservice.h b/server/gameserver/mapservice.h index c4585f9b..efbcd953 100644 --- a/server/gameserver/mapservice.h +++ b/server/gameserver/mapservice.h @@ -25,9 +25,8 @@ class MapService bool CanAdd(const glm::vec3& pos, int rad); void AddTriangle(mc::Triangle* tri); - - private: int GetGridId(float world_x, float world_y); + void GetGridList(int grid_id, list_head* grid_list[9], int& grid_count); private: list_head* map_cells_ = nullptr;