06.03.2011, 21:38
08.03.2011, 21:48
Вопрос такой, караваны в героях можно сделать?
08.03.2011, 21:52
Как в Героях 4 - да. Как в Героях 5 - думаю, тоже, но красивого движения каравана не будет. В обоих случаях имеется проблема с выбором пути каравана. Она вполне решаема, но, боюсь, будет медленно работать.
Ну и всего может быть только ограниченное число караванов (пусть и не очень маленькое).
Ну и всего может быть только ограниченное число караванов (пусть и не очень маленькое).
19.09.2011, 13:39
Немножко измененный скрипт SAV
Cуть, На карте появляется случайный монстр ... не только копейщик
Spoiler (Click to View)
!#TM4:S1/999/2/255;
!?TM4;
!!FU22344:P?y-1/?y-2/?y-3;Вызываем функцию генерации координат случайной свободной клетки.
!!UN:Iy-1/y-2/y-3/54/y-1;Ставим случайного монстра на клетку.
!!MOy-1/y-2/y-3:Gy-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;Если реальный номер клетки вычислен, завершаем цикл.
!?TM4;
!!FU22344:P?y-1/?y-2/?y-3;Вызываем функцию генерации координат случайной свободной клетки.
!!UN:Iy-1/y-2/y-3/54/y-1;Ставим случайного монстра на клетку.
!!MOy-1/y-2/y-3:Gy-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;Если реальный номер клетки вычислен, завершаем цикл.
19.09.2011, 17:40
Хех, установка типа и кол-ва монстра в значение x-координаты - это прикольно, но несбалансировано. 
Кстати, если я кому-то что-то обещал написать и это ему ещё нужно, напишите, а то я сам не вспомню.

