Вот, сделал защиту от магии горыныча (с учётом проклятой земли, множества артов и т. п., только без учёта Анти-магии (закла) и способностей опыта) и заклы а всех на магической равнине. Подробнее опишу позже.
********************************************************************************
;Предварительная часть
********************************************************************************
!#UN : P900/?v6001;Если скрипт нейтальные драконы включен, проверяем, включена ли система опыта существ.
!#VRv6000&v6001>0 : S2;Если система опыта существ включена, устанавливаем переменную настроек в 2.
!#VRv6001 : S0;Сбрасываем вспомогательную переменную.
;Горыныч.
!#MA : A168/35 C168/6/17500 C168/0/24 D168/35 E168/60 F168/27145 H168/3 I168/30027 M168/50 P168/750 S168/10 V168/1;Устанавливаем характеристики горыныча.
;Горыныч колдует заклинание на всех вокруг.
!?BG0;При действии существа...
!!BG : A?y-1;Находим, какое действие совершилось.
!!FU&y-1<>6 : E;Если действие - не атака, выходим из триггера.
!!VRv6001 : S0;Обнуляем контрольную переменную.
!!BG : N?v6002;Находим номер атакующего стека.
!!BMv6002 : T?y-1;Находим, какое существо атаковало.
!!BMv6002 : I?v6070;Считываем принадлежность атакующего стека.
!!VRv6001&y-1=168 : S1;Если атаковал горыныч, устанавливаем контрольную переменную в 1.
!!BG : E?y-2;Находим номер целевого стека.
!!BMy-2 : T?y-3;Находим, какое существо было атаковано.
!!VRv6001&y-3=168 : Sv6001+2;Если атаковали горыныча, добавляем к контрольной переменной 2.
!!VRv6003&v6001>0 : S6001;Если контрольная переменная больше 0, устанавливаем управляющую переменную целей.
!?MF1&v6001>0;При нанесении физического урона, если контрольная переменная больше 0...
!!MF&v6001<3 : N?y-1;Если контрольная переменная меньше 3, считываем номер стека, получающего урон.
!!BMy-1&v6001<3 : I?y-2;Если контрольная переменная меньше 3, считываем принадлежность стека, получающего урон.
!!FU&v6001=1/y-2=v6070 : E;Если контрольная переменная равна 1, а принадлежность атакующего стека соответствует принадлежности стека, получающего урон, выходим из триггера.
!!FU&v6001=2/y-2<>v6070 : E;Если контрольная переменная равна 2, а принадлежность атакующего стека не соответствует принадлежности стека, получающего урон, выходим из триггера.
!!MF : E?y-1;Определяем, не был ли урон блокирован.
!!FU&y-1=0/y-2=0 : E;Если урон был блокирован, завершаем функцию.
!!VRv6003 : Sv6003+4;Устанавливаем управляющую переменную целей на следующее значение.
!!VRy-1 : Sv6003-1;Вычисляем вторую управляющую переменную целей.
!!VRy-2 : Sv6003+1;Вычисляем третью управляющую переменную целей.
!!VRy-3 : Sv6003+2;Вычисляем четвёртую управляющую переменную целей.
!!MF : N?vy-1;Определяем номер стека, получающего урон.
!!FU9015 : Pv6003;Вызываем функцию наложения заклинаний.
!!BMvy-1 : G74/?vv6003/d;Определяем, есть ли пралич, у получающего урон.
!!BMvy-1&vv6003>0 : F?y-4;Если стек, получающий урон, парализован, считываем его флаги.
!!VRy-4&vv6003>0 : &67108864;Если стек, получающий урон, парализован, проверяем, ходил ли он.
!!BMvy-1&vv6003>0/y-4<1 : Fd67108864;Если стек, получающий урон, парализован и не ходил, он теряет ход.
!!VRvy-2&vv6003>0/y-4<1 : S1;Если стек, получающий урон, парализован и не ходил, уставливаем переменную потери хода стека.
!!BMvy-1&vv6003>0 : R?y-4;Если стек, получающий урон, парализован, проверяем, сколько у него ответных ударов.
!!BMvy-1&vv6003>0/y-4>0 : R0;Если стек, получающий урон, парализован и у него есть ответные удары, обнуляем их.
!!VRvy-3&vv6003>0/y-4>0 : Sy-4;Если стек, получающий урон, парализован и у него есть ответные удары, записываем их количество в переменную потери ответного удара стека.
!?BG1&v6001>0;После совершения действия, если контрольная переменная больше 0...
!!DO9019/6005/v6003/4 : P;Взываем цикл, восстанавливающий паралич у атакованных горынычем существ.
!!VRv6001 : S0;Устанавливаем контрольную переменную в 0.
!!VRv6002 : S0;Сбрасываем переменную стека, совершившего действие.
!!VRv6003 : S0;Сбрасываем управляющую переменную целей.
!?BR&v6001>0;В начале нового раунда, если контрольная переменная больше 0...
!!DO9019/6005/v6003/4 : P;Взываем цикл, восстанавливающий паралич у атакованных горынычем существ.
!!VRv6001 : S0;Устанавливаем контрольную переменную в 0.
!!VRv6002 : S0;Сбрасываем переменную стека, совершившего действие.
!!VRv6003 : S0;Сбрасываем управляющую переменную целей.
;Функции наложения и продления заклинания.
!?FU9015;Функция подготовки к наложению заклинаний.
!!VRy1 : Sx1-1;Вычисляем адрес номера целевого стека.
!!VRy3 : S1;Устанавливаем переменную рандома в 0.
!!VRy3 : R99;Добавляем к переменной рандома в случайное число от 0 до 99.
!!VRy4&y3>0/y3<32 : S45;Если переменная рандома в 1 промежуке, устанавливаем переменную заклинания на номер слабости.
!!VRy4&y3>31/y3<63 : S54;Если переменная рандома во 2 промежуке, устанавливаем переменную заклинания на номер медлительности.
!!VRy4&y3>62/y3<94 : S73;Если переменная рандома в 3 промежуке, устанавливаем переменную заклинания на номер болезни.
!!VRy4&y3>93/y3<99 : S74;Если переменная рандома в 4 промежуке, устанавливаем переменную заклинания на номер паралича.
!!VRy4&y3>98/y3<101 : S75;Если переменная рандома в 5 промежуке, устанавливаем переменную заклинания на номер старости.
!!BU : G?y5;Проеряем, на какой земле идёт битва.
!!VRy6&y5=1/vy1<21 : S0;Если битва идёт на равнине магов, а целевой стек принадлежит атакующему игроку, устанавливаем первый заражаемый стек в 0.
!!VRy6&y5=1/vy1>20 : S21;Если битва идёт на равнине магов, а целевой стек принадлежит защищаемуся игроку, устанавливаем первый заражаемый стек в 21.
!!VRy7&y5=1 : Sy6+20;Если битва идёт на равнине магов устанавливаем последний заражаемый стек.
!!VRy2 : S0;
!!FU9018 : Pvy1/y4/y5/?y2;
!!FU&y2=1 : E;
!!FU9016 : Pvy1/y4/0/y5;Вызываем функцию наложения и продления закинания.
!!DO9016/y6/y7/1&y5=1/y4=45 : Pvy1/45/1/y5;Если переменная рандома в 1 промежуке, а битва идёт на равнине магов, запускаем цикл, накладывющий и продлевающий слабость на существах противника.
!!DO9016/y6/y7/1&y5=1/y4=54 : Pvy1/54/1/y5;Если переменная рандома во 2 промежуке, а битва идёт на равнине магов, запускаем цикл, накладывющий и продлевающий медлительность на существах противника.
!?FU9016;;Функция наложения и продления заклинания.
!!FU&x3=1/x1=x16 : E;
!!VRx1&x3=1 : Sx16;Если битва идёт на равнине магов (а значит, функция - часть цикла) и заклинание может быть массовым, перезаписываем номер целевого стека.
!!BMx16&x3=1 : N?y1;Если битва идёт на равнине магов (а значит, функция - часть цикла), проверяем, сколько существ в целевом стеке.
!!FU&x3=1/y1<1 : E;Если битва идёт на равнине магов (а значит, функция - часть цикла), а в целевом стеке нет существ, завершаем функцию.
!!VRy1 : S0;
!!FU9018 : Px1/x2/x4/?y1;
!!FU&y1=1 : E;
!!VRz-1&x2=45 : S^WEAKNESS.WAV^;Выбираем звук.
!!VRz-1&x2=54 : S^MUCKMIRE.WAV^;Выбираем звук.
!!VRz-1&x2=73 : S^DISEASE.WAV^;Выбираем звук.
!!VRz-1&x2=74 : S^PARALYZE.WAV^;Выбираем звук.
!!VRz-1&x2=75 : S^AGE.WAV^;Выбираем звук.
!!SN : Pz-1;Проигрываем звук закла.
!!BMx1 : Gx2/?y1/d;Проверяем, не наложено ли заклинание на цель.
!!BMx1&y1<1 : Mx2/3/3;Если заклинание не наложено, накладываем его.
!!BMx1&y1>0 : Gx2/d3/3;Если заклинание наложено, увеличиваем его длительность на 3 раунда и усиляем его, если надо.
!!VRz-1&x2=45 : S^Змей Горыныч заразил врагов слабостью!^;Выбираем сообщение.
!!VRz-1&x2=54 : S^Змей Горыныч заразил врагов медлительностью!^;Выбираем сообщение.
!!VRz-1&x2=73 : S^Змей Горыныч заразил врагов болезнью!^;Выбираем сообщение.
!!VRz-1&x2=74 : S^Змей Горыныч заразил врагов параличем!^;Выбираем сообщение.
!!VRz-1&x2=75 : S^Змей Горыныч заразил врагов старостью!^;Выбираем сообщение.
!!BU : Mz-1;Пишем сообщение в лог.
!?FU9018;
!!BA : H0/?y1;
!!BA : H1/?y2;
!!BMx1 : T?y3;Считываем тип существ целевого стека.
!!VRx4&x2<>45/y3>144/y3<150 : S1;
!!FU&x2<>45/y3>144/y3<150 : E;
!!MA : Xy3/?y4;
!!VRy4 : &16;
!!VRx4&y4<1/x2>58/x2<>74 : S1;
!!FU&y4<1/x2>58/x2<>74 : E;
!!VRy4&y1=-2 : S0;
!!VRy6&y1=-2 : S0;
!!HE-10&y1>-2 : A2/83/d/?y4 A2/100/d/?y6;
!!VRy5&y2=-2 : S0;
!!VRy7&y2=-2 : S0;
!!HE-20&y2>-2 : A2/83/d/?y5 A2/100/d/?y7;
!!VRx4&y4>0/x2>54/x2<>73 : S1;
!!VRx4&y5>0/x2>54/x2<>73 : S1;
!!VRx4&y6>0/x2=59 : S1;
!!VRx4&y7>0/x2=59 : S1;
!!FU&y4>0/x2>54/x2<>73 : E;
!!FU&y5>0/x2>54/x2<>73 : E;
!!FU&y6>0/x2=59 : E;
!!FU&y7>0/x2=59 : E;
!!VRx4&x3=2/x2<>54 : S1;
!!FU&x3=2/x2<>54 : E;
!!VRy4&y1=-2 : S0;
!!VRy5&y2=-2 : S0;
!!HE-10&y1>-2 : A2/93/d/?y4;
!!HE-20&y2>-2 : A2/93/d/?y5;
!!VRx4&y4>0|y5>0 : S0;
!!FU&y4>0|y5>0 : E;
!!MA : Xy3/?y4;
!!VRy4 : &1024;
!!VRx4&y4>0/x2=59 : S1;
!!FU&y4>0/x2=59 : E;
!!MA : Xy3/?y4;
!!VRy4 : &16384;
!!VRx4&y4>0/x2=59 : S1;
!!FU&y4>0/x2=59 : E;
!!VRx4&y3=168|y3=83/y3=151/y3=155/y3=121 : S1;
!!FU&y3=168|y3=83/y3=151/y3=155/y3=121 : E;
!!VRx4&y3=27/x2<>75 : S1;
!!FU&y3=27/x2<>75 : E;
!!VRx4&y3=26/x2<74/x2<>59 : S1;
!!FU&y3=26/x2<74/x2<>59 : E;
!!VRx4&y3=82/x2<74/x2<>59 : S1;
!!FU&y3=82/x2<74/x2<>59 : E;
!!VRx4&y3=132/x2<74/x2<>59 : S1;
!!FU&y3=132/x2<74/x2<>59 : E;
!!VRy4 : S0;
!!VRy4&y3=16:+20;
!!VRy4&y3=17:+40;
!!BMx1 : I?y5;
!!VRy5:+1;
!!VRy6&yy5=-2 : S0;
!!VRy7&yy5=-2 : S0;
!!VRy8&yy5=-2 : S0;
!!HEyy5&yy5>-2 : A2/57/d/?y6 A2/58/d/?y7 A2/59/d/?y8;
!!VRy4&y6>0:+5;
!!VRy4&y7>0:+10;
!!VRy4&y8>0:+15;
!!VRy6 : S0;
!!HEyy5&yy5>-2 : S26/?y6;
!!VRy6 : *5;
!!VRy6&y6=15 : S20;
!!VRy7 : S0;
!!HEyy5&yy5>-2 : X1/?y7/d/d/d/d/d;
!!HEyy5&yy5>-2 : Ed/?y9;
!!VRy8 : S0;
!!VRy8&y7=26 : Sy6*y9:20;
!!VRy4:+y6+y8;
!!VRy5 : S1 R99;
!!VRx4&y4>=y5 : S1;
!!FU&y4>=y5 : E;
!!VRx4 : S0;
!?FU9019;Функция восстаноения паралича.
!!VRy1 : Sx16-1;Вычисляем адрес номера стека.
!!VRy2 : Sx16+1;Вычисляем адрес потери хода стека.
!!VRy3 : Sx16+2;Вычисляем адрес потери ответного удара стека.
!!BMvy1&vx16>0 : M74/vx16/2;Воссанавливаем паралич, если он был.
!!BMvy1 : F?y4;Считываем флаги стека.
!!VRy4 : &67108864;Проверяем, ходил ли стек.
!!BMvy1&vy2=1/y4>0 : Fd-67108864;Если стек потерял ход, восстанавливаем его.
!!BMvy1 : R?y4;Проверяем количество ответных уаров стека.
!!BMvy1&vy3>0/y4=0 : Rvy3;Если стек потерял ответные удары, восстанавливаем их.
!!VRvy1 : S0;Сбрасываем переменную номера стека.
!!VRvx16 : S0;Сбрасываем переменную длительности паралича.
!!VRvy2 : S0;Сбрасываем переменную потери хода стека.
!!VRvy3 : S0;Сбрасываем переменную потери ответного удара стека.
Это ещё не окончательный скрипт горыныча (всё оказалось сложнее, чем я думал, пришлось много тестить).