Игровые форумы AGFC
Крупнейшее российское
игровое сообщество.

Десятки тысяч участников,
миллионы полезных
тем и сообщений.
Travel, Inc.
Портал, посвященный
адвенчурам и RPG.

Специализированные
новости и рецензии,
аналитические статьи.
Grand Theft AG
Самый крупный сайт
в России о серии GTA
и ее «детях» -
Mafia, Driv3r и т.п.

Новости, прохождения,
моды, полезные файлы.
Летописи Тамриэля
Один из крупнейших
в мире ресурсов
по играм серии
The Elder Scrolls.

Если вы любите Arena,
Daggerfall, Morrowind
и Oblivion -
не проходите мимо!
ГотикAG
Проект, посвященный
известному немецкому
RPG-сериалу Gothic.

Новости, моды, советы,
прохождения и еще
несколько тонн
полезной информации.
Wasteland Chronicles
Портал для любителей
постапокалиптических RPG.

В меню: все части
Fallout, Metalheart, The Fall,
Wasteland, Койоты и Ex Machina.
Magic Team
Ресурс, посвященный
вскрытию игровых
ресурсов и форматов.

Помимо советов
и описаний, содержит
программы от Magic Team,
позволяющие вытащить
данные из сотен игр.
Absolute Top + Мuзейm
Сайт ежегодного
голосования AG, где
читатели и редакция
определяют лучшие игры.

Архив старых голосований
работает круглосуточно
и без выходных.
Battles.ru
Выдалась свободная минутка?
Порадуйте себя забавными
Flash-играми!

На серверe Battles.ru
каждый найдет себе
милое развлечение.
Вольный Стрелок
Портал, посвященный
стратегическим играм
всех мастей и калибров.

Новости, рецензии,
скриншоты, файлы.
Проект временно заморожен.
Skive: Тенденции
компьютерного игростроения
Небанальные измышления
нашего коллеги Скайва
о том, что ждет
игровую индустрию.

Архив выпусков охватывает
без малого четыре года.
Проект временно заморожен.
Проект AG.ru Rambler's Top100Другие наши сайты »»
Посетите "Absolute Games"Перейти в корень сайта "Геройский Уголок"
Absolute Games
Обзор "BomberFUN"
Absolute Games
Обзор "Watch Me in My House"

Новости
FAQ
Форум
Советы

Карты
Турнир
Задачки

Герои
Замки
Монстры
Магия
Артефакты
Сражения
Кампании

Файлы
Прочее



 Геройский Уголок / Советы / MapCreators Guide
 

Scripting guide by Astor (v.1.1)

Содержание и цель гайда

Этот гайд создан в помощь всем начинающим картостроителям для Heroes 4. Он представляет подробный и абсолютно полный учебник/справочник по скриптовой системе Героев. В нем подробно описаны все команды, связанные с ними нюансы, а главное – выделены все ошибки в Героях, приводящие к некорректной работе команд. В гайде не описывается интерфейс редактора, не дается советов по прорисовке, созданию сюжетов для карт и прочим «внешним сторонам» карты. В конце гайда приведен список часто встречающихся ошибок на картах новичков. Это должно помочь избежать глупых, но порой очень опасных недоработок.

Что нужно знать о Героях перед прочтением гайда? Да практически ничего. Главное – уметь играть и обладать желанием разбираться во всем. Непосредственно перед началом гайда, пожалуй, стоит вспомнить лишь о порядке появления версий Героев 4.
Standard 1.0 - это самая первая версия героев. Содержала огромное число дурацких багов, поэтому в гайде она даже не рассматривается, поскольку на ней вы просто не сможете сделать более-менее интересную карту.
Standard 1.3 – пропатченная версия 1.0 В ней исправлены очень многие баги, и на ней уже можно как играть, так и творить. Некоторые карты, сделанные под версию 1.3, могут не открываться в версии 1.0. Подчеркиваю: именно некоторые. Большинство нормально открывается. Проблемы могут быть с картами, которые имеют сложную скриптовую систему.
Multiplayer 2.0 – мультиплеерный патч, который также исправил некоторые баги. Важно помнить, что карты, созданные в 2.0, не откроются в более младших версиях.
The Gathering storm, path 3.0, Winds of war – соответственно патч и два официальных адд-она. Для них верно то же правило возрастания версий: более поздние карты в более ранних не откроются. В Winds of war исправлено большинство багов (но все же не все!), поэтому и для игры, и для картостроения рекомендуется использовать именно ее.
Equilibris – неофициальный адд-он, пока находящийся в стадии разработки. На данный момент (август 2004) в нем уже исправлены некоторые баги скриптовой системы. Помимо исправления багов есть и качественные изменения игры, подробнее об этом на сайте http://www.strategyplanet.com/homm/equilibris/ Хотя карта для Equilibris в частных случаях может открываться и на обычных героях WoW, но играть в нее имеет смысл только под Eq.  

Изменения этой версии гайда 

Гайд писался в то время, когда Winds of War только что вышел, и у меня его еще не было, поэтому некоторые моменты, связанные с этим адд-оном, в предыдущих версиях упущены. Помимо множества мелких изменений (вроде исправления опечаток) сделано следующее: 

  • немного расширено описание Continuous event; 
  • полностью изменен раздел «Специфичные команды для городов» с учетом изменений WoW и найденного бага; 
  • указан баг, иногда появляющийся в скриптах entered 
  • добавлены приложения 1 и 2 с примерами основных ошибок и изменениями в Equilibris

Часть первая. Теория.

Введение: первые вопросы

Что такое скрипты и зачем они нужны?

Скрипт – это последовательность команд, влияющих на игровой процесс. Команды могут быть самыми разнообразными – от вывода сообщения до сражения с сотней черных драконов. Благодаря этому игровой процесс можно очень сильно разнообразить, особенно это касается одиночной игры. Скрипт входит в состав обработчика некоторого события (event), но разницы между понятиями event и скрипт практически нет, поэтому далее они будут употребляться как синонимы.

А где делаются скрипты?

Все скрипты пишутся в свойствах выбранного объекта, будь то герой, шахта или город. Окно редактирования скриптов находится в свойствах объекта, для вызова которого достаточно двойного щелчка мыши на этом объекте. В появившемся окне скорее всего несколько вкладок, нам же нужна только вкладка с названием events. Исключение составляют quest gate, quest tower, quest hut – у них другой принцип построения скриптов, который будет рассмотрен позже. Если требуется сделать скрипт, не связанный с конкретным объектом, то его можно создать в свойствах карты:

campaign->map properties (или просто нажатие ALT-ENTER) и снова вкладка events.

Там куча разных названий, что они означают?

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

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

  • Первый тип скриптов – это Timed events. Они срабатывают в начале заданного вами дня. Следует помнить, что для каждого игрока день как бы начинается заново, и скрипт сработает в заданный день для каждого игрока, а не только для того, кто ходит первым. При этом можно настроить, в чей ход скрипт сработает, а в чей – нет, но об этом ниже.
  • Второй тип - Triggeredable events. Эти скрипты начинают работать только по вызову из любого другого скрипта с помощью специальной команды. Сами по себе они работать не будут.
  • Третий тип - Continuous event. Такие скрипты работают параллельно с действиями игрока, как во время хода человека, так и во время хода компьютера.
  • И последний тип – это Placed events. Скрипт такого типа связывается с клетками на игровой карте и срабатывают в момент, когда на “помеченную” клетку “наступает” армия.

Скрипты для объектов могут сильно зависеть от типа объекта. Рассмотрим все эти типы.

1. Армии и герои. Первое, что следует отметить, это наличие пятой категории скриптов под названием Standard events. Данный тип, в свою очередь, делится на три других типа:

  • Encountered – срабатывает в момент встречи двух армий
  • Defeated – в случае полного поражения армии
  • Victorious – в случае победы этой армии над любым противником

Кроме этого, добавляются типы Timed, Triggeredable и Continuous, которые аналогичны вышеописанным, однако следует помнить, что сначала будут срабатывать Timed и Continuous скрипты, прописанные в свойствах карты. И еще одно очень важное замечание: скрипты всей армии и героя – это принципиально разные вещи. Чтобы изменить скрипт, связанный с героем, необходимо вызвать окно свойств героя. Это делается двойным щелчком на его строчке в составе армии. Placed events по понятным причинам отсутствуют у всех объектов: ведь этот тип скриптов связан не с объектами, а с клеткой карты. Примечание: если эти скрипты есть одновременно на обеих дерущихся армиях, то сначала сработают те, которые висят на атаковавшей армии.

2. Города, гарнизоны и обычные шахты. Типы Timed, Triggeredable и Continuous аналогичны вышеописанным, а вот группа Standard немного отличается:

  • Attacked – срабатывает в момент атаки гарнизона города или шахты вражеской армией
  • Captured – срабатывает сразу после взятия города или шахты вражеской армией
  • Victorious – запускается в случае победы армии гарнизона над осаждающей армией
  • Entered – по идее, запускается каждый раз, когда в город или шахту входит любая армия, но по непонятным причинам срабатывание иногда не происходит, а иногда происходит вылет! Мне не удалось понять, когда именно случается баг, но рекомендую не использовать этот тип скриптов.

3. Еженедельные шахты, жилища монстров и верфь. С этими объектами можно связать лишь один тип скриптов – Triggeredable.

4. Quest gate, quest tower, quest hut – это особый тип объектов, который будет рассмотрен позднее.

А как сделать новый скрипт?

Создание нового скрипта производится кнопкой NEW во вкладке events. После ее нажатия появится окно, в котором будет создаваться новый скрипт. Вид этого окна может различаться в зависимости от типа скрипта:

Timed event содержит 3 вкладки – General, Effects и Script.

Вкладка General:

Name – название скрипта. Название лучше делать осмысленным, чтобы оно соответствовало назначению скрипта. Иначе даже после небольшого перерыва в работе над картой разобраться в десятке названий вроде a1, a2, b3, e8 будет довольно сложно. Название является только информационным пунктом и никак не влияет на работу как этого, так и других скриптов.

