diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index c9c9f542..8929e3f0 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -999,30 +999,47 @@ bool HeroAgent::TargetInRange(float range) float HeroAgent::GetNewAttackerHPRate() { - + return owner_->GetLastAttacker().Get()->GetHP() / + std::max(1.0f, owner_->GetLastAttacker().Get()->GetMaxHP()); } bool HeroAgent::GetNewAttackerInRange(float range) { - + if (!HasNewAttacker()) { + return false; + } + return Collision::InSquare + (owner_->GetLastAttacker().Get()->GetPos().ToGlmVec3(), + owner_->GetPos().ToGlmVec3(), + range); } int HeroAgent::GetNewAttackerPassTime() { - + return (owner_->room->GetFrameNo() - owner_->GetLastBeAttackFrameNo()) * FRAME_RATE_MS; } bool HeroAgent::HasNewAttacker() { - + if (!current_target_agent->IsValid()) { + return false; + } + if (!owner_->GetLastAttacker().Get()) { + return false; + } + return current_target_agent->GetUniId() != owner_->GetLastAttacker().Get()->GetUniId() && + owner_->GetLastAttacker().Get()->revive_count == owner_->GetLastAttackerReviveTimes(); } bool HeroAgent::NewAttackerIsHuman() { - + return owner_->GetLastAttacker().Get()->IsHuman(); } bool HeroAgent::SwitchToNewAttacker() { + if (HasNewAttacker()) { + } + return true; }