diff --git a/server/gameserver/movehelper.cc b/server/gameserver/movehelper.cc index 57dea436..bc0da8e7 100644 --- a/server/gameserver/movehelper.cc +++ b/server/gameserver/movehelper.cc @@ -79,16 +79,15 @@ void MoveHelper::CalcTargetPos(float distance) a8::XPrintf("CalcTaretPos old_size:%d\n", {paths_.size()}); } #endif - glm::vec3 start = owner_->GetPos().ToGlmVec3() * owner_->room->GetMapMeta()->pb->scale(); - glm::vec3 end = owner_->GetPos() + owner_->GetMoveDir() * distance; - glm::vec3 hit_point; + glm::vec3 start = owner_->GetPos().ToGlmVec3(); + glm::vec3 end = owner_->GetPos().AddVec2(owner_->GetMoveDir() * distance).ToGlmVec3(); bool is_hit = false; MovePathPoint point; if (owner_->HasBuffEffect(kBET_ThroughWall) || owner_->HasBuffEffect(kBET_Fly) || owner_->HasBuffEffect(kBET_Jump)) { - point.tar_pos = end * 10.f; + point.tar_pos = end; if (point.tar_pos.x > owner_->room->GetMapMeta()->pb->map_width() + 10) { point.tar_pos.x = owner_->room->GetMapMeta()->pb->map_width() - 10; } @@ -102,12 +101,15 @@ void MoveHelper::CalcTargetPos(float distance) point.tar_pos.z = 10; } } else { + glm::vec3 hit_point; + start *= owner_->room->GetMapMeta()->pb->scale(); + end *= owner_->room->GetMapMeta()->pb->scale(); int ret = owner_->room->map_instance->Raycast(0, start, end, hit_point); if (ret > 0) { is_hit = true; - point.tar_pos = hit_point * 10.f; + point.tar_pos = hit_point / owner_->room->GetMapMeta()->pb->scale(); } else { - point.tar_pos = end * 10.f; + point.tar_pos = end / owner_->room->GetMapMeta()->pb->scale(); } } a8::Vec2 v2; diff --git a/server/gameserver/types.cc b/server/gameserver/types.cc index 67d25b4d..2666141a 100644 --- a/server/gameserver/types.cc +++ b/server/gameserver/types.cc @@ -108,3 +108,10 @@ glm::vec3 Position::ToGlmVec3() const v.z = z; return v; } + +const Position& Position::AddVec2(const a8::Vec2& v) +{ + x += v.x; + z += v.y; + return *this; +} diff --git a/server/gameserver/types.h b/server/gameserver/types.h index fed59060..a2a8c02c 100644 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -91,4 +91,6 @@ struct Position a8::Vec3 ToVec3() const; glm::vec2 ToGlmVec2() const; glm::vec3 ToGlmVec3() const; + + const Position& AddVec2(const a8::Vec2& v); };