Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Баги в ЕРМ
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды > Скрипты
Страницы: 1, 2, 3, 4, 5
Demiurg
Баги

Бывает пишешь скрипт, все должно работать. Но что-то не стыкуется. После тщательных проверок выясняется, что это очередной баг ЕРМ. Предлагаю в этой теме собирать баги. Чтобы люди знали, с чем могут столкнуться во время написания скриптов. Для багов, которые сам не встречал/не проверял, указано авторство.

!!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^Этот монстр хранит артефакт^;

Здесь использована особенность слов объектов, получаемых с помощю !!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;// восстанавливаем флаг существа


!!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$;


!!TR:T - при использовании для рисования дорог рисует только уголки.

!!UN:L - возможно возникновение окна обмена героя с самим собой по окончании работы триггера.

!!UN:S - не стоит открывать подземелье, если карта одноуровневая. Сообщение об ошибке вы не получите, а глюки могут начаться. Например, запись информации в область с кодом ЕРМ или поползновения графики.

Перепутаны проверки внутри команд - большинство из них работает неправильно.
Код типа !!GE100:F<>5; не будет работать так, как надо. Например, <> работает как <=. Правильно работают только проверки "=", ">" и ">=". Для других проверок надо брать значение и потом сравнивать его с числом.
Чёртос-2 (Chortos-2)
Берсеркеру: ты считаешь, что это нормально, когда игра вылетает от неведомой ошибки интерпретатора ERM, когда никаких скриптов на карте нет и в помине, а вогификация отключена полностью? smile.gif Или когда всё работает, если написать ?y6, но сразу вылетает (причем отладка показывает, что именно на этой команде), если написать ?y5? smile.gif
SnoRT
Вот, почитал пост Берсеркера, и сразу вспомнил один случай. Попробуй вызвать диалог !!HE:C#1/#2/..../#14; внутри города. Сначала всё будет работать корректно, можно отдавать, брать монстров. Но как только нажмёшь на "ОК", игры вылетет. А где это сказано, что не следует юзать команду в пределах города?..
Чёртос-2 (Chortos-2)
Это как раз можно отнести к багам документации. Хотя, как по мне, так лучше исправить странное поведение ERM, чем писать обо всех таких случаях в документации…
Berserker
А ты пробоавл менять ехешник? А ты уверен, что Славин код там на 100% прижился? Изменение чужой программы ведёт к ошибкам, а некоторые диалоги, команды и функции просто не подходят для многих мест и всё! И везде где можно написать ?y6 не вылетит и при ?y5. И, поверьте мне на слово: УЖЕ ПОЛ ГОДА ПРИ ЧИСТОМ ВОГЕ И ФЕНИКСЕ НА НЁМ НИ РАЗУ ИГРА НЕ ВЫЛЕТЕЛА. При игре на рандомных картах, конечно.
Чёртос-2 (Chortos-2)
Цитата(Berserker @ 04 Jun 2007, 20:27)
А ты уверен, что Славин код там на 100% прижился? Изменение чужой программы ведёт к ошибкам, а некоторые диалоги, команды и функции просто не подходят для многих мест и всё!
Речь в том числе и об этом — я более чем уверен, что код может прижиться, если делать всё очень аккуратно. Всё, что я делаю с оригинальным «Полным собранием», приживается превосходно.

Цитата(Berserker @ 04 Jun 2007, 20:27)
И везде где можно написать ?y6 не вылетит и при ?y5.
Тогда бы у меня не вылетало. (Такое поведение я словил на чистом WoG.)

