Elite Games - Свобода среди звезд!

X2 - Скрипты - это легко... - Описание редактора скриптов X2: The Threat

ОПИСАНИЕ РЕДАКТОРА СПРИПТОВ X2: THE THREAT


При первом запуске редактора мы видим сообщение от Егософт о том что запущен интерфейс ручного управления бортовым компьютером и краткую справку по использованию основных «горячих» клавиш. Нажимаем <Enter> и попадаем в главное меню редактора содержащее следующие пункты:



Из этого меню осуществляется весь процесс контроля исполнения и отладки НС.




Редактор скриптов

Выбрав этот пункт в главном меню редактора вы переходите к браузеру скриптового редактора, то есть к списку скриптов доступных для редактирования, выполнения и т.п. Самая верхняя строка из списка, это «новый скрипт», позволяет приступить к созданию нового НС. Если вы выберете ее, то редактор спросит у вас имя нового скрипта, и создаст пустой скрипт-файл. Браузер скриптового редактора позволяет производить над скриптами определенные действия, такие как копирование, удаление, выполнение и т.д. В таблице приведены клавиши управления скриптовым редактором:

Клавиши управления редактором скриптов

Режим браузера скриптов:

<l>Загрузить скрипт из папки скриптов
<c>Копировать скрипт
<r>Выполнить скрипт
<Del>Удалить скрипт
<Enter>Редактировать скрипт


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

<вверх/вниз>Перемещение по строкам
<влево/вправо>Перемещение между выражениями
<Enter>Меню функций
<Ins>Вставить новую строку
<Del>Удалить строку
<c>Копировать строку в буфер
<x>Вырезать строку в буфер
<v>Вставить строку из буфера
<.>Закомментировать строку
<,>Удалить символ комментария
<Home>Вставить операнд выражения
<End>Удалить операнд выражения
<Esc>Сохранить и закрыть скрипт





Reinit Script Caches

При запуске игры все НС запускающиеся из командного меню помещаются в специальный СкриптКэш. Это делается для более быстрого выполнения команд. Но, данный подход имеет и другую сторону, ScE будет использовать старую версию скрипта даже после его модификации и перезапуска команды. Пункт меню Reinit Script Caches производит перезагрузку СкриптКэша, то есть все скрипты привязанные к пунктам меню будут перезапущены. Однако обратите внимание на то, что изменения не будут действовать для объектов уже выполняющих данную команду, а только для тех которым команда отдается после перезагрузки СкриптКэша. Для того чтобы изменения вступили для этих объектов следует остановить выполнение команды и отдать ее снова.




Script Debugging

Переключатель режимов отладки НС на объекте. Имя объекта указывается в этой же строке. Здесь возможны два варианта: вести пошаговую отладку (Trace) или производимые НС действия будут записываться в лог (Log). Выбор осуществляется нажатием <Enter>, при установке курсора на эту строку.




Clear Debug Messages

Выбор этого пункта, удалит все данные из лога объекта указанного в Script Debugging.




Script Debugger Menu

Просмотр лога отладки или пошаговое выполнения НС с показом значений переменных.

Просмотр лога (Log) – при установленном в это положение переключателя Script Debugging будет отражен лог, наполнение которого происходит в реальном времени, по мере выполнения команд НС на данном объекте. Чтобы было более понятно создадим небольшой скрипт с именем a.missile.fire :



001 $ware = Ракета Москит / / Раздел общие команды. <RetVar/IF> <Expression> Присваиваем переменной $ware значение Ракета Москит

002 $count = 20 / / Присваиваем переменной $count=20 раздел общие команды <RetVar/IF><Expression>

003 while $count / / Запускаем цикл с условием $count не ноль. Раздел общие команды. <RetVar/IF><Expression>

004 @ = wait 3000 ms / / Ожидаем 3 секунды (чем больше в цикле таких команд тем стабильней работает игра см. Многозадачность). Раздел общие команды.

005 dec $count = / / Цикл начал выполнение, уменьшаем счетчик витков на 1. Раздел общие комманды.

006 $victium = get player tracking aim / / Получаем объект в прицеле корабля игрока в переменную $victium. Раздел навигационные команды

