Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Если нужен скрипт
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды > Скрипты
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67
ShadowTheAge
Предлагаю полную скриптовую эмуляцию.
Этот скрипт эмулирует то, что юнит может кастовать.
Если кастовать, то вызовется !?BG с параметром действия 10 (как и должно быть)
Использование: В любой момент установи переменную v1234 на одно из следующих значений:
0: Колдовать нельзя
1: Колдовать можно на союзников
2: Колдовать можно на противников
3: Колдовать можно на всех.

Если требуется чтобы заклинание можно было использовать не на всех существ (например, исключить осадные орудия), то придется прописать дополнительно
Код
Используемые переменные: v1234 - Класс заклинания
v1235 - Текущая цель для заклинания
!?MM0; Водим мышкой по экрану битвы
!!FU27830:P?y1; Вызываем функцию, получаем результат
!!UN&v1235=-1/y1>-1:R5/3/0; Курсор меняем на анимированный спелбук если колдовать можно
!!VRz1&y1>-1:S^Сотворить заклинание^; Устанавливаем нужный текст
!!MM&y1>-1:Mz1;
!!UN&v1235>-1/y1=-1:R5/0/0; Или на стандартный если нельзя
!!VRv1235:Sy1; Устанавливаем новую цель

!?FU27830;
!!VRx1:S-1; Результат по умолчанию - -1 (цели нет)
!!MM:D?y1; Получаем номер клетки куда навели мышь
!!FU|y1<0/y1>188:E; Выход если некорректный номер клетки
!!BU:Ey1/?y2; Получаем номер монстра в этой клетке
!!BG:N?y3; Получаем номер текущего активного монстра
!!FU|y2=-1/y2=y3:E; Если монстра под мышкой нет или навели на себя то выходим
!!BMy2:I?y4; За кого играет цель?
!!BMy3:I?y5; За кого играет кастер?
!!VRy6:Sv1234:2; Можно ли кастовать на врагов?
!!VRy7:Sv1234%2; Можно ли кастовать на своих?
!!FU&y4=y5/y7=0:E; Выходим если навели на своего, а низя
!!FU&y4<>y5/y6=0:E; Выходим если навели на врага, а низя
* Ура! Можно колдовать!
!!FU27831:Py3/y2/?y8; Дополнительная проверка
!!VRx1&y8=1:Sy2;

!?FU27831; Дополнительная проверка можно ли колдовать.
* Эту функцию надо реализовать самому.
* x1 - кто колдует, x2 - на кого колдуют
* Вернуть результат в x3 - вернуть 1 если колдовать можно.
* Так например можно запретить колдовать на осадные орудия или иммунных существ
!!VRx3:S1; Разрешаем колдовать на всех!

!?CM4&v1235>-1; Щелкнули на поле боя - колдуем?
!!CM:S?y1D?y2; Как щелкнули? Куда?
!!FU&y1<>12:E; Выходим если не нажатие левой кнопкой мыши
!!CM:R0; Отменяем стандартную реакцию
!!BU:Ey2/?y3; Получаем номер монстра в этой клетке
!!BG:Dy2S-1Ey3A10; Колдуем!

!?BG0; Любое действие
!!VRv1234:S0;
!!VRv1235:S0; Сбрасываем значения переменных
ShadowTheAge
Вот немного другой скрипт, его проще использовать но он использует массив аж из 42 v переменных. Для каждого существа на поле боя по одной.

Как это проверить? Для этого скрипта очень просто - если требуется, чтобы существо №0 на поле боя умело колдовать заклинания на врагов, установи v7133 на 2. Все. Ну и скопируй скрипт в карту, разумеется.

Переменные:
v7133 для существа №0
v7134 для №1
...
v7154 для №21 (первое существо в армии защитника)
...

Значения
0 - не умеет колдовать
1 - колдует на своих
2 - колдует на врагов
3 - колдует на всех

