11. (Для Эры) добавление артефакту свойства наложения заклинаний в перед ходом первого стека своей стороны (как Альянс ангелов) + восстановление эффектов каждый раунд.
(http://wforum.heroes35.net/showthread.ph...2#pid54072)
ZVSE
ERMS_ScriptName=Art_spell
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=12.11(November).2010
ERMS_ScriptERMVersion=3.00
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedVariables=v9303;z181
ERMS_ScriptUsedFunctions=10050-10051
_WARNING_#1=IMPORTANT! This file is not in a plain text format. NEVER use any editor except ERM_S for making any kind of changes!
ERMS_PoweredBy=ERM Scripter v. 2004.10.5.945
!#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;Считываем номер ходящего стека. !!VRy7:Sv2:21;Вычисляем номер ходящей стороны. !!VRy7:+1;Вычисляем номер бита контрольной переменной для ходящей стороны. !!VRy1:Sv9303&y7;Проверяем соответствующий ходящей стороне бит контрольной переменной на 0. !!FU&y1=0:E;Если это не первое действие атакующей стороны нетактической фазы боя (т. е. соответствующий ходящей стороне бит контрольной переменной равен 0), выходим из триггера. !!VRv9303:-y7;Обнуляем соответствующий ходящей стороне бит контрольной переменной. !!VRy7:-1;Возвращаем номер ходящей стороны. !!BA:Hy7/?y1;Считываем номер героя ходящей стороны. !!FU&y1<=-2:E;Если у ходящей стороны нет героя, выходим из триггера. !!HEy1:A2/156/d/?y2;Проверяем, сколько на героя надето артефактов №156. !!FU&y2<=0:E;Если ни одного, выходим из триггера. !!VRy10:Sv9303&4;Проверяем 3-й бит (первого раунда) контрольной переменной на 0. !!VRy8:Sy7*21;Вычисляем номер первого стека ходящей стороны. !!VRy9:Sy7*21+20;Вычисляем номер последнего стека ходящей стороны. !!DO10050/y8/y9/1&y10<>0:P27/?y3;Если это не первый раунд (3-й бит контрольной переменной равен 1), запускаем цикл, проходящийся по всем стекам стороны и проверяющий, наложено ли на них заклинание (номер - первый параметр). !!DO10050/y8/y9/1&y10<>0/y3=0:P53/?y3;Если это не первый раунд (3-й бит контрольной переменной равен 1) и ещё не найдено существо, требующее нового наложения заклинаний, запускаем цикл, проходящийся по всем стекам стороны и проверяющий, наложено ли на них заклинание (номер - первый параметр). !!FU&y10<>0/y3=0:E;Если это не первый раунд и контрольная переменная равна 0 (заклинания на всех наложены), выходим из триггера. !!HEy1:A2/0/d/?y4;Проверяем, сколько на героя надето книг заклинаний. !!HEy1&y4=0:A4/0;Если ни одной, даём книгу заклинаний герою. !!BHy7:M?y5;Считываем возможность героя колдовать. !!HEy1:I?y6/1;Считываем количество маны у героя (без обновления экрана - иначе будет видна строка ресурсов). !!BHy7:C27/0/3/0;Колдуем щит героем. !!BHy7:C53/0/3/0;Колдуем ускорение героем. !!BHy7:My5;Восстанавливаем возможность героя колдовать. !!HEy1:Iy6/1;Восстанавливаем ману героя (без обновления). !!HEy1&y4=0:A3/0/1/1;Если у героя не было книг заклинаний, отнимаем ту, которую дали. !!DO10051/y8/y9/1:P27;Запускаем цикл, проходящийся по всем стекам стороны и устанавливающий длительность заклинания (номер - параметр). !!DO10051/y8/y9/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;Продлеваем заклинание.
ZVSE
ERMS_ScriptName=Random_map_pos
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=5.12(December).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedVariables=v2
ERMS_ScriptUsedFunctions=22344-22346
_WARNING_#1=IMPORTANT! This file is not in a plain text format. NEVER use any editor except ERM_S for making any kind of changes!
ERMS_PoweredBy=ERM Scripter v. 2004.10.5.945
!?CM0;Триггер, скажем, на клик правой кнопкой мыши. !!FU22344:P?y-1/?y-2/?y-3;Вызываем функцию генерации координат случайной свободной клетки. !!UN:Iy-1/y-2/y-3/54/0;Ставим монстра на клетку. !!MOy-1/y-2/y-3:G1;Устанавливаем количество монстров в 1.
;Функции генерации случайной свободной клетки карты.
!?FU22344;Функция генерации случайной свободной клетки карты. !!UN:X?y1/?y2;Считываем размеры карты. !!VRy2:+1;Вычисляем количество уровней на карте. !!VRy3:Sy1*y1*y2;Вычисляем количество клеток карты. !!VRy3:-1;Вычисляем номер последней клетки карты. !!VRy4:Sv2;Сохраняем значение глобальной переменной. !!VRv2:S0;Обнуляем переменную счёта свободных клеток. !!DO22345/0/y3/1:Py1/y2;Запускаем цикл, проходящийся по всем клеткам карты и считающий число свободных клеток на ней. !!FU&v2<=0:E;Если свободных клеток нет, завершаем функцию. !!VRy5:Sv2-1;Вычисляем условный номер последней свободной клетки. !!VRv2:S0 Ry5;Генерируем случайный условный номер свободной клетки. !!DO22346/0/y3/1:Py1/y2;Запускаем цикл, проходящийся по клеткам карты и вычисляющий реальный номер клетки. !!VRx1:Sv2%y1;Вычисляем и возвращаем x-координату клетки. !!VRx2:Sv2:y1%y1;Вычисляем и возвращаем y-координату клетки. !!VRx3:Sv2:y1:y1%y2;Вычисляем и возвращаем z-координату клетки. !!VRv2:Sy4;Восстанавливаем значение глобальной переменной.
!?FU22345;Функция проверки свободности клетки. !!VRy1:Sx16%x1;Вычисляем x-координату клетки. !!VRy2:Sx16:x1%x1;Вычисляем y-координату клетки. !!VRy3:Sx16:x1:x1%x2;Вычисляем z-координату клетки. !!TRy1/y2/y3:E?y4;Считываем проходимость клетки. !!TRy1/y2/y3:P?y5;Считываем посещаемость клетки. !!TRy1/y2/y3:T?y6/d/d/d/d/d/d/d;Считываем тип территории клетки. !!FU&y4=0|y5=0/y6=8/y6=9:E;Если клетка недоступна, завершаем тфункцию. !!OBy1/y2/y3:T?y7;Считываем тип объекта на клетке. !!VRv2&y7<>34:+1;Если на клетке стоит не герой, добавляем 1 в переменную свободных клеток.
!?FU22346;Функция проверки свободности клетки. !!VRy1:Sx16%x1;Вычисляем x-координату клетки. !!VRy2:Sx16:x1%x1;Вычисляем y-координату клетки. !!VRy3:Sx16:x1:x1%x2;Вычисляем z-координату клетки. !!TRy1/y2/y3:E?y4;Считываем проходимость клетки. !!TRy1/y2/y3:P?y5;Считываем посещаемость клетки. !!TRy1/y2/y3:T?y6/d/d/d/d/d/d/d;Считываем тип территории клетки. !!OBy1/y2/y3&y4=1/y5=1/y6<>8/y6<>9:T?y7;Если клетка свободна, считываем тип объекта на клетке. !!VRv2&y4=0|y5=0/y6=8/y6=9/y7=34:+1;Если клетка несвободна или на ней есть герой, добавляем 1 в переменную реального номера клетки. !!VRx16&x16=v2:Sx1*x1*x2;Если реальный номер клетки вычислен, завершаем цикл.
(This post was last modified: 17.02.2012 21:27 by Sav.)