Цитата(Berserker @ 04 Jun 2007, 20:27)
И, поверьте мне на слово: УЖЕ ПОЛ ГОДА ПРИ ЧИСТОМ ВОГЕ И ФЕНИКСЕ НА НЁМ НИ РАЗУ ИГРА НЕ ВЫЛЕТЕЛА. При игре на рандомных картах, конечно.
К сожалению, это не значит, что с другими скриптами ERM дружит так же хорошо. Выход есть только один — приучать сами скрипты дружить с его странностями… Собственно, для этого и создана эта тема.
Berserker
Так и происходит. Если вылетело, то меняешь код, обходишь, всегда есть безопасные пути smile.gif
Demiurg
Такой вот есть странный баг:
При вызове из одной функции другой нельзя принимать результат в x1...x16
FANaTWOG
Не замечали такого бага: срабатывание триггера !?HL-1 при загрузке карты?
Бывает при загрузке карты выскакивает мессага, типа "Вам нужно повысить свой навык орлиного глаза перед изучением новых заклинаний". spiteful.gif
Berserker
Последнее - это не баг, просто герой стартует с х уровня, а значит выполняется триггер повышения.
С функциями у меня всё номрально. Что значит нельзя принимать результат?
Demiurg
Цитата(Berserker @ 10 Jun 2007, 20:56)
С функциями у меня всё номрально. Что значит нельзя принимать результат?

например такой код будет работать неправильно.
Код
!?FU21;
!!FU22:Px1/?x2;

!?FU22;
!!VRx2:Sx1*x1;

Однако следующий код вполне рабочий:
Код
!?FU21;
!!FU22:Px1/?y1;

!?FU22;
!!VRx2:Sx1*x1;
gamecreator
По-моему такого вообще нельзя делать.
Demiurg
Не то написал. Смотри исправленное.
Berserker
Ну так тот синтаксис просто не поддерживается и всё smile.gif
Demiurg
В хелпе не написано, что не поддерживается.
И к тому же это нелогично - не поддерживать такой синтаксис.
AFAIR, ошибки при этом не возникает. То есть ЕРМ считает синтаксис своим, но при этом работает некорректно.

Добавлено ([mergetime]1181496381[/mergetime]):
Не вижу принципиальной разницы между возвращением значения в y-переменную и в x-переменную.
Berserker
Это не единственный недочёт ЕРМ sad.gif Их много. Я просто перестраиваю код или эммулирую или ещё что-небудь в таком случае.
Чёртос-2 (Chortos-2)
Вот видишь? А говорил, что в ERM вообще нет багов. smile.gif
Berserker
Есть ещё глупые проверки типа проверка ресурсов на отрицательное число, которая выполнилась только на 5-м месяце и запорола сейв челу, причём отрубая мой 99 скрипт sad.gif sad.gif sad.gif
Тупо до ужаса. Я просмотрел в логе, все значения корректны, но пишат Resource out of range. При чём никто ещё подобного не споймал. sad.gif

Ладно, Чёртос, соглашусь с тобой smile.gif
Чёртос-2 (Chortos-2)
Вообще, нечему удивляться. Вот характерный отрывок из ассемблерного кода:
Код
mov    [ebp-08h],ecx
mov    eax,[ebp-08h]
cmp    dword ptr [eax+04h],00000000h
jz    L00703E56
int3
L00703E56:
Кто хорошо знает ассемблер, тот и так всё уже понял. smile.gif Для остальных объясню в двух словах: первая инструкция копирует данные из А в Б (которое находится в оперативной памяти), вторая — из Б в В (хотя можно из А в В, что работает быстрее, особенно на старых процессорах, а оптимальный вариант — просто использовать А вместо В). Третья медленно проверяет, не равно ли некое значение нулю (к слову, более быстрая версия одновременно и меньше места занимает), потом, если оно всё же равно нулю, управление «перепрыгивает» через инструкцию int3 и продолжается дальше (прыжок — долгая операция); если же значение было ненулевым, игра вылетает (int3)… smile.gif И в таком стиле написана вся та часть h3wog.exe, которую делал Слава. Он и сам не заботился о коде, и оптимизатор каким‑то образом отключил совсем.

P. S. Стоит ли добавлять, что, если почистить остальной код функции, Б оказывается вообще ненужным…
Berserker
Я про это давно говорил. Ты посмотри глубже, там код переполнен просто тупыми инструкциями, которые вообще ничего не несут в себе.
вроде
mov eax,5
push ecx
mov eax,13

и т.д. Позже я посмотрел, даже мой Virtual Pascal генерирует не оптимизированный код (оптимизирует, но не настолько)

p:^integer;
p^:=5;
p^:=8;

=