Скрипт:
Код
Используемые переменные: v1235 - Текущая цель для заклинания
v7133-v7174 - Может ли монстр колдовать?
!?MM0; Водим мышкой по экрану битвы
!!FU27830:P?y1; Вызываем функцию, получаем результат
!!UN&v1235=-1/y1>-1:R5/3/0; Курсор меняем на анимированный спелбук если колдовать можно
!!VRz1&y1>-1:S^Сотворить заклинание^; Устанавливаем нужный текст
!!MM&y1>-1:Mz1;
!!UN&v1235>-1/y1=-1:R5/0/0; Или на стандартный если нельзя
!!VRv1235:Sy1; Устанавливаем новую цель

!?FU27830;
!!VRx1:S-1; Результат по умолчанию - -1 (цели нет)
!!MM:D?y1; Получаем номер клетки куда навели мышь
!!FU|y1<0/y1>188:E; Выход если некорректный номер клетки
!!BU:Ey1/?y2; Получаем номер монстра в этой клетке
!!BG:N?y3; Получаем номер текущего активного монстра
!!FU|y2=-1/y2=y3:E; Если монстра под мышкой нет или навели на себя то выходим
!!BMy2:I?y4; За кого играет цель?
!!BMy3:I?y5; За кого играет кастер?
!!VRy6:Sy3+7133; <-Здесь установите первую v переменную из массива в 42 элемента
!!VRy7:Svy6:2; Можно ли кастовать на врагов?
!!VRy8:Svy6%2; Можно ли кастовать на своих?
!!FU&y4=y5/y8=0:E; Выходим если навели на своего, а низя
!!FU&y4<>y5/y7=0:E; Выходим если навели на врага, а низя
* Ура! Можно колдовать!
!!FU27831:Py3/y2/?y9; Дополнительная проверка
!!VRx1&y9=1:Sy2;

!?FU27831; Дополнительная проверка можно ли колдовать.
* Эту функцию надо реализовать самому.
* x1 - кто колдует, x2 - на кого колдуют
* Вернуть результат в x3 - вернуть 1 если колдовать можно.
* Так например можно запретить колдовать на осадные орудия или иммунных существ
!!VRx3:S1; Разрешаем колдовать на всех!

!?CM4&v1235>-1; Щелкнули на поле боя - колдуем?
!!CM:S?y1D?y2; Как щелкнули? Куда?
!!FU&y1<>12:E; Выходим если не нажатие левой кнопкой мыши
!!CM:R0; Отменяем стандартную реакцию
!!BU:Ey2/?y3; Получаем номер монстра в этой клетке
!!BG:Dy2S-1Ey3A10; Колдуем!

!?BG0; Любое действие
!!VRv1235:S-1; Сбрасываем значения переменной


Для проверки скрипта напишите две строчки
!?PI;
!!VRv7133:S2;

Теперь существо №0 сможет колдовать на врагов.

Примечание: Реально заклинания не колдуются! Их придется тоже колдовать скриптами.
izrukvruki
Я что-то плохо понимаю, ибо не силен в скриптах...
Можно ли сделать так, чтоб некоторые (в идеале все) существа могли бы колдовать (как джины или огры)?
ShadowTheAge
О'кей, еще пару уточняющих комментариев (сорри, спешил и не все написал что хотел)
Данный скрипт позволяет сделать любое существо колдующим заклинания. Однако это не будет реальным кастом, это всего лишь скриптовая имитация. То есть если мы навели курсор на цель, то мы меняем курсор на "книгу заклинаний" и отображаем соответствующий текст в боевом логе. Однако все триггеры типа !?MR не работают при имитации.

Этот скрипт обеспечивает только базу, оболочку, все активные действия скриптописателю нужно реализовать самому.

Итак, у нас на поле боя 42 стека. Реально, конечно, меньше, но в общем у нас их 42, пронимероаных 0-41. Некоторые из этих стеков мы хотим сделать колдующими, другие - нет.
У нас есть массив v переменных v[7133..7174], также из 42 элементов. Если хотите задать другой массив, например v[100..141], то нужно поменять эту строчку:
Код
!!VRy6:Sy3+7133; <-Здесь установите первую v переменную из массива в 42 элемента

