!?FU10050;
!!BMx16:N?y1;
!!VRy4:S20 -v997;
!!FU&y1<=0:E;
!!BMx16:G27/?y1/?y2;
!!BMx16&y1<=0|y2<3:M27/y4/3;
!!BMx16:G53/?y1/?y2;
!!BMx16&y1<=0|y2<3:M53/y4/3;
так вернее
Так backs-у надо чтобы именно только в первые 20 раундов закл делался?
Значит, я не так понял, прошу прощения.
Тогда второй вариант точно не катит.
ну или я не так понял.
сам разберется ^_^
Да, ребят, воистину бесплатный сыр тока в мышеловке. Связался со знакомым кодером, обещал за пару дней разобраться и помочь, если сам не допру, пока он разбирается. Говорит: "Должен будешь)))". Но моя задумка заинтересовала, ибо сам иногда любит погамать в героев, а почти все существующие сборные артефакты тяжело и долго собирать, под конец игры они уже и ни к чему, а некоторые и вовсе ему не нужны (Плащ Короля Нечисти или Шляпа Адмирала, играет в основном за Оплот или Темницу, и карты создает без воды) Сказал тока, что не стоит перебарщивать с эффектами, а то уже читерством попахивать будет, а для этого есть более простые решения, чит-коды или артмани. Так, приятное и неожиданное дополнение, бонус))
Уважаемый Sav, прощу прощения за оскорбительные слова, погорячился. Совсем уж я загнался с этим кодом, не получается и все тут. И ктстати, предложенный вами код вешает игру в начале боя в черный экран. Но если игра запущена в оконном режиме, и после зависания по ней повозить любым другим окном, то становится видно всё, текст ошибки и даже кнопки да\нет удается понажимать, и игра или вылетает, или приходится снова любым окном по окну игры ездить, чтобы следующий текст ошибки увидеть и снова Да нажать и т.д., пока бой не начнется)))
Уважаемый DracoLich, действительно, тот форум очень полезный, там прямо в первом посте той ветки форума, куда выводит ваша ссылка, есть пример кода (с комментариями), как артефакт должен давать заклинания и еще кое-что. Но он тоже не работает. Там если триггер в начало функции не добавить, то совсем не работает скрипт, как будто и нет его. А добавляешь триггер, то в любом случае работает не так, либо заклинание уже просто есть, без видимого эффекта наложения, либо на каждое действие стека заклинание накладывается на своих (если колдует герой), или ещё и на врагов (если колдуют юниты).
Прибавление к первичным навыкам действительно выполняется просто, и работает как надо, это и у меня самого получилось. Но с заклинаниями все равно не получилось...
Я, конечно, и дальше буду разбираться, но буду надеяться на знакомого. Благодарю всех откликнувшихся. Извиняюсь за непочтительность.
Quote:И
ктстати , предложенный вами код вешает игру в
начале боя в черный экран .
Ничего неожиданного, не тестил же.

Скорее всего, перепишу его сегодня и вставлю комментарии - может, это поможет тебе разобраться.
Вобщем, описание комбо-артефакта у меня такое:
Code:
ZVSE
!!UN:A49/5/13; говорим, что арт №49 будет частью 13 комбоарта
!!UN:A50/5/13; -"- №50 -"-
!!UN:A51/5/13; -"- №51 -"-
!#UN:A13/156/49/50/51; создаем сам 13ый комбоарт
!#UN:A156/1/50000; его цена
!#UN:A156/2/9; слот, где будет стоять
!#UN:A156/3/16; класс арта
!#UN:A156/4/13; собственно номер комбоарта
!#UN:A156/5/-1; не является частью комбоарта, ибо сам таковой
!#UN:A156/8/1; вроде б как должен давать заклинание
!#VRz385:S^Флаг Героев^; даем свое имя
!#UN:A156/9/z385; если спрашивают - выдаем это имя
!#VRz386:S^Флаг Героев.
Артефакт должен давать всякие там заклинания. Но я не могу их прикрутить^; даем свое описание
!#UN:A156/10/z386; если спрашивают - выдаем это описание
Это все работает, артефакт собирается. Потом осталось только запретить его появление на карте.
После этого я вставлял предоженные вами коды, сначала взял весь код от
Sav, все равно черный экран при начале боя, после "зачистки" другим окном нажимаем Да, видим ошибку "герой читает заклинания, но они не действуют", в случае если герой без книги, но тогда можно донажимать до начала боя, и тогда видим, что заклинания висят на юнитах. А если у героя книга есть, то в начале боя выскакивает trace details, и после нажатия ОК игра вылетает.
Если заменяем функцию
Sav на функцию от
DracoLich, то в начале боя выскакивает ошибка синтаксиса:
"HE$"-cannot find hero (out of range), потом сообщение с частью кода скрипта. потом еще сообщение со строкой A2/156/?y-1; и запускается бой, видим, что заклинания навешены...
Вобщем, у меня сейчас 3 варианта написания скрипта, ни один не работает, и я пытаюсь из всех трех собрать один рабочий, пытаясь понять, почему ж не работает-то...
Я почти написал уже, осталась только пара моментов и комментарии. И 20 раундов, и с анимацией, и даже если нет книги магии.
backs Wrote:Потом осталось только запретить его появление на карте.
Думаю, если не включать скрипт "Знамя полководца у ворот каждого города", с этим всё будет нормально.

