Я бы попробовал с помощью этой функции: SetTownBuildingLimitLevel(townName, buildingID, limit);
То есть вызвать её после захвата на нужное здание и то, что раньше строить было нельзя, станет можно. Как-то так.
------
Или заблокировать город SetObjectEnabled('имя города',nil); а потом при нападении разблокировать.