Итак, у нас есть массив из 42 элементов, каждый из элементов массива описывает, может ли колдовать определенный стек на поле боя.
Примечание: Если стек и так колдует, то отменить колдовство путем этого скрипта нельзя! И прописывать в массиве, что "данный стек может колдовать" не нужно. Этот скрипт только для того, чтобы разрешить "колдовать" лругим стекам.

Пусть у нас есть стек №1, и мы хотим, чтобы он колдовал:
Мы меняем переменную v7134 (второй элемент массива по счету, массив начинается, как было сказано, с v7133).
На что ее менять? Зависит от того, как будет существо колдовать.
Цитата
Значения
0 - не умеет колдовать
1 - колдует на своих
2 - колдует на врагов
3 - колдует на всех


Примечание. Эти переменные нигде и никогда не сбрасываются! То есть их нужно обязательно обнулять (или обновлять) в начале каждого боя!
Примечание. Никаких функций вызывать не требуется! Скрипт самодостаточен, то есть его достаточно просто скопировать в карту.
Примечание. Никакого заклинания не колдуется! Колдуется заклинание с номером -1. В качестве цели указывается, собственно, цель. Если вы хотите, чтобы существо колдовало, например, "неудачу", то напишите следующий код:

Код
!?BG0;
!!BG:A?y1S?y2N?y3D?y4; Получили действние стека и номер заклинания, номер существа и цели
!!FU|y1<>10/y2>-1:E; Выход, если не каст заклинания или если заклинание "нормальное" (например, огры-маги)
!!BMy3:C52/y4/0/3/1; Кастуем базовую неудачу на 3 хода на цель

По-правильному, конечное, проверять что за стек колдует, прежде чем выбирать заклинание.

Ну и последнее что хочется сказать это повторить о функции 27831. Здесь можно вставить проверку, куда заклинание кастоватся может, а куда нет.

Система на универсальность не тянет. Создать пару колдующих монстров можно легко, но что-то масштабное трудно. Если нужно, я могу модифицировать скрипт, мне несложно, к тому же 60% уже готово.
Bes
Люди, в ТЕ (в 3,58 не замечал) на некоторых юнитах, имеющих иммунитет к чему-то... в битве сразу выставляется закл защиты (к примеру от воды).
так вот, кто знает, как лучше это убирать? (но при этом помнить о возможности того, что на этого монстра могут спецом наложить подобный закл)
Код
!?BG0;
!!DO24017/0/41/1:P;

!?FU24017;
!!BMx16:N?y1;  !!FU&y1<1:E;
!!BMx16:T?y2 G32/?y3/d;  !!BMx16&y3=1000/y2=167:G32/0/d;


Я вот такой способ использую, но он мне не нравится. может есть что-то по удачнее?
Demiurg
Не слышал ничего такого. Может это дополнительные юниты?
Возможно, нужно покопаться в текстовиках.
Bes
ну как же, поставьте на карту любого элементаля (огня к примеру) или посланника воды... у него в статистике зактов будет иметься закл с 1000-продолжительностью (и это каждый раунд восстановимо)
Demiurg
Это невозможно потому, что это невозможно. Возможно, скрипты какие-то виноваты. В скриптах TE ничего такого нет. Ровно как и в exe'шнике TE.
Bes
нифига.
Я щас спецом все скрипты (стоит только чистый ТЕ) убрал (физически, просто из папки всё), и подгрузил битву с посланцем воды... у него изначальна (даже начиная с тактического раунда) уже есть закл "защита от воды" (1000 раундов). По аналогии и у элементалей (видимо Те-команда взамен иммунитета к магии поставила уменьшенный урон от магии, дабы сбалансировать таких существ)
Посмотрите ещё раз, у меня версия 1,03f
(у Deo тоже такое)
Demiurg
1) Посланники воды меня не интересуют. Не смотрел. Насчет них спорить не буду.
2) У элементалей ничего такого не наблюдается.
3) В 1.03f не помню такой ерунды, хотя времена древние. У меня сейчас 1.03q Но это не меняет сути. Exe'шник у них одинаковый. Команда TE не приняла бы такое решение исключительно по идеологическим соображениям.
Bes
можно ли в двеллингах прописать выдачу существ с определённым ранги (ведь по стандарту, игра даёт всегда 0-ранговый отряд)?

