Игра в материале
Блицкриг
?Рейтинг
Игромании
9.5Рейтинг
игроков
PC
Жанр: Стратегия, Стратегия в реальном времени
Серия: Блицкриг
Мультиплеер:  Интернет, локальная сеть (до 16 игроков)
Разработчик: Nival Interactive
Издатель: cdv Software Entertainment
Издатель в России: СофтКлаб
Дата выхода: 28 марта 2003
Тактика выжженной земли. Основы работы в редакторе Blitzkrieg Map Editor, часть 2

Тактика выжженной земли. Основы работы в редакторе Blitzkrieg Map Editor, часть 2

Мастерская — Тактика выжженной земли. Основы работы в редакторе Blitzkrieg Map Editor, часть 2
В прошлой статье мы нарисовали ландшафт карты и расставили юниты. Но все объекты на уровне застыли без движения. Пора вдохнуть жизнь в это сонное царство..."
Игроманияhttps://www.igromania.ru/
Мастерская
Тактика выжженной земли. Основы работы в редакторе Blitzkrieg Map Editor, часть 2
   Редактор: blitzkrieg Map Editor
   Где взять: Устанавливается вместе с игрой
   Возможности: 100% игровых
   Сложность освоения: Выше средней
   Документация: Устанавливается вместе с игрой
   В прошлой статье мы нарисовали ландшафт карты и расставили юниты. Но все объекты на уровне застыли без движения. Пора вдохнуть жизнь в это сонное царство. В чем нам помогут скрипты. Сегодня мы разберем логику написания скриптов для "Блицкрига" и подкрепим теорию практикой — рассмотрим на конкретных примерах основные группы скриптов.

   Теория

   Для написания скриптов в "Блицкриге" используется популярный у разработчиков компьютерных игр язык Lua. Более подробную информацию о нем вы можете найти на сайте www.lua.org. Язык довольно сложный, но с очень широкими возможностями. С помощью Lua можно писать нестандартные скрипты, не пользуясь шаблонами, которые написали разработчики игры.
   Именно Lua использовали авторы Neverwinter Nights, чтобы оживить мир игры. Статья, посвященная написанию скриптов в Neverwinter Nights, была опубликована в январском номере "Игромании" за этот год. Если хотите более детально изучить язык, обратитесь к этому материалу.
   Мы же рассмотрим, как работать с Lua в "Блицкриге". Как ни странно, основные сложности возникают не при написании скрипта, а при его активации в игре. К сожалению, в игровом редакторе нет встроенного редактора скриптов. Поэтому придется писать их при помощи сторонних инструментов.
   Откройте файл data.pak, находящийся в папке blitzkrieg\Data, с помощью WinRAR (должен быть установлен WinRAR версии 3.0 или выше). Из папки Scenarios\Script извлеките любой файл с расширением *.lua.
182 Kb
-Скрипт, открытый в "Блокноте"
Откройте файл с помощью Notepad и сотрите все написанное. Теперь можно писать свой скрипт. Если скрипт написан, нужно активировать его в редакторе. Для этого зайдите в меню Map\Script и в появившемся окне укажите месторасположение скрипта. 
  
  Теперь что касается непосредственно написания скрипта. Несмотря на кажущуюся сложность, структура "тела" любого скрипта стандартна. В основе его работы лежит принцип проверки условий. Скрипт состоит из набора самых разнообразных функций, которые отвечают за действия различных игровых объектов. Например, функции могут определять перемещение юнитов в указанную зону, проверять количество юнитов в отряде или изменять погодные условия. Все скрипты для конкретного уровня, даже если они никак не связаны друг с другом, нужно писать в одном файле — это связано с особенностями Lua. Правда, иногда это приводит к путанице. Все функции и их назначение перечислены в мануале в разделе "Язык сценариев".

   Создание групп

   Через скрипты нельзя обращаться к отдельным юнитам — только к группам, заданным в редакторе. Если вы хотите определить действия одного конкретного юнита, вам просто нужно сделать группу, в которую будет входить один юнит.
   Чтобы сформировать группу, в редакторе зайдите на панель Reinforcement Groups. Нажмите на кнопку New Group и в появившемся поле впишите идентификационный номер группы (как устанавливать идентификационные номера юнитам, мы разобрали в первой части статьи). Этот номер будет использоваться в скриптах. Чтобы добавить к группе юнит или несколько юнитов, нажмите на кнопку Add Group With scripted и впишите в появившемся поле идентификационный номер юнита. Одной группе можно дать одновременно несколько номеров.
   Иногда в скриптах приходится обращаться к той или иной области карты. Но в скрипте нельзя просто написать, что, например, группа 144 должна атаковать базу. Базу тоже надо как-то определить. Для этого существуют сценарные области — это просто локации на карте, которым в редакторе присвоены номера или имена. Чтобы создать сценарную область, зайдите на панель Map Tools и щелкните по Script Area Tool. Выберите форму сценарной области — Rectangle (Прямоугольник) или Circle (Круг) — и, удерживая левую кнопку мыши, растяните область до нужного размера. Теперь задайте имя области (можно просто вписать номер) в окошке рядом и нажимайте кнопку Ok.