mov eax,p
mov [eax],5
mov eax,p
mov [eax],7

Ладно, компилятор не усмотрит тупой инструкции по присвоению переменной значения 5. Но команды mov eax,p он дублирует каждый раз при упоминании. sad.gif sad.gif sad.gif

Вот ещё, почти во всех компилятоах запрещена старая поддержка директивы absolute! Вместо того, чтобы обращать напрямую ко всем переменным игры (в библиотеках феник-мода_ мне приходится везде использовать указатели, отчего код растёт раза в два!

И ещё, пройди по ЕРМ один триггер, посмотри сколько всего выполняется прежде чем юбая простая команда в стиле
!!VRv1:S77;
...выполнится. Я устал smile.gif

Байт код был бы идеальным решением. А пока, (ZVS обещал официально встроить библиотеки) все работы с массивами, циклами и большими сркиптами работы с переменными лучше всего писать на наноассемблере и загружать bin-файлы динамически. Или писать на СИ в библиотеках. Иначе на ЕРМ это вызывает ощутимые задержки, собенно если действия стоят на ежедневных триггерах. Ждёшь лишних х секунд, причём время растёт с каждым новым циклом.
Чёртос-2 (Chortos-2)
Цитата(Berserker @ 18 Jun 2007, 20:28)
Я про это давно говорил. Ты посмотри глубже, там код переполнен просто тупыми инструкциями, которые вообще ничего не несут в себе.
вроде
mov eax,5
push ecx
mov eax,13
Я и говорю — в таком стиле оформлен весь славин код. smile.gif

Цитата(Berserker @ 18 Jun 2007, 20:28)
и т.д. Позже я посмотрел, даже мой Virtual Pascal генерирует не оптимизированный код (оптимизирует, но не настолько)

p:^integer;
p^:=5;
p^:=8;

=

mov eax,p
mov [eax],5
mov eax,p
mov [eax],7

Ладно, компилятор не усмотрит тупой инструкции по присвоению переменной значения 5. Но команды mov eax,p он дублирует каждый раз при упоминании. sad.gif sad.gif sad.gif
Странно. Может, у него там уровень оптимизации в где‑то глубоко закопанном месте стоит совсем низкий? Кстати, ты не пробовал GCC? Он же сейчас зовется GNU Compiler Collection и работает с front‐end’ами, в том числе — C, C++ и Pascal. Сам я, правда, не пробовал, но звучит заманчиво. Причем большая часть трансляции одинаковая для всех front‐end’ов (в том числе и значительная часть оптимизации, если не вся).

Цитата(Berserker @ 18 Jun 2007, 20:28)
Вот ещё, почти во всех компилятоах запрещена старая поддержка директивы absolute! Вместо того, чтобы обращать напрямую ко всем переменным игры (в библиотеках феник-мода_ мне приходится везде использовать указатели, отчего код растёт раза в два!
Используй Borland. crazy.gif

Цитата(Berserker @ 18 Jun 2007, 20:28)
Байт код был бы идеальным решением. А пока, (ZVS обещал официально встроить библиотеки) все работы с массивами, циклами и большими сркиптами работы с переменными лучше всего писать на наноассемблере и загружать bin-файлы динамически. Или писать на СИ в библиотеках. Иначе на ЕРМ это вызывает ощутимые задержки, собенно если действия стоят на ежедневных триггерах. Ждёшь лишних х секунд, причём время растёт с каждым новым циклом.
А если это стоит на ежесекундном генераторе, который введен в 3.59? off.gif
gamecreator
у меня есть GCC. пробовал - ничем не отличается от VC, только main там всегда возвращает значение
Чёртос-2 (Chortos-2)
  1. Они отличаются гораздо больше, чем тебе кажется.
  2. GCC для C++ есть у многих — например, у меня.
  3. Речь шла о Pascal. crazy.gif
Berserker
Для ежесекундного подгрузка бинарных файлов убийственна smile.gif smile.gif smile.gif
Оптимизация стоит на максимуме, другие компиляторы также генерят. Надо будет в делфи посмотреть...
Borland - это ж под ДОС.
Demiurg
Хотите поймать много страшных глюков?!
Используйте
!!UN:Sx/y/1/72/102;
на одноуровневой карте.
В принципе радиус можно и побольше поставить. Больше радиус - больше глюков.
DracoLich
А что должно произойти??
Вставил, никаких багов не заметил... unsure.gif
Demiurg
Неправильно написал. Если человек красный, то
!!UN:S72/72/1/0/102;
Смысл в том, что нет проверки на количество уровней карты. И, если использовать на одноуровневой карте, то проходит изменение битов в местах, отвечающих за графику и код ЕРМ. Графика начинает ползти - часть объектов дергается влево от их положения. Код ЕРМ становится просто нерабочим. Представь, что в коде заменилось 3% символов на случайные.
Demiurg
!!MR:N?$;
возвращает муоср вместо номера стека у меня под ТЕ (под другими версиями не смотрел). Вне зависимости от того, в каком из триггеров !?MR0, !?MR1 или !?MR2 его использовать.
Berserker
Хе, определения битвы (пусто, цитадель, замок) тоже возвращает ерунду.

А ещё, несовместимы скрипты по усилению специализаций и зелья фонтанов. Например у мну Халон получает 47 бонусных единиц маны в битве. У него 100 маны было до битвы. Я выпиваю зелье Берсеркера и мана как положено = 0, вот только после битвы она 0 и остаётся.

Что-то ещё, почти забыл. Есть, скрипт машин №3 при посещении пещеры приключений - теряются все машины, накопленные тяжким трудом.
Demiurg
Добавил баги, которые вспомнил, а также описанные здесь в первый пост. Пишите в этой теме о найденных багах.
DracoLich
Цитата
Хе, определения битвы (пусто, цитадель, замок) тоже возвращает ерунду.

нет, правильное значение возвращается после триггера !?BA1, если использовать команду в !?BA0, то получается значения последней битвы.
Demiurg
Цитата(DracoLich @ 01 Aug 2007, 15:10)
Цитата
Хе, определения битвы (пусто, цитадель, замок) тоже возвращает ерунду.

нет, правильное значение возвращается после триггера !?BA1, если использовать команду в !?BA0, то получается значения последней битвы.

Я думаю, что в !?BA1эта информация уже не представляет большого интереса. Через ЕРМ несложно пишется функция, определяющая тип битвы в !?BA0;
Berserker
Несложно? Приходится искать городс этом месте, проверять строения (Цитадель, Форт), и всё ради того, чтобы узнать мелкую фичу? Вы видели, как воговцы оперделяют? Каждый в своём скрипте длинной функцией поиска. Бедные слабые машины.
Сегодня посмотрел скрипт 64 вроде. Чуть не умер.

!?He1&....
...........
..........
............

!?HE2&...
.........
...........
.........

Одинаковая штука и перечислены вроде все 255 героев. Я ещё удивился, строк столько, сколько в Феникс-Моде.
Berserker
Буду грязно ругаться светлыми словами.
Не первый раз отрубаются функции мода. Через евму я проверил, выполняется часть инструкций, а часть пропускается!

Дело идёт так, играешь и всё ок-но...Сохраняешься, грузишься. Выходишь из героев. Загружаешь любой сейв, а они все битвые и часть поций НЕ РАБОТАЕТ! И это без каких либо сторонних модулей. Битые сейвы послал бы ZVS, так ведь они весь мод за собой потянут sad.gif sad.gif sad.gif

СОВЕТ: Старайтесь не пользоваться отключением ошибок! UN:P904/0!

Приер, отключаю ошибки и беру стёк под позицией курсора. Если курсор вне поля, должно вернуться -1. Всё ок, всё работает. После боя верный друг - Access Vioation. ЗАменяюна проверенные комбинации и оно пропадает. Использование P904 может затереть важный код или переменную во время "рисковых" команд, а затем думай, почему игра время от времени вылетает.
Demiurg
Я не очень понимаю, зачем тебе понадобилось отключение ошибок? Объясни, пожалуйста, что ты хочешь сделать?
!!MM:D или !!CM:P дают нам позицию.
!!BU:D или !!BU:E в зависимости от состояния стека возвращают нам его номер.
Sonic Son'edit
!!MM:S критует время от времени, причины не известны.
100% вылет если использовать в нулевой фазе битвы.

Кстати, что это за команда такая - !!DL:A ? о.О
У мну в ЕРМХелпе такого нету >.<
Мну пропустил новую версию ERM help или есть недокументированные команды ?
DracoLich
Цитата
!!MM:S критует время от времени, причины не известны.
100% вылет если использовать в нулевой фазе битвы.

Так ведь сказано же в хелпе, что в нулвой фазе нельзя проводить какие-либо сообщения/диалоги и т.п. Помойму, работают только настройки монстров...
Цитата
Кстати, что это за команда такая - !!DL:A ?

См. Торнамент Едишн
Sonic Son'edit
Цитата
Так ведь сказано же в хелпе, что в нулвой фазе нельзя проводить какие-либо сообщения/диалоги и т.п. Помойму, работают только настройки монстров...

У мну ни черта не сказано о.О
Какая версия хелпа последняя ?
...
всё, скачал последнюю )


Цитата
См. Торнамент Едишн

*смотрит*
где можно прочитать о всех нововведениях фиксах и новых фишках ТЕ ?
Berserker
//Я не очень понимаю, зачем тебе понадобилось отключение //ошибок? Объясни, пожалуйста, что ты хочешь сделать?
//!!MM:D или !!CM:P дают нам позицию.
//!!BU:D или !!BU:E в зависимости от состояния стека возвращают нам //его номер.

Оно мне часто нужно. Пример:

1) Получение адреса хекса под курсором, что возвратит? А что хочешь, -1, -2, 0, даже на некоторых нормальных хексах -1. Можно проверить диапазоном, но не всегда удобно.

