Index: ai/aiunit.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/aiunit.c,v retrieving revision 1.176 diff -u -r1.176 aiunit.c --- ai/aiunit.c 2002/02/22 13:14:38 1.176 +++ ai/aiunit.c 2002/02/22 23:21:21 @@ -604,14 +604,28 @@ static void invasion_funct(struct unit *punit, bool dest, int n, int which) { int x, y; - if (dest) { x = punit->goto_dest_x; y = punit->goto_dest_y; } - else { x = punit->x; y = punit->y; } + bool flag = (dest || punit->activity != ACTIVITY_GOTO); + + if ((pcity->ai.invasion & which) == which) { + return; + } + if (dest) { + x = punit->goto_dest_x; + y = punit->goto_dest_y; + } else { + x = punit->x; + y = punit->y; + } + square_iterate(x, y, n, i, j) { struct city *pcity = map_get_city(i, j); - if (pcity && pcity->owner != punit->owner) - if (dest || punit->activity != ACTIVITY_GOTO || !has_defense(pcity)) - pcity->ai.invasion |= which; + + if (pcity && pcity->owner != punit->owner + && (flag || !has_defense(pcity))) { + pcity->ai.invasion |= which; + return; + } } square_iterate_end; }