можно и алгоритм изложить, а там уже я сам допетрю
Миханик
хм! прочитал тут последние посты ShadowTheAge и ужаснулся. в скрипте используется 42 32-битовые переменные...и в каждой хранится по 2 бита!!!!! fie.gifshok.giffool.gifведь это всё влезет в 3 переменные! подумаешь, лишних 10 строчек! я даже могу написать, как это должно выглядеть:
!?FU27830;
!!VRx1:S-1; Результат по умолчанию - -1 (цели нет)
!!MM:D?y1; Получаем номер клетки куда навели мышь
!!FU|y1<0/y1>188:E; Выход если некорректный номер клетки
!!BU:Ey1/?y2; Получаем номер монстра в этой клетке
!!BG:N?y3; Получаем номер текущего активного монстра
!!FU|y2=-1/y2=y3:E; Если монстра под мышкой нет или навели на себя то выходим
!!BMy2:I?y4; За кого играет цель?
!!BMy3:I?y5; За кого играет кастер?
!!VRy6:Sy3 :16 +7133; <-Здесь установите первую v переменную из массива в 42 элемента
!!VRy10:Sy6 %16;
!!DO27832/0/y-10/1:P=y11/?y11;
!!VRy12:Svy6 :y11 &3;

!!VRy7:Sy12:2; Можно ли кастовать на врагов?
!!VRy8:Sy12%2; Можно ли кастовать на своих?
!!FU&y4=y5/y8=0:E; Выходим если навели на своего, а низя
!!FU&y4<>y5/y7=0:E; Выходим если навели на врага, а низя
* Ура! Можно колдовать!
!!FU27831:Py3/y2/?y9; Дополнительная проверка
!!VRx1&y9=1:Sy2;
!?FU27832&x16=0;
!!VRx2:S1;
!?FU27832&x16>0;
!!VRx2:Sx1 *4;
!?FU27833;
!!VRx1:&63;
!!VRx2:&1;
!!VRx3:&3;
!!VRy1:Sx1 :16 +7133;
!!VRy2:Sx1 %16;
!!DO27832/0/y-2/1:P=y3/?y3;
!!VRx3&x2=0:Svy1 :y3 &3;
!!VRy4:Sy3 *3 X-1;
!!VRvy1&x2=1:&y4 C?y5 Sx3 *y3 |y5;

здесь я добавил функцию 27383 для удобного редактирования переменных. Вызов:
!!FU27383:P<стек>/<режим>/<значение>;
где нечётное значение режима - запись, а чётное - чтение.
Demiurg
Цитата(Bes @ 09 Oct 2007, 13:55)
можно ли в двеллингах прописать выдачу существ с определённым ранги (ведь по стандарту, игра даёт всегда 0-ранговый отряд)?

Не уверен, что можно в лоб.
Возможно, сработает способ через !?OB и !$OB. В 1ом ресивере запоминаем такие данные как количества и опыт существ, нанимаемых в этом двеллинге. А во 2ом при необходимости редактируем опыт.
izrukvruki
Вы все тут какое-то умное пишите, можно я что-то простенькое попрошу:

никто не может написать скрипт - назовем его "Быстрое начало". Суть его проста: не зависимо от уровня сложности герою дается на старте много ресурсов и золота (напрмер по 100 камней и дерева, 25 мифрила, по 50 остальных, 100000 золота), и за день разрешается строить несколько (скажем 5-10) зданий.
DracoLich
!#TM1:S1/999/1/255;
!?TM1&v15=0;
!!VRv15:S1;
!!OW:R-1/0/d100 R-1/2/d100 R-1/1/50 R-1/3/50 R-1/4/50 R-1/5/50 R-1/6/100000 R-1/7/25; - 100 дерева/руды, 50 других, 100 тыс. золота, 25 мифрила
!?TM1&v15=1;
!!UN:U98/-1/?y1;
!!DO155/1/y1/1:P;

