Внимание. Данный скрипт корректно работает только в версии клиента не ранее 04.02.2010.



   Для начала теория. Отображаемые в клиенте юниты указываются с техами влияния. Влияние задают герои, находящиеся в том-же городе, что и юнит. Для простоты есть смысл принять, что герои (и артефакты) влияют только на WS техи. Формула изменения техов следующая: Tnew = (Told*Apeace + Bpeace)*Awar + Bwar, где T - старый и новый тех, A,B - коэф. влияния героев, дружественных и враждебных. При нескольких героях выбирается максимальные коэф. В нашем случае B для всех героев и артефактов равно 0 (случаи коловозок опустим). Отсюда Tnew = Told*Apeace*Bwar. Получившуюся формулу очень просто развернуть, чтобы получить реальные техи юнитов.
   Как это делать? Можно руками, можно попробовать автоматизировать. В любом случае, хочется знать - есть или нет в списке герои. Для этой цели предназначен макрос testhero.mcr. Скопируйте его, а также degr.mcr, gethero.mcr и testbattle.mcr (ссылка для скачивания архива - macros.zip) в каталог макросов программы (обычно C:\Program Files\DataArt\GVNG\Macro\). Есть смысл после копирования перезапустить ГВНГ.
   Создаем группы для симуляции боя. Необходимо создавать группы по числу городов, из которых группы будут приходить в целевой город для сражения. Хотя дружественные друг-другу группы, приходящие из городов, в которых нет героев можно объединить в одну. После создания полученный контекст обязательно запишите в btl файл (правая кнопка мыши в симулятор, и экспорт). Для примера рассмотрим симуляцию боя в Осгилиате, рассчитываемую по репке 51го хода osgiliat.btl. Импортируем его (правая кнопка на симуляторе, import). Нажимаем правую кнопку мыши на "мозг", выбираем постоянную симуляцию и ждем. Процент победы у Темных крутится около 77-78%. Но это на текущих техах, а что будет в реальности? Давайте поищем героев. Снова правая кнопка на мыши, выбираем "Batch optimization", в поле Number ставим 1, в Procedures Name ставим testhero. Ok, и получаем:
Список героев в группах.
---------------------------------
Группа A
Герой:Grond раса:HillTrolls
Герой:Ulaire-Attea раса:BaradDur
---------------------------------
Группа B
Герой:Ulaire-Attea раса:BaradDur
---------------------------------
Группа C
Герой:Legolas раса:Lorien
---------------------------------
Группа G
Герой:Theoden раса:Rohan
---------------------------------
   Почему назгул Ulaire-Attea добавлен два раза? Объясняю. Узнав, какие и в каких группах герои у нас есть, необходимо выяснить, является ли герой дружественен данной группе. Если у героя стоит группе мир, нажимаем на нем правую кнопку, выбираем "Edit item", и в поле Description вводим текст "peace". Если враждебен (как назгул в группе B), то: нажимаем правую кнопку на герое, делаем "Clone". Одного из дублей перемещаем в группу, к которой он дружественен (т.е. назгула в группу А), поле Description ему не устанавливаем. Оставшемуся дублю ставим "war" в поле description и внимание! убираем для него галочку "InBattle". В результате этот дубль будет участвовать в востановлении начальных техов группы, в которой он находится, но не станет влиять на результаты симуляции, и на новые техи всех групп (этим займется его дубликат). Почему всё так сложно? Жизнь такая. По идее можно сделать автоустановку war/peace, но есть проблемка как технического (ограничения ГВНГ), так и алгоритмического (связанные с возможным апгрейдом героев) порядка.
   Итак, у нас есть подготовленный к обработке контекст. Снова бьем мышей по мозгам, имя процедуры testbattle. Запуск симуляции, многа букв, ждем ОК. Выходим в симулятор, опять мозг, выбираем постоянную имитацию, и наслаждаемся результатом (процент у Темных вырос до 84.4%). Повторный запуск testbattle не даст эффекта, так что случайный клик вас не погубит.
   Для желающих подправить, доработать или получить объяснения по работе скрипта адрес указан на морде точки.