Скрипты в HoMM 4

Ответить

Таверна | Столик Картостроителей

Подписывайтесь на наши группы:
Перейти к столику:
Автор Сообщение
Сэр MadMaker

HoMM IV: Безземельный
Сообщения: 4
Откуда: Россия

Цитировать ссылка Скрипты в HoMM 4 Добавлено: 10.07.2008 22:15
Мои небольшие советы для тех, кто занимается картостроительством к Четвертым героям.

Пока вот такие:

ИСПОЛЬЗОВАНИЕ ТРИГГЕРОВ В СКРИПТАХ

Возможно, кто-то из не очень опытных картографов не понимает, зачем нужны триггерные события. Ведь практически все можно прописать в стандартных, локальных и календарных событиях (для объекта или города). Однако это далеко не так. Давайте на нескольких примерах разберем, как можно использовать триггеры на картах.

Пример I. Выдача случайной армии/ресурса

Герой Y наехал на локальное событие “Дать x зеленых гоблинов”. По этому событию ему полагается выдать неизвестное количество зеленых гоблинов. Есть два варианта: пойдем по первому.
Локальные события -> «Дать x зеленых гоблинов”
Задать числовую переменную «Greengoblins» на случайное число в диапазоне от 1 до (Максимальное значение)
Если «Greengoblins»=1
Дать воинов (кому?) эта армия – 1 зеленый гоблин
Если «Greengoblins»=2

… …
Если «Greengoblins»=(Максимальное значение)

Хорошо, если мы выдаем герою от одного до десяти гоблинов. Но если их окажется 300? А если мы хотим выдать герою 3946 зеленых гоблинов? Трудновато будет прописать все значения. И тут можно воспользоваться услугами, которые предоставляет триггер.
Локальные события – «Дать x зеленых гоблинов»
Задать числовую переменную «Greengoblins»…
Триггер «Дадим Игреку зеленых гоблинов»
Все. На этом можно закончить с локальными событиями.
Входим в настройки героя Y. Триггерные события.
Создаем триггер «Дадим Игреку зеленых гоблинов» (Рекомендую сначала создать триггер, а затем выбрать его из списка всех триггеров (в команде «Триггер события») в скрипте локального события «Дать x зеленых гоблинов»).
Условие «Если «Greengoblins»>0, то
Дать этой армии 1 зеленого гоблина
Присвоить значение переменной «Greengoblins» = «Greengoblins»-1
Триггер «Дадим Игреку зеленых гоблинов»
Теперь триггер будет перезапускаться, пока мы не выдадим Игреку всех зеленых гоблинов по одному. То же можно делать не только с войсками, но и с ресурсами.
К сожалению, есть серьезный недостаток этого пути: можно применять только к заранее установленным героям (Те, которые будут наняты, зеленых гоблинов не получат). Но, я думаю, авторам ролевых сценариев это пригодится.

Пример II. Снятие стражи.

Торговца артефактами охраняет стража в 200 копейщиков. Нам надо сделать так, чтобы стража не увеличивалась от времени.
Есть два пути для решения этой задачи. Попробуйте присвоить отряду копейщиков флаг, цвет которого не используется в этой игре. Тогда, естественно, войска не будут прибавляться. Но может случиться так, что все шесть игроков участвуют в игре (На заметку эквилибристам: увеличить число игроков и порталов). Тогда нам снова пригодится триггер.
Настройки отряда – триггерные события.
Создаем триггер «Дезертиры»
«Если количество воинов в этой армии >200
Отнять 1 копейщика
Триггер «Дезертиры»
Затем создаем календарное событие, которое будет повторяться через определенное время. В нем отметим всего одну команду
Триггер «Дезертиры»
Если количество копейщиков превысит 200, триггер будет отнимать по одному и перезапускаться, пока условие не перестанет быть истинным.

Пример III. Варианты вопроса
Кузнец хочет подарить нам меч, доспехи или шлем. Причем, без подарка от него уйти невозможно.
Первый вариант: создание скрипта, где
Задать вопрос «Хочешь меч»?
Если да, то
Дать меч
Иначе
Задать вопрос «Хочешь доспехи (да) или шлем (нет)?

