2. Вызов охраны вокруг указанного одноклеточного существа в виде указанного одноклеточного существа (непосредственно в скрипте - копейщики вокруг фанатиков) наподобие охраны санта-гремлинов, но без обнуления скорости.
(
http://wforum.heroes35.net/showthread.ph...0#pid49160)
ZVSE
ERMS_ScriptName=Guardians
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=30.9(September).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedFunctions=90-91
_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
!?BR&v997=-1/1000;В начале боя человека...
!!DO90/0/41/1:P9/0;Вызываем цикл, вызывающий стражу всех стеков.
!!BU:R;Обновляем.
;Функции вызова стражи.
!?FU90;Функция поиска гексов для стражи.
!!BMx16:T?y7;Проверяем тип монстра.
!!FU&y7<>x1:E;Если монстр не подходит, выходим из функции.
!!BMx16:P?y7;Считываем позицию монстра.
!!VRy8:Sy7:17;Вычисляем ряд позиции монстра.
!!VRy9:Sy8%2;Вычисляем чётность ряда позиции монстра.
!!VRy1:Sy7-1;Вычисляем позицию 1 стражи.
!!VRy2&y9=0:Sy7-17;Вычисляем позицию 2 стражи, в зависимости от чётности ряда позиции монстра.
!!VRy2&y9=1:Sy7-18;Вычисляем позицию 2 стражи, в зависимости от чётности ряда позиции монстра.
!!VRy3:Sy2+1;Вычисляем позицию 3 стражи.
!!VRy4:Sy7+1;Вычисляем позицию 4 стражи.
!!VRy5:Sy2+35;Вычисляем позицию 5 стражи.
!!VRy6:Sy5-1;Вычисляем позицию 6 стражи.
!!BMx16:B?y10;Считываем количество монстров.
!!BMx16:I?y11;Считываем сторону монстра.
!!DO91/1/6/1:Py1/y2/y3/y4/y5/y6/y10/x2/y11;Вызываем цикл, вызывающий стражу на каждую клетку.
!?FU91;Функция постановки стражи на гекс.
!!VRy1:Sxx16%17;Считываем столбец позиции монстра.
!!FU&y1=0|y1=16/xx16<1/xx16>185:E;Если гекс вне поля боя, завершаем функцию.
!!BU:Oxx16/?y1;Проверяем, нет ли препятствий на гексе.
!!FU&y1>0:E;Если на гексе есть препятствия, завершаем функцию.
!!BU:Exx16/?y1;Проверяем, нет ли стека на гексе.
!!BMy1&y1>-1:T?y2;Если на гексе есть стек, проверяем тип монстра стека.
!!BMy1&y1>-1/y2=x8:Ndx7;Если на гексе есть стек и его тип монстра - нужный, добавляем туда нужное количество монстров.
!!FU&y1>-1:E;Если на гексе есть стек, завершаем функцию.
!!BU:Sx8/x7/xx16/x9/-1/0;Вызываем стражу на гекс.
3. Все шахты на 30 день игры становятся нейтральными, со случайной охраной.
(
http://wforum.heroes35.net/showthread.ph...3#pid49063)
ZVSE
ERMS_ScriptName=Mines_forg
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=30.9(September).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedVariables=v62-v64
ERMS_ScriptUsedFlags=20
ERMS_ScriptUsedTimers=51
ERMS_ScriptUsedFunctions=91
_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
!#IF:V20/0;Сбрасываем контрольный флаг.
!#TM51:S30/30/7/1;Устанавливаем таймер на 30 день.
!?TM51;При срабатывании таймера...
!!VRv62:S-1;Подготавливаем x-координату к поиску координат шахт.
!!UN:U53/-1/?y1;Считаем количество шахт на карте.
!!DO91/1/y1/1:P53;Запускаем цикл, находящий и устанавливающий все шахты на карте.
!?OB53;При посещении шахты...
!!MNv998/v999/v1000:O?y-1;Проверяем влдельца шахты.
!!FU&y-1>-1:E;Если у шахты есть владелец, выходим из триггера.
!!OBv998/v999/v1000:U?y-1;Считываем подтип шахты.
!!FU&y-1=7:E;Если шахта - заброшенная, выходим из триггера.
!!OW:C?y-1;Считываем цвет текущего игрока.
!!VRy-2:S7-y-1;Вычисляем цвет временного влдельца шахты.
!!MNv998/v999/v1000:Oy-2/1;Устанавливаем временного влдельца шахты.
!!IF:V20/1;Устанавливаем контрольный флаг.
!$OB53&20;После посещения шахты, если контрольный флаг равен 1...
!!OW:C?y-1;Считываем цвет текущего игрока.
!!MNv998/v999/v1000:O?y-2;Считываем цвет влдельца шахты.
!!MNv998/v999/v1000&y-1<>y-2:O-1;Если владелец шахты - не текущий игрок, делаем шахту нейтральной.
!!IF:V20/0;Сбрасываем контрольный флаг.
!?FU91;Функция поиска и установки шахты.
!!UN:Ux1/-1/-1/62;Находим координаты шахты.
!!MNv62/v63/v64:O-1;Делаем шахту нейтральной.
!!VRy1:S0 R165;Генерируем случайный номер монстра.
!!VRy1&y1>121:Sy1+1;Исключаем 1 неиспользуемого монстра.
!!VRy1&y1>123:Sy1+1;Исключаем 2 неиспользуемого монстра.
!!VRy1&y1>125:Sy1+1;Исключаем 3 неиспользуемого монстра.
!!VRy1&y1>127:Sy1+1;Исключаем 4 неиспользуемого монстра.
!!VRy1&y1>144:Sy1+5;Исключаем боевые машины и стрелковые башни.
!!VRy1&y1>159:Sy1+4;Исключаем Эмиссаров.
!!VRy1&y1>173:Sy1+18;Исключаем командиров.
!!MA:Cy1/6/?y2;Считываем стоимость монстра.
!!VRy3:S30000:y2;Вычисляем количество монстров исходя из стоимости.
!!MNv62/v63/v64:M0/-1/0;Обнуляем охрану шахты.
!!MNv62/v63/v64:M1/-1/0;Обнуляем охрану шахты.
!!MNv62/v63/v64:M2/-1/0;Обнуляем охрану шахты.
!!MNv62/v63/v64:M3/y1/y3;Устанавливаем тип и количество монстров на охране шахты.
!!MNv62/v63/v64:M4/-1/0;Обнуляем охрану шахты.
!!MNv62/v63/v64:M5/-1/0;Обнуляем охрану шахты.
!!MNv62/v63/v64:M6/-1/0;Обнуляем охрану шахты.
4. Добавляет всем существам +25% сопротивления к указанному заклинанию (непосредственно в скрипте - к Волне Смерти).
(
http://wforum.heroes35.net/showthread.ph...9#pid50129)
ZVSE
ERMS_ScriptName=Mag_rezist
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=30.9(September).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
_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
!?MR2; Триггер на гномье сопротивление.
!!MR:F?y-1;Определяем сопротивление монстров в целевом стеке.
!!VRy-1:+25;Добавляем 25% к сопротивлению.
!!VRy-1&y-1>100:S100;Если сопротивление стало больше 100, урезаем его до 100.
!!MR:S?y-3;Проверяем, что это было за заклинание.
!!MR&y-3=24:Fy-1;Если это была волна смерти, устанавливаем сопротивление.
5. Битва со случайными монстрами за почти случайную награду при посещении объекта указанного типа (непосредственно в скрипте - знака).
(
http://wforum.heroes35.net/showthread.ph...9#pid48509)
ZVSE
ERMS_ScriptName=Ob_guard_treasure
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=30.9(September).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedVariables=!!PO:N_для_каждого_объекта_указанного_типа;v1
_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
!?OB91&1000;При посещении человеком объекта...
!!OBv998/v999/v1000:M-1/1/0;Убираем стандартное собщение.
!!POv998/v999/v1000:N?y-1;Проверяем, посещён ли объект.
!!IF&y-1=1:M^Надпись неразборчива.^;Если объект посещён, выводим сообщение.
!!FU&y-1=1:E;Если объект посещён, выходим из триггера.
!!VRz-1:S^Куда пойдёшь?^;Устанавливаем текст вопроса.
!!VRz-2:S^Налево.^;Устанавливаем текст 1 варианта ответа.
!!VRz-3:S^Направо.^;Устанавливаем текст 2 варианта ответа.
!!VRz-4:S^Прямо.^;Устанавливаем текст 3 варианта ответа.
!!VRz-5:S^Прочь отсюда.^;Устанавливаем текст 4 варианта ответа.
!!IF:G1/1/8/-1/-2/-3/-4/-5;Вызываем диалог.
!!FU&v1=8:E;Если выбран 4 вариант ответа, выходим из триггера.
!!VRy-1:R165;Генерируем случайный номер монстра.
!!VRy-1&y-1>121:Sy-1+1;Исключаем 1 неиспользуемого монстра.
!!VRy-1&y-1>123:Sy-1+1;Исключаем 2 неиспользуемого монстра.
!!VRy-1&y-1>125:Sy-1+1;Исключаем 3 неиспользуемого монстра.
!!VRy-1&y-1>127:Sy-1+1;Исключаем 4 неиспользуемого монстра.
!!VRy-1&y-1>144:Sy-1+5;Исключаем боевые машины и стрелковые башни.
!!VRy-1&y-1>159:Sy-1+4;Исключаем Эмиссаров.
!!VRy-1&y-1>173:Sy-1+18;Исключаем командиров.
!!MA:Cy-1/6/?y-2;Считываем стоимость монстра.
!!VRy-3:S30000:y-2;Вычисляем количество монстров исходя из стоимости.
!!HE-1:Tv998/v999/v1000/y-1/y-3;Вызываем сражение с этими монстрами.
!!HE-1:O?y-1;Проверяем, победил ли герой (проверяем его хозяина после битвы), если нет - в переменную попадёт -1.
!!FU&y-1=-1:E;Если герой проиграл, выходим из триггера.
!!VRy-1:R2;Генерируем случайный номер награды.
!!IF&y-1=0:M^Вы получаете по 10 каждого ресурса!^;Если номер награды равен 1, выводим сообщение.
!!OW&y-1=0:R-1/0/d10 R-1/1/d10 R-1/2/d10 R-1/3/d10 R-1/4/d10 R-1/5/d10;Если номер награды равен 1, даём игроку по 10 каждого ресурса.
!!IF&y-1=1:M^Вы получаете 40 кабанов!^;Если номер награды равен 2, выводим сообщение.
!!HE-1&y-1=1:C2/140/40/1;Если номер награды равен 2, даём герою 40 кабанов.
!!IF&y-1=2:M^Вы получаете Голубку Удачи!^;Если номер награды равен 3, выводим сообщение.
!!HE-1&y-1=2:A4/48;Если номер награды равен 3, даём герою Голубку удачи.
!!POv998/v999/v1000:N1;Устанавливаем объекту флаг посещённости.
6. Прибавление после не ИИ битвы победившему процент (непосредственно в скрипте - 20%) от общей стоимости начальной армии побеждённого.
(
http://wforum.heroes35.net/showthread.ph...0#pid52480)
ZVSE
ERMS_ScriptName=After_battle_gold
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=30.9(September).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedVariables=v9400
ERMS_ScriptUsedFunctions=15000
_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
!?BA0&1000;Перед не ИИ битвой...
!!BA:H1/?y-1;Проверяем, есть ли герой у защищающегося игрока.
!!FU&y-1>-2:E;Если у защищающегося игрока есть герой, выходим из триггера.
!!VRv9400:S0;Обнуляем переменную стоимости армии.
!!DO15000/0/6/1:P;Запускаем цикл, считающий стоимость армии защищающегося игрока.
!?BA1&1000;После не ИИ битвы...
!!BA:H1/?y-1;Проверяем, есть ли герой у защищающегося игрока.
!!FU&y-1>-2:E;Если у защищающегося игрока есть герой, выходим из триггера.
!!BA:H0/?y-1;Считываем, номер героя атакующего игрока.
!!HEy-1:O?y-2;Проверяем, победил ли атакующий игрок.
!!OW&y-2>-1:R-1/6/dv9400;Если атакующий игрок победил даём ему золото.
!!UN:R2;Обновляем панель ресурсов.
;Функции счёта стоимости армии.
!?FU15000;Функция счёта стоимости слота армии.
!!BA:M1/x16/?y1/?y2;Считываем тип и количество существ в слоте.
!!FU&y1=-1:E;Если слот пустой, завершаем функцию.
!!MA:Cy1/6/?y3;Считываем цену каждого существа в слоте.
!!VRy4:Sy3*y2:5;Вычисляем 20% от суммарной цены существ в слоте.
!!VRv9400:+y4;Добавляем стоимость существ в слоте к переменной стоимости армии.
7. Сжатие трёх переменных с небольшим значением (0-1024) в одну.
(
http://wforum.heroes35.net/showthread.ph...8#pid52618)
ZVSE
ERMS_ScriptName=Archive
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=30.9(September).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedVariables=p;r-t
_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
!?PI;Триггер, скажем, на пост-инструкцию.
!!FU701:Pp/r/s/?t;Вызываем функцию сжатия значений где-нибудь в коде.
!!FU702:Pt/?p/?r/?s;Вызываем функцию извлечения значений где-нибудь в коде.
;Функции сжатия-извлечения значений.
!?FU701;Функция сжатия значений.
!!VRx2:*1024;Подготавливаем второе значение.
!!VRx3:*1048576;Подготавливаем третье значение.
!!VRx4:Sx1+x2+x3;Записываем все 3 значения в 1 переменную.
!?FU702;Функция извлечения значений.
!!VRx2:Sx1&1023;Извлекаем первое значение.
!!VRx3:Sx1&1047552:1024;Извлекаем второе значение.
!!VRx4:Sx1&1072693248:1048576;Извлекаем третье значение.
8. Опьянение - с некоторым шансом наложение на всех монстров каждой стороны заклинаний (в основном негативных) и многновенной смерти трети стека, шанс для каждой стороны, каждого монстра и заклинания считается отдельно и зависит от уровня навыка "Интеллект" у героя (для негативных: -10% на уровень навыка, для позитивных: +10% на уровень навыка), при этом играется звук в начале битвы.
(
http://wforum.heroes35.net/showthread.ph...0#pid53080)
ZVSE
ERMS_ScriptName=Vodka
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=23.10(October).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedFunctions=22344
_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
!?BR&v997=-1/1000;В начале боя...
!!VRy-1:S0 R2;Устанавливаем случайное значение переменной рандома.
!!VRz-1&y-1=0:S^SACRIF2.WAV^;Если переменная рандома равна 0, играем записываем имя звука в переменную.
!!SN&y-1=0:Pz-1;Если переменная рандома равна 0, проигрываем звук.
!!BA:H0/?y-3;Определяем номер атакующего героя.
!!HEy-3:S24/?y-2;Определяем уровень навыка интеллект у атакующего героя.
!!VRy-2:*10;Вычисляем процентный бонус за интеллект у атакующего.
!!DO22344/0/20/1&y-1=0:Py-2;Если переменная рандома равна 0, запускаем цикл, проходящийся по всем атакующим монстрам и опьяняющий их.
!!VRy-1:S0 R2;Устанавливаем случайное значение переменной рандома.
!!VRz-1&y-1=0:S^SACRIF2.WAV^;Если переменная рандома равна 0, играем записываем имя звука в переменную.
!!SN&y-1=0:Pz-1;Если переменная рандома равна 0, проигрываем звук.
!!BA:H1/?y-3;Определяем номер защищающегося героя.
!!VRy-2:S0;Сбрасываем переменную бонуса за интеллект.
!!HEy-3&y-3>-1:S24/?y-2;Если у защищающегося есть герой, определяем его уровень навыка интеллект.
!!VRy-2&y-3>-1:*10;Если у защищающегося есть герой, вычисляем его процентный бонус за интеллект.
!!DO22344/21/41/1&y-1=0:Py-2;Если переменная рандома равна 0, запускаем цикл, проходящийся по всем защищающимся монстрам и опьяняющий их.
;Функции опьянения монстров стороны.
!?FU22344;Функция опьянения монстра.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<50:M42/7/2;Если переменная рандома меньше 50, накладываем на монстра проклятье на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<50:M45/7/2;Если переменная рандома меньше 50, накладываем на монстра слабость на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<70:M50/7/2;Если переменная рандома меньше 70, накладываем на монстра печаль на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<70:M52/7/2;Если переменная рандома меньше 70, накладываем на монстра неудачу на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<50:M54/7/2;Если переменная рандома меньше 50, накладываем на монстра медлительность на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<10:M59//2;Если переменная рандома меньше 10, накладываем на монстра берсерк на 1 раунд.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<15:M74/7/2;Если переменная рандома меньше 15, накладываем на монстра паралич на 7 раундов.
!!VRy1:S0 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<50:M56/1/2;Если переменная рандома меньше 50, накладываем на монстра бешенство на 1 раунд.
!!VRy1:S0-x1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<70:M49/7/2;Если переменная рандома меньше 70, накладываем на монстра радость на 7 раундов.
!!VRy1:S0-x1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<70:M51/7/2;Если переменная рандома меньше 70, накладываем на монстра удачу на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<5:N?y2;Если переменная рандома меньше 5, считываем количестово монстров.
!!VRy2&y1<5::-3;Если переменная рандома меньше 5, делим количество монстров на 3.
!!BMx16&y1<5:Ndy2;Если переменная рандома меньше 5, убиваем треть монстров.
9. Генерация случайного номера существующего стека в бою с возможностью выбора стороны (хотя в скрипте и используются v1-v2, их значение всё равно в них возвращается, так что можно не беспокоиться по этому поводу). В случае неудачи (на поле боя нет подходящих стеков) возвращается -1.
ZVSE
ERMS_ScriptName=Random_stack
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=29.10(October).2010
ERMS_ScriptERMVersion=2.70
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedVariables=p-q;v2-v3
ERMS_ScriptUsedFunctions=29099-29101
_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
!?BG0;Триггер, скажем, на действие в битве.
!!FU29099:Pp/?q;Вызываем функцию генерирования случайного значения где-нибудь в коде (p<0 - любая сторона, p=0 - атакующий, p>0 - защищающийся).
;Функции генерации случайного номера стека в бою.
!?FU29099;Функция генерации случайного номера стека в бою.
!!VRx1&x1>1:S1;Урезаем положительный параметр до 1.
!!VRx1&x1<-1:S-1;Урезаем отрицательный параметр до -1.
!!VRy6:Sx1+1;Записываем увеличенный на 1 параметр.
!!VRx2:S-1;Сбрасываем переменную, возвращающую результат.
!!VRy1:Sv2;Резервируем глобальную переменную (количества стеков).
!!VRy2:Sv3;Резервируем глобальную переменную (количества стеков).
!!VRv2:S-1;Сбрасываем глобальную переменную.
!!VRv3:S-1;Сбрасываем глобальную переменную.
!!DO29100/0/41/1:P;Запускаем цикл, проходящийся по всем номерам стеков и проверяющий, какое (уменьшенное на 1) количество из них реально существует (у каждой стороны по отдельности).
!!VRy3:Sv2+v3+1;Подсчитываем уменьшенное на 1 суммарное количество стеков.
!!VRv2:Sy1;Возвращаем значение глобальной переменной.
!!VRy1:Sy3-v3-1;Вычисляем бывшее значение глобальной переменной.
!!VRv3:Sy2;Возвращаем значение глобальной переменной.
!!VRy2:Sy3-y1-1;Вычисляем бывшее значение глобальной переменной.
!!FU&x1<0/y3=-1:E;Если параметр меньше 0 и на поле боя нет существ, завершаем функцию.
!!FU&x1=0/y1=-1:E;Если параметр равен 0 и у атакующего нет существ, завершаем функцию.
!!FU&x1>0/y2=-1:E;Если параметр больше 0 и у защищающегося нет существ, завершаем функцию.
!!VRy5:Sv2;Резервируем глобальную переменную.
!!VRv2&x1<0:S0 Ry3;Если допустима любая сторона, генерируем случайный номер стека.
!!VRv2&x1>=0:S0 Ryy6;Если выбрана одна из сторон, генерируем случайное значение стека этой стороны.
!!VRy7:S0;Сбрасываем переменную первого проверяемого номера стека.
!!VRy7&x1>=0:Sx1*21;Если проверяются стеки только одной стороны, устанавливаем переменную первого проверяемого номера стека.
!!DO29101/y7/41/1:P?y4;Запускаем цикл, проходящийся по всем нужным номерам стеков и выбирающий нужный случайный стек.
!!VRv2:Sy5;Возвращаем значение глобальной переменной.
!!VRx2:Sy4;Устанавливаем возвращающееся значение.
!?FU29100;Функция подсчёта количества существующих стеков у каждой стороны.
!!BMx16:N?y1;Считываем количество существ в стеке.
!!VRv2&x16<=20/y1>0:+1;Если в стеке есть существа, увеличиваем глобальную переменную (количества стеков) соответствующей стороны на 1.
!!VRv3&x16>=21/y1>0:+1;Если в стеке есть существа, увеличиваем глобальную переменную (количества стеков) соответствующей стороны на 1.
!?FU29101;Функция отбора случайного стека.
!!BMx16:N?y1;Считываем количество существ в стеке.
!!FU&y1<=0:E;Если в стеке нет существ, завершаем функцию.
!!VRv2:-1;Отнимаем 1 от глобальной переменной.
!!FU&v2>=0:E;Если глобальная переменная не стала менньше 0, завершаем функцию.
!!VRx1:Sx16;Возвращаем номер текущего стека.
!!VRx16:S41;Завершаем цикл.
10. (Для Эры) складывание типов и количеств существ в стеках в массив и извлечение их оттуда.
ZVSE
ERMS_ScriptName=Edit_stacks
ERMS_ScriptAuthor=Sav
ERMS_ScriptVersion=1.0.0
ERMS_ScriptDate=30.10(October).2010
ERMS_ScriptERMVersion=3.00
ERMS_ScriptLanguage=Русский or русский (native)
ERMS_ScriptUsedVariables=v1-v2
ERMS_ScriptUsedFunctions=27999-28000
_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
!?BR&v997=-1;Триггер, скажем на начало боя.
;Стуктура массива: (v1 + 2*n) - номер v-переменной с количеством существ в стеке n, (v1 + 2*n + 1) - номер v-переменной с типом существ в стеке n.
!!DO27999/0/41/1:Pv1;Запускаем цикл, проходящийся по всем стекам и считывающий информацию о них (в v1 - номер начальной v-переменной массива).
!!SN:Ev2/0/v1;Вызываем функцию (в v2 - адрес), передаём ей номер начальной v-переменной массива.
!!DO28000/0/41/1:Pv1;Запускаем цикл, проходящийся по всем стекам и записывающий новую информацию о них (в v1 - номер начальной v-переменной массива).
;Функции считывания и записи информации о стеках.
!?FU27999;Функция, считывающая информацию со стека.
!!VRy1:Sx16*2+x1;Вычисляем номер v-переменной для хранения количества существ в стеке.
!!VRy2:Sy1+1;Вычисляем номер v-переменной для хранения типа существ в стеке.
!!BMx16:N?vy1;Считываем количество существ в стеке.
!!VRvy2:S-1;Сбрасываем v-переменную для хранения типа существ в стеке
!!BMx16&vy1>0:T?vy2;Если в стеке есть существа, считываем их тип.
!?FU28000;Функция, записывающая информацию о стеке.
!!VRy1:Sx16*2+x1;Вычисляем номер v-переменной, хранящей количество существ в стеке.
!!VRy2:Sy1+1;Вычисляем номер v-переменной, хранящей тип существ в стеке.
!!BMx16:N?y3;Считываем количество существ в стеке.
!!FU&y3<=0:E;Если в стеке нет существ, завершаем функцию.
!!BMx16:Tvy2;Записываем новый тип существ в стеке.
!!BMx16:Nvy1;Записываем новое количество существ в стеке.