First occurrence – это день, в который должен сработать скрипт. По умолчанию здесь стоит единица, т.е. скрипт запустится в первый же день игры.

Subsequent occurrences – период повторного срабатывания этого же скрипта. По умолчанию стоит Never – никогда, то есть скрипт сработает только один раз. Второй вариант – Every N days – означает, что скрипт снова запустится на N-ый день после первого срабатывания.

Only run if owner is для объекта или Only run if current player is для карты - этот параметр определяет, для какого игрока должен запускаться скрипт. Если выбран пункт…

Human – cкрипт запустится, только если это ход игрока-человека

Computer - cкрипт запустится, только если это ход компьютерного игрока

Red/Blue/Green/Orange/Purple/Teal/Nobody – скрипт запустится, если это ход игрока выбранного цвета. Примечание: эта вкладка в глобальных timed events имеет несколько другой вид: она называется Only run if current player is, а также отсутствует пункт nobody. На самом деле, его присутствие ничего не дает, так как из-за ошибки в героях ночное перемещение нейтралов за ход нейтрального игрока не считается, и для нейтральных монстров скрипты timed не работают. Ошибку можно преодолеть с помощью triggeredable (далее они будут чаще называться просто триггерами), но об этом в следующей части.

Вкладка Effects:

Display message – здесь можно набрать сообщение, которое будет выведено на экран при срабатывании этого скрипта.

Adjust materials – дать или взять ресурсы(+/-). Давать или брать – определяется для каждого ресурса по отдельности. По умолчанию во всех пунктах выбран “+”.

Примечание: этой вкладкой лучше не пользоваться, поскольку существуют специальные скриптовые команды для этих же действий, но более удобные в использовании. К тому же, переключаться между вкладками при очень большом количестве скриптов может мягко говоря надоесть.

Вкладка Script:

А вот здесь как раз и создается последовательность команд, которая называется скриптом. Как она создается – тема следующей части. Примечание: эта вкладка одинакова для абсолютно всех типов скриптов, поэтому далее она описываться не будет.

Triggeredable event также содержит эти 3 вкладки – General, Effects и Script, но вкладка General выглядит по-другому: в ней содержится лишь пункт Name – название скрипта. В отличие от Timed events, название играет очень важную роль. Ранее было сказано, что скрипты этого типа сами по себе не запускаются, а вызываются из других скриптов, но чтобы произвести этот вызов, необходимо указать именно название вызываемого скрипта. Из-за этого интуитивно понятное название куда важнее, чем для Timed events. Также очень важную роль играет совпадение названий у разных скриптов: два скрипта с одинаковым именем будут вызваны друг за другом, по очереди. Это свойство чрезвычайно полезно, однако при случайном дублировании названий появляются ошибки, которые достаточно трудно обнаружить. Будьте внимательны при создании нового скрипта.

Вкладки Effects и Script полностью аналогичны уже описанным.

Continuous event содержит лишь две вкладки: General и Script.

Вкладка General:

Если ивент задан в свойствах карты здесь указывается только название скрипта (Name), оно несет только информацию для создателя карты и не влияет на работу как этого, так и других скриптов. Если ивент висит на объекте, то появляются варианты Only run if owner is (как и в timed event), а также вариант Only run during owners turn – запускать скрипт только во время хода игрока, владеющего объектом. Условие Only run if owner is сильнее, то есть, при снятых флажках напротив цвета игрока в его ход скрипт запускаться не будет никогда..

Вкладка Script – аналогично Timed event

Placed event – снова три вкладки: General, Effects и Script. От аналогичных вкладок в Timed event отличается лишь General:

Вкладка General:

Name – название скрипта. В данном случае название играет не меньшую роль, чем в triggeredable events: связь клетки игровой карты и скрипта осуществляется именно с помощью названия, как и в случае с triggeredable. Но есть одно очень важное отличие: использование нескольких различных скриптов с одинаковым названием может повлечь за собой самые неожиданные ошибки. Никогда не дублируйте названия этих скриптов.

Only run if current player is – аналогично timed events – скрипт запустится для тех игроков, напротив которых стоят флажки.

Вкладки Effects и Script полностью аналогичны уже описанным.

Standard event – все аналогично для всех подкатегорий типа standard – вкладки General, Effects и Script.

Вкладка General:

Здесь только пункт Only run if owner is – условие запуска скрипта в зависимости от того, кто владеет данным объектом. Примечание: с событием captured есть небольшой нюанс: как только город захватили, его цвет стал цветом захватчика, и в данном случае owner – это захватчик, а не изначальный владелец города. Если нужна проверка на изначального владельца, то следует задействовать событие attacked.

Вкладки Effects и Script полностью аналогичны уже описанным.

 

А как связать placed event с клеткой карты?

Для осуществления этой связи есть специальный объект с одноименным названием. Найти его можно в группе adventure objects, вкладка miscellaneous (самая последняя в списке), и в самом ее низу находятся три “бочонка” с надписью “event”. Для установки связи необходимо:

  1. Создать placed event в свойствах карты. При этом он может не выполнять никаких действий, главное чтобы название было.
  2. Поставить на нужные клетки “бочонки”.
  3. Двойным щелчком вызвать свойства бочонка. Появится список всех созданных placed events. Выберите название нужного вам скрипта. При этом несколько бочонков могут быть связаны с одним и тем же скриптом. Тогда скрипт запустится при наступании армии на любой из бочонков с одинаковыми названиями.
  4. Не рекомендуется ставить на одну клетку несколько placed events – возможны непредвиденные ошибки.

Примечание: чтобы сделать несколько одинаковых бочонков, зажмите ctrl и перетаскивайте левой кнопкой мыши бочонок с уже выбранным названием. Как только отпустите кнопку – получите его копию. Это относится не только к бочонкам, но и ко всем объектам. Например, таким образом очень удобно делать стены и заборы.


Примеры скриптов

Все описанные ниже примеры содержатся на карте “Intro - examples/ Введение – примеры” (название файла “intro.h4c”). Рекомендации по изучению примеров – после описания.

Описание скриптов, имеющихся на этой карте.

Во-первых, примечание: поскольку использование вкладки script подразумевает знание команд, использоваться в этих примерах она не будет. Вместо этого задействована вкладка effects, но, как я уже говорил, в дальнейшем она употребляться не должна.

  1. Timed event “Give materials for player” – map properties. Во вкладке general флажки стоят напротив всех игроков, поэтому скрипт запустится не зависимо от цвета. На карте четыре игрока, поэтому скрипт запустится в первый ход для каждого из них, то есть в сумме четыре раза. При помощи вкладки effects каждому игроку будет выдано солидное количество ресурсов. Скрипт запускается только в первый день и не будет повторятся.
  2. Timed event “Give materials for human” – map properties. Теперь флажок напротив пункта computer снят – это означает, что для компьютерных игроков этот скрипт запускаться не будет. Все остальное аналогично предыдущему скрипту.
  3. Timed event “Give materials for red” – map properties. Здесь флажки стоят и напротив человека, и напротив компьютера, но вот среди “цветных вариантов” флажок только напротив красного – red. Это означает, что скрипт дает только красному игроку 999 золотых каждый день, не зависимо от того, человек это, или компьютер. Каждодневное срабатывание организовано за счет subsequent occurrences. В этом параметре выбрано значение 1 – то есть срабатывание каждый день.
  4. Timed event “Take materials from green human” – map properties. У этого скрипта флажки только напротив human и green. Это значит, что скрипт запустится только для зеленого игрока и только если за него играет человек. Первый раз он сработает во второй день: параметр day of first occurrence установлен на значение 2, а потом будет запускаться через два дня на третий – subsequent occurrences 3.
  5. Timed event “If Green Hero is alive” - green hero1 и green hero2. Этот скрипт находится в свойствах зеленых героев (подчеркиваю: героев, а не армий). Каждый день он дает зеленому игроку 1000 кристаллов. Если вдруг герой погибнет (для этого “вдруг” предназначены черные драконы), то кристаллы все равно будут выдаваться. Но если бы герой попал в тюрьму города (герой с номером 2), то выдача прекратится. После воскрешения героя в соседнем святилище скрипт будет по-прежнему продолжать работать (драконы будут уничтожены после сражения, и могилку героя сможет забрать спрайт).
  6. Timed event “Check color” - hero from prison. Свойства героя, находящегося в тюрьме, вызываются двойным щелчком на этой самой тюрьме. В данном случае, если этот герой имеет красный или оранжевый цвет, то есть был освобожден героем этих цветов, будет выведено соответствующее сообщение. Выводиться оно будет каждый день. Стоит также заметить, что скрипт на герое срабатывает только в ход того игрока, которому принадлежит этот герой. В этом его отличие от глобальных скриптов.
  7. Timed event “Check color2” - hero from prison. Аналогично предыдущему, но проверка на другую пару цветов – синий и зеленый.
  8. Placed event “Pass1” - если на него наступает игрок-человек, то у него отнимается 50 драгоценных камней.
  9. Placed event “Red or blue” - если на него наступает красный или синий игрок-человек, то выводится соответствующее сообщение.
  10. Standard event; orange army с героем Orange knight: defeated - вывод соответствующего сообщения в случае поражения всей армии. Примечание: не разделяйте эту армию, из-за этого данный скрипт может быть поврежден
  11. Standard event; Orange knight: defeated - отличие от предыдущего примера в том, что этот скрипт сработает в случае поражения героя, хотя армия при этом может одержать победу.
  12. Standard event; dwarves: encountered – как только вы нападете на дварфов, будет выведено соответствующее сообщение.

Советы по изучению: на карте пять игроков, из них бирюзовый всегда только компьютер. Остальные игроки находятся в команде, поэтому нападать на вас не будут, даже если будут компьютерными. Для экспериментов лучше сыграть сразу за всех этих игроков сразу – так работа скриптов будет более наглядной. Несколько раз можете просто завершить ход, потом отправьте в сражение зеленых героев и посмотрите как изменится выдача кристаллов после их смерти. Освободите героя из тюрьмы. Пройдите несколько раз в проходах в стенах. После этого все скрипты, кроме 10 и 11 будут задействованы (при условии, что за всех четырех игроков одновременно играет человек. Чтобы так сделать, поставьте при выборе сценария флажки напротив каждого цвета, кроме бирюзового).
Для демонстрации 10 и 11 придется сыграть 2 раза. Теперь достаточно выбрать человеком только оранжевого игрока. Нападите на дварфов. Героя выставите “на передовую”, чтобы он был убит, а потом уничтожьте врага эльфами. В результате сработает скрипт 11. Начните заново (restart), и нападите на птиц грома. Теперь уничтожена вся армия, и сработает как 10, так и 11.

