From d3987d845624b74f602ba8f3c7c868ec2ee70811 Mon Sep 17 00:00:00 2001 From: Xilmi <ail.st@gmx.de> Date: Sat, 28 Dec 2024 12:39:05 +0100 Subject: [PATCH] AI should only defend with one hero, not several who won't fit into the city anyways --- AI/Nullkiller/Behaviors/DefenceBehavior.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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<int> pathsToDefend; std::map<const CGHeroInstance *, std::vector<int>> 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();