Скрипты. Что это и с чем их едят. / X3 Terran Conflict (Земной конфликт)
X3 Terran Conflict / X3 Земной конфликт
 
X3 Terran conflict / Скрипты. Что это и с чем их едят. / Скрипты. Что это и с чем их едят.  
 

На сайте онлайн (человек): 82



 



Скрипты. Что это и с чем их едят.

Автор: Макс aka Malstrime

Скрипты. Что это и с чем их едят.

Вступление



Часть 1. Многобукафф

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


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

    "Разве скрипты существуют лишь для того, чтобы работал автопилот?" - спросите Вы. На данный момент это, пожалуй, так. До Х3 вся сюжетная линия (и она была одна) писалась обычными скриптами. В Х3: Воссоединение был добавлен новый движок - Mission Director aka MD. У него есть свои плюсы и минусы, но первых все-таки больше. В этом мм... пособии я более не коснусь темы MD, ибо не о том речь. Вернемся к назначению "обычных" скриптов. Да, они отвечают за автопилот, но, поверьте, это очень многое значит. Попробуйте удалить (или переименовать) папку \scripts из каталога с игрой, затем начните Новую игру и удивитесь, как много значит автопилот. Все движения кораблей, их полеты, управление турелями, да даже наведение ракет - за всё это отвечают скрипты. К слову, скрипты отвечают не только за автопилот, но и за Искусственную жизнь, но об этом опять-таки позже :)


Часть 2. Немного конкретики

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

Рассмотрим команду, которая добавляет в трюм корабля/станции определенное кол-во определенного товара

  1. <Возвр/If><РеферОбъект> -> add <Перем/Число> units of <Перем/Товар>

<Возвр/If> - может быть либо переменной, в которую возвращает команда то или иное значение в зависимости от самой команды и результата операции (в данном случае в эту переменную будет возвращено то кол-во единиц, которое действительно было добавлено), либо оператором условного перехода, либо "=" (если ни то, ни другое не требуется).
<РеферОбъект> - в данном случае (да и практически всегда) корабль или станция, на которые будет добавляться товар.
<Перем/Число> - число, кол-во добавляемого товара (если число отрицательное, то товар будет изъят из трюма).
<Перем/Товар> - товар, с которым проводится операция.

Любой из представленных выше аргументов может быть выражен как переменной так и прямым значением (Внимание! Крайне не рекомендуется задавать <РеферОбъект> не переменной!). То есть
  1. = Меркурий -> add 10 units of Батареи
Будет аналогично
  1. $ship = Меркурий
  2. $amount = 10
  3. $ware = Батареи
  4. = $ship -> add $amount units of $ware
Или аналогично этому
  1. $ship = Меркурий
  2. $ware = Батареи
  3. = $ship -> add 10 units of $ware


Обычно для того, чтобы задать переменную, используется команда <Возвр/IF><Выражение>. Однако, существует множество команд для того, чтобы задать переменную иным способом. Например, команда
  1. $sector = $ship -> get sector
 задаст переменной $sector (читайте: вернет в неё) сектор, в котором находится объект $ship (если переменная $ship содержит в себе не какой-нибудь объект, а, например, число или текст, то переменная $sector примет значение null, то бишь её значение обнулится (если переменная была ранее использована в скрипте, иначе команда просто ничего не будет значить)).

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


Часть 3. Парочка полезностей и советов

Internet Explorer - инструмент для просмотра скриптов вне игры. Для того, чтобы скрипт в нем открылся, необходимо, чтобы со скриптом в одной папке находился файл x2script.xsl (находится в папке \scripts).
XML Notepad - удобный редактор XML-файлов. Пригодится для редактирования языковых файлов.
Блокнот - нужен везде и всегда! :)

Часть 4. В завершение

Существует два типа скриптов: локальные и глобальные.
Локальный скрипт - это, грубо говоря, скрипт автопилота. При запуске привязан к объекту,на котором был запущен. Более подробно они будут рассмотрены далее.
Глобальный скрипт - это скрипт, который не имеет привязки к конкретному объекту.

Надеюсь, я сумел заинтересовать Вас, а Вы, [username], уже точно для себя решили, стоит браться за скрипты или нет! :)

Скрипты. Что это и с чем их едят.

Автор: Макс aka Malstrime
Добавил(а): Макс aka Malstrime
Создано: 31.08.2011
Изменено: 15.09.2011
Количество изменений: 7
Просмотров: 7853

Оценка: 4,6
Голосов: 43

Ссылка на эту страницу:
<a href="https://x3tc.net/vstuplenie_119.html">Скрипты. Что это и с чем их едят.</a>

BBCode:
[url=https://x3tc.net/vstuplenie_119.html]Скрипты. Что это и с чем их едят.[/url]

Список игр