257 Kb
- Обязательно пользуйтесь мануалом. В нем находятся описания всех функций
Имя должно появиться в списке на панели Map Tools.
   
   Практикум

   Научиться программировать на Lua на основе только одной статьи нельзя. Понадобилось бы не менее десяти материалов по 5-6 страниц каждый. Но для того, чтобы "оживить" любой уровень "Блицкрига", вам и не нужно уметь программировать на Lua. Достаточно иметь перед глазами примеры основных групп скриптов и уметь изменять их в зависимости от ситуации.
   Рассмотрим основные виды скриптов на примере одного большого скрипта (он включает несколько мелких скриптов) из миссии, которую разработчики почему-то исключили из игры. Скрипты данной миссии сохранились в ini-файлах "Блицкрига". Скрипт описывает защиту областей Podol и Plazdarm. Цель — уничтожить все юниты с идентификационным номером 21, 201, 210.
   local num = GetNUnitsInScriptGroup(21) + GetNUnitsInScriptGroup(201) + GetNUnitsInScriptGroup(210);
   if ( num <= 0) then
   RunScript( "Victory", 4000);
   Suicide();
   end;
   end;

   В этой части скрипта задаются условия победы. Сначала определяется локальная переменная num, через которую в дальнейшем скрипт обращается к группе юнитов, имеющих идентификационные номера 21, 201, 210. Затем задаются условия проверки. Если локальная переменная num станет меньше или равна нулю (это произойдет, когда в отрядах противника не останется ни одного юнита), выполняется скрипт Victory (Победа). Этот скрипт будет выполняться каждые 4 секунды. Когда условие выполнится, скрипт отключится функцией Suicide.
   function TobeDefeated()
   if (( GetNUnitsInArea(1, "Plazdarm") > 1) or ( GetNUnitsInArea(1, "Podol") > 1)) then
   Loose();
   Suicide();
   end;
   end;

   Данный участок скрипта задает условия поражения. Если вражеские юниты находятся на сценарной области с названиями (про сценарные области смотрите на врезке) Plazdarm или Podol, игроку засчитается поражение.
   function Victory()
   Win(0);
   Suicide();
   end;

   Данный участок скрипта запустится после выполнения первого условия, описанного выше.
534 Kb
- Чтобы загрузить скрипт в редактор, достаточно просто прописать название скрипта в поле Set Script File
Точно указывается, какая сторона победит. В скобках оператора Win стоит значение ноль, которое определяет, кому будет засчитана победа. Нулем в игре обозначается сторона, за которую играете вы.
   function Attack0()

   Cmd(3, 20, GetScriptAreaParams( "Podol" ) );
   Suicide();
   end;
   function Attack1()
   Cmd(3, 21, GetScriptAreaParams( "Podol" ) );
   Suicide();
   end;
   function Attack2()
   Cmd(3, 201, GetScriptAreaParams( "Plazdarm" ) );
   Suicide();
   end;

   Скрипт атаки. Все внимание на то, что прописано в скобках рядом с операторами. Цифра "3" рядом с оператором Cmd обозначает, какую команду должен выполнить юнит. Полный список команд вы найдете в мануале, устанавливаемом вместе с игрой. В данном случае команда — штурм (Attack) указанной точки. Далее в скрипте указано, какая группа какую локацию отправится штурмовать.
   function Attack3()
   if ( (GetNUnitsInArea(1, "Okuninovsky most") > 0) or ( GetNUnitsInScriptGroup(201) <= 2) ) then
   Cmd(3, 210, GetScriptAreaParams( "Plazdarm" ) );
   Suicide();
   end;
   end;

   Еще один скрипт атаки, чуть более сложный. Проверка месторасположения и количества юнитов в разных группах. Обратите внимание на строку GetNUnitsInScriptGroup(201) <= 2. Когда количество юнитов в группе со сценарным номером 201 будет меньше или равно двум, атаку начнет группа со сценарным номером 210.
 
   function Init()
   RunScript( "ToWin", 3000);
   RunScript( "TobeDefeated", 3000);
   RunScript( "Attack0", 1000);
   RunScript( "Attack1", 300000);
   RunScript( "Attack2", 10000);
   RunScript( "Attack3", 5000);
   end;

   Последний скрипт, запускающий предыдущие скрипты с указанной периодичностью. Обратите внимание на функцию Init(). При запуске карты сразу запускается эта функция, и уже через нее вызываются все проверочные функции и установки.
   * * *
   На основе рассмотренного нами скрипта вы можете создавать скрипты движения и атаки практически любой сложности для собственных уровней. Достаточно просто скопировать текст скрипта-исходника и изменить в нем некоторые параметры, чтобы получился совершенно новый скрипт.
   P.S. Выражаем благодарность всем сотрудникам Nival Interactive и особенно Александру Винникову за помощь, оказанную в написание статьи.
Комментарии
Загрузка комментариев