diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index ddb8e493..d7a48fe4 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3147,15 +3147,17 @@ void Creature::ShortFindPath() finaly_pos = left_pos; } glm::vec3 move_dir = finaly_pos - GetPos().ToGlmVec3(); - GlmHelper::Normalize(move_dir); - glm::vec3 end_pos = start_pos + move_dir * GetSpeed() / 1.0f; + if (!GlmHelper::IsZero(move_dir)) { + GlmHelper::Normalize(move_dir); + glm::vec3 end_pos = start_pos + move_dir * GetSpeed() / 1.0f; - glm::vec3 new_point = glm::vec3(0.0f, 0.0f, 0.0f); - bool ret = try_move(start_pos, end_pos, new_point); - if (ret) { - App::Instance()->verify_set_pos = 1; - GetMutablePos().FromGlmVec3(new_point); - App::Instance()->verify_set_pos = 0; + glm::vec3 new_point = glm::vec3(0.0f, 0.0f, 0.0f); + bool ret = try_move(start_pos, end_pos, new_point); + if (ret) { + App::Instance()->verify_set_pos = 1; + GetMutablePos().FromGlmVec3(new_point); + App::Instance()->verify_set_pos = 0; + } } } } diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index 43128dea..a2d2be35 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -1695,3 +1695,9 @@ int HeroAgent::GetTodayBattleTimes() { return 0; } + +bool HeroAgent::CanAttack() +{ + return !(owner_->HasBuffEffect(kBET_Vertigo) || + owner_->HasBuffEffect(kBET_InWater)); +} diff --git a/server/gameserver/hero_agent.h b/server/gameserver/hero_agent.h index 3d00e3f9..82702dd6 100644 --- a/server/gameserver/hero_agent.h +++ b/server/gameserver/hero_agent.h @@ -103,6 +103,7 @@ public: float GetCarMaxOil(); bool IsSingleCar(); bool CarHasBuffEffect(int effect_id); + bool CanAttack(); behaviac::EBTStatus RegisterEvents(behaviac::vector events); behaviac::EBTStatus ClearEvents();