From b43d0183c2ed1d7b1e5c270115bcf769ecb71ad8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 26 Oct 2023 16:54:27 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 9d95bd37..b7419192 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3596,9 +3596,39 @@ void Creature::ActivateTargetValidPos() } if (found) { + glm::vec3 start = found_pos; + glm::vec3 end = context_pos.ToGlmVec3(); + glm::vec3 hit_point; + room->map_instance->Scale(start); + room->map_instance->Scale(end); + + int same_polys_flags = 0; + std::vector spec_polys; + + bool hit_result = false; + bool ret = room->map_instance->RaycastEx(start, end, hit_point, hit_result, same_polys_flags, spec_polys, 0); + if (ret) { + room->map_instance->UnScale(hit_point); + target_valid_pos = hit_point; + } } else { + glm::vec3 start = GetPos().ToGlmVec3(); + glm::vec3 end = context_pos.ToGlmVec3(); + glm::vec3 hit_point; + room->map_instance->Scale(start); + room->map_instance->Scale(end); + + int same_polys_flags = 0; + std::vector spec_polys; + + bool hit_result = false; + bool ret = room->map_instance->RaycastEx(start, end, hit_point, hit_result, same_polys_flags, spec_polys, 0); + if (ret) { + room->map_instance->UnScale(hit_point); + target_valid_pos = hit_point; + } } } target_valid_pos_activated = true;