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;Завершаем цикл.
(This post was last modified: 29.10.2010 20:08 by Sav.)