Баги
Бывает пишешь скрипт, все должно работать. Но что-то не стыкуется. После тщательных проверок выясняется, что это очередной баг ЕРМ. Предлагаю в этой теме собирать баги. Чтобы люди знали, с чем могут столкнуться во время написания скриптов. Для багов, которые сам не встречал/не проверял, указано авторство.
!!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; не будет работать так, как надо. Например, <> работает как <=. Правильно работают только проверки "=", ">" и ">=". Для других проверок надо брать значение и потом сравнивать его с числом.
 Или когда всё работает, если написать ?y6, но сразу вылетает (причем отладка показывает, что именно на этой команде), если написать ?y5?
 Или когда всё работает, если написать ?y6, но сразу вылетает (причем отладка показывает, что именно на этой команде), если написать ?y5?  
  Их много. Я просто перестраиваю код или эммулирую или ещё что-небудь в таком случае.
 Их много. Я просто перестраиваю код или эммулирую или ещё что-небудь в таком случае.
 
 
 