Важное замечание. Чуть выше было отмечено, что в примере (10) армию нельзя разделять. Теперь этому будет дано объяснение. Дело в том, что при разделении армии скрипт останется на более сильной ее части (сила армии определяется по сумме experience points всех входящих в нее монстров), а на более слабой части скрипта не будет. При соединении армий действуют аналогичные правила: если объединить две армии, на которых были скрипты, то после объединения останется только тот скрипт, который висел на более сильной армии. Скрипт на более слабой армии будет просто удален. Но иногда последствия разделения бывают и более серьезными, особенно при наличии триггеров: игра может просто зависнуть. Чтобы избежать этого, старайтесь все скрипты вешать на героя, а не на армию. Однако это не всегда возможно. Как поступать в таком случае, будет рассказано после описания команд.


Какие бывают команды

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

А где писать команды?

Все команды создаются во вкладке script. Если открыть ее, мы увидим комментарий What action do you wish to create?, а под ним список, в котором выбран вариант Sequence. О том, что это такое, следует рассказать подробно. Sequence в переводе с английского – последовательность, в данном случае это последовательность команд. Sequence позволяет использовать в скрипте несколько команд, которые будут выполнены в порядке очередности. Последовательность может состоять и из одной команды. Более того, если вам нужно создать скрипт только из одной команды, все равно следует использовать sequence, поскольку в противном случае добавление новых команд будет невозможно. Проще говоря, никогда не меняйте этот пункт.

Для добавления команды в последовательность служит кнопка new. После ее нажатия появится окно с заголовком CREATE ACTION, в котором будет представлен список доступных этому скрипту команд. В зависимости от типа скрипта, он может весьма сильно варьироваться. В списке команд следует выбрать нужную, настроить ее, после чего нажать кнопку ОК. Далее можно создавать следующую команду. При этом в списке окна CREATE ACTION также есть пункт sequence, то есть можно создать последовательность внутри последовательности. Это бывает удобно, если скрипт очень длинный, и есть необходимость разделить однотипные команды.

Ну а теперь собственно о командах.


Простейшие команды. Бонусы и гадости.

Под этим названием понимаются различные усиления и ослабления игроков и их армий.

Ресурсы

Ресурсы можно давать и забирать. Для этого существуют две команды: give materials и take materials. Данные команды есть абсолютно во всех типах скриптов.

Give materials

Select target – определяет, кому давать ресурсы. Current player – дать ресурсы игроку, который ходит в данный момент, то есть который активировал скрипт. Остальные варианты – дать ресурсы игроку заданного цвета.

Ниже приведен список ресурсов, в котором можно ввести их количество. ВНИМАНИЕ!

В английском редакторе версии Gathering storm и ниже допущена ошибка: пункт ore написан два раза но отсутствует пункт crystals. На самом деле он есть: это нижний из пунктов ore. Это надо просто запомнить.

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

Take materials – все полностью аналогично команде give materials.

Усиление и ослабление армий и героев

К этому разделу относятся всевозможные изменения характеристик героев и армий. Прежде чем перейти их описанию, следует рассмотреть их общий параметр – target, то есть “цель”. Для разных типов скриптов эта цель может быть разной. Рассмотрим все варианты, пока не связывая их со скриптами.

This hero – “этот” герой. Пункт есть в свойствах героя и означает, что изменение коснется только героя, на котором висит скрипт.

Any hero – любой герой. Он выбирается случайным образом.

This army – “эта” армия. Также находится в свойствах героя, города, армии, гарнизона и шахты; означает, что изменение подействует на всю армию, в которой находится герой со скриптом.

Opposing army – противостоящая армия. Находится в свойствах standard всех объектов. Изменение подействует на армию, которая атаковала объект со скриптом.

First hero in this army – первый герой в армии. Находится в свойствах армии или героя. Первый герой определяется по построению армии.

Most powerful hero in this army – Самый сильный герой в армии. Находится в свойствах армии или героя. Портрет самого сильного героя в армии высвечивается в списке армий непосредственно на экране игры.

Least powerful hero in this army – Самый слабый герой в армии. Находится в свойствах армии или героя. Однозначно определить самого слабого героя возможно не всегда, особенно если несколько героев имеют одинаковый уровень.

First hero in garrison, Most powerful hero in garrison, Least powerful hero in garrison – находится в свойствах гарнизона, города или шахты. Соответственно, изменение подействует на героя, находящегося в гарнизоне. First, Most/Least powerful определяется аналогично вышеописанным пунктам.

First hero in opposing army, Most powerful hero in opposing army, Least powerful hero in opposing army – все аналогично вышеописанному; действие произведется с соответствующим героем в атакующей армии. Встречается только в свойствах standard.

Теперь можно перейти непосредственно к рассмотрению команд.

Бонусы

Give artifacts – дать артефакты. Их список задается в нижнем окне. Добавление артефакта в список – кнопка new. Вам предложат на выбор все возможные артефакты, а также свитки и пергаменты с заклинаниями. Для них вам надо будет указать и конкретное заклинание – это делается двойным щелчком на строчке parchment и scroll в списке выбора. Для обычных артефактов двойной щелчок добавляет артефакт в список выдачи. Помните, что добавленный в список артефакт нельзя изменить: его можно только удалить, поэтому заранее определяйте список для выдачи, чтобы избежать лишней работы.

Give creatures – дать монстров. Нужный монстр выбирается из соответствующего списка. По идее, он должен быть упорядочен по алфавиту, однако это не всегда так: некоторые названия занимают не свое место. Если найти нужную тварь не получается, то следует выделить любое существо, а после нажать на клавиатуре первую букву названия нужного существа, возможно несколько раз. Следите за раскладкой клавиатуры! Русские и английские буквы в данном случае различны.

Количество монстров определяется пунктом ниже.

Give skill – дает герою, выбранному в target, заданный скилл из списка. При этом если у героя не хватает каких-то навыков для получения заданного скилла, то они также будут выданы. Пример: если герою без ветки Tactics сразу дать Grandmaster (далее GM) Tactics, то он также получит и необходимые Expert Offence и Defense.

Give spell – дать герою заклинание, выбранное в списке ниже. Герой должен обладать необходимым магическим навыком, иначе бонус уйдет впустую.

Increase attack – увеличивает атаку героя на величину amount. Варианты until next battle и permanently означают следующее: permanently – бонус навсегда останется у героя; until next battle – бонус пропадет после следующей битвы, как в случае с фонтанами, повышающими мораль и удачу. Max amount = 99.

Increase current movementНЕ РАБОТАЕТ. По идее команда должна увеличивать текущий запас хода у армии, но из-за ошибки разработчиков она не работает, а точнее, работает неправильно: если выставить параметр amount на максимум (50 единиц), то к перемещению прибавится одна единица. Если вызывать эту команду с максимальным параметром несколько раз подряд, то срабатывать она будет не всегда, а через раз.

Increase current spell points – увеличивает текущее количество маны у героя. Предельное (максимальное) значение маны с помощью этой команды НЕ может быть превышено. Max amount = 99.

Increase defenseНЕ РАБОТАЕТ В ВЕРСИЯХ МЛАДШЕ 3.0 Еще одна неработающая команда. По идее должна увеличиваться защита героя на значение amount, однако вместо защиты увеличивается атака на заданное число. Max amount = 99.

Increase experience – увеличивает количество опыта у героя. Величина задается в единицах опыта. Внимание: опыт и уровень опыта – это разные вещи. Здесь увеличивается именно опыт, как если бы вы взяли сундук или посетили объект learning stone. Примечание для версий ниже 3.0: если при получении опыта посредством скрипта герой получит следующий уровень, то навык, который ему достанется, будет выдан автоматически. Игрок не может повлиять на выбор компьютера. Это исправлено в версии 3.0, но поскольку в вашу карту люди могут играть и на более ранних версиях героев (если, конечно, у вас редактор младше 3.0), следует помнить эту особенность. Max amount = 10^7 - 1.

Increase experience level – а вот эта команда увеличивает уровень опыта. Величина задается в уровнях опыта. Примечания: их несколько! Во-первых, в версиях ниже 3.0 аналогично предыдущему пункту, нельзя выбирать умения при повышении: компьютер сам выдаст их случайным образом. Во-вторых в версиях ниже 3.0, иногда герой может не перейти в новый продвинутый подкласс при повышении. В таком случае переход состоится при следующем повышении уровня (при условии, что оно не скриптовое и сработает на 100%). Иногда это происходит и с только что описанной командой increase experience.
В-третьих, во всех версиях из-за ошибки разработчиков уровень увеличивается не на amount, а на число, меньшее amount. Чем больше повышение и чем выше уже имеющийся уровень героя, тем больше коэффициент деления. Например, если выставить amount 20 для героя 1-ого уровня, то он поднимется на 13 уровней, то есть станет 14 уровня. Если же он был 11 уровня, то при amount 20 он поднимется всего лишь на 6 уровней, то есть до 19 уровня. Заранее предсказать увеличение уровня опыта не представляется возможным: величины различны даже в разных скриптах, не говоря уж о разных картах и версиях.
Max amount = 70.

Increase luck – увеличивает удачу на заданное число. Max amount = 20.

Increase maximum spell points – увеличивает максимальный запас маны у героя на заданное число. При этом сама мана не прибавляется. Чтобы дополнить ее количество до нового максимума, следует использовать increase current spell points. Max = 99.

Increase morale – увеличивает мораль на заданное число. Max amount = 20.