Но этот вариант не выглядит красиво. Кроме того, а если игрок вдруг передумает и решит взять меч? И снова все делается триггером.
Прописываем в событии, где вы задавали вопросы, последовательность из одной команды: «Триггер «Кузнец»»
Пишем триггер «Кузнец»
Задать вопрос «Хочешь меч?»
Если нет, то
Задать вопрос «Хочешь доспехи?»
Если нет, то
Задать вопрос «Хочешь шлем?»
Если нет, то
Триггер «Кузнец»
Теперь кузнец будет спрашивать три этих вопроса, пока ему не ответят да.
Далее пропишем варианты «да.
«Хочешь меч?»
Если да, то
Задать переменную «Mech» на TRUE


Возвращаемся к нашему первому событию. Создаем три условия
Если переменная «Mech», то
Дать меч первому герою в этой армии



СЛОЖНЫЕ УСЛОВИЯ

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

Сначала немного теории. Все условия, которые мы можем создать в редакторе, являются булевскими уравнениями. Эти уравнения характерны тем, что их корнем может быть только ИСТИНА(1) или ЛОЖЬ (0).
В мае цветут деревья (1)
В России часты ураганы в начале мая (0)
Геройский портал – один из самых популярных геройских ресурсов (1)
Операцию ИЛИ называют также булевской суммой. Уравнение равно 1, если хотя бы одно из слагаемых равно 1.
Геройский портал очень популярен, или никто не знает об его существовании (1)
Операцию И называют булевским произведением. Уравнение равно 1, когда оба множителя равны 1.
Геройский портал очень популярен, и никто не знает об его существовании (0)
В мае цветут деревья, и Геройский портал – один из самых популярных геройских ресурсов (Оба соответствуют истине, следовательно, все произведение соответствуют истине – 1)
Операция НЕ меняет знак уравнения на противоположный.
НЕ в мае цветут деревья (0)
НЕ в России часты ураганы в начале мая (1)
Операция НЕ-И сначала умножает, а затем меняет знак на противоположный.
Операция НЕ-ИЛИ сначала складывает, а затем меняет знак на противоположный.

Практика.
На карте стоит один замок Плим. Герою надо захватить замок, чтобы пройти через гарнизон.
Условие: игрок владеет замок Плим.
Усложним задание: после того как герой захватит замок, через гарнизон может пройти только он.
Условие: игрок владеет замок Плим И эта армия владеет герой Герой (Чтобы добавить И, надо выбрать в условиях не игрок владеет замком, а сразу пролистать список до конца. Отдельная операция И разбивает условие на два окна).
Еще раз усложним задание.
После того как какой-то герой захватит замок, через гарнизон может пройти только он.
Нам придется создать такое условие (При условии ?, что всех героев, которые могут это сделать – четверо).
Создавайте условия по пунктам.
1. Создаем команду ИЛИ.
2. Создаем еще одну команду ИЛИ в любом появившемся окошке.
3. Создаем еще одну команду ИЛИ в любом появившемся окошке.
4. Создаем две команды И на верхнем уровне.
5. Теперь наше условие выглядит так – ИЛИ – ИЛИ – ИЛИ -И - И, с четырьмя пробелами для создания условий.
6. Вероятно, вы не тронули одного из окон в первом ИЛИ. В таком случае, заходим в него и пишем И. Если тронули, заходите в него, и пишите в обоих окошках И. Повторите ту же операцию в остальных. Нам надо, чтобы у нас получилось выражение (-И-)ИЛИ(-И-)ИЛИ(-И-)ИЛИ(-И-)И-И-
7. Допустим, что вы создали скрипт в событиях города, который присваивает определенное значение переменной Invader. Если город захватит Герой, она будет равна 1. Если Героиня – 2. Если Трус – 3. Если Трусиха – 4.
8. Теперь нам надо прописать значения каждого выражения (-И-)
9. Заходим в первое (-И-). В любом окошке пишем условие Invader=1, в другом эта армия владеет героем Герой
10. В другом (-И-) пишем Invader=2 И Эта армия владеет героем Героиня
11. В другом пишем Invader=3 И эта армия владеет героем Трус
12. В последнем будет Invader=4 И эта армия владеет героем Трусиха
13. Теперь наше выражение выглядит так (Invader=1 И эта армия владеет Герой ) ИЛИ (Invader=2 И Эта армия владеет Героиня ) ИЛИ (Invader=3 И эта армия владеет Трус) ИЛИ (Invader=4 И Эта армия владеет Трусиха)И-И-
14. В выражениях И, которое у нас осталось, следует написать, что данный игрок владеет замком Плим, И количество героев в этой армии =1.
Анкета История героя ЛС E-mail
В форму ответа Наверх
Перейти к столику:

Ответить

Таверна | Столик Картостроителей