2) Герой щёлкает на карте приключений. Где? Рискнёш юзать CM? Получишь ошибку, если щелчок на кнопке. А 0 возвращается в очень многих случаях, вот и думай.

3) Обход монстров в битве.

!!BMx , аааа ЕРМ грязно ругается, неверен Х! Вот я и хочу знать, есть монстр с таким number или нет. Юзая технику отключени и проверки ошибок можно сделать много большее.

4) Как ты думаешь, что возвратит тебе BG:Q BG:N? Явно не номер и текущую сторону. Чтобы оно возвратило это, нужно чтобы триггер !?BG выполнился, а я в Фениксе практикую псевдо заклы, наведение курсора, определение текущего монстра, анимация и прочее. Как я могу это сдлеать, если ни одна боевая команда не скажет мне, кто и что сейчас ходит?

P.S В последнем случае я нашёл оригинальное решение, что позволит исправить в последней версии серию багов. smile.gif
Sonic Son'edit
А есть команда изменяющая вид (только внешний облик) отряда на поле битвы ?

З.Ы.
использовал BG далеко не только в !?BG тригере - !?CM, !?MM и ещё нескольких. Работало. Раньше во всяком случае.
Berserker
Знания ЕРМ и игры приходят не сразу. Каждый раз открываешь новые моменты. Сделай так, что комп напал на втоего героя и поставь свой BG:Q?y1 на !?CM4 и убедишься.
Sonic Son'edit
ммм ну в этом случае оно и не должно работать, как ты себе это представляешь ? )
Я работал через # отряда - всё было ок )
т.е. BG:N? и далее BM )
Demiurg
Цитата(Berserker @ 05 Aug 2007, 03:20)
1) Получение адреса хекса под курсором, что возвратит? А что хочешь, -1, -2, 0, даже на некоторых нормальных хексах -1.  Можно проверить диапазоном, но не всегда удобно.

