From 57b0c9db448f4cfd9c3e429b75d7437b4e5d2ca1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 30 Nov 2022 11:08:20 +0800 Subject: [PATCH] 1 --- server/gameserver/human.cc | 8 ++++++-- server/gameserver/moveableentity.cc | 11 +++++++---- server/gameserver/moveableentity.h | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index fab596b9..d2691fe3 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2019,8 +2019,12 @@ void Human::_UpdateMove(int speed) if (HasBuffEffect(kBET_Hide)) { RemoveBuffByEffectId(kBET_Hide); } - a8::Vec2 old_pos = GetPos(); - SetPos(old_pos + GetMoveDir() * speed); + a8::Vec2 curr_pos; + curr_pos.x = GetLastPos().x; + curr_pos.y = GetLastPos().z; + + SetPos(GetPos() + GetMoveDir() * speed); + CheckSpecObject(); } #else diff --git a/server/gameserver/moveableentity.cc b/server/gameserver/moveableentity.cc index d5b41f5e..4ca2e077 100644 --- a/server/gameserver/moveableentity.cc +++ b/server/gameserver/moveableentity.cc @@ -132,12 +132,15 @@ void MoveableEntity::CalcTargetPos(float distance) glm::vec3 end; glm::vec3 hit_point; - start.x = GetPos().x / 10; - start.z = GetPos().y / 10; + start.x = GetPos().x / 10.0f; + start.z = GetPos().y / 10.0f; a8::Vec2 target_pos2d = GetPos() + GetMoveDir() * distance; - end.x = target_pos2d.x / 10; - end.z = target_pos2d.y / 10; + end.x = target_pos2d.x / 10.0f; + end.z = target_pos2d.y / 10.0f; + + last_pos_.x = GetPos().x; + last_pos_.z = GetPos().y; int ret = room->map_instance->Raycast(0, start, end, hit_point); if (ret > 1) { diff --git a/server/gameserver/moveableentity.h b/server/gameserver/moveableentity.h index fee9600b..a02475c8 100644 --- a/server/gameserver/moveableentity.h +++ b/server/gameserver/moveableentity.h @@ -26,6 +26,7 @@ class MoveableEntity : public RoomEntity virtual void UpdateCharImage(const char* file, int line, const char* func); virtual const a8::Vec2& GetMoveDir() { return move_dir_; }; virtual void SetMoveDir(const a8::Vec2& move_dir); + virtual const glm::vec3& GetLastPos() { return last_pos_; }; virtual const glm::vec3& GetTargetPos() { return target_pos_; }; virtual void SetTargetPos(const glm::vec3& target_pos); virtual const a8::Vec2& GetAttackDir() { return attack_dir_; }; @@ -43,6 +44,7 @@ protected: private: a8::Vec2 move_dir_; a8::Vec2 attack_dir_; + glm::vec3 last_pos_; glm::vec3 target_pos_; std::set grid_list_; int chg_move_dir_times_ = 0;