В принципе, ваш подход верный. Обычно (в кампаниях) те армии/гарнизоны/замки/караваны, которые хотят сделать недоступными для нападения, дают союзному нам игроку.
Пользуюсь таким методом: в сценариях делаю игроков:
а) мы
б) n врагов
в) гая, лояльный к нам
г) гая, нелояльный к нам
Собственно, ничего плохого в добавлении нам союзника нет. И костыли не нужны, хотя 1 у меня есть: просто проверять в потоке обработки, как близко мы к каравану, и если слишком близко: остановить движение.