Гм, костылями, думаю, можно реализовать. Нужно спрятать город в недостижимой и неразведываемой области, а далее организовать скрипт, как-то:
MakeHeroInteractWithObject(hero, "Город") --Использовать для интерактива с городом
function ResetOwner(hero, obj, old, new)
SetObjectOwner(obj, 0) --Устанавливаем нейтрального владельца городу, так как MakeHeroInteract сэмулирует и захват города
end
Trigger(OBJECT_CAPTURE_TRIGGER, "Город", "ResetOwner")
Не пробовал такую реализацию, будет интересно — сработает ли.