Номер гекса всегда проверяю диапазоном, как и номер отряда.

Цитата
2) Герой щёлкает на карте приключений. Где? Рискнёш  юзать CM? Получишь ошибку, если щелчок на кнопке. А 0 возвращается в очень многих случаях, вот и думай.

Юзаю CM, проблем ни с какими кнопками не встречал.

Цитата
3) Обход монстров  в битве.

!!BMx , аааа ЕРМ грязно ругается, неверен Х! Вот я и хочу знать, есть монстр с таким number или нет. Юзая технику отключени и проверки ошибок можно сделать много большее.

Узнать точно, есть ли монстер, на данный момент мне не представляется возможным. Просто проверяю диапазон и надеюсь на лучшее. Для живых монстров делаю:
Код
!!FU|y1<0/y1>41:E;
!!BMy1:P?y2;
!!FU|y2<=0/y2>186:E;
!!BU:Ey2/?y3;
!!FU&y1<>y3:E;


Цитата
4) Как ты думаешь, что возвратит тебе  BG:Q BG:N? Явно не номер и текущую сторону. Чтобы оно возвратило это, нужно чтобы триггер  !?BG выполнился, а я в Фениксе практикую псевдо заклы, наведение курсора, определение текущего монстра, анимация и прочее. Как я могу это сдлеать, если ни одна боевая команда не скажет мне, кто и что сейчас ходит?