Increase skill – поднимает уровень скилла на amount. Поднятие происходит по аналогии с командой give skill: если для повышения необходимы дополнительные скиллы, то они будут выданы. Но есть и отличие от предыдущей команды: amount в данном случае обозначает суммарное количество скиллов, то есть если для героя без тактики сработал скрипт на повышении тактики на 5, то герой получит expert tactics и необходимые basic offence и basic defense, то есть в сумме 5 скиллов. Если число выставлено “с перебором”, то излишек пропадет. Max amount = 5.

Increase speed – увеличивает скорость героя на amount. Max amount = 99.

Гадости.

Для того, чтобы ослабить героев, существует ряд команд, противоположных командам increase. Соответственно, начинаются они со слова decrease. Все их параметры полностью аналогичны командам усилений, поэтому привожу только список команд: Decrease attack, Decrease current spell points, Decrease defense, Decrease luck, Decrease maximum spell points, Decrease morale, Decrease speed. Легко заметить, что возможность понизить количество или уровень опыта, а также скиллы, отсутствует. К сожалению, сделать это нельзя и с помощью других команд.

Несколько общих замечаний.

  1. Поскольку команды increase/decrease действуют на героя или армию, их нет в глобальных timed events, continuous events и triggeredable events, так как они не могут быть связаны с определенными героями и армиями. Эти типы использовать непосредственно в свойствах героев и армий.
  2. Все эти изменения будут производиться без выдачи какого-либо текстового уведомления игрока. В принципе, этих изменений можно просто не заметить. Иногда это бывает полезно, но иногда и наоборот. Как добавить к командам комментарий, описано далее.
  3. Команды, связанные с изменением удачи и морали, иногда приводят к странным результатам: происходит накопление эффекта, то есть после боя изменение продолжает действовать. Из-за этого иногда можно наблюдать мораль и/или удачу со значением вплоть до +255. В глубокий минус параметры не уходят: ошибка с уменьшением при накоплении вызывает неконтролируемое появление очень высокой положительной морали.

 

Вывод сообщений

Для вывода сообщений помимо вкладки effects существует специальная команда:

Display message. При ее выборе появится окно с двумя полями: message и subactions.

Message в этом поле вводится непосредственно текст сообщения. Отличие этого поля от аналогичного во вкладке effects в том, что здесь можно использовать переход на новую строку, то есть нажатие на клавишу Enter вызывает тот же эффект, что и в любом текстовом редакторе (во вкладке effects весь текст вводится сплошным куском без возможности начать новый абзац).

Subactions а вот об этом стоит рассказать подробнее. Как уже говорилось выше, все команды типа increase, decrease, give и take происходят без какого-либо уведомления. Subactions служат для того, чтобы при необходимости вывести соответствующее сообщение. При нажатии на кнопку New появится окно выбора команд, в списке которого находятся команды, рассмотренные в предыдущей части. Работа с ними производится абсолютно аналогичным образом. По умолчанию в списке выбрано do nothing. Как результат работы Subactions, в игре под выведенным текстом появится графическое отображение бонуса, к примеру: кристалл и рядом “+10”. Примечание: в глобальных timed events, continuous events и triggeredable events доступны только действия give/take materials, по причине, описанной в первом замечании в предыдущем разделе.

Выигрыш и проигрыш игрока

Карты для четвертых героев во многом отличаются от карт для предыдущих версий (кроме Heroes 3.5 WoG) тем, что победа и поражение могут быть заданы в скрипте, а не только в свойствах карты. Для этого существуют две команды:

Lose немедленное поражение. У этой команды только одно поле: Which player? В нем, собственно, и задается, какой игрок проиграет. Current player – проиграет игрок, для которого запустился скрипт, то есть который ходит в данный момент. Red, blue, green, orange, purple, teal – проиграет игрок выбранного цвета.

Win – немедленная победа. Все полностью аналогично команде lose.

Удаление объектов

Еще одно отличие карт героев номер 4 – возможность уничтожения игровых объектов на карте. Делается это с помощью скриптов и специального объекта - editor bomb. Итак, для того, чтобы удалить какой-либо объект нужно выполнить следующие действия:

  1. Поставить бомбу на клетку, которую занимает объект. Бомба находится внизу вкладки adventure objects->miscellaneous, рядом с placed event. Если объект занимает несколько клеток, то достаточно поставить бомбу на одну любую его клетку. Внимание! Бомба удалит ВСЕ объекты, которые занимают клетку. Если объекты могут наслаиваться друг на друга, то место для бомбы надо выбирать очень внимательно.
  2. Дать бомбе имя. Для этого надо вызвать ее свойства (двойной щелчок мыши на ней) и ввести имя, либо выбрать уже существующее. Если несколько бомб имеют одно имя, то они сработают одновременно. Это бывает удобно, если надо удалить, например, кусок стены. Имя достаточно ввести только один раз, далее оно будет занесено в выпадающий список.
  3. Использовать команду скрипта для удаления объектов, которая называется
    Delete adventure objects. В поле select marker name надо указать имя бомбы, которую нужно “взорвать”. После этого все бомбы с выбранным именем будут “взорваны”, а объекты под ними удалены.

Важные примечания.

  1. Бомбы удаляют и объекты-украшения, вроде травы и цветов. Проверьте, не появится ли на карте после удаления большая “лысина” без украшений.
  2. Бомбы не удаляют некоторые типы объектов! К ним относятся: города, гарнизоны, армии (как имеющие цвет, так и нейтральные), корабли (пустые и с армией), действующие шахты (не построенные или заброшенные нормально удаляются), а также святилища (sanctuary и sea sanctuary).

 

Активация triggeredable events

Активация триггера производится командой trigger custom event. В поле select event name нужно выбрать имя триггера, который необходимо активировать. Несколько замечаний:

  1. Сначала надо создать сам триггер и присвоить ему имя, чтобы оно появилось в списке. При этом сам скрипт триггера может быть написан позднее, главное – добавить имя в список, чтобы не вводить его вручную. Следует помнить, что имя триггера будет добавлено в список только после закрытия всех окон редактирования скриптов. Например, если вы создали триггер в свойствах карты и хотите использовать его в placed events, то сначала вам придется закрыть окно map properties (с помощью кнопки ОК, разумеется, а не комбинации ALT-F4 или кнопки cancel).
  2. В списке будут ВСЕ триггеры, которые только есть на карте, не зависимо от того, где они находятся – в глобальных свойствах, или в свойствах шахты, города, и. т. д. Это дает весьма широкие возможности для связи объектов через триггеры. Подробнее об этом написано в примерах.
  3. Если в вызывающем скрипте после команды вызова триггера есть другие команды, то они будут выполнены после того, как триггер завершит свою работу.
  4. Если есть несколько триггеров с одинаковым названием, то выполнены будут все.

 

Удаление скриптов

Скорее всего, многие скрипты на вашей карте должны будут сработать только один раз. Для этого после выполнения они должны быть удалены. Удаление скрипта производится командой remove script. При этом стоит отметить, что скрипт будет удален только после его выполнения, то есть местоположение remove script не имеет значения - хоть в первой строчке. Но лучше ставить эту команду там, где нужно, то есть после всех действий: а вдруг в очередном патче решат сделать по-другому? В одном скрипте может быть несколько команд remove script: это возможно, когда присутствует ветвление. О ветвлениях будет рассказано далее.

Еще одна команда удаления - remove this object, то есть удаление объекта. Существует она только в placed events. При ее активации будет удален сам “бочонок” placed event’a, или ящик Пандоры – в зависимости от того, с чем был связан скрипт. Но все остальные ивенты и ящики с тем же именем, что и удаленный, останутся на карте. Эта команда применяется в основном для ящиков Пандоры, чтобы после их открытия они исчезали, в то время как команда remove script не удаляет сам объект: при ее использовании ящик останется на том же месте, но при попытке его взять ничего не произойдет.

Настройка условий победы и поражения игрока

Здесь будут рассмотрены команды, изменяющие стандартные условия победы, а также выдающие соответствующее сообщение. Примечание: стандартные условия победы – уничтожить все вражеские армии и захватить все вражеские города. Всего существует 10 команд этого типа (вышеописанные win/lose к этому разделу не относятся).

Disable standard victory condition – отключить стандартные условия победы для игрока, выбранного в списке Which player?. После активации этой команды уничтожение всех вражеских армий и захват всех вражеских городов не приведет к победе. При отключенных стандартных условиях победы необходимо создать скрипт для “нестандартных” условий, победа в котором будет реализована командой win.

Enable standard victory condition – включить стандартные условия победы для игрока, выбранного в списке Which player?. При этом победа может быть достигнута и альтернативным путем с помощью команды win: стандартные условия существуют независимо от скриптов, дающих победу и не блокируют их.

Clear loss condition description – очищает окно, в котором содержатся условия поражения для игрока, выбранного в списке Which player?. В игре это окно находится в Game menu, пункт Scenario description.

Clear loss message – удаляет сообщение, которое будет выведено при поражении выбранного игрока. Стандартное сообщение - <color> player has been eliminated.

Clear victory condition description – очищает окно, в котором содержатся условия победы для выбранного игрока. Эти условия также находятся в Game menu, пункт Scenario description.

Clear victory message – удаляет сообщение, которое будет выведено при победе выбранного игрока. Стандартного сообщения для победы нет.

Set loss condition description – устанавливает текстовое описание условий поражения для игрока, выбранного в списке Which player?. Как уже говорилось, это описание находится в Game menu, пункт Scenario description. Старое описание автоматически удаляется.Set loss message – устанавливает сообщение, которое будет выведено при поражении выбранного игрока. Стандартное сообщение при этом удаляется автоматически.

Set victory condition description – устанавливает текстовое описание условий победы для игрока, выбранного в списке Which player?. Старое описание автоматически удаляется.

Set victory message – устанавливает сообщение, которое будет выведено при победе выбранного игрока. Стандартное сообщение при этом удаляется автоматически.

Важные примечания: большая часть этих команд по каким-то причинам или не работает, или работает некорректно. Подробнее:

  1. Иногда проверка на выполнение стандартных условий победы не срабатывает, и, хотя все вражеские игроки уничтожены, победа не происходит, поэтому полагаться на эти условия лучше не надо. Сами команды enable/disable работают корректно.
  2. Сообщение loss message мне изменить так и не удалось – команды clear и set loss message никаких результатов не дали.
  3. Вывести victory message также не удалось.

 

