Далее. Если Герой находится внутри города, то его скриптовое имя исчезает из базы данных карты (видимо), поэтому в этот момент оперировать с ним, увы, нельзя. Впрочем, не знаю, точно ли в этом дело. Ведь задание, проверяющее "Жив ли Нимус" при этом сбоя не дает, выходит, героя игра находит. Но вот давать ему войска, увы, не может. Совет тут прост - не прячьте героя внутри города, а оставьте его на входе - все-равно же вы сможете передавать ему купленные войска)
Герой исчезает как объект с карты. Для некоторых функций это фатально, но не для тех, что в своём имени содержат слово Hero. Ошибка скорее всего из-за эффектов и функций, их сопровождающих. Есть функция, проверяющая, находится ли герой в городе GetHeroTown(hero). Если нет, то nil, иначе возвращает имя города.