Баги
Бывает пишешь скрипт, все должно работать. Но что-то не стыкуется. После тщательных проверок выясняется, что это очередной баг ЕРМ. Предлагаю в этой теме собирать баги. Чтобы люди знали, с чем могут столкнуться во время написания скриптов. Для багов, которые сам не встречал/не проверял, указано авторство.
!!AR, !!MO - этот баг затрагивает артефакты, ресурсы, свитки и существа. В первых трех случаях может быть выставлена охрана в редакторе, в случае монстров может быть выставлено награждение в виде артефакта и ресурсов. Для объекта с невыставленными в редакторе параметрами получение охраны или награды с помощью команд ерм приводит к ошибке. Пример:
Код
!!MO15/24/0:A?y1; - выдаст ошибку, если у монстра не был настроен артефакт в редакторе карт.
Однако, с этим можно бороться:
Код
!!OB15/24/0:C?y2;
!!IF&y2<0:M^У этого монстра нет артефактов^;
!!MO15/24/0&y2>=0:A?y1;
!!IF&y2>=0:M^Этот монстр хранит артефакт^;
!!IF&y2<0:M^У этого монстра нет артефактов^;
!!MO15/24/0&y2>=0:A?y1;
!!IF&y2>=0:M^Этот монстр хранит артефакт^;
Здесь использована особенность слов объектов, получаемых с помощю !!OB:C. Если слово отрицательно, то для объекта выставлены дополнительные параметры в редакторе карт и можно получать охрану или награду вышеперечисленных объетов. Другой метод борьбы состоит в использовании отключения сообщений об ошибках. Смотрите !!UN:P904, !!UN:P905
!!BA:S - баг при получении типа битвы. Данный ресивер возвращает правильное значение только по окончании битвы (!?BA1), ранее он возвращает тип предыдущей битвы.
!!BM:C - баг при касте Воскрешения. Возможный метод исправления:
Код
!!BMy1:F?y2 P?y4;// получаем флаги существа и позицию
!!VRy3:Sy2;
!!VRy2|262144;// ставим флаг нежити
!!BMy1:Fy2;
!!BM:C39/y4/3/0/0;// кастуем экспертное поднятие нежити (анимация идентичная)
!!BMy1:Fy3;// восстанавливаем флаг существа
!!VRy3:Sy2;
!!VRy2|262144;// ставим флаг нежити
!!BMy1:Fy2;
!!BM:C39/y4/3/0/0;// кастуем экспертное поднятие нежити (анимация идентичная)
!!BMy1:Fy3;// восстанавливаем флаг существа
!!BM:G - баг при снятии заклинаний (установка длительности 0). Заклинание пропадает. Но картинка заклинания продолжает висеть у существа вечно.
!!DL:A - баг при изменении кадра в дефе, соответствующем элементу диалога. Может выдавать ошибки или даже приводить к вылету игры. Есть подозрение, что появление бага зависит от железа.
!!EA#:B - Многие абилки в битве (-42<=#<=-1) навешиваются на стеки некорректно. То есть способность отображается, но бонус отсутствует. Среди прочих: Reduce casting cost (цена заклинаний у героя не уменьшается), Champion Charge (бонус за расстояние вычисляется, однако, существо бьет с прежней силой), Death Stare (Смертельный взгляд обнаружен не был ни при одном варианте), Thunderbolt (Ни одно существо так и не скастовало удар птицы грома, испытывалось в режиме:"кастует после атаки"). Кроме того добавление стекам абилок конфликтует с магией экспертное ускорение (возможно и другими модификаторами скорости). После добавления абилки бонус от ускорения пропадает( хотя сама магия все же продолжает висеть).
!!FU:E - нет сообщения об ошибке, если не поставить в конце ';' . А вот кучу глюков, которые трудно поймать получить вполне реально.
!!HE:A - нельзя получать данные в этой команде в переменные (y-). Баг есть только под TE.
!!HE:C#1/#2/..../#14; - не работает внутри города. (SnoRT)
!!MR:N - возвращает мусор.
!!MC - баги связанные с макросами.
При использовании макроса длиннее чем 8 символов в качестве аргумента функции последующие за ним аргументы могут не передаваться. Не все команды поддерживают макросы напримпер в данном коде команда !!UN:I не выполнится:
Код
!#MCv24:S@type@;
!#VR$type$:S16;
!#MCv25:S@subtype@;
!#VR$subtype$:S0;
!?PI;
!!UN:I12/3/0/$type$/$subtype$;
!#VR$type$:S16;
!#MCv25:S@subtype@;
!#VR$subtype$:S0;
!?PI;
!!UN:I12/3/0/$type$/$subtype$;
!!TR:T - при использовании для рисования дорог рисует только уголки.
!!UN:L - возможно возникновение окна обмена героя с самим собой по окончании работы триггера.
!!UN:S - не стоит открывать подземелье, если карта одноуровневая. Сообщение об ошибке вы не получите, а глюки могут начаться. Например, запись информации в область с кодом ЕРМ или поползновения графики.
Перепутаны проверки внутри команд - большинство из них работает неправильно.
Код типа !!GE100:F<>5; не будет работать так, как надо. Например, <> работает как <=. Правильно работают только проверки "=", ">" и ">=". Для других проверок надо брать значение и потом сравнивать его с числом.