Ты, наверное, имеешь ввиду проблему первого хода. Ибо перед самым первым ходом в битве нет триггера !?BG1 и ничего с этим монстром сделать нельзя.
Цитата
P.S В последнем случае я нашёл оригинальное решение, что позволит исправить в последней версии серию багов. smile.gif

Оригинальное решение в студию!
Berserker
1) Демиург и Соник, ваши возражения не принемаются. Я тестирую скрипты не один день, а уже сотни часов и если попросите, напишу пару примеров, где будет неверная информация или выдаваться ошибка по всем указанным мною пунктам. Не впервые.

А вот решение:

!!BG:A0....
С этого момента вся BG инфа обновлена и правильно установлена.
Всё гениальное просто...
Sonic Son'edit
ммм остановка действий отряда о.О
на шаманизм смахивает >.<
ещё раз повторю - у меня всё работало. Посмотри 51, там есть пара примеров.

Добавлено ([mergetime]1186337277[/mergetime]):
ммм...возможно какнибудь сменить внешний вид отряда ? Создание другого отряда и изменение типа не пойдёт - я хочу изменить внешний облик коммандиров, воссоздать коммандира нереально.
Berserker
Что смотреть??? Ты пробовал брать BA:Q N при атаке тобой противника? Если через дизассемблер не проверяешь, когда обновляются значения, то сделай пару тестов. Завтра будут тебе два рабочих примера. Точнее второй - Эксу.

Добавлено ([mergetime]1186343570[/mergetime]):
Если бы знал возможности ЕРМ и игры, то таких вопросов:

//ммм...возможно какнибудь сменить внешний вид отряда ? Создание другого отряда и изменение типа не пойдёт - я хочу изменить внешний облик коммандиров, воссоздать коммандира нереально.//

...не задавал бы. Нет такой возможности.
Sonic Son'edit
Код
!?MF1&v7185=1;

!!MF:F?v9063 N?v9217 W?v9255;
!!BG&v9255<>2:N?v9048 E?v9047 A?v9220;            не пытайтесь разобраться в этой хренатене.
!!BMv9048&v9255<>2/v9220<>1:I?v9051 P?v9247;
!!BMv9047&v9255<>2/v9220<>1:P?v9248;
!!BU&v9255<>2/v9220<>1:Ev9248/?v9249;
!!BU&v9255<>2/v9220<>1:Ev9247/?v9250;
!!FU24047&v9249>-1/v9250>-1/v9255<>2/v9220<>1:P; debug =)


!?FU24047&v7185=1;
!!IF&v9047=v9217/v9246=1:M^v9047=v9217 , side is %V9051^;    <--debug message
!!IF&v9048=v9217/v9246=1:M^v9048=v9217 , side is %V9051^;    <--debug message
!!BMv9048&v9047=v9217:T?v9050;
!!BMv9047&v9048=v9217:T?v9050;
!!VRv9195&v9050>173/v9050<192/v9051=0/v9048=v9217:Sv7085;
!!VRv9195&v9050>173/v9050<192/v9051=1/v9048=v9217:Sv7083;
!!VRv9195&v9050>173/v9050<192/v9051=1/v9047=v9217:Sv7085;
!!VRv9195&v9050>173/v9050<192/v9051=0/v9047=v9217:Sv7083;
!!HEv9195&v9195>-1:Ed/?v9214 B0/?z954;                 <--get  level in v9214, name in z954
!!COv9195&v9195>-1:N?z955 T?v9049;
!!VRv9049&v9195>-1:Sv9049 +174;
!!VRv9049&v9195=v7085:Sv9049 +9;
!!IF&v9246=1:M^ходок(v9048) = %V9048  получающий = %V9217(v9217)  цель = %V9047(v9047) сторона = %V9051
hero = %V9195 type = %V9050 need type = %V9049^;    <--debug message
!!FU24028&v9049=v9050:P;


