********************************************************************************
;Предварительная часть
********************************************************************************
!#UN : P91/?v6000;Проверяем, включен ли скрипт нейтальные драконы в настройках WoG-ификации и записываем результат в переменную настроек, никакие триггеры этого скрипта не работают, если она равна 0.
!#UN&v6000>0 : P900/?v6001;Если скрипт нейтальные драконы включен, проверяем, включена ли система опыта существ.
!#VRv6000&v6001>0 : S2;Если система опыта существ включена, устанавливаем переменную настроек в 2.
!#VRv6001 : S0;Сбрасываем вспомогательную переменную.
********************************************************************************
;Кристальный дракон.
********************************************************************************
;Настройка опыта.
!?PI&v6000=2;Триггер на пост-инструкцию, если включена система опыта существ. !!EA133 : B6/0/0/0/0/0/0/0/0/0/0/0/0/0/0;Обнулить первую способность. !!EA133 : B7/0/0/0/0/0/0/0/0/0/0/0/0/0/0;Обнулить вторую способность. !!EA133 : B8/0/0/0/0/0/0/0/0/0/0/0/0/0/0;Обнулить третью способность. !!EA133 : B9/0/0/0/0/0/0/0/0/0/0/0/0/0/0;Обнулить четвёртую способность. !!EA133 : B10/0/0/0/0/0/0/0/0/0/0/0/0/0/0;Обнулить пятую способность. !!EA133 : B11/0/0/0/0/0/0/0/0/0/0/0/0/0/0;Обнулить шестую способность. !!EA133 : B12/0/0/0/0/0/0/0/0/0/0/0/0/0/0;Обнулить седьмую способность. !!EA133 : B6/1/103/37/50/55/60/65/70/75/80/85/90/95/100;Дать способность "Сопротивление магии голема", сила 50-100%. !!EA133 : B7/1/99/62/0/5/10/15/20/25/30/35/40/45/50;Дать способность колдовать "Ослепление", с 1-ого уровня, шанс 5-50%. !!EA133 : B8/1/66/37/0/3/6/9/12/15/18/21/24/27/30;Дать способность "Блок", с 1-ого уровня, шанс 3-30%. !!EA133 : B9/1/70/1/0/0/0/0/0/0/0/1/1/1/1;Дать способность "Страх", с 7-ого уровеня.
;Предварительная настройка кристального дракона.
!?PI&v6000>0;Триггер на пост-инструкцию. !!VRy-1 : S0;Обнуяем переменную изменения флагов. !!MA : X133/?y-2;Считываем флаги крисального дракона. !!VRy-3 : Sy-2&16;Проверяем, нет ли у крисального дракона флага живое существо. !!VRy-1&y-3>0:-16;Если у крисального дракона есть флаг живое существо, вычитаем его из переменной изменения флагов. !!VRy-3 : Sy-2&132096;Проверяем, нет ли у кристального дракона флагов иммунитет к магии, воздействующей на разум, и неподверженность морали. !!VRy-4 : S132096-y-3;Проверяем, каких флагов из иммунитета к магии, воздействующей на разум, и неподверженности морали нет у горыныча. !!VRy-1:+y-4;Прибавляем флаги из иммунитета к магии, воздействующей на разум, и неподверженности морали, которых нет у горыныча к переменной изменения флагов. !!MA : F133/31050 I133/42066 X133/dy-1;Делаем кристального дракона неживым и неподверженным боевому духу, страху и магии, воздействуюей на разум, и изменяем его AI Value и Fight Value. !!VRz754&v6000=1 : S^Голем. Сопротивление магии 50%. Производит кристаллы.^;Записываем описание кристального дракона в переменную. !!VRz754&v6000=2 : S^Голем. Сопротивление магии. Производит кристаллы.^;Записываем описание кристального дракона в переменную. !!UN : G1/133/2/z754;Устанавливаем описание для кристального дракона. !!TM65&v6000>0 : S8/999/7/255;Настраиваем таймер каждому игроку на первый день каждой недели, начиная со второй (для прибавки кристаллов).
;Убираем гномье сопротивление.
!?MR2&v6000>0;Когда срабатывает гномье сопротивление. !!MR : M?y-1;Запоминаем, у кого срабатывает сопротивление. !!MR&y-1=133 : Fd-20;Если сопротивление сработало у кристальных драконов, убираем природный шанс на его срабатывание.
;Добавляем сопротивление, как у големов.
!?MR1&v6000=1;При срабатывании големового сопротивления. !!MR : M?y-1 D?y-2;Запоминаем, у кого срабатывает сопротивлениеи его урон. !!VRy-2 : :2;Делим запомненный урон на 2. !!MR&y-1=133 : Fy-2;Если сопротивление сработало у кристальных драконов, изменяем урон на новое, (уменьшенное в 2 раза) значение.
;Прибавка кристаллов по новой формуле.
!?TM65&v6000>0;При срабатывании таймера. !!VRv6001 : S0;Очищаем переменную для счёта общего кол-ва кристальных драконов. !!FU9003 : P;Вызываем функцию счёта кристальных драконов у героев текущего игрока. !!FU9006 : P;Вызываем функцию счёта кристальных драконов в городах текущего игрока. !!OW&v6001>0 : R-1/4/d-3;Забираем 3 кристалла у игрока, если у него есть кристальные драконы в городах или у героев. !!FU9009 : P;Вызываем функцию счёта кристальных драконов в шахтах текущего игрока. !!FU9012 : P;Вызываем функцию счёта кристальных драконов в гарнизонах текущего игрока. !!VRv6001 : *25:4;Умножаем целочисленный квадратный корень из числа кристальных драконов на 6,25. !!FU9001 : Pv6001/?v6001;Вызываем функцию, вычисляющую целочисленный квадратный корень из умноженного на 6,25 числа кристальных драконов (с округлением вниз). !!OW : R-1/4/dv6001;Прибавляем кристаллы за кристальных драконов.
;Функции счёта кристальных драконов в гарнизонах текущего игрока.
!?FU9012&v6000>0;Функция подготовки к счёту кристальных драконов в гарнизонах текущего игрока. !!OW : C?y1;Считываем цвет игрока. !!VRv6002 : S-1;Подготавливаем x-координату к поиску координат гарнизонов. !!UN : U33/-1/?y2;Считаем количество гарнизонов на карте. !!DO9013/1/y2/1 : Py1/33;Запускаем цикл, находящий и проверяющий все гарнизоны на карте. !!VRv6002 : S-1;Подготавливаем x-координату к поиску координат гарнизонов. !!UN : U219/-1/?y2;Считаем количество гарнизонов на карте. !!DO9013/1/y2/1 : Py1/219;Запускаем цикл, находящий и проверяющий все гарнизоны на карте.
!?FU9013&v6000>0;Функция поиска и проверки гарнизона. !!UN : Ux2/-1/-1/6002;Находим координаты гарнизона. !!GRv6002/v6003/v6004 : O?y1;Считываем цвет владельца гарнизона. !!DO9014/0/6/1&y1=x1 : P;Если владелец гарнизона - текущий игрок, запускаем цикл, считающий кристальных драконов в охране этого гарнизона.
!?FU9014&v6000>0;Функция вычисления кол-ва кристальных драконов в слоте охраны гарнизона. !!GRv6002/v6003/v6004 : Gx16/?y1/?y2;Считываем информацию о типе существ в слоте охраны гарнизона и их количестве. !!VRv6001&y1=133:+y2;Если существа - кристальные драконы, то прибавляем их количество к переменной для счёта общего кол-ва драконов.
;Функции счёта кристальных драконов в шахтах текущего игрока.
!?FU9009&v6000>0;Функция подготовки к счёту кристальных драконов в шахтах текущего игрока. !!OW : C?y1;Считываем цвет игрока. !!VRv6002 : S-1;Подготавливаем x-координату к поиску координат шахт. !!UN : U53/-1/?y2;Считаем количество шахт на карте. !!DO9010/1/y2/1 : Py1/53;Запускаем цикл, находящий и проверяющий все шахты на карте. !!VRv6002 : S-1;Подготавливаем x-координату к поиску координат шахт. !!UN : U220/-1/?y2;Считаем количество шахт на карте. !!DO9010/1/y2/1 : Py1/220;Запускаем цикл, находящий и проверяющий все шахты на карте.
!?FU9010&v6000>0;Функция поиска и проверки шахты. !!UN : Ux2/-1/-1/6002;Находим координаты шахты. !!MNv6002/v6003/v6004 : O?y1;Считываем цвет владельца шахты. !!DO9011/0/6/1&y1=x1 : P;Если владелец шахты - текущий игрок, запускаем цикл, считающий кристальных драконов в охране этой шахты.
!?FU9011&v6000>0;Функция вычисления кол-ва кристальных драконов в слоте охраны шахты. !!MNv6002/v6003/v6004 : Mx16/?y1/?y2;Считываем информацию о типе существ в слоте охраны шахты и их количестве. !!VRv6001&y1=133:+y2;Если существа - кристальные драконы, то прибавляем их количество к переменной для счёта общего кол-ва драконов.
;Функции счёта кристальных драконов в городах текущего игрока.
!?FU9006&v6000>0;Функция подготовки к счёту кристальных драконов в городах текущего игрока. !!OW : C?y1;Считываем цвет игрока. !!UN : U98/-1/?y2;Считаем количество городов на карте. !!VRy2:-1;Считаем номер последнего города. !!DO9007/0/y2/1 : Py1;Запускаем цикл, проверяющий все города на карте.
!?FU9007&v6000>0;Функция определения хозяина города и проверки слотов его гарнизона или армии гарнизонного героя. !!CA0/x16 : O?y1;Узнаём цвет хозяина города. !!CA0/x16 : H0/?y2;Проверяем, нет ли героя на гарнизоне города, если есть, запоминаем его номер. !!DO9008/0/6/1&x1=y1/y2<0 : Px16;Если хозяин города - текущий игрок, и на гарнизоне городе нет героя, запускаем цикл, считающий кристальных драконов в городе. !!DO9005/0/6/1&x1=y1/y2>=0 : Py2;Если хозяин города - текущий игрок, и на гарнизоне города городе есть герой, запускаем цикл, считающий кристальных драконов в армии этого героя.
!?FU9008&v6000>0;Функция вычисления кол-ва кристальных драконов в слоте гарнизона города. !!CA0/x1 : M2/x16/?y1/?y2;Считываем информацию о типе существ в слоте гарнизона города и их количестве. !!VRv6001&y1=133:+y2;Если существа - кристальные драконы, то прибавляем их количество к переменной для счёта общего кол-ва драконов.
;Функции вычисления кол-ва кристальных драконов у героев текущего игрока.
!?FU9003&v6000>0;Функция составления списка героев игрока. !!OW : O-1/?y9/?y1/?y2/?y3/?y4/?y5/?y6/?y7/?y8;Записываем номера активных героев игрока в переменные. !!DO9004/1/y9/1 : Py1/y2/y3/y4/y5/y6/y7/y8;Запускаем цикл, проверяющий героев игрока.
!?FU9004&v6000>0;Функция проверки слотов армии героя. !!DO9005/0/6/1 : Pxx16;Запускаем цикл, проверяющий количество кристальных драконов в слотах армии героя.
!?FU9005&v6000>0;Функция вычисления кол-ва кристальных драконов в слоте армии героя. !!HEx1 : C0/x16/?y1/?y2;Считываем информацию о типе существ в слоте армии героя и их количестве. !!VRv6001&y1=133:+y2;Если существа - кристальные драконы, то прибавляем их количество к переменной для счёта общего кол-ва драконов.
;Функции вычисления целочисленного квадратного корня числа (с округлением вниз).
!?FU9001&v6000>0;Функция настройки и запуска цикла вычисления целочисленного квадратного корня числа. !!VRy1 : Sx1+2; !!DO9002/1/y1/2 : Py1/?y1/x1;Настраиваем первую разность и запускаем цикл, вычисляющий целочисленный квадратный корень числа. !!VRx2 : Sy1;Возвращаем значение целочисленного квадратного корня.
!?FU9002&v6000>0;Функция шага вычисления целочисленного квадратного корня числа. !!VRx3:-x16;Отнимаем текущее нечётное число от текущей разности, что даёт новую текущую разность. !!VRx2&x3<0 : Sx16:2;Если текущая разность отрицательна, записываем половину текущего нечётного числа (с округлением вниз) в переменную возвращаемого значения. !!VRx16&x3<0 : Sx1;Если текущая разность отрицательна, завершаем цикл.
Единственная ошибка, которую я видел - кристальные драконы противника с 0 опытом отразили урон. Но это, видимо, ошибка не этого скрипта.
Когда доделаю горыныча, сам обновлю архив.