Вся проблема была в том, что команда QuestionBox ссылается на новую функцию, в которой значение "dwell" из функции "capt_alt_dw" теряется, поэтому игре невозможно было задать, какой именно двеллинг перестраивать в этот момент. У меня это пока решено через сравнивание местоположения объектов, но, может это можно сделать как-то адекватнее и проще?
Что-то вы на пустом месте трудности создаёте. Сохраняете координаты в глобальные переменные, потом обращаетесь к ним в функции add_alt_dw (). Ведь точно также можно сразу сохранить название объекта в глобальную переменную, и потом сразу его использовать:
function capt_alt_dw (prevowner, newowner, hero, dwell )
alt_dw_dwell = dwell;
QuestionBox("текст c вопросом бла бла бла", "add_alt_dw", nil);
end;
function add_alt_dw ()
ReplaceDwelling(alt_dw_dwell, TOWN_ACADEMY, 991 );
end;
А ещё я бы советовал использовать более сложные имена для функций и глобальных переменных, если хотите встраивать их в любую карту. Чем сложнее, тем больше шансов что ни с чем не совпадёт.
вообще все эти скрипты, сильно ли грузят игру?
Не заморачивайтесь по этому поводу. У меня на карте в триггере нового дня каждый ход отрабатывало наверное под тысячу строк кода, и это было совсем не заметно. Долго выполняется только работа с объектами на карте - удалить объект, поставить новый, изменить количество существ - по субъективным оценкам на каждую такую операцию идёт подтупливание игры на пол секунды может быть.