007 = [PLAYERSHIP -> add 1 units of $ware / / Добавляем одну ракету в трюм корабля игока Раздел «Торговые команды»

008 = [PLAYERSHIP] -> fire missile $ware on $victium / / Выпускаем одну ракету по $victium Раздел навигационные команды

009 @ = wait 3000 ms / / Ждем 3 сек.

010 end / / Начинаем новый виток цикла, то есть передаем управление в строку 003. Раздел Общие команды">команды исполнения.

011 return null / / Возвращаем управление вызывающему скрипту

* для тех кто плохо знаком с расположением команд в комментариях указаны разделы где они расположены.

Этот скрипт производит двадцать выстрелов ракетой Москит по объекту находящемуся в прицеле корабля игрока (наличие ракет в трюме не обязательно), этого времени нам хватит чтобы рассмотреть работу Script Debugger Menu. Войдите в скриптовый редактор, <Shift+C>, выберете Редактор скриптов=> новый скрипт, введите имя и повторите текст данного скрипта. Сохраните его. После, выйдите из редактора и подлетите на своем корабле к какому-нибудь астероиду. Остановитесь и возьмите его в прицел, нажмите <Т>, чтобы прицел зафиксировался на астероиде (Важно: проверьте чтобы для турелей не было установлено никаких команд, если они установлены отключите их). Теперь возвращайтесь в редактор выбирайте в списке скриптов созданный a.missile.fire и жмите <r>. На запрос редактора об объекте выбираем собственный корабль и жмем <Enter>. Через три секунды ваш корабль сам выстрелит ракетой по астероиду. Если это произошло, снова запускаем редактор скриптов, если нет, то проверяем последовательность действий описанную выше. Наш корабль выстрелил, и мы вернулись в главное меню редактора. Очищаем буфер ScE от возможных остатков старых данных выбором команды Clear Debug Messages и устанавливаем переключатель Script Debugging в позицию “Log” и вызываем пункт Script Debugger Menu. В открывшемся окне видим длинный и все время пополняющийся табличный список:



Строки с 1 по 9 содержат в (правой части) исходный текст нашего скрипта, после этого листинг начинает дублироваться, а если посмотреть параметр Line:, вы заметите, что цифры совпадают с номерами строк исходного текста скрипта, и до строки 9 последовательность сохранялась, а в десятой снова стал равен 3. Если посмотрим какие операторы стоят в этих строках, то становиться ясно что в строке 9 мы дошли до конца цикла и передали управление в строку 3, так как в листинге нашего скрипта в строке 10 стоит оператор end, а в данном случае он передает управление в начало цикла в строке 3. Теперь как и задумывалось данный сегмент нашего скрипта исполнится двадцать раз. Соответственно и в логе он будет последовательно отображен двадцать раз, после чего скрипт завершится и по команде return передаст управление взывающему скрипту, а в нашем случае т.к. мы вызывали скрипт в ручную и у нашего корабля не было никаких других команд корабль перейдет в режим ожидания, а в лог больше ничего записываться не будет до тех пор пока корабле не будет снова запущен какой либо скрипт.

Теперь кратко опишем остальные данные выводимые в строке:

Script Name – имя скрипта, команда которого была выполнена в данной строке.

Line – номер строки в скрипте Script Name.

Stackdepth – глубина стек в котором выполняется задача (количество скриптов в стеке отсчет ведется с 0)

Prio – приоритет выполняемого скрипта

PID – глобальный идентификатор задачи

TaskID – Идентификатор задачи

Command – исходный текст команды

Теперь перед нами вся последовательность команд выполненная ScE при обработке скрипта a.missile.fire.

Пошаговое выполнения (Trace) — это второй вариант отладки скрипта, пошаговое выполнение команд подразумевает следующее, ScE выполнив одну команду ожидает разрешения от пользователя на выполнение следующей, при этом показываются значения всех переменных этого скрипта. Для подробного рассмотрения этого режима выполним такие же подготовительные действия как и при рассмотрении режима «Log», с той разницей что переключатель Script Debugging переведем в состояние «Trace» и запустим скрипт a.missile.fire. Выполняем пункт меню Script Debugger Menu. Окно для пошаговой отладки состоит из двух сегментов:



Верхний сегмент показывает листинг уже выполненных команд (отражены белым цветом), и команда ожидающая от пользователя разрешения на выполнение (отражена зеленым цветом). Информативное содержание строки такое же, как и в режиме «Log» (Script Name: Line: Stackdept:…). Если вы нажмете Enter, то команда ожидающая разрешения выполнится и изменит цвет на белый, а ниже появится следующая команда из выполняемого скрипта и редактор будет ожидать следующего нажатия Enter. Нижний сегмент показывает список всех переменных, которые использует скрипт. Имя переменной указывается самым первым (Variable Name), далее идет тип данных (Data Type) и значение (Value). Изначально тип данных всех переменных NULL и изменяется он только после того как переменной было присвоено какое то значение. Само значение переменной отражается сразу за типом данных.

Пошаговый режим удобен для поиска ошибок в проблемных скриптах.




Global Script Tasks

Этот пункт меню служит для того чтобы можно было посмотреть какие глобальные скрипты выполняются в данный момент, а также для удаления из памяти не нужных (нажатие <Delete>). Для рассмотрения используем тот же скрипт a.missile.fire, только выполним его как глобальный, то есть без привязки к какому либо объекту, для этого на вопрос при запуске вместо выбора объекта выбираем null. Если скрипт запущен, выбираем Global Script Tasks. Открывается окно содержащее листинг всех скриптов выполняющихся глобально и среди них должен присутствовать запущенный нами скрипт a.missile.fire. Присутствие запущенного нами скрипта в списке говорит о том, что в данный момент наш скрипт a.missile.fire выполняется как глобальный. Если выйти из редактора, то мы увидим, что наш корабль стреляет ракетами по астероиду.

Теперь давайте попробуем удалить наш скрипт из память (прервем его исполнение). Возвращаемся в скриптовый редактор в раздел Global Script Tasks. Выбираем наш скрипт в списке и нажимаем <Delete>, на запрос об удалении скрипта отвечаем «Да». Теперь наш скрипт исчез из списка выполняемых глобально скриптов, а корабль соответственно перестал стрелять и замер в ожидании следующих команд.



Данные о скрипте выводимые редактором в Global Script Tasks:

PID – глобальный идентификатор задачи

Script Name – имя глобального скрипта

RefObject – ???
Павел Черняков a.k.a. DragonP
К началу раздела | Наверх страницы Сообщить об ошибке
X2 - Скрипты - это легко... - Описание редактора скриптов X2: The Threat
Все документы раздела: Главная |


Дизайн Elite Games V5 beta.18
EGM Elite Games Manager v5.17 02.05.2010