|
![]() |
Scripting guide by Astor (v.1.1) Содержание и цель гайда Этот гайд создан в помощь всем начинающим картостроителям для Heroes 4. Он представляет подробный и абсолютно полный учебник/справочник по скриптовой системе Героев. В нем подробно описаны все команды, связанные с ними нюансы, а главное – выделены все ошибки в Героях, приводящие к некорректной работе команд. В гайде не описывается интерфейс редактора, не дается советов по прорисовке, созданию сюжетов для карт и прочим «внешним сторонам» карты. В конце гайда приведен список часто встречающихся ошибок на картах новичков. Это должно помочь избежать глупых, но порой очень опасных недоработок. Что нужно знать о Героях перед прочтением гайда? Да практически ничего. Главное – уметь играть и обладать желанием разбираться во всем. Непосредственно перед началом гайда, пожалуй, стоит вспомнить лишь о порядке появления версий Героев 4.
Изменения этой версии гайда Гайд писался в то время, когда Winds of War только что вышел, и у меня его еще не было, поэтому некоторые моменты, связанные с этим адд-оном, в предыдущих версиях упущены. Помимо множества мелких изменений (вроде исправления опечаток) сделано следующее:
Часть первая. Теория. Введение: первые вопросы Что такое скрипты и зачем они нужны? Скрипт – это последовательность команд, влияющих на игровой процесс. Команды могут быть самыми разнообразными – от вывода сообщения до сражения с сотней черных драконов. Благодаря этому игровой процесс можно очень сильно разнообразить, особенно это касается одиночной игры. Скрипт входит в состав обработчика некоторого события (event), но разницы между понятиями event и скрипт практически нет, поэтому далее они будут употребляться как синонимы. А где делаются скрипты? Все скрипты пишутся в свойствах выбранного объекта, будь то герой, шахта или город. Окно редактирования скриптов находится в свойствах объекта, для вызова которого достаточно двойного щелчка мыши на этом объекте. В появившемся окне скорее всего несколько вкладок, нам же нужна только вкладка с названием events. Исключение составляют quest gate, quest tower, quest hut – у них другой принцип построения скриптов, который будет рассмотрен позже. Если требуется сделать скрипт, не связанный с конкретным объектом, то его можно создать в свойствах карты: campaign->map properties (или просто нажатие ALT-ENTER) и снова вкладка events. Там куча разных названий, что они означают? Поскольку окна редактирования скриптов в свойствах карты и свойствах объекта несколько отличаются, рассмотрим их по очереди. В начале разберемся со свойствами карты. Все скрипты делятся на категории, или типы. Тип определяет момент времени, в который скрипт должен начать работу.
Скрипты для объектов могут сильно зависеть от типа объекта. Рассмотрим все эти типы. 1. Армии и герои. Первое, что следует отметить, это наличие пятой категории скриптов под названием Standard events. Данный тип, в свою очередь, делится на три других типа:
Кроме этого, добавляются типы Timed, Triggeredable и Continuous, которые аналогичны вышеописанным, однако следует помнить, что сначала будут срабатывать Timed и Continuous скрипты, прописанные в свойствах карты. И еще одно очень важное замечание: скрипты всей армии и героя – это принципиально разные вещи. Чтобы изменить скрипт, связанный с героем, необходимо вызвать окно свойств героя. Это делается двойным щелчком на его строчке в составе армии. Placed events по понятным причинам отсутствуют у всех объектов: ведь этот тип скриптов связан не с объектами, а с клеткой карты. Примечание: если эти скрипты есть одновременно на обеих дерущихся армиях, то сначала сработают те, которые висят на атаковавшей армии. 2. Города, гарнизоны и обычные шахты. Типы Timed, Triggeredable и Continuous аналогичны вышеописанным, а вот группа Standard немного отличается:
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”. Для установки связи необходимо:
Примечание: чтобы сделать несколько одинаковых бочонков, зажмите ctrl и перетаскивайте левой кнопкой мыши бочонок с уже выбранным названием. Как только отпустите кнопку – получите его копию. Это относится не только к бочонкам, но и ко всем объектам. Например, таким образом очень удобно делать стены и заборы. Примеры скриптов Все описанные ниже примеры содержатся на карте “Intro - examples/ Введение – примеры” (название файла “intro.h4c”). Рекомендации по изучению примеров – после описания. Описание скриптов, имеющихся на этой карте. Во-первых, примечание: поскольку использование вкладки script подразумевает знание команд, использоваться в этих примерах она не будет. Вместо этого задействована вкладка effects, но, как я уже говорил, в дальнейшем она употребляться не должна.
Советы по изучению: на карте пять игроков,
из них бирюзовый всегда только компьютер.
Остальные игроки находятся в команде,
поэтому нападать на вас не будут, даже если
будут компьютерными. Для экспериментов
лучше сыграть сразу за всех этих игроков
сразу – так работа скриптов будет более
наглядной. Несколько раз можете просто
завершить ход, потом отправьте в сражение
зеленых героев и посмотрите как изменится
выдача кристаллов после их смерти.
Освободите героя из тюрьмы. Пройдите
несколько раз в проходах в стенах. После
этого все скрипты, кроме 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. 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. Легко заметить, что возможность понизить количество или уровень опыта, а также скиллы, отсутствует. К сожалению, сделать это нельзя и с помощью других команд. Несколько общих замечаний.
Вывод сообщений Для вывода сообщений помимо вкладки 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. Итак, для того, чтобы удалить какой-либо объект нужно выполнить следующие действия:
Важные примечания.
Активация triggeredable events Активация триггера производится командой trigger custom event. В поле select event name нужно выбрать имя триггера, который необходимо активировать. Несколько замечаний:
Удаление скриптов Скорее всего, многие скрипты на вашей карте должны будут сработать только один раз. Для этого после выполнения они должны быть удалены. Удаление скрипта производится командой 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 – устанавливает сообщение, которое будет выведено при победе выбранного игрока. Стандартное сообщение при этом удаляется автоматически. Важные примечания: большая часть этих команд по каким-то причинам или не работает, или работает некорректно. Подробнее:
Специфичные команды для городов В свойствах городов есть две специфические команды: это создание строения и увеличение популяции двеллинга. Подробнее: Construct building – построить в городе строение. Какое именно строение – выбирается из списка. В одной команде можно строить только одно строение. К этой команде есть несколько важных замечаний:
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 - НЕ РАБОТАЕТ! По замыслу здесь должны прописываться действия, происходящие соответственно после победы или поражения. Однако при любом раскладе будут выполнены действия из ветки Особенности команды Combat.
Вопрос игроку В героях можно задать игроку вопрос, на
который он может ответить да, или нет.
Производится это командой 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. Основные сведения об условиях Для сравнений в скриптовой системе
реализована стандартная конструкция Само условие в скриптовой называется 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; 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 boolean (TRUE/FALSE) variable. Можно выделить два способа установки логической переменной: явное присвоение и неявное. Явное – логической переменной присваивается непосредственно значение TRUE/FALSE посредством выбора соответствующего пункта в списке. Неявное – переменная принимает значение логического выражения. С явным заданием вроде все понятно: к примеру, Set ‘bool_var1’ to (‘TRUE’); а вот неявное стоит рассмотреть подробнее. Легко заметить, что помимо TRUE/FALSE в списке доступных значений присутствуют все пункты из раздела “условия”. По началу может показаться непонятным: как переменная может быть равна условию? На самом деле все просто: ведь это логическая переменная, и если условие истинно, то она получит значение TRUE, если же оно ложно – FALSE. Пример: нужно сделать переменную,
которая бы была “истиной”, если город
принадлежит человеку, и “ложью” - если
компьютеру. Пусть значение переменной
будет устанавливаться в триггерном скрипте
города. Первое, что напрашивается сделать,
это написать проверку:
Квесты Под этим понятием понимаются три типа объекта: 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.
Ошибки с расположением.
Под этим понимаются не ошибки в скриптах, а
ошибки с размещением объектов на карте.
Бывает несколько видов таких ошибок: 2.
Общие ошибки в скриптах.
Это ошибки, связанные с неправильным
применением команд, или же с их отсутствием
в нужных местах. 3.
Ошибки в балансе. Для
мультика это разные стартовые условия,
легкость в развитии для одной расы и
сложность для другой и многое другое. Для
сингла это несбалансированные по сложности
сражения. Играть интересно, когда чем
дальше – тем сложнее. Но если сложность
сражений растет быстрее опыта героев – то
карта может оказаться непроходимой из-за
чересчур сложной битвы в самом конце; если
же наоборот – то играть будет просто скучно.
Вот наиболее частые в синглах ошибки. а) Не отключены квестовые артефакты. Квест заключается в принесении хорошо охраняемого артефакта, а сам артефакт не отключен в настройках карты, поэтому его можно вытащить в сокровищницах. В результате собственно квест, по сути, не будет выполнен. Если карта предусматривает очень жесткую цепочку прохождения, то нарушение порядка выполнения квестов из-за такого случайного подарка может привести к фатальным багам. б)Не отключены «лишние» артефакты и заклинания группы movement. Если на карте нет воды, то секстант не нужен; если нет снега – не нужны снегоступы, и.т.д. Эти артефакты нужно отключить в свойствах карты. Аналогично, если нет медленных типов, не нужны заклинания terrain walk и pathfinding, на «сухой» карте нет места заклинанию summon ship. в) Маги без заклинаний и без брони. Если у компьютерного игрока или нейтрала есть герой-маг, проверьте, будет ли ему, чем заняться в битве? Частая ошибка – стартовый герой маг при городе с запрещенной гильдией магов. Заклинания, которые будут в книге, настраиваются в свойствах героя. Если там выставлены заклинания, для которых у героя пока не хватает магического умения, то они появятся в книге сразу после получения нужного для них уровня магии. Маг с ГМ Порядка – это круто, никто не спорит, но если у него нет комбата или бонуса к защите и сопротивления магии – то грош ему цена, он ляжет после первого же раунда. Не забывайте об этом. Но тут, как и везде, нужно не перестараться. Сделав магу Хаоса 70-го уровня с дезинтеграцией защиту в 15000 единиц и ГМ сопротивление магии, подумайте, как с ним бороться. Приложение 2: изменения скриптовой системы в Equilibris
Благодарю Haze, Fosgenи Rimid за помощь в устранении ошибок в этом гайде. Я более чем уверен, что исправить нужно еще не мало, так что если у вас есть предложения – пишите мне на el_gato_blanco@mail.ru . Данный гайд в виде Word-файла (с картой с примерами самых-самых основ) можно взять здесь (55 Кб). Гайд обсуждается на форумной ветке "Scripting Guide".
|
|
| Новости FAQ Форум Советы Герои Замки Монстры Магия Артефакты Сражения Кампании Файлы Прочее | |||||
| |||||
| Ведущий сайта: Игорь Савенков (aka LaBoule) Дизайн: Андрей Шевченко (aka Zombiek) |