Специфичные команды для городов

В свойствах городов есть две специфические команды: это создание строения и увеличение популяции двеллинга. Подробнее:

Construct building – построить в городе строение. Какое именно строение – выбирается из списка. В одной команде можно строить только одно строение. К этой команде есть несколько важных замечаний:

  1. Для каждого из шести типов городов существует свой уникальный список построек, что вполне очевидно, а вот в списке для случайного города есть только общие для всех городов постройки, такие как цитадель, замок, двеллинги всех четырех уровней, и.т.д. Строение, поставляющее напитки и артефакты класса items есть во всех городах, но называется по-разному, поэтому в списке случайного города оно значится под общим названием blacksmith.
  2. Если попытаться построить уже построенное здание, то возможно два варианта: если это двеллинг, то его популяция будет установлена на (weekly growth)/2, не зависимо от того, сколько в нем было существ до этого. Если это не двеллинг, то внешне ничего не произойдет, но здание формально как бы будет перестроено заново. При перестройке магической гильдии заклинания не меняются.
  3. Команда может построить любое запрещенное здание, например верфь, хотя город не имеет доступа к воде.
  4. Из пункта 3 следует, что можно построить сразу оба взаимоисключающих двеллинга, но делать это нужно крайне осторожно: игра может вылететь при заходе в экран города. Это произойдет в следующих случаях: а) Если в сумме в городе семь и более двеллингов, и вы войдете в экран города; б)Если в городе в сумме 6 и более двеллингов, и вы войдете в экран форта/замка/цитадели, при этом в сам экран города войти можно без вылетов. Еще одним побочным эффектом является наложение картинок-изображений двеллингов.
  5. Команда может построить Грааль.
  6. Если для строения, выбранного в списке, требуются еще какие-то строения, то они построены НЕ БУДУТ – строится только здание, заданное в скрипте.
  7. Если вы выводите сообщение c construct building в subactions, то команда сработает корректно, но никакого ее отображения при выводе сообщения не произойдет. Это баг героев.

Increase dwelling populationНЕ РАБОТАЕТ В ВЕРСИЯХ НИЖЕ 3.0. увеличивает количество доступных для найма существ в выбранном двеллинге на amount. Двеллинг должен существовать, иначе команда уйдет впустую. В версиях ниже 3.0 команда уйдет впустую в любом случае.

Decrease dwelling population – полностью аналогично предыдущему для уменьшения количества.

Примечание. Нетривиальное применение команд городов.

Команды для уменьшения популяции нет вообще, однако можно использовать отмеченную особенность с перестройкой двеллинга: популяция устанавливается на (weekly growth)/2, а потом использовать Increase dwelling population. При этом надо учитывать следующие факты: можно вместо перестройки построить здание впервые и здорово помочь игроку; и можно увеличить популяцию слишком сильно, т.е. вместо уменьшения получим увеличение.

С помощью этого принципа можно установить определенную популяцию, поскольку все значения weekly growth известны (их можно найти в таблице по существам на ГУ).

Если запихнуть подобный скрипт в тайм ивент, то получится “поддержка популяции на заданном уровне”. Можно придумать и значительно более сложные алгоритмы: возможностей масса, лишь бы фантазия была.

Скриптовый бой

Помимо обычных сражений с нейтралами и вражескими армиями может произойти сражение еще одного типа: это бой, вызванный скриптом. Создается такой бой командой Combat. Команда есть в любом скрипте, связанном с армией, а также в placed events. В ее окне есть три вкладки: target – кто будет драться со стороны игрока (не обязательно человека). Opponents – с кем будет драться игрок: стандартные семь слотов, в которые можно поместить любое существо, но НЕЛЬЗЯ поместить героя. Branches - НЕ РАБОТАЕТ! По замыслу здесь должны прописываться действия, происходящие соответственно после победы или поражения. Однако при любом раскладе будут выполнены действия из ветки 
if defeated. Если боитесь забыть, какая из веток не работает, то просто не используйте их, а пишите продолжение скрипта после команды combat.

Особенности команды Combat.

  1. Во время скриптового боя нельзя сохраняться, в отличие от боя обычного.
  2. При срабатывании скрипта НЕ срабатывают encountered-скрипты у армий, но срабатывают у героев. Аналогично, после боя у армий НЕ срабатывают скрипты defeated и victorious, но срабатывают у героев.
  3. 3. Из скриптового боя можно убегать с теми же правилами, что и из обычного. Картостроителю нужно помнить об этом, так как после побега скрипт, из которого было произведено сражение, продолжает работать. В лучшем случае это будет выглядеть нелогично, в худшем – приведет к фатальным багам из-за не вовремя измененных (или вовремя не измененных) переменных. Как способ решения проблемы в частном случае можно предложить такой вариант: если заранее известен герой, который будет драться в этом сражении, то перед сражением можно выдать ему артефакт shackles of war с помощью висящего на нем triggeredable event, а после сражения – забрать его, тоже триггером. Однако если у героя нет свободных слотов для этого артефакта, то побег предотвратить не удастся. Еще один вариант – на все города повесить triggeredable event, который перед боем сменит все города игрока на нейтральный цвет. Главное – не забудьте после боя вернуть города обратно!
  4. Команды Combat нет в свойствах attacked, defeated и encountered.

Вопрос игроку

В героях можно задать игроку вопрос, на который он может ответить да, или нет. Производится это командой Ask question. Использовать ее очень просто: в поле Ask надо ввести текст вопроса, а в полях If yes и If no соответственно прописываются последовательности (sequence) команд, которые выполнятся в случае положительного или отрицательного ответа игрока. В игре это будет выглядеть так: текст вопроса, под ним две стандартные кнопки “галочка” и “крестик”. Нажатие на галочку равнозначно ответу “да”. Учитывая это, вопрос нужно придумывать таким образом, чтобы было четко определено, что есть “да”, а что есть “нет”. Можно отрешиться от да/нет, а просто написать, что нажатие галочки равносильно одному действию, крестика – другому.
Пример текста подобного вопроса: “нажмите да, чтобы купить броню, нет – чтобы купить меч”.

 

Переменные и условия

Общая информация

Основные сведения о переменных

В геройской скриптовой системе есть возможность использовать переменные. О том, что такое переменная, я рассказывать не буду – если вы вообще не знакомы с этим понятием, то обратитесь к любой книжке по программированию хоть на basic’e: там это будет описано лучше и понятнее, чем описал бы я. В героях использовано два типа переменных: логические и целочисленные. Логические могут принимать значения TRUE или FALSE, применять вместо них 0 и 1 нельзя.

Целочисленные переменные, судя по всему, относятся к типу long int, однако в редакторе присвоить переменной значение, по модулю превосходящее 32767, не получится: “избыток” будет автоматически отброшен. Однако, к примеру, можно придать значение 40000, использую операцию сложения: 20000+20000, и оно будет корректно сохранено. Скорее всего, ограничение вызвано свойствами поля ввода и не связано со скриптовой системой.

С переменными можно проделывать стандартные операции: придавать им значения и сравнивать их. Значение переменной нельзя вывести на экран, нельзя выдать количество ресурсов/монстров/и.т.д., равное переменной – проще говоря, переменные можно использовать только внутри скрипта, а ее значение может быть отображено в игре только косвенным образом.

Установка значений производится командами Set boolean (TRUE/FALSE) variable и Set numeric variable.

Основные сведения об условиях

Для сравнений в скриптовой системе реализована стандартная конструкция
if(<условие>) then {действия, если условие выполнено} else { действия, если условие НЕ выполнено }. Опять же, если вы абсолютно не знакомы с условиями, то можно обратиться к основам программирования. В качестве условия может выступать один из предустановленных вариантов. О них – чуть ниже. Действия – это самая обычная последовательность (sequence) команд.

Само условие в скриптовой называется Conditional action.

Возможные условия

Здесь будет описаны все условия, которые могут быть задействованы в скрипте.

AND – логическое “и”. Условие истинно, если истинны оба условия, заданные в AND. Сами условия могут быть любыми из этого списка.

Can give skillНЕ РАБОТАЕТ. По идее, оно должно быть истинным, если герой может получить заданный навык, однако на деле получается абсолютная чушь. Это баг героев, исправить его нельзя. Условие должно быть связано с героем, т.е. этот пункт появится только если скрипт находится в свойствах героя, армии, города, и.т.п. – там, где может быть герой (это уточнение дано на тот случай, если баг все же когда-нибудь исправят (что вообще-то маловероятно), и условие можно будет использовать).

Certain hero is dead – условие верно, если герой, выбранный из списка, убит и не находится в тюрьме. Внимание: имя героя должно быть уникальным, т.е. должно быть введено вручную и существовать в единственном экземпляре. Если на карте будет два героя с одинаковым введенным именем, то заранее не известно, какой именно герой будет проверен. Если в таверне будет нанят герой с таким же именем, как и в проверке, то он в проверку не попадет. ВНИМАНИЕ! Если герой, имя которого находится в проверке, был уволен (dismiss, клавиша d), или бежал от битвы (был выбран вариант Let them run, когда значительно более сильная армия напала на врага), то проверка почти НА 100% ПРИВЕДЕТ К ВЫЛЕТУ ИГРЫ! Если игра не вылетит, то герой будет считаться живым, и условие будет считаться не верным. Этот факт обязательно надо учитывать при создании подобных проверок.

Certain hero is in prison – условие верно, если герой находится в тюрьме замка. Примечание: если герой сидит в тюрьме на карте (объект prison), то это за выполнение условия не считается – проверяются только тюрьмы городов. По поводу имен героев примечания те же, что и в предыдущем пункте.

Equals – условие верно, если численное значение верхнего поля равно численному значению нижнего поля. О том, что может быть в этих полях, чуть ниже, в разделе Сравнения.

FALSE – условие ВСЕГДА ложно. Имеет смысл только когда надо поставить на карту “вечный” квестовый домик/башню/ворота. Непосредственно в conditional action оно не имеет смысла.

