diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 6b3be34d8..633dde297 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -997,17 +997,19 @@ void Mob::AI_Process() { if (engaged) { /* Fix Z when following during pull, not when engaged and stationary */ - if (moving && fix_z_timer_engaged.Check()) + if (moving && fix_z_timer_engaged.Check()) { if (this->GetTarget()) { /* If we are engaged, moving and following client, let's look for best Z more often */ - if (DistanceNoZ(this->GetPosition(), this->GetTarget()->GetPosition()) > 50) { + float target_distance = DistanceNoZ(this->GetPosition(), this->GetTarget()->GetPosition()); + if (target_distance >= 50) { this->FixZ(); } - /* If we are close to client and our Z differences aren't big, match the client */ - else if (std::abs(this->GetZ() - this->GetTarget()->GetZ()) <= 5 && this->GetTarget()->IsClient()) { - this->m_Position.z = this->GetTarget()->GetZ(); + else if (!this->CheckLosFN(this->GetTarget())) { + Mob* target = this->GetTarget(); + this->GMMove(target->GetX(), target->GetY(), target->GetZ(), target->GetHeading()); } } + } if (!(m_PlayerState & static_cast(PlayerState::Aggressive))) SendAddPlayerState(PlayerState::Aggressive); diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 9d272472f..fbbce67b9 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -497,7 +497,7 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo m_Position.y = new_y; m_Position.z = new_z; - if(fix_z_timer.Check()) + if(fix_z_timer.Check() && !this->IsEngaged()) this->FixZ(); tar_ndx++; @@ -604,7 +604,7 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo m_Position.w = CalculateHeadingToTarget(x, y); } - if (fix_z_timer.Check()) + if (fix_z_timer.Check() && !this->IsEngaged()) this->FixZ(); SetMoving(true);