Готово.
!#UN:A13/156/49/50/51;Устанавливаем сборный артефакт и его части.
!#UN:A156/1/50000;Устанавливаем стоимость сборного артефакта.
!#UN:A156/2/9;Устанавливаем позицию для сборного артефакта.
!#UN:A156/3/16;Устанавливаем класс сборного артефакта.
!#UN:A156/4/13;Устанавливаем номер сборного артефакта.
!#UN:A156/5/-1;Сбрасываем принадлежность сборному артефакту.
!#UN:A156/8/0;Сбрасываем получение заклинаний от сборного артефакта.
!#UN:A156/9/0;Сбрасываем имя сборного артефакта на стандартное.
!#VRz181:S^В начале второго раунда накладывает Щит и Ускорение на все союзные войска и восстанавливает их каждый раунд. Эффект пропадает после 20 раунда.^;Подготавливаем переменную с описанием сборного артефакта.
!#UN:A156/10/181;Устанавливаем описание сборного артефакта.
!?BR&v997>=1/v997<=19;В начале каждого раунда между вторым и девятнадцатым (атакующий)...
!!BA:H0/?y-1;Считываем номер атакующего героя.
!!FU&y-1<=-2:E;Если у атакующего нет героя, выходим из триггера.
!!HEy-1:A2/156/d/?y-2;Проверяем, сколько на героя надето артефактов №156.
!!FU&y-2<=0:E;Если ни одного, выходим из триггера.
!!DO10050/0/20/1:P27/53/?y-3;Запускаем цикл, проходящийся по всем стекам стороны и проверяющий, наложены ли на них два заклинания (номера - первый и второй параметры).
!!FU&y-3=0:E;Если контрольная переменная равна 0 (заклинания на всех наложены), выходим из триггера.
!!HEy-1:A2/0/d/?y-4;Проверяем, сколько на героя надето книг заклинаний.
!!HEy-1&y-4=0:A4/0;Если ни одной, даём книгу заклинаний герою.
!!BH0:M?y-5;Считываем возможность героя колдовать.
!!HEy-1:I?y-6/1;Считываем количество маны у героя (без обновления экрана - иначе будет видна строка ресурсов).
!!BH0:C27/0/3/0;Колдуем щит героем.
!!BH0:C53/0/3/0;Колдуем ускорение героем.
!!BH0:My-5;Восстанавливаем возможность героя колдовать.
!!HEy-1:Iy-6/1;Восстанавливаем ману героя (без обновления).
!!HEy-1&y-4=0:A3/0/1/1;Если у героя не было книг заклинаний, отнимаем ту, которую дали.
!!DO10051/0/20/1:P27/53;Запускаем цикл, проходящийся по всем стекам стороны и устанавливающий длительность двух заклинаний (номера - первый и второй параметры).
!?BR&v997>=1/v997<=19;В начале каждого раунда между вторым и девятнадцатым (защищающийся)...
!!BA:H1/?y-1;Считываем номер защищающегося героя.
!!FU&y-1<=-2:E;Если у защищающегося нет героя, выходим из триггера.
!!HEy-1:A2/156/d/?y-2;Проверяем, сколько на героя надето артефактов №156.
!!FU&y-2<=0:E;Если ни одного, выходим из триггера.
!!DO10050/21/41/1:P27/53/?y-3;Запускаем цикл, проходящийся по всем стекам стороны и проверяющий, наложены ли на них два заклинания (номера - первый и второй параметры).
!!FU&y-3=0:E;Если контрольная переменная равна 0 (заклинания на всех наложены), выходим из триггера.
!!HEy-1:A2/0/d/?y-4;Проверяем, сколько на героя надето книг заклинаний.
!!HEy-1&y-4=0:A4/0;Если ни одной, даём книгу заклинаний герою.
!!BH0:M?y-5;Считываем возможность героя колдовать.
!!HEy-1:I?y-6/1;Считываем количество маны у героя (без обновления).
!!BH1:C27/0/3/0;Колдуем щит героем.
!!BH1:C53/0/3/0;Колдуем ускорение героем.
!!BH0:My-5;Восстанавливаем возможность героя колдовать.
!!HEy-1:Iy-6/1;Восстанавливаем ману героя (без обновления).
!!HEy-1&y-4=0:A3/0/1/1;Если у героя не было книг заклинаний, отнимаем ту, которую дали.
!!DO10051/21/41/1:P27/53;Запускаем цикл, проходящийся по всем стекам стороны и устанавливающий длительность заклинаний (номера - первый и второй параметры).
;Функции длительности двух заклинаний на стеках.
!?FU10050;Функция проверки длительности двух заклинаний на стеке.
!!VRx3:S0;Сбрасываем контрольную переменную.
!!BMx16:N?y1;Считываем количество существ в стеке.
!!FU&y1<=0:E;Если в стеке нет существ, завершаем функцию.
!!BMx16:Gx1/?y1/d;Считываем длительность первого заклинания на стеке.
!!BMx16:Gx2/?y2/d;Считываем длительность второго заклинания на стеке.
!!VRx3&y1<=0|y2<=0:S1;Если на стеке нет одного из двух заклинаний, устанавливаем контрольную переменную в 1.
!!VRx16&y1<=0|y2<=0:S42;Если на стеке нет одного из двух заклинаний, выходим из цикла.
!?FU10051;Функция установки длительности двух заклинаний на стеке.
!!BMx16:N?y1;Считываем количество существ в стеке.
!!FU&y1<=0:E;Если в стеке нет существ, завершаем функцию.
!!VRy1:S20-v997;Вычисляем длительность заклинаний.
!!BMx16:Gx1/y1/d;Продлеваем первое заклинание.
!!BMx16:Gx2/y1/d;Продлеваем второе заклинание.
Заклы накладываются на 20 раундов и восстанавливаются каждый из первых 19 раундов, такой длительностью, чтобы закончиться в 20-й раунд.
Единственная проблема - невозможно наложить заклы в 1-й раунд (вернее, возможно, но без анимации и с игнорированием иммунитетов и т. п.), поэтому они накладываются только со 2-ого раунда.
Благодарю за проделанную работу, уважаемый Sav, а особенно за комментарии, получилось целое пособие для начинающего. Я соседа своего к работе подключил, у нас в принципе похожее же получалось, тока проверок разных гораааааздо меньше. Теперь сделать остальные восемь артефактов - пара пустяков! Надо тока обсудить необходимый эффект, получаемый от артов)))
То есть я правильно понимаю, что с первого раунда с помощью скриптов невозможно наложить заклинания (с экспертной анимацией, не тратя маны, даже если нет книги, и если есть тактика у любого героя - то после неё)? Точно также, у Альянса Ангелов и у Доспехов Проклятого?
Ноормально с первого раунда нельзя (не будет анимации и будут игнорироваться иммунитеты у драконов, а вот с маной и книгой проблем не будет).
У меня есть идейка, как это по-особому реализовать - извращение, конечно -, но может получиться, сегодня попробую.
Всё, нашёл способ, как это реализовать. Правда, только для Эры.
Событие До Действия + первый раунд?
Да, на этой основе. И это, на самом деле, даже лучше, чем просто в начале первого раунда - Альянс ангелов, например, накладывает молитву именно перед первым ходом стека своей стороны.
Вот, наконец, доделанный скрипт.
!#UN:A13/156/49/50/51;Устанавливаем сборный артефакт и его части.
!#UN:A156/1/50000;Устанавливаем стоимость сборного артефакта.
!#UN:A156/2/9;Устанавливаем позицию для сборного артефакта.
!#UN:A156/3/16;Устанавливаем класс сборного артефакта.
!#UN:A156/4/13;Устанавливаем номер сборного артефакта.
!#UN:A156/5/-1;Сбрасываем принадлежность сборному артефакту.
!#UN:A156/8/0;Сбрасываем получение заклинаний от сборного артефакта.
!#UN:A156/9/0;Сбрасываем имя сборного артефакта на стандартное.
!#VRz181:S^В начале боя накладывает Щит и Ускорение на все войска героя и восстанавливает их каждый раунд. Эффект пропадает после 20 раунда.^;Подготавливаем переменную с описанием сборного артефакта.
!#UN:A156/10/181;Устанавливаем описание сборного артефакта.
!?BA0;В начале битвы...
!!VRv9303:S0;Сбрасываем контрольную переменную.
!?BR&v997=0;В начале первого раунда (после тактической фазы)...
!!VRv9303:S3;Устанавливаем контрольную переменную в 3 (т. е. 1-й и 2-й биты в 1).
!?FU77007;(Триггер Эры) перед действием существа...
!!SN:X?v2;Считываем номер ходящего стека.
!!VRy-7:Sv2:21;Вычисляем номер ходящей стороны.
!!VRy-7:+1;Вычисляем номер бита контрольной переменной для ходящей стороны.
!!VRy-1:Sv9303&y-7;Проверяем соответствующий ходящей стороне бит контрольной переменной на 0.
!!FU&y-1=0:E;Если это не первое действие атакующей стороны нетактической фазы боя (т. е. соответствующий ходящей стороне бит контрольной переменной равен 0), выходим из триггера.
!!VRv9303:-y-7;Обнуляем соответствующий ходящей стороне бит контрольной переменной.
!!VRy-7:-1;Возвращаем номер ходящей стороны.
!!BA:Hy-7/?y-1;Считываем номер героя ходящей стороны.
!!FU&y-1<=-2:E;Если у ходящей стороны нет героя, выходим из триггера.
!!HEy-1:A2/156/d/?y-2;Проверяем, сколько на героя надето артефактов №156.
!!FU&y-2<=0:E;Если ни одного, выходим из триггера.
!!HEy-1:A2/0/d/?y-4;Проверяем, сколько на героя надето книг заклинаний.
!!HEy-1&y-4=0:A4/0;Если ни одной, даём книгу заклинаний герою.
!!BHy-7:M?y-5;Считываем возможность героя колдовать.
!!HEy-1:I?y-6/1;Считываем количество маны у героя (без обновления экрана - иначе будет видна строка ресурсов).
!!BHy-7:C27/0/3/0;Колдуем щит героем.
!!BHy-7:C53/0/3/0;Колдуем ускорение героем.
!!BHy-7:My-5;Восстанавливаем возможность героя колдовать.
!!HEy-1:Iy-6/1;Восстанавливаем ману героя (без обновления).
!!HEy-1&y-4=0:A3/0/1/1;Если у героя не было книг заклинаний, отнимаем ту, которую дали.
!!VRy-8:Sy-7*21;Вычисляем номер первого стека ходящей стороны.
!!VRy-9:Sy-7*21+20;Вычисляем номер последнего стека ходящей стороны.
!!DO10051/y-8/y-9/1:P27/53;Запускаем цикл, проходящийся по всем стекам стороны и устанавливающий длительность двух заклинаний (номера - первый и второй параметры).
!?BR&v997>=1/v997<=19;В начале каждого раунда между вторым и девятнадцатым (атакующий)...
!!BA:H0/?y-1;Считываем номер атакующего героя.
!!FU&y-1<=-2:E;Если у атакующего нет героя, выходим из триггера.
!!HEy-1:A2/156/d/?y-2;Проверяем, сколько на героя надето артефактов №156.
!!FU&y-2<=0:E;Если ни одного, выходим из триггера.
!!DO10050/0/20/1:P27/53/?y-3;Запускаем цикл, проходящийся по всем стекам стороны и проверяющий, наложены ли на них два заклинания (номера - первый и второй параметры).
!!FU&y-3=0:E;Если контрольная переменная равна 0 (заклинания на всех наложены), выходим из триггера.
!!HEy-1:A2/0/d/?y-4;Проверяем, сколько на героя надето книг заклинаний.
!!HEy-1&y-4=0:A4/0;Если ни одной, даём книгу заклинаний герою.
!!BH0:M?y-5;Считываем возможность героя колдовать.
!!HEy-1:I?y-6/1;Считываем количество маны у героя (без обновления экрана - иначе будет видна строка ресурсов).
!!BH0:C27/0/3/0;Колдуем щит героем.
!!BH0:C53/0/3/0;Колдуем ускорение героем.
!!BH0:My-5;Восстанавливаем возможность героя колдовать.
!!HEy-1:Iy-6/1;Восстанавливаем ману героя (без обновления).
!!HEy-1&y-4=0:A3/0/1/1;Если у героя не было книг заклинаний, отнимаем ту, которую дали.
!!DO10051/0/20/1:P27/53;Запускаем цикл, проходящийся по всем стекам стороны и устанавливающий длительность двух заклинаний (номера - первый и второй параметры).
!?BR&v997>=1/v997<=19;В начале каждого раунда между вторым и девятнадцатым (защищающийся)...
!!BA:H1/?y-1;Считываем номер защищающегося героя.
!!FU&y-1<=-2:E;Если у защищающегося нет героя, выходим из триггера.
!!HEy-1:A2/156/d/?y-2;Проверяем, сколько на героя надето артефактов №156.
!!FU&y-2<=0:E;Если ни одного, выходим из триггера.
!!DO10050/21/41/1:P27/53/?y-3;Запускаем цикл, проходящийся по всем стекам стороны и проверяющий, наложены ли на них два заклинания (номера - первый и второй параметры).
!!FU&y-3=0:E;Если контрольная переменная равна 0 (заклинания на всех наложены), выходим из триггера.
!!HEy-1:A2/0/d/?y-4;Проверяем, сколько на героя надето книг заклинаний.
!!HEy-1&y-4=0:A4/0;Если ни одной, даём книгу заклинаний герою.
!!BH0:M?y-5;Считываем возможность героя колдовать.
!!HEy-1:I?y-6/1;Считываем количество маны у героя (без обновления).
!!BH1:C27/0/3/0;Колдуем щит героем.
!!BH1:C53/0/3/0;Колдуем ускорение героем.
!!BH0:My-5;Восстанавливаем возможность героя колдовать.
!!HEy-1:Iy-6/1;Восстанавливаем ману героя (без обновления).
!!HEy-1&y-4=0:A3/0/1/1;Если у героя не было книг заклинаний, отнимаем ту, которую дали.
!!DO10051/21/41/1:P27/53;Запускаем цикл, проходящийся по всем стекам стороны и устанавливающий длительность заклинаний (номера - первый и второй параметры).
;Функции контроля длительности двух заклинаний на стеках.
!?FU10050;Функция проверки длительности двух заклинаний на стеке.
!!VRx3:S0;Сбрасываем контрольную переменную.
!!BMx16:N?y1;Считываем количество существ в стеке.
!!FU&y1<=0:E;Если в стеке нет существ, завершаем функцию.
!!BMx16:Gx1/?y1/d;Считываем длительность первого заклинания на стеке.
!!BMx16:Gx2/?y2/d;Считываем длительность второго заклинания на стеке.
!!VRx3&y1<=0|y2<=0:S1;Если на стеке нет одного из двух заклинаний, устанавливаем контрольную переменную в 1.
!!VRx16&y1<=0|y2<=0:S42;Если на стеке нет одного из двух заклинаний, выходим из цикла.
!?FU10051;Функция установки длительности двух заклинаний на стеке.
!!BMx16:N?y1;Считываем количество существ в стеке.
!!FU&y1<=0:E;Если в стеке нет существ, завершаем функцию.
!!VRy1:S20-v997;Вычисляем длительность заклинаний.
!!BMx16:Gx1/y1/d;Продлеваем первое заклинание.
!!BMx16:Gx2/y1/d;Продлеваем второе заклинание.
Требуется Эра, без неё, скорее всего, скрипт будет работать так же, как и прошлый - со второго раунда. Также нельзя использовать переменную v9303 во время битвы (в остальное время - сколько угодно, но после битвы её значение будет испорчено).
Если убрать следующие триггеры (вместе с их ресейверами):
!?BR&v997>=1/v997<=19; (оба) и !?FU10050;
то наложение заклинания от артефакта будет проходить абсолютно так же, как и у артов типа Альянса ангелов (если не убирать, то в начале каждого раунда со 2-ого по 19-й будет проверяться, не сняты ли заклинания с существ и, если сняты, будут восстанавливаться).
Sav, отличная реализация и документированность
