diff --git a/AI/Nullkiller/Behaviors/DefenceBehavior.cpp b/AI/Nullkiller/Behaviors/DefenceBehavior.cpp index 2363acd62..e8ab04eb8 100644 --- a/AI/Nullkiller/Behaviors/DefenceBehavior.cpp +++ b/AI/Nullkiller/Behaviors/DefenceBehavior.cpp @@ -214,11 +214,15 @@ void DefenceBehavior::evaluateDefence(Goals::TGoalVec & tasks, const CGTownInsta std::vector pathsToDefend; std::map> defferedPaths; + AIPath* closestWay = nullptr; for(int i = 0; i < paths.size(); i++) { auto & path = paths[i]; + if (!closestWay || path.movementCost() < closestWay->movementCost()) + closestWay = &path; + #if NKAI_TRACE_LEVEL >= 1 logAi->trace( "Hero %s can defend town with force %lld in %s turns, cost: %f, path: %s", @@ -382,7 +386,14 @@ void DefenceBehavior::evaluateDefence(Goals::TGoalVec & tasks, const CGTownInsta town->getObjectName()); #endif - sequence.push_back(sptr(ExecuteHeroChain(path, town))); + ExecuteHeroChain heroChain = ExecuteHeroChain(path, town); + + if (closestWay) + { + heroChain.closestWayRatio = closestWay->movementCost() / heroChain.getPath().movementCost(); + } + + sequence.push_back(sptr(heroChain)); composition.addNextSequence(sequence); auto firstBlockedAction = path.getFirstBlockedAction();