Кстати, если я кому-то что-то обещал написать и это ему ещё нужно, напишите, а то я сам не вспомню.
19.09.2011, 21:42
(19.09.2011 17:40)Sav Wrote: [ -> ]Хех, установка типа и кол-ва монстра в значение x-координаты - это прикольно, но несбалансировано.
Кстати, если я кому-то что-то обещал написать и это ему ещё нужно, напишите, а то я сам не вспомню.
45 сообщение этой темы, скрипт с деревом....
Sav' писал.....
M.A.K.C., пробовал скрипт с появлением бродячих монстров? Работает или мне доделывать? - не работает, монстр появляется, но на него напасть нельзя. ... уже не критично, но желательно его поправить, или удалить, чтобы общественность (которая любит вставлять разные скрипты) не расстраивать.
**********************************************************************************************
Идея с деревом, по-моему интересная. Могу реализовать (только превращаться будут не все деревья, а конкретный тип объектов).
***********************************************************
очень жду и надеюсь. Это же касается караванов.
**********************
Скрипт с разрушением нейтральных городов создает проблеммы
20.09.2011, 00:35
Хорошо, постараюсь сделать поскорее.
20.09.2011, 22:02
Есть идея... суть в том, чтобы после сражения к герою присоединялись добровольцы (в поисках славы) количество добровольцев зависит от навыка лидерства, или удачи...60% вероятность для 1- го уровня 50% вероятности для 2-го 40% для 3-го 30% для 4-го 20% для 5-го 10% для 6-го и 5% для 7-го
при экспертном лидерстве, или удаче если лидерства и удачи нет, то вероятность присоединения только 1-го уровня и не больше 5%
можно ли написать такой скрипт?
****************************************
поиздевался над скриптом опьянения, вот что вышло....
Бои стали более случайными... Думаю в этом что то есть...
при экспертном лидерстве, или удаче если лидерства и удачи нет, то вероятность присоединения только 1-го уровня и не больше 5%
можно ли написать такой скрипт?
****************************************
поиздевался над скриптом опьянения, вот что вышло....
Spoiler (Click to View)
**********************************************************
!?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;Вычисляем процентный бонус за интеллект у атакующего.
!!DO28344/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;Если у защищающегося есть герой, вычисляем его процентный бонус за интеллект.
!!DO28344/21/41/1&y-1=0:Py-2;Если переменная рандома равна 0, запускаем цикл, проходящийся по всем защищающимся монстрам и опьяняющий их.
;Функции опьянения монстров стороны.
!?FU28344;Функция опьянения монстра.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<60:M70/1/2;Если переменная рандома меньше 60, накладываем на монстра окаменение на 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:S0-x1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<70:M53/7/2;Если переменная рандома меньше 70, накладываем на монстра ускорение на 7 раундов.
!!VRy1:S0-x1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<70:M36/7/2;Если переменная рандома меньше 70, накладываем на монстра волшебное зеркало на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<5:N?y2;Если переменная рандома меньше 5, считываем количестово монстров.
!!VRy2&y1<5::-3;Если переменная рандома меньше 5, делим количество монстров на 3.
!!BMx16&y1<5:Ndy2;Если переменная рандома меньше 5, убиваем треть монстров.
**********************************************************
!?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:S9/?y-2;Определяем уровень навыка удачи у атакующего героя.
!!VRy-2:*10;Вычисляем процентный бонус за удачу у атакующего.
!!DO21707/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;Если у защищающегося есть герой, вычисляем его процентный бонус за удачу.
!!DO21707/21/41/1&y-1=0:Py-2;Если переменная рандома равна 0, запускаем цикл, проходящийся по всем защищающимся монстрам и офтгевающий их.
;Функции офигевания монстров стороны.
!?FU21707;Функция офигевания монстра.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<20:M42/7/2;Если переменная рандома меньше 30, накладываем на монстра проклятье на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<20:M45/7/2;Если переменная рандома меньше 30, накладываем на монстра слабость на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<50:M50/7/2;Если переменная рандома меньше 50, накладываем на монстра печаль на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<40:M47/1/2;Если переменная рандома меньше 40, накладываем на монстра разрушающий луч на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<40:M61/1/2;Если переменная рандома меньше 40, накладываем на монстра забывчивость на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<50:M52/7/2;Если переменная рандома меньше 50, накладываем на монстра неудачу на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<20:M54/7/2;Если переменная рандома меньше 40, накладываем на монстра медлительность на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<10:M72/2/2;Если переменная рандома меньше 10, накладываем на монстра корни на 2 раунда.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<15:M73/7/2;Если переменная рандома меньше 15, накладываем на монстра болезнь на 7 раундов.
!!VRy1:S0 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за иудачу.
!!BMx16&y1<20:M75/1/2;Если переменная рандома меньше 20, накладываем на монстра старость на 1 раунд.
!?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;Вычисляем процентный бонус за интеллект у атакующего.
!!DO28344/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;Если у защищающегося есть герой, вычисляем его процентный бонус за интеллект.
!!DO28344/21/41/1&y-1=0:Py-2;Если переменная рандома равна 0, запускаем цикл, проходящийся по всем защищающимся монстрам и опьяняющий их.
;Функции опьянения монстров стороны.
!?FU28344;Функция опьянения монстра.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<60:M70/1/2;Если переменная рандома меньше 60, накладываем на монстра окаменение на 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:S0-x1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<70:M53/7/2;Если переменная рандома меньше 70, накладываем на монстра ускорение на 7 раундов.
!!VRy1:S0-x1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<70:M36/7/2;Если переменная рандома меньше 70, накладываем на монстра волшебное зеркало на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за интеллект.
!!BMx16&y1<5:N?y2;Если переменная рандома меньше 5, считываем количестово монстров.
!!VRy2&y1<5::-3;Если переменная рандома меньше 5, делим количество монстров на 3.
!!BMx16&y1<5:Ndy2;Если переменная рандома меньше 5, убиваем треть монстров.
**********************************************************
!?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:S9/?y-2;Определяем уровень навыка удачи у атакующего героя.
!!VRy-2:*10;Вычисляем процентный бонус за удачу у атакующего.
!!DO21707/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;Если у защищающегося есть герой, вычисляем его процентный бонус за удачу.
!!DO21707/21/41/1&y-1=0:Py-2;Если переменная рандома равна 0, запускаем цикл, проходящийся по всем защищающимся монстрам и офтгевающий их.
;Функции офигевания монстров стороны.
!?FU21707;Функция офигевания монстра.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<20:M42/7/2;Если переменная рандома меньше 30, накладываем на монстра проклятье на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<20:M45/7/2;Если переменная рандома меньше 30, накладываем на монстра слабость на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<50:M50/7/2;Если переменная рандома меньше 50, накладываем на монстра печаль на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<40:M47/1/2;Если переменная рандома меньше 40, накладываем на монстра разрушающий луч на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<40:M61/1/2;Если переменная рандома меньше 40, накладываем на монстра забывчивость на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<50:M52/7/2;Если переменная рандома меньше 50, накладываем на монстра неудачу на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<20:M54/7/2;Если переменная рандома меньше 40, накладываем на монстра медлительность на 7 раундов.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<10:M72/2/2;Если переменная рандома меньше 10, накладываем на монстра корни на 2 раунда.
!!VRy1:Sx1 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за удачу.
!!BMx16&y1<15:M73/7/2;Если переменная рандома меньше 15, накладываем на монстра болезнь на 7 раундов.
!!VRy1:S0 R100;Устанавливаем случайное значение переменной рандома с учётом бонуса за иудачу.
!!BMx16&y1<20:M75/1/2;Если переменная рандома меньше 20, накладываем на монстра старость на 1 раунд.
20.09.2011, 22:19
Корни тестировал? Насколько я помню, они накладываются до конца боя, вне зависимости от кол-ва раундов.
M.A.K.C. Wrote:можно ли написать такой скрипт?Теоретически да.
21.09.2011, 07:35
(20.09.2011 22:19)Sav Wrote: [ -> ]Корни тестировал? Насколько я помню, они накладываются до конца боя, вне зависимости от кол-ва раундов.
M.A.K.C. Wrote:можно ли написать такой скрипт?Теоретически да.
Тестировал, работают.
25.09.2011, 13:23
нужен скрипт, чтобы бехолдер при стрельбе накладывал на врага случайным образом одно из 4-х заклинаний Слабость Проклятие Слепота, замедление
25.09.2011, 18:51
По-нормальному это невозможно:
1. Нет триггера "После атаки". Т. е. придётся накладывать либо до удара, либо после всего действия. Для ближних ударов без кислоты эта проблема решена одной моей dll, для дальних или с кислотой - нет.
2. Нет нормального расчёта сопротивления магии. Т. е. заклы будут накладываться и на чёрных драконов и т. п. feanor вроде находил функцию, которая это рассчитывает, но она возвращает какой-то кривой результат и он рекомендовал ей не пользоваться.
1. Нет триггера "После атаки". Т. е. придётся накладывать либо до удара, либо после всего действия. Для ближних ударов без кислоты эта проблема решена одной моей dll, для дальних или с кислотой - нет.
2. Нет нормального расчёта сопротивления магии. Т. е. заклы будут накладываться и на чёрных драконов и т. п. feanor вроде находил функцию, которая это рассчитывает, но она возвращает какой-то кривой результат и он рекомендовал ей не пользоваться.
26.09.2011, 19:57
Есть такой скрипт
можно вместо этого сделать через случайный вариант выбора одного из четырех заклинаний?
как случайный выбор награды из другого скрипта?
Или установить каст каждого из указанных заклинаний с 25% вероятностью?
Ест такой скрипт
***************************************************************************************
Бехолдеры стреляют лучами всех цветов радуги happy.gif
***************************************************************************************
Spoiler (Click to View)
Титаны кастуют при стрельбе гром титанов
!?BG&v997>-1; //этот битвенный триггер срабатывает после ЛЮБОГО действия любого существа
!!BG:A?v10; //выясняем ТИП этого действия
!!BG&v10=7:N?v11; //если это была стрельба - то определим номер стека существ, которые стреляли
!!BMv11&v10=7:T?v12; //если это была стрельба - то определим тип существ, которые стреляли
!!BG&v10=7/v12=41:E?v13; //если это были Титаны - то определим номер стека существ, по которой производился выстрел
!!BMv13&v10=7/v12=41:P?v14; //определим позицию стека существ, по которой производился выстрел
!!BMv11&v10=7/v12=41/v14>-1:C57/v14/0/0/1; //колдуем заклинание Гром Титанов по этой позиции
!!BMv11&v10=7/v12=41/v14>-1:C15/v14/0/0/1; //колдуем заклинание Магическая стрела по этой позиции
!!VRv10:S0;
!!VRv11:S0;
!!VRv12:S0;
!!VRv13:S0;
!!VRv14:S0; //обнуляем все используемые в этом переменные, т.к. триггер срабатывает постоянно
!?BG&v997>-1; //этот битвенный триггер срабатывает после ЛЮБОГО действия любого существа
!!BG:A?v10; //выясняем ТИП этого действия
!!BG&v10=7:N?v11; //если это была стрельба - то определим номер стека существ, которые стреляли
!!BMv11&v10=7:T?v12; //если это была стрельба - то определим тип существ, которые стреляли
!!BG&v10=7/v12=41:E?v13; //если это были Титаны - то определим номер стека существ, по которой производился выстрел
!!BMv13&v10=7/v12=41:P?v14; //определим позицию стека существ, по которой производился выстрел
!!BMv11&v10=7/v12=41/v14>-1:C57/v14/0/0/1; //колдуем заклинание Гром Титанов по этой позиции
!!BMv11&v10=7/v12=41/v14>-1:C15/v14/0/0/1; //колдуем заклинание Магическая стрела по этой позиции
!!VRv10:S0;
!!VRv11:S0;
!!VRv12:S0;
!!VRv13:S0;
!!VRv14:S0; //обнуляем все используемые в этом переменные, т.к. триггер срабатывает постоянно
как случайный выбор награды из другого скрипта?
Spoiler (Click to View)
!!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 : Tx/y/l/y-1/y-3;Вызываем сражение с этими монстрами.
!!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 : Tx/y/l/y-1/y-3;Вызываем сражение с этими монстрами.
Ест такой скрипт
***************************************************************************************
Бехолдеры стреляют лучами всех цветов радуги happy.gif
***************************************************************************************
Spoiler (Click to View)
ZVSE
!?BG1;
!!VRy1:S0 R6;
!!UN&y1=0:C4453008/4/63488;
!!UN&y1=1:C4453008/4/64512;
!!UN&y1=2:C4453008/4/65504;
!!UN&y1=3:C4453008/4/02016;
!!UN&y1=4:C4453008/4/02047;
!!UN&y1=5:C4453008/4/00031;
!!UN&y1=6:C4453008/4/32784;
!?BG1;
!!VRy1:S0 R6;
!!UN&y1=0:C4453008/4/63488;
!!UN&y1=1:C4453008/4/64512;
!!UN&y1=2:C4453008/4/65504;
!!UN&y1=3:C4453008/4/02016;
!!UN&y1=4:C4453008/4/02047;
!!UN&y1=5:C4453008/4/00031;
!!UN&y1=6:C4453008/4/32784;
26.09.2011, 20:01
А сопротивление?
26.09.2011, 21:00
Quote:Титаны кастуют при стрельбе гром титанов
Quote:!?BG&v997>-1; //этот битвенный триггер срабатывает после ЛЮБОГО действия любого существа
Триггер BG1 - это не то. Во-первых, он срабатывает после ответки (в случае ближней атаки это очень заметно). Во-вторых, о срабатывает после того, как сущестов повернулось после атаки (если оно атаковало кого-то сзади себя). В третьих, этот триггер срабатывает после показа морали, если она в этот момент сработала (тоже очень заметно). В четвёртых, при двойном ударе, триггер срабатывает только один раз... Ну и вообще, если приглядеться, можно найти много причин несостоятельности этого триггера для наложения закла после атаки.
Но за неимением иного приходится пользоваться. Я когда-то в MF записывал цели атаки, а в BG1 накладывал на них заклы.
Сопротивление можно прописать вручную (т. е. учесть все возможные защиты у существ, навыки и арты у героя и т. п.) Тоже делал подобное в своё время. Но это извращение и потенциальная несовместимость много с чем.
В общем, скрипт с громом на самом деле отнюдь не идеален. Но привязать его к бехолдерам, а закл сделать выбирающимся сучайно несложно.
M.A.K.C. Wrote:Бехолдеры стреляют лучами всех цветов радугиА это, похоже, просто прямая правка цвета лучей бехолдера (они ведь генерируются программно, а не берутся из ресурсов), ничего более.