!?FU24028&v7185=1;

!!FU24028&v9049<>v9050:E;     debug

!!IF&v9195>-1:Wv9195;


!!HEv9195&v9195>-1:X?v9223/?v9224/?v9225/?v9226/?v9227/?v9228/?v9229;
!!VRv9223&v9195<0:C-1/-1/-1/-1/-1/-1/-1;

!!IF&v9246=1:M^action = %V9220

specialization :
%V9223
%V9224
%V9225
%V9226
%V9227
%V9228
%V9229

bind = %W95^;     <--debug message



**прямо перед нанесением повреждения.


; DEATH BLOW (originally - tamika, dread knigts)

!?FU24028&v9220=6/v9223=4/v9224=66/w95=4/v7185=1;
!!VRv9213:S0;
!!VRv9213:R100;
!!VRv9215:Sv9214 *2 +30;
!!VRv9059&v9215>=v9213:Sv9214 *5 +150;
!!IF&v9215>=v9213/v9246=1:M^RND = %V9213 HERND = %V9215 dam = %V9063 modificator = %V9059%
hero = %V9195 lvl = %V9214^;    debug message                              v9059 - damage percent modificator
!!VRv9063&v9215>=v9213:Sv9063 *v9059 :100;                           modify damage
!!IF&v9215>=v9213/v9246=1:M^ moddam = %V9063 ^;     debug message
!!VRz960&v9215>=v9213:S^Благодаря специализации героя (%Z954)
%Z955 наносит на {%V9059%} урона.^;
!!MM&v9215>=v9213:Sz960;
!!BMv9047&v9217=v9047/v9215>=v9213:V73;
!!BMv9048&v9217=v9048/v9215>=v9213:V73;
!!MF&v9215>=v9213:Fv9063;
!!VRz960&v9215>=v9213:S^{%Z955 наносит %V9063 урона}.
Послание ниже - глюк.^;
!!MM&v9215>=v9213:Sz960;





; СОСАЛЬЩИКИ (originally - vokail, vampires lords)

!?FU24028&v9220=6/v9223=4/v9224=62/w95=4/v9047=v9217/v7185=1;
!!BMv9048:H?v9221;
!!BMv9048:L?v9238;
!!IF&v9246=1:M^left = %V9238^;    <--debug message
!!VRv9059:Sv9214 *4 +20;                 drained life modificator
!!VRv9223:Sv9063  *v9059 :100;
!!IF&v9246=1:M^drained = %V9223^;    <--debug message
!!VRv9238:Sv9238 -v9223;
!!VRv9238&v9238<0:S0;
!!VRv9223&v9238<0:S0;
!!IF&v9246=1:M^left now = %V9238^;    <--debug message
!!VRz960:S^Благодаря специализации героя (%Z954)
%Z955 высасывает {%V9059%} от урона нанесённого врагу.^;
!!MM:Sz960;
!!BMv9048:Lv9238;
!!BMv9048:V74;
!!VRz960&v9238=0:S^{%Z955 восстанавливает жизнь до максимума !}.^;
!!VRz960&v9238<>0:S^{%Z955 восстанавливает %V9223 жизней}.^;
!!MM:Sz960;
!!VRv9235&v9235>1:Sv9235 -2;
!!VRv9235&v9235=1:Sv9235 -1;

!?FU24028&v9220=6/v9223=4/v9224=62/w95=4/v7185=1;
!!BMv9047:H?v9221;
!!BMv9047:L?v9238;
!!VRv9239&v9195>-1:Sv9223;
!!VRv9240&v9195>-1:Sv9224;