Greater than - условие верно, если численное значение верхнего поля больше численного значения нижнего поля.

Greater than or equals - условие верно, если численное значение верхнего поля больше или равно численному значению нижнего поля.

Has alignmentусловие должно быть связано с армией – этот пункт есть только там, где есть армия (герой, армия, гарнизон, и.т.д.). Условие верно, если в <target> есть существа или герои заданной расы. Поле <target> может меняться в зависимости от местонахождения скрипта.

Has artifact – условие верно, если <target> обладает заданным артефактом. Примечание: это условие не обязательно должно быть связано с армией, поскольку в поле target есть варианты Red player, Blue player, и.т.д. – то есть проверяется принадлежность артефакта какому-либо игроку, а где именно он находится – не имеет значения.

Has certain heroусловие должно быть связано с армией – этот пункт есть только там, где есть армия (герой, армия, гарнизон, и.т.д.). Условие верно, если в армии, с которой связан скрипт, есть заданный герой. Примечание к именам героев все те же.

Less than - условие верно, если численное значение верхнего поля меньше численного значения нижнего поля.

Less than or equals - условие верно, если численное значение верхнего поля меньше или равно численному значению нижнего поля.

NOT – логическое “не”. Условие верно, когда не верно прописанное в NOT условие. Как и в AND, в качестве условия может выступать любое условие из этого списка.

OR – логическое “или”. Условие верно, если верно хотя бы одно из прописанных в OR условий.

Player is certain alignment – условие проверяет принадлежность игрока к заданной расе. Раса (alignment) определяется при выборе карты (второй столбик в информации о карте). При старте можно определенную выбрать расу, если ее юниты есть в стартовых отрядах игрока. По умолчанию этот параметр стоит на random (случайно выбранная раса), поэтому использование этой проверки иногда может оказаться некорректным. Я бы не рекомендовал использовать ее в важных скриптах, если есть инвариантность: можно просто забыть предусмотреть один из случаев.

Player is certain color – условие верно, если <target> имеет заданный цвет. Примечание: помимо вариантов owner/opposing player есть еще и варианты Red player, и.т.д., то есть возможно сделать бессмысленную проверку вроде: if (Red player is Green).

Player is computer – условие верно, если заданный игрок (<target>) является компьютером.

Player is eliminated – условие верно, если заданный игрок (<target>) уничтожен.

Player is human – условие верно, если <target> является человеком.

Player owns certain hero – условие верно, если <target> владеет заданным героем. Примечания по поводу имен героев все те же.

Player owns certain town – условие верно, если <target> владеет заданным городом. Примечания по поводу названий городов те же, что и к именам героев.

TRUE – условие верно всегда. В conditional action не имеет смысла, применяется только в квестовых домиках/башнях/воротах, да и то в редких случаях.

Variable – условие верно, если выбранная из списка логическая переменная имеет значение TRUE.

Численные значения в сравнениях

Здесь описаны возможные варианты для сравнений в условиях equals, greater than, и.т.д.. Также все эти пункты могут быть использованы для установки значения числовой переменной, но об этом позже.

Current day – текущий день. Номер текущего дня начиная с самого начала игры. Первый день имеет номер 1, далее с каждым днем счетчик увеличивается на единицу, НЕ обнуляясь при переходе через неделю/месяц.

Current day of the week – текущий день недели. Первый день недели имеет номер 1, далее по порядку. Соответственно, с началом новой недели счетчик снова устанавливается на единицу.

Current month – текущий месяц. Первый месяц имеет номер 1.

Current week – текущая неделя. Первая неделя имеет номер 1, при переходе на новый месяц счетчик НЕ обнуляется.

Current week of the month – текущая неделя месяца. Соответственно число от 1 до 4.

Divided byНЕ РАБОТАЕТ. По идее команда должна была возвращать результат деления одного числа на другое, однако она возвращает значение нижнего поля (делитель).

Experience levelусловие должно быть связано с героем; возвращает уровень опыта выбранного героя.

Material quantity – количество ресурсов. Возвращает количество ресурсов заданного типа. Здесь снова проявляется ограничение на ввод значение, не превосходящего 32767. Золота вполне может быть значительно больше, в этом случае придется использовать сумму или произведение нескольких величин.

Minus – возвращает разность между значениями верхнего и нижнего полей. В свою очередь, в качестве значений может быть выбран любой пункт из этого списка.

NegateНЕ РАБОТАЕТ. По идее команда должна возвращать числовое выражение с обратным знаком, но вместо этого всегда возвращает ноль.

Number – число. Если поставить галочку напротив negative, то число будет взято как отрицательное.

Number of creatures in army – число монстров выбранного типа в армии.

Player ID - НЕ РАБОТАЕТ. Всегда возвращает 0, хотя должна уникальный идентификатор игрока (число).

Plus – сумма двух числовых выражений.

Random number – случайное число. Minimum value и Maximum value – минимально и максимально допустимые пределы числа; границы сегмента, проще говоря. Примечание: границы входят в сегмент.

Remainder - НЕ РАБОТАЕТ. Должна возвращать остаток от деления числового значения верхнего поля на значение нижнего поля. Вместо этого, как и в случае с Divided by, возвращается сам делитель.

Skill mastery – возвращает число, соответствующее уровню выбранного навыка у заданного героя. Внимание: отсчет начинается с нуля, т.е. basic = 0; advanced = 1;
. . . ;GM = 4. Если герой не обладает заданным навыком вообще, то возвращается –1.

Times – возвращает произведение числовых значений в верхнем и нижнем числовых полях.

Total number of creatures in army – возвращает суммарное число ВСЕХ существ, находящихся в заданной армии. Герои НЕ являются существами и в счет не идут.

Total number of heroes in army – возвращает суммарное число ВСЕХ героев, находящихся в заданной армии.

Variable – возвращает значение заданной числовой переменной.

 

Установка значения переменной

Установка значения числовой переменной

Как уже говорилось, установка значения числовой переменной производится командой Set numeric variable. В появившемся окне нужно выбрать имя переменной из списка, а затем непосредственно присвоить значение (new value). В его качестве может выступать любой пункт из списка численных значений.

Пример: нужна переменная, в которой бы всегда содержалась текущая неделя месяца, причем начиная со только со второго месяца. Если он не наступил, это также должно быть отражено в значении переменной.

Для решения задачи: во-первых, делаем timed event срабатывающий только в первый день. В нем будет лишь одна строчка: Set ‘var1’ to 0, где var1 – имя переменной. Поскольку раньше она нигде не встречалась, его нужно ввести вручную. В дальнейшем во избежание ошибок рекомендуется только выбирать имя из списка, не вводя его. Помните, что любая ошибка в имени переменной является фатальной для скрипта! На своих картах я обязательно делаю тайм ивент в первый день, в котором перечислены все переменные, как числовые, так и логические. Некоторым из них заодно присваиваются начальные значения, если же этого не нужно, то переменные устанавливаются на 0 или FALSE в зависимости от типа. Срабатывать такой ивент должен один раз, только в ход первого игрока-человека: в противном случае повторная установка переменных на начальные значения в ход следующего игрока приведет к потере их изменений в первый ход. Благодаря этому ивенту в дальнейшем не надо будет вводить названия вручную: они будут занесены в список.

Возвращаясь к примеру, в первый день переменной присваивается начальное значение, равное 0. Поскольку переменная будет содержать номер недели, в дальнейшем она никогда не станет равной 0. Таким образом, ее равенство нулю будет означать то, что второй месяц еще не начался.

Второй этап – сделать скрипт, отслеживающий изменение номера недели после начала второго месяца. Для этого делаем глобальный timed event, срабатывающий в 29-й день и повторяющийся каждые 7 дней. Состоять он будет всего из одной строчки:
Set ‘var1’ to (‘Current week of the month’). Теперь в каждый первый день недели будет осуществляться установка нового значения переменной. Если в произвольный момент времени обратиться к этой переменной, то мы получим либо 0, что будет означать, что идет первый месяц; либо число от 1 до 4, означающее номер недели в месяце.

Установка значения логической переменной

Установка значения производится командой Set boolean (TRUE/FALSE) variable. Можно выделить два способа установки логической переменной: явное присвоение и неявное. Явное – логической переменной присваивается непосредственно значение TRUE/FALSE посредством выбора соответствующего пункта в списке. Неявное – переменная принимает значение логического выражения. С явным заданием вроде все понятно: к примеру, Set ‘bool_var1’ to (‘TRUE’); а вот неявное стоит рассмотреть подробнее.

Легко заметить, что помимо TRUE/FALSE в списке доступных значений присутствуют все пункты из раздела “условия”. По началу может показаться непонятным: как переменная может быть равна условию? На самом деле все просто: ведь это логическая переменная, и если условие истинно, то она получит значение TRUE, если же оно ложно – FALSE.

Пример: нужно сделать переменную, которая бы была “истиной”, если город принадлежит человеку, и “ложью” - если компьютеру. Пусть значение переменной будет устанавливаться в триггерном скрипте города. Первое, что напрашивается сделать, это написать проверку:
if (Owner is human) then {Set ‘v1’ to (‘TRUE’)} else { Set ‘v1’ to (‘FALSE’)}
Но можно сделать проще: присвоим переменной значение условия, использованного в conditional action, а именно: Set ‘v1’ to (Owner is human). Если условие (Owner is human) истинно, то и переменная получит значение “истина”, иначе – “ложь”. Благодаря использованию этой конструкции можно сэкономить много времени, ведь значительная часть проверок носит именно такой характер.

 

Квесты

Под этим понятием понимаются три типа объекта: quest hut – квестовый домик; quest gate – квестовые ворота; quest tower – квестовая башня.

Вкладки

Общие:

General – здесь вписывается название объекта - site name, а также подсказка, появляющаяся при нажатии правой кнопки мыши на объекте и записывающаяся в журнал квестов - quest log entry.

Triggered script – здесь пишется скрипт, который будет срабатывать при каждом посещении объекта до тех пор, пока не будет удален remove script’ом, т.е. даже после выполнения квеста в quest hut или при выполненном условии квест-гейта.

