|  | @@ -92,15 +92,6 @@ Goals::TGoalVec GatherArmyBehavior::deliverArmyToHero(const CGHeroInstance * her
 | 
	
		
			
				|  |  |  			continue;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		bool garrisoned = false;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if(path.turn() == 0 && hero->inTownGarrison)
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -#if NKAI_TRACE_LEVEL >= 1
 | 
	
		
			
				|  |  | -			garrisoned = true;
 | 
	
		
			
				|  |  | -#endif
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  		if(path.turn() > 0 && ai->nullkiller->dangerHitMap->enemyCanKillOurHeroesAlongThePath(path))
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  #if NKAI_TRACE_LEVEL >= 2
 | 
	
	
		
			
				|  | @@ -184,15 +175,22 @@ Goals::TGoalVec GatherArmyBehavior::deliverArmyToHero(const CGHeroInstance * her
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			composition.addNext(heroExchange);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -			if(garrisoned && path.turn() == 0)
 | 
	
		
			
				|  |  | +			if(hero->inTownGarrison && path.turn() == 0)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  |  				auto lockReason = ai->nullkiller->getHeroLockedReason(hero);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -				composition.addNextSequence({
 | 
	
		
			
				|  |  | -					sptr(ExchangeSwapTownHeroes(hero->visitedTown)),
 | 
	
		
			
				|  |  | -					sptr(exchangePath),
 | 
	
		
			
				|  |  | -					sptr(ExchangeSwapTownHeroes(hero->visitedTown, hero, lockReason))
 | 
	
		
			
				|  |  | -				});
 | 
	
		
			
				|  |  | +				if(path.targetHero->visitedTown == hero->visitedTown)
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					composition.addNextSequence({
 | 
	
		
			
				|  |  | +						sptr(ExchangeSwapTownHeroes(hero->visitedTown, hero, lockReason))});
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				else
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					composition.addNextSequence({
 | 
	
		
			
				|  |  | +						sptr(ExchangeSwapTownHeroes(hero->visitedTown)),
 | 
	
		
			
				|  |  | +						sptr(exchangePath),
 | 
	
		
			
				|  |  | +						sptr(ExchangeSwapTownHeroes(hero->visitedTown, hero, lockReason))});
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			else
 | 
	
		
			
				|  |  |  			{
 |