backs, переделал скрипт для артефактов.
ZVSE
!#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).
!?BR&v997>0/v997<20;В каждого раунда со 2-ого по 19-ый...
!!VRv9303:S7;Устанавливаем контрольную переменную в 7 (т. е. 1-й, 2-й и 3-ий биты в 1).
!?FU77007;(Триггер Эры) перед действием существа...
!!SN:X?v2;Считываем номер ходящего стека.
!!SN:Xv2;Записываем номер ходящего стека.
!!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;Если ни одного, выходим из триггера.
!!VRy-10:Sv9303&4;Проверяем 3-й бит (первого раунда) контрольной переменной на 0.
!!VRy-8:Sy-7*21;Вычисляем номер первого стека ходящей стороны.
!!VRy-9:Sy-7*21+20;Вычисляем номер последнего стека ходящей стороны.
!!DO10050/y-8/y-9/1&y-10<>0:P27/?y-3;Если это не первый раунд (3-й бит контрольной переменной равен 1), запускаем цикл, проходящийся по всем стекам стороны и проверяющий, наложено ли на них заклинание (номер - первый параметр).
!!DO10050/y-8/y-9/1&y-10<>0/y-3=0:P53/?y-3;Если это не первый раунд (3-й бит контрольной переменной равен 1) и ещё не найдено существо, требующее нового наложения заклинаний, запускаем цикл, проходящийся по всем стекам стороны и проверяющий, наложено ли на них заклинание (номер - первый параметр).
!!FU&y-10<>0/y-3=0:E;Если это не первый раунд и контрольная переменная равна 0 (заклинания на всех наложены), выходим из триггера.
!!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;Если у героя не было книг заклинаний, отнимаем ту, которую дали.
!!DO10051/y-8/y-9/1:P27;Запускаем цикл, проходящийся по всем стекам стороны и устанавливающий длительность заклинания (номер - параметр).
!!DO10051/y-8/y-9/1:P53;Запускаем цикл, проходящийся по всем стекам стороны и устанавливающий длительность заклинания (номер - параметр).
;Функции контроля длительности заклинаний на стеках.
!?FU10050;Функция проверки длительности заклинания на стеке.
!!VRx2:S0;Сбрасываем контрольную переменную.
!!BMx16:N?y1;Считываем количество существ в стеке.
!!FU&y1<=0:E;Если в стеке нет существ, завершаем функцию.
!!BMx16:Gx1/?y1/d;Считываем длительность заклинания на стеке.
!!VRx2&y1<=0:S1;Если на стеке заклинания, устанавливаем контрольную переменную в 1.
!!VRx16&y1<=0:S42;Если на стеке нет заклинания, выходим из цикла.
!?FU10051;Функция установки длительности заклинания на стеке.
!!BMx16:N?y1;Считываем количество существ в стеке.
!!FU&y1<=0:E;Если в стеке нет существ, завершаем функцию.
!!VRy1:S20-v997;Вычисляем длительность заклинания.
!!BMx16:Gx1/y1/d;Продлеваем заклинание.
Отличия: в 2 раза короче, более универсальный (проще сделать на его основе скрипт для других артов, надеюсь, по крайней мере

), если заклинание снято, оно накладывается заново не с начала раунда, а с первого хода своего существа в раунде.
Требуется Эра, без неё, скрипт не будет работать, будет только портить v9303

. Нельзя использовать переменную v9303 во время битвы (в остальное время - сколько угодно, но после битвы её значение будет испорчено).
Если убрать следующие триггеры (вместе с их ресейверами):
!?BR&v997>0/v997<20; и !?FU10050;
то наложение заклинания от артефакта будет проходить абсолютно так же, как и у артов типа Альянса ангелов (если не убирать, то в начале хода первого своего существа в каждом раунде со 2-ого по 19-й будет проверяться, не сняты ли заклинания с существ и, если сняты, будут восстанавливаться).
Теперь функции проверяют только по одному заклу и их, соответственно нужно вызывать по 2 раза. Они остались универсальными - копировать их не надо.
Вычисление первого и последнего проверяемого стека для дружественных заклов (так и в скрипте):
Code:
!!VRy-8:Sy-7*21;Вычисляем номер первого стека ходящей стороны.
!!VRy-9:Sy-7*21+20;Вычисляем номер последнего стека ходящей стороны.
Вычисление первого и последнего проверяемого стека для проклинающих заклов:
Code:
!!VRy-8:S1-y-7;Вычисление номера не ходящей стороны.
!!VRy-8:Sy-8*21;Вычисляем номер первого стека не ходящей стороны.
!!VRy-9:S1-y-7;Вычисление номера не ходящей стороны.
!!VRy-9:Sy-9*21+20;Вычисляем номер последнего стека не ходящей стороны.
Если надо накладывать и положительное и отрицательное заклинание, по одному из этих вычислений придётся вставить перед каждым циклом.
Копировать все триггеры (кроме функций) для других артов теперь должно быть можно спокойно - только либо придётся заводить для каждого арта свою v-переменную, либо удалить !!VRv9303-y-7; из всех триггеров, кроме последнего.