Proposal message – здесь пишется сообщение, которое будет выведено на экран при первом посещении объекта. Примечание: триггерный скрипт срабатывает до вывода этого сообщения. Если в нем тоже выводится сообщение, то учтите, что игрок еще не знаком с квестом, и оно может оказаться неожиданным.

Progress message – сообщение, которое будет выведено при каждом последующем посещении объекта при невыполненных условиях квеста.

Quest requirement – требование квеста. Когда условие выполнено, квест считается выполненным. При этом quest tower исчезнет, quest gate откроется, а quest hut дат награду.

Вкладки, отсутствующие в quest gate

Completion script – скрипт, который запустится, если при посещении объекта условия квеста выполнены. Это обычная последовательность команд, в нее можно прописать любые команды, в том числе и которые связаны с героями/армиями, т.к. именно они посещают квестовый объект.

Completion question – вопрос, который будет задан игроку, если он зашел в объект при выполненных условиях квеста и готов получить награду или открыть проход. Соответственно, вопрос нужно делать с учетом того, что на него можно будет ответить “да” или “нет”. При ответе “да” запустится completion script, при ответе “нет” квест останется невыполненным, и можно будет зайти в объект в другой раз, чтобы выполнить его. Примечание: если не заполнять эту вкладку, то completion script запустится сразу же, как только игрок зашел в объект при выполненных условиях.

Вкладка, которая есть только в quest hut

Empty message – сообщение, которое будет выведено, если игрок зашел в квест-хат, квест которого уже выполнен. Если сообщения не задано, то будет выведено одно из стандартных сообщений.

Примечание: в принципе, ни одна из вкладок не обязательна для заполнения. К примеру, если вы используете только triggered script, то остальные вкладки (кроме general, разумеется) вам не потребуются.

“Сложные” квесты

Данную модель квестов описал Rimid, за что ему большое спасибо. Далее приводится его текст без какой-либо моей правки, за исключением орфографии:)

Пример этот достаточно непростой, однако открывает очень широкие возможности для реализации сложных идей. Перед началом добавлю, что в случае с квест-хатами скрипт пишется во вкладке triggered script. Итак…

Будем отталкиваться от теории графов. Граф (не путать этот термин с титулом ) изображается в виде кружочков, отображающих все его возможные состояния и стрелок, показывающих все возможные переходы между состояниями. В приложении к Героям будем иметь следующее.

Допустим, мы имеем на карте некоторый квестовый домик, в котором живет, скажем, колдун, и в который очень часто придется возвращаться по ходу сюжета. Оценим все возможные состояния этого домика (вершины графа), то есть все то, что будет происходить при его посещении. Введем переменную, пусть это будет Wisard_Status, которая будет определять текущее состояние игрока по отношению к объекту. И определим все ее возможные состояния. (Вполне вероятно, что все состояния сразу определить не удасться, они будут возникать по мере работы над картой, но в окончательном варианте карты, все они должны быть определены.) Самое очевидное, что приходит в голову это состояние 0 (Wisard_Status=0) - ни разу там не был. Ну и нафантазируем еще несколько: посетил в первый раз получил квест №1 (Wisard_Status=1); выполнил первый квест как надо (Wisard_Status=2); выполнил первый квест не как надо (Wisard_Status=3); выполнил первый квест как надо посетил во второй раз и взял награду (Wisard_Status=4); ну и так далее. Каждому возможному варианту взаимодействия с квестовым домиком соответствует свое значение Wisard_Status.

На квестовом домике висит скрипт вида:

if Wisard_Status=0

{

тело скрипта

переход в новое состояние Wisard_Status=New

}

if Wisard_Status=1

{

тело скрипта

переход в новое состояние Wisard_Status=New

}

if Wisard_Status=2

{

тело скрипта

переход в новое состояние Wisard_Status=New

}

...

Каждая часть скрипта должна заканчиваться указанием в какое состояние переходить после его завершения. Частный случай - переход на саму себя, то есть без перехода.

Теперь необходимо определить условия перехода между этими состояниями и тщательно их отслеживать (Лучше всего записывать). Для примера, самое очевидное, что переход из состояния 0 в состояние 1 должен быть сразу же после первого посещения квестового домика. Переход из состояния 1 в другие отслеживается на карте в зависимости от действий игрока. К примеру, после убийства монстров задается вопрос: взять артефакт себе (Wisard_Status=2) или отдать крестьянам (Wisard_Status=3). И так далее таким же образом. Для нормального функционирования этого квестового домика надо во всех событиях, которые по смыслу оказывают влияние на его взаимодействие с игроком, изменять переменную Wisard_Status, а в скрипте объекта вставлять соответствующий блок

if Wisard_Status=Old

{

тело скрипта

переход в новое состояние Wisard_Status=New

}

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

if Object1_Status=old

{

тело скрипта

Object1_Status=New // здесь мы меняем состояния

Object2_Status=New // всех объектов, зависящих

Object3_Status=New // от изменения состояния данного

...

ObjectN_Status=New

}

Надо изменять состояния не всех, конечно, объектов, а только тех, которые по смыслу связаны с изменением текущего.

Пример. При Wisard_Status=8 колдун посылает нас провести гнома через опасное ущелье. Но другой колдун, которого мы возможно даже еще и не знаем, ненавидит когда гномы проходят через его ущелье Таким образом, при выполнении квеста мы меняем Wisard_Status, скажем на 9, и меняем Sorcerer_Status c 0 (не был ни разу и ничем не навредил) на 1 (не был ни разу, но уже успел нагадить).

При посещении второго колдуна сработает скрипт

if Sorcerer_Status=0

{

тело скрипта

изменение состояний

},

если не провел гномов, и

if Sorcerer_Status =1

{

тело скрипта

изменение состояний

},

если все-таки провел их.

Можно сделать, например, что в том и в другом случае колдун дает вам какое-нибудь задание, но потом или дает награду или обманывает. Или, вообще, полностью различные варианты.

В завершение, хочу добавить, что объектом может быть не только какой-то квестовый домик или ворота, но вообще любой скрипт: висящий на каком-либо сооружении или в свойствах карты, помещенный, непрерывный, переключаемый или регулярный.

Ну и самом конце живой пример из карты "Корона". Отношения с Великими Крепостями разбиты на следующие возможные состояния:

0 - ни разу не был

1 - был, но не пустили

2 - набрал необходимое значение "очков славы" и получил приглашение

3 - пришел к городу получил квест

4 - потерял доступ к городу навсегда

5 - стал союзником

6 - прощание после подарка

Возможные переходы:

из 0 в 1, в 2, в 4

из 1 в 2, в 4

из 2 в 3, в 4

из 3 в 5, в 4

из 4 в 4

из 5 в 6, в 4

из 6 в 4.

Для каждого города сделан свой скрипт. Эти скрипты влияют друг на друга только при переходе в 5-ое состояние. При этом все остальные города переходят в 4.

Так же сделаны и отношения с Ордой, союзниками, Координаторами.

Приложение 1: наиболее распространенные ошибки на картах

Данное приложение написано исходя из моего богатого опыта тестирования карт для Heroes 4. С момента выхода игры я ознакомился более, чем с сотней карт, и почти в каждой из них были ошибки, иногда фатальные, то есть не дающие пройти карту. Здесь мне хочется выделить наиболее общие и часто встречающиеся из них. При этом «часто встречающиеся» не означает «незначительные» - к сожалению, иногда одна глупая ошибка убивает всю карту.
Можно дать один общий совет: перед тем, как отправлять куда-то свою карту, обязательно пройдите ее хотя бы один раз. Еще не было карты, которая бы появилась на свет сразу без ошибок. Конечно, самому проходить не интересно, но первое прохождение должно быть именно авторским – стороннему тестеру находить фатальные баги не очень приятно. После первичной отладки можно дать поиграть друзьям и знакомым, они тоже наверняка что-то посоветуют. Лучше отправить карту на две недели позже, но без багов.  

1.      Ошибки с расположением. Под этим понимаются не ошибки в скриптах, а ошибки с размещением объектов на карте. Бывает несколько видов таких ошибок:
а) перекрытый проход. В узких коридорах, образованных горами, очень часто путь оказывается закрытым из-за выступающего «хвоста» какой-нибудь горы. В Героях нельзя проскочить по диагонали между двумя непроходимыми клетками, помните это! Чтобы еще на этапе прорисовки отследить такие ошибки, проверяйте все проходы с помощью опции редактора passability. Однако, в редакторе можно легко пропустить эту ошибку, поэтому обязательно пройдите свою карту (хотя бы с читами) именно на предмет проходимости.
б) перекрытый вход в строение. Аналогично вышеописанному, объект ландшафта может закрыть вход куда-либо. Если вы используете рэндомные объекты, то посмотрите, где может находиться вход. Предусмотрев проход к одному строению, вы можете перекрыть другое. Разновидностью этого бага также является установка армий, которые скриптом передаются игроку в процессе игры, на непроходимые клетки. Тонкость заключается в том, что напасть на врага, стоящего на непроходимой клетке, - можно. А вот встретиться со своей армией – нельзя.
в) Quest gate на выходе из портала. Клетка-проход квест-гейта с точки зрения портала является непроходимой, и даже если выполнено условие квест-гейта, выход портала работать не будет. Связано это с тем, что через квест-гейт запрещен обмен между армиями, а внутри Героев проход через портал представлен именно как обмен между клетками перед входом и выходом портала.
Ко входу это замечание не относится: можно пройти квест-гейт и сразу зайти в портал.
г)доступ к «недоступным» объектам
. Иногда объекты недоступны для посещения: они или являются квестовыми, или просто играют роль декорации. В таких случаях вход должен быть закрыт непроходимым объектом. Однако следует помнить, что нужно закрыть доступ к объекту полностью, то есть закрыть даже подход к нему: если непроходимый объект стоит на входе, но соседняя с входом клетка свободна, то с нее все равно можно посетить объект. Аналогично, можно подраться с армией, стоящей на непроходимой клетке. Баг это, или фича – трудно сказать. Нужно просто помнить этот факт.
д) Неполное и излишнее перекрывание placed event’ами. Если вы хотите, чтобы игрок обязательно наступил на ваш ивент, то нужно перекрыть весь проход целиком. Многие картостроители ставят ивенты только на дорогах, однако с них ведь часто приходится сходить, чтобы подобрать артефакт, захватить шахту, и.т.д. Но тут нужно и не перестараться: на одной клетке не должно быть несколько одинаковых ивентов, если он не одноразовый. Иначе он сработает столько раз, сколько бочонков стояло на клетке. Ладно, если это всего лишь вывод сообщений, а если драка с парой десятков черных драконов?
е) Посещение с «обратной стороны». Хоть это и в кавычках, но по сути так и есть: в объекты, занимающие одну клетку (порталы, например), а также имеющие толщину в одну клетку, можно зайти не только снизу, как показано в редакторе функцией passability, но и сверху. Поэтому если вы предусматриваете ограниченное посещение (то есть до посещения подразумевается драка, выполнение квеста или другое обязательное действие), то оставьте для прохода к объекту только одну клетку, а остальные закройте непроходимыми объектами.
ж) Наложение. Иногда встречаются карты, в которых игровые объекты перекрываются таким образом, что их входы совпадают. В зависимости от объектов, возможно два варианта: в игре либо надо будет очень точно наводить мышь на выбранный для посещения объект, чтобы зайти именно в него, либо один из объектов будет вообще недоступным. Второй случай иногда приводит к фатальным багам, если, например, недоступен квест-хат из обязательной цепочки выполнения заданий.
з) Ошибка с расположением верфи
. Очень часто верфь стоит так, что купленный корабль появляется не на соседней с клетке «местом посадки», и корабль остается недоступным. Не всегда есть возможность купить еще один корабль (а иногда и два!), поэтому все верфи надо проверить непосредственно в игре