!?BG1&v9239=4/v9240=62/v7185=1;
!!IF&v9246=1:M^left = %V9238^;    <--debug message
!!VRv9059:Sv9214 *4 +20;                 drained life modificator
!!VRv9223:Sv9063  *v9059 :100;
!!IF&v9246=1:M^drained = %V9223^;    <--debug message
!!VRv9238:Sv9238 -v9223;
!!VRv9238&v9238<0:S0;
!!VRv9223&v9238<0:S0;
!!IF&v9246=1:M^left now = %V9238^;    <--debug message
!!VRz960:S^Благодаря специализации героя (%Z954)
%Z955 высасывает {%V9059%} от урона нанесённого врагу.^;
!!MM:Sz960;
!!BMv9047:V74;
!!BMv9047:Lv9238;
!!VRz960:S^{%Z955 восстанавливает %V9223 жизней}.^;
!!MM:Sz960;
!!VRv9239&v9239>1:Sv9239 -2;
!!VRv9239&v9239=1:Sv9239 -1;

вырезка из 51.
Работает как видишь )
Правда если на одном из юнитов будет огненный щит или иное отражение урона то вот тогда косяки вплоть до отрубания скрипта >.< и покачто хз как с этим бороться (

Цитата
не задавал бы. Нет такой возможности.

знаю, что нет ) потому и спрашиваю )
Но ведь UN:C работает с памятью ? В теории можно же записать в участок, где хранится информация о анимации юнита другое значение. Правда хз какие будут последствия ))
Berserker
Можно через DLL бы сделать, но это больше Славе работа. Я пробовал динамически дефы менять, заклов, но они кэшируются, так что изменение видно лишь на следующий ход sad.gif

По поводу кода, всё много проще.

1) создай карту и поставь двух героев.
Компу дай огромную армию копейщиков и себе 1.
Себе дай экс Лидертсво, врагу базовое.

2)

Код такой:

!?CM4;
!!BG:Q?y1;
!!BHy1:N?y2;
!!HEy2:S6/?y3;
!!IF:M^%Y3^;

Пропусти ход, комп атакует, щелкни мышкой.
Покажет 1, то есть базовое лидертсво. Информация левого соперника, то есть компа. Также неверна будет и BG:N
Sonic Son'edit
хмм, попробую, но помню что BG:N работала всегда =\
На этом и основана большая часть 51-го скрипта.
В таком случае остаётся только запоминать в v-переменную № текущего отряда или сторону в начала каждого хода, и вспоминать при CM =\
Возможно у меня код работает, т.к. всё таки !?MF относится к триггерам поле боя. !?CM возможно изначально для этого не создавалось, вот и...

Цитата
Можно через DLL бы сделать, но это больше Славе работа. Я пробовал динамически дефы менять, заклов, но они кэшируются, так что изменение видно лишь на следующий ход sad.gif

Ну в теории они же поменяются сразу, если изменения сделать в нулевую фазу ? Мне то надо лишь 1 раз в начале боя сменить анимацию )
Правда у меня нет идей о диапазоне адресов анимации отрядов на поле боя...
Berserker
Нет, через !!UN:C однозначно не выйдет. Хотя идея есть...времени тестить нет. Я как-то менял данные одного закла в лоде (уже загруженном) на другой, может и монстров так подменить надо. Смысл такой, например идёт имя монстра + смещение до его анимации, а если обменять смещения? Тогда вместо дефа троглодита загрузится, к примеру, чёрный дракон. Это наилементарнейший подход и он возможно прокатит.

Добавлено ([mergetime]1186425114[/mergetime]):
все данные BG будут неверны.
Суть в том, что при щелчке BG триггер ещё не выполнилсяя и инфа по последнему походившему монстру содержится.

!!BG:A0 в триггере щелчка ничего не сделает, кроме обновления инфы. Это верный подход, который позволит избежать многих непонятных багов. (в моде не ясно было, отчего иногда странные вещи Рука Смерти выкидывает, а ведь именно из-за этого BG)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.