!?FU155;
!!UN:U98/-1/x16/1;
!!PO1:S0;

!?TH1;
!!CA-1:R?y1 P?v1/?v2/?v3;
!!PO1:S?y-1;
!!FU|y-1>=5/y1=0:E;
!!VRy-2:Sy-1 +1;
!!PO1:Sy-2;
!!CA-1:R0;
где 5 - число построек
Intofire
мне нужно что-бы объект(10,10,0) на второй день перемещался в клетку 11,10,0 на третий день - 12,10,0 на четвёртый - 11,11,0 и так далее по заданой мной траектории.
izrukvruki
Дроколич - спасибо. Вечером попробую.
А как этот скрипт оформить в виде отдельного скрипта (который нуно кинуть в Дату), и чтоб моно было его включать/выключать...
DracoLich
Цитата
мне нужно что-бы объект(10,10,0) на второй день перемещался в клетку 11,10,0 на третий день - 12,10,0 на четвёртый - 11,11,0 и так далее по заданой мной траектории.

Ставишь таймер, каждый день удаляешь объект и ставишь на новую точку. В чем проблема?
Цитата
А как этот скрипт оформить в виде отдельного скрипта (который нуно кинуть в Дату), и чтоб моно было его включать/выключать...

Простая процедура проверки + ers-файл.
Здесь:
http://dracolich.narod.ru/s.rar
izrukvruki
спасибо. а справку по erm_scripter на русском моно где взять? или описание ers файлов.
easy-to-kill
А как в бою заставить юнита сделать вид что он получил урон?
gamecreator
сначала перечитай весь хелп, тогда не будет тупых вопросов типа того, что ты задал.

BM:K
easy-to-kill
Helpu ya chital i ne nashel.
A pri chem zdes BM:K?
On je prosto nanosit steku uron< pri tom animaciya steka ne menyayetsya.

P.S.
Izvinyayte za translit u menya na klave russkih bukv ne vidno.
Д'якон
Смотри здесь последние 3 поста
http://forum.df2.ru/index.php?showtopic=68...=0&#entry194745
easy-to-kill
Там тоже не то
gamecreator
почему?
easy-to-kill
Потому что там функция проигрывания спецэффекта на юните а мне надо чтобы менялась анимация самого юнита.
gamecreator
вмысле менялась анимация? тогда жди подгрузки ресурсов в 3.59
easy-to-kill
Ты не понял. Не нужно ничего подгружать. Просто нужно что б когда я наношу стеку урон через BM:K он не стоял столбом как будто ничего не случилось, а типо скорючился от жуткой боли.
gamecreator
ну так используй ту функцию!

Добавлено ([mergetime]1193064480[/mergetime]):
попробуй проиграть анимацию монстра на монстре
gamecreator
тебе надо
!!BM:G-87/номер анимации/d;
Bes
Кто-нибудь сможет написать математический способ (через ЕРМ) вычленения из общего флага у монстра все его составляющие.
(вариант с циклическим перебором всех 32 флагов для проверки их наличия я не учитываю, хотелось бы иметь математический алгоритм)

Т.е. если, к примеру, в битве я получаю от стэка флаг 81938, то хотелось бы знать, что за флаги сюда входят. (жалко что нету операции логарифмирования для ЕРМ)
gamecreator
всмысле "что за флаги"? &(2^номер_флага) не катит?
Bes
я про флаги монстров которые через BM#:F?$ получают
gamecreator
я тоже
Bes
не, мне их надо сразу все заиметь, причём распихать их в 32 (если по максимуму) переменные.
gamecreator
!?FU1;
!!VRy1:Sx2+x16;
!!VRv1:S1;
!!DO2/0/x16/1:P;
!!VRvy1:Sx1&v1;

!?FU2;
!!VRv1:*2;