2.      Общие ошибки в скриптах. Это ошибки, связанные с неправильным применением команд, или же с их отсутствием в нужных местах.
а) Отсутствие Remove script. Очень часто Placed event должен сработать только один раз. Но удалить его многие часто забывают, поэтому он срабатывает каждый раз, когда на него наступают, надоедая выводом сообщений, отбиранием ресурсов, и.т.д. Последствия для карты могут быть и более серьезными: мне не раз встречались карты, где такой «бесконечный» ивент давал армию, чем делал прохождение неинтересным (либо надо играть с читерски большой армией, либо постоянно расформировывать «новобранцев»).
Но куда хуже, если этой команды нет в Continuous event, который подразумевался быть выполненным один раз. К примеру, если он должен был всего лишь вывести сообщение, то без удаления скрипта это сообщение будет выводится чуть ли не после каждого шага героя или монстра по глобальной карте. А ведь к сообщению могут прилагаться и subactions, которые могут сделать карту технически непроходимой.
Отсутствие удаления в повторяющихся timed events не так критично, но тоже нежелательно, опять же, смотря в чем суть ивента.
Единственный случай, когда иногда можно не делать удаления – это triggeredable events. Для них оно особой роли не играет, поскольку сами по себе такие скрипты не срабатывают.
Но иногда встречается и обратная ошибка: скрипт удаляется слишком рано (или не в той ветке условия), что как правило является фатальным багом.
б) Использование неработающих команд. В гайде отмечены все команды, которые по вине разработчиков работают некорректно, или не работают вообще. Очень советую ознакомиться с их списком, поскольку все баги, связанные с ними, очень существенные, и могут привести к непроходимости карты.
в) Ошибка в сравнении skill mastery. Еще раз напоминаю, что наличие умения на уровне basic равносильно 0, а не 1. Соответственно, Грандмастер – это 4, а не 5.
г) Ошибки в сравнениях «больше/меньше». Когда нужно сделать условие вроде «иметь 1000 золотых для выполнения квеста», некоторые картостроители «дословно» прописывают его в скрипте: material quantity = 1000, тем самым требуя, чтобы у игрока было ровно 1000 золотых. Не меньше, а главное – не больше. Поэтому нужно использовать сравнение greater than 999,либо greater than or equals 1000. То же самое можно сказать и про условия «меньше, чем…».
д) Несовместные условия
. Иногда можно встретить в скрипте или в требовании квест-хата условие вроде (иметь в армии героя по имени Вася) and (число героев в армии равно 0). Понятное дело, что такого быть не может. Тем не менее, подобные ошибки встречались не раз. Думаю, виной всему невнимательность, но игрокам, которые об эту ошибку споткнулись, от этого не легче.

3.      Ошибки в балансе. Для мультика это разные стартовые условия, легкость в развитии для одной расы и сложность для другой и многое другое. Для сингла это несбалансированные по сложности сражения. Играть интересно, когда чем дальше – тем сложнее. Но если сложность сражений растет быстрее опыта героев – то карта может оказаться непроходимой из-за чересчур сложной битвы в самом конце; если же наоборот – то играть будет просто скучно. Вот наиболее частые в синглах ошибки.
а) Сложный старт. Очень распространенная ошибка. Суть ее в том, что игрок в начале игры может не иметь возможностей для прокачки героев и найма армии, но жизненно важный проход будет охранять армия мощных нейтралов. Если на низких уровнях сложности пробить ее вполне реально, то на высших это может оказаться невозможным: на expert армии нейтралов уже в 2 раза больше нормы, на champion – в 3. Нужно либо ослабить нейтралов, либо сделать скрипт, который бы регулировал их численность с помощью take creatures, чтобы карта проходилась на любом уровне. Особенно это важно, если последующие сражения проще первого: тогда из-за низкого уровня сложности они сделают прохождение весьма скучным.
б) Непроходимая битва. Важные объекты должны охранять сильные армии, но нужно не переборщить. Если у игрока нет способов постоянно пополнять армию и прокачивать героев, то чересчур сложная битва станет непреодолимым препятствием (если играть без читов, естественно).
в) Не усиленный компьютерный игрок. Не секрет, что AI в четвертых героях откровенно туп. Поэтому карты, на которых компу-противнику предстоит развиваться самостоятельно и с нуля, по определению простые. Играть на них не слишком интересно. Усиления компа могут быть разными: от полностью отстроенного замка и стартовых героев 40-го уровня до сложных скриптовых систем, которые в зависимости от уровня сложности будут давать его героям лишний опыт, ресурсы, будут увеличивать прирост в городах, - в общем, всячески его усиливать в течение всей игры. Насколько нужно усиливать врага – решать Вам, как автору карты. Главное не переусердствовать, чтобы избежать ошибок, описанных выше.
Все эти ошибки можно легко найти одним способом: пройти свою карту без читов.

Прочие ошибки.
а) Не отключены квестовые артефакты
. Квест заключается в принесении хорошо охраняемого артефакта, а сам артефакт не отключен в настройках карты, поэтому его можно вытащить в сокровищницах. В результате собственно квест, по сути, не будет выполнен. Если карта предусматривает очень жесткую цепочку прохождения, то нарушение порядка выполнения квестов из-за такого случайного подарка может привести к фатальным багам.
б)Не отключены «лишние» артефакты и заклинания группы
movement. Если на карте нет воды, то секстант не нужен; если нет снега – не нужны снегоступы, и.т.д. Эти артефакты нужно отключить в свойствах карты. Аналогично, если нет медленных типов, не нужны заклинания terrain walk и pathfinding, на «сухой» карте нет места заклинанию summon ship.
в) Маги без заклинаний и без брони. Если у компьютерного игрока или нейтрала есть герой-маг, проверьте, будет ли ему, чем заняться в битве? Частая ошибка – стартовый герой маг при городе с запрещенной гильдией магов. Заклинания, которые будут в книге, настраиваются в свойствах героя. Если там выставлены заклинания, для которых у героя пока не хватает магического умения, то они появятся в книге сразу после получения нужного для них уровня магии.
Маг с ГМ Порядка – это круто, никто не спорит, но если у него нет комбата или бонуса к защите и сопротивления магии – то грош ему цена, он ляжет после первого же раунда. Не забывайте об этом. Но тут, как и везде, нужно не перестараться. Сделав магу Хаоса 70-го уровня с дезинтеграцией защиту в 15000 единиц и ГМ сопротивление магии, подумайте, как с ним бороться.

Приложение 2: изменения скриптовой системы в Equilibris

  • Исправлен баг команды Increase movement

  • Исправлен баг команды Increase level

  • Исправлен баг команды Divided by

  • Исправлен баг команды Remainder

  • Исправлен баг команды Negate

ver 3.5: добавлен вывод переменных во всех текстах, кроме victory/loss conditions. Чтобы вывести переменную, вставьте в текст конструкцию $(name), где name – имя переменной. Если переменная не задана, то она считается равной нулю.  

ver 3.5: добавлена системная переменная MAX_ARMIES, меняя значение которой можно менять максимально возможное число армий одного цвета на карте (по умолчанию в оригинальных героем это значение равно 8)

Благодарю Haze, Fosgenи Rimid за помощь в устранении ошибок в этом гайде.

Я более чем уверен, что исправить нужно еще не мало, так что если у вас есть предложения – пишите мне на el_gato_blanco@mail.ru .

Данный гайд в виде Word-файла (с картой с примерами самых-самых основ) можно взять здесь (55 Кб). Гайд обсуждается на форумной ветке "Scripting Guide".



Советы

  Читать

  Писать

  Death Guide

  Nature Guide

  Order Guide

  Chaos Guide

  Life Guide

  Might Guide

  Basic Guide

  Formation Guide

  Scores Guide

  MapCreators

  Scripting Guide



  Скрипты




Новости FAQ Форум Советы Герои Замки Монстры Магия Артефакты Сражения Кампании Файлы Прочее
Рейтинг@Mail.ru
Rambler's Top100
Ведущий сайта: Игорь Савенков (aka LaBoule)  •  Дизайн: Андрей Шевченко (aka Zombiek)

© 1996-2005 Golden Telecom. Все права защищены. Предоставляется в соответствии с "Соглашением об использовании".
Heroes of Might & Magic IV и все элементы игры © 2002 3DO. Все права защищены.
В России и странах СНГ игра издается компанией Бука.