теперь запускаем DO1/0/31/1:Px1/x2;
x1 - число для разложения
x2 - номер v-переменной с нулевым битом (всего 32 последовательных переменных)

Добавлено ([mergetime]1193250515[/mergetime]):
номера ф-ций можно поменять
Д'якон
Или так. Мне кажется так тоже можно.


Ну хорошо.
!?..
!!BM#:F?y1;
!!VRy2:|y1;
!!VRy3:S1;
!!DO1/0/31/1:P=y2/y3;
!?FU1;
!!VRy1:Sx2 *2;
!!VRx2:+1;
!!VRx1:&y1;
!!if&y1=x1:;
!!VRy2:S3 +x16;
!!VRyy2:Sy1;
!!en;
gamecreator
у тебя что-то непонятное. ты каждый раз узнаешь флаг, почему-то ложишь флаги в у-переменные. а разве у-переменные сохраняются на продолжении всего цикла?
Д'якон
У-пременные... может и не сохраняются, но если нужно можно сохранять в v-переменные, а если нет то можно прям в цикле обрабатывать их (сомневаюсь, что нужно их длительное хранение, хотя...). Хорошо уговорил, исправил. (В принципе не лучше твоего, просто с одним циклом. Работоспособность не проверял, но вроде должен)
Demiurg
y-переменные сохраняются в течении цикла.
gamecreator
Цитата(Д'якон @ 25 Oct 2007, 19:13)
просто с одним циклом

можно прописать !!VRv1:S1; и вкинуть строчку из второй ф-ции в конец первой.

Добавлено ([mergetime]1193329848[/mergetime]):
а в первой ф-ции эту строчку удалить
Bisik
Люди, кто нибудь может написать Воговский скрипт (тоесть script97.erm) чтобы:
1. мечникии и крусадеры давали безконечную сдачу;
2. архангелы не летали и не занимали 2 клетки;
3. гриффоны стреляли (именно стреляли) 2 раза (с графой уже решил)
Буду очень признателен smile.gif
Demiurg
Код
ZVSE
!?PI;
;мечники и крысодеры получают 5000 ответок в каждом раунде
!!EA6:F82/?y1;
!!EA6:By1/1/82/61/5000/5000/5000/5000/5000/5000/5000/5000/5000/5000/5000;
!!EA7:F82/?y1;
!!EA7:By1/1/82/61/5000/5000/5000/5000/5000/5000/5000/5000/5000/5000/5000;
;архангелы перестают летать и занимают одну клетку
!!MA:X13/?y1;
!!VRy1:&-2&-3;
!!MA:X13/y1;
;гриффоны начинают дважды стрелять
!!MA:X4/?y1;
!!VRy1:|4|32768;
!!MA:X4/y1;


Если нужно, чтобы королевские гриффоны тоже стреляли дважды добавь в код:
!!MA:X5/?y1;
!!VRy1:|4|32768;
!!MA:X5/y1;

Если нужно, чтобы обычные анелы не летали - добавь:
!!MA:X13/?y1;
!!VRy1:&-3;
!!MA:X13/y1;

Я не тестил этот скрипт. Если будут с чем проблемы, пиши. Если будут траблы с кучей ответок у мечников/крысодеров, то удали отвечающие за это строчки. В этом случае можно будет сделать по-другому.
gamecreator
а еще чтобы грифоны стреляли надо установить патч Борна для стрелков
DracoLich
http://dracolich.narod.ru/script97.rar
Так проще, кажется
gamecreator
исправь адрес
Bes
один комментарий...
если делать Архангелов "одноклеточными", то при близком контакте с врагом будет не очень красиво смотреться (графика будет налезать)... если конечно вы не перерисовали полностью Архангелов wink.gif
Bisik
Спасибо огромное за скрипты, буду тестить
Насчет графы и звука не безпокойтесь, это моя профессия wink.gif

Добавлено ([mergetime]1193657230[/mergetime]):
Кстати, Драколич, надо исправить адресс ссылки
DracoLich
Там все правильно. ???
Bisik
"Несуществующая страница"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.