Перейти к содержимому


Информация о статье

  • Добавлено:
  • Обновлено:
  • Просмотры: 4854

 


* * * * *
2 Рейтинг

Construction Set Extender

Написано в Мар 16 2013 21:01

Введение



Это плагин для OBSE который, как понятно из названия, расширяет возможности стандартного редактора TESIV: ConstructionSet. Скажите, кто из вас не мечтал, чтобы это ужасное окно редактора скриптов само проставляло табуляцию? Кому из вас не мешали в работе постоянные окошки с предупреждениями от конструктора? А не приходилось ли вам сталкиваться с тем, чтобы конструктор закрывался от одного вашего небрежного действия и ваша полуторачасовая работа летела коту под хвост? Так или иначе вы не сможете не оценить вклад автора этого замечательного плагина: shadeMe, за что ему респект и уважуха большой поклон.

Нововведения


Теперь можно загружать мастер-файлы в конструктор для редактирования
Можно менять заголовочную информацию о мастер-файле:
Улучшен инструмент «Поиск текста»:
Дважды кликнув по выбранному результату поиска, откроется соответствующее окошко для его редактирования, или, если это ссылка на объект, то он загрузится в окне визуализатора.
Теперь можно загружать плагины с отсутствующими мастер-файлами:
Отныне все предупреждения не выскакиваю в диалоговых окнах, а тихо и мирно выводятся в консоль
Быстрый выход из CS.
Сохранения плагинов как мастер-файлов:
Теперь плагин можно сохранить как ESM или как ESP, на выбор.
Теперь диалоговое окно которое выскакивает при закрытии окна редактора скриптов с подтверждением о сохранении скрипта имеет кнопку "Отмена", что позволяет вернутся к редактированию скрипта, как, например, в Ворде.
Улучшенная команда рекомпиляции скриптов:
Теперь при вызове команды «Рекомпилировать все скрипты» они будут рекоплилированы только в активном плагине.
Лог компиляции:
Результаты рекомпиляции выводятся в консоль.
Неизвестные записи и типы групп:
Результаты рекомпиляции выводятся в консоль.Если при загрузке, в плагине, будут обнаружены неизвестные записи или типы групп, то это не вызовет ошибки и, как следствие, закрытие окна «Конструктора».
Удвоен максимальный размер скомпилированного скрипта:
Теперь размер байт-кода скомпилированного скрипта может быть равен 32KB.
Ошибки компиляции:
Теперь ошибки компиляции выводятся в соответствующую область окна редактора скриптов.
Сохранение плагина при открытых окнах «Конструктора»:
Теперь не обязательно закрывать все диалоговые окна перед сохранением плагина.
BSA архивы больше не загружаются выборочно:
Все BSA архивы в папке Data загружаются при старте «Конструктора».


Установка
Скачать плагин можно по ссылке.
Для установки плагина извлеките содержимое плагина в папку Oblivion.
Также рекомендуется скачать и распаковать в папку Oblivion архив CS 10 Executable, ссылка на который дана всё на той же странице. Затем откройте файлик ConstructionSet.ini, найдите в нём строку bAllowMultipleEditors и присвойте ей значение 1.

Новый редактор скриптов


"Он был написан с нуля и превосходит стандартный
редактор во всех отношениях."
shadeMe


Изображение

Рис.1 Окно редактора скриптов

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


Панель инструментов редактора скриптов

Изображение - создать новую вкладку
Изображение - создать новый скрипт.
Изображение - открыть скрипт.


Выбор скрипта

Изображение

Рис.2 Диалоговое окно для выбора скрипта

Окошко для выбора загружаемого в редактор скрипта также стало более информативным, в перечне скриптов появилась колонка с типом скрипта, а также появился предпросмотр. Теперь можно загружать сразу несколько скриптов в редактор: к списку скриптов применимы уже привычные комбинации клавиш системы Windows - Shift и Control, внизу окошка, под перечнем скриптов, расположена текстовая строка которая служит для быстрого поиска по списку.

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

Меню настроек


ИзображениеИзображениеИзображение

ИзображениеИзображение

Рис.3,4,5,6,7 Меню настроек редактора скриптов

Вкладка General
Auto-Indent Script Lines ((рус.) "Авто сдвиг строк кода") - При включённой опции программа будет автоматически вставлять отступ (символ табуляции) после открытия и убирать его после закрытия следующих блоков:
0 Begin - End
0 If - ElseIf - EndIf
0 While - Loop
0 ForEach - Loop
Show Editor As Child Window - если этот флажок установлен, то окно редактора скриптов будет открыто как дочерное окно главного окна CS. Вся разница заключается в том, что если этот пункт не отмечен, то открытое окно редактора скриптов будет занимать дополнительную вкладку в панели задач.
Save Caret Position With Script - если этот флажок установлен, то программа будет сохранять положение курсора при переходе на новую строку таким же как оно было на начале предыдущей строки. Говоря простым языком, курсор не будет постоянно перепрыгивать на начало строки, как это было в стандартном редакторе.
Close Editor With Last Tab ((рус.) "Закрыть редактор с последней вкладкой")- ну тут всё предельно ясно, когда мы закроем последнюю вкладку, то и окошко редактора закроется.

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

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

• Begin - End
• If - ElseIf - EndIf
• While - Loop
• ForEach - Loop

Изображение - привязать скрипт к существующей или новой записи.


Назначение скрипта

Изображение

Рис.8 Окно назначения скриптов

В новом редакторе появилась возможность задавать скрипты существующим или новым записям в плагине, которые имеют поле "Скрипт".
Для тог чтобы "прилепить" скрипт к существующей записи - просто выбираем её из разворачивающегося списка размещённого напротив переключателя Bind To Existing Form. Для того, чтобы создать новую форму - устанавливаем переключатель в позицию Bind To New Form, задаём тип, параметры и имя формы. Если вы всё сделали правильно, то будет создана новая форма с указанным именем указанного типа.


Контекстное меню

ИзображениеCopy
ИзображениеPaste
ИзображениеFind
ИзображениеToogle Comment - закомментировать выделеные строки
ИзображениеToogle Bookmark - создать закладку на выбранной строке

Изображение
Рис.9 Диалоговое окно вызванное командой Toogle Bookmark

ИзображениеAdd Message - команда позволяет написать сообщение самому себе, которое будет выведено... Кто Где бы вы думали? Волшебный кролик! Конечно же в области уведомлений, куда, например, выводит сообщения об ошибке программа при компиляции скриптов. Не знаю зачем shadeMe предусмотрел такую возможность, пожалуй он просто решил насадить лишнюю гайку на лишний болт.


Изображение

Рис.10 Диалоговое окно вызванное командой Add Message

ИзображениеCopy To Edit Box - копирует текст в окошко расположенное в нижнем левом углу окна редактора скриптов. В разворачивающемся списке правее можно выбрать необходимое действие над этим фрагментом, как то искать, заменять и т.д.
ИзображениеLook up on the Wiki
Look up on the OBSE Dok
ИзображениеLookup on Google

Препроцессор


"Как в лучших домах Ландона и Порижа."
Остап Бендер

Ещё одно новшество в CSE. Препроцессор обрабатывает данные перед компиляцией, позволяя "скармливать" последнему (этому самому, компилятору, которому) только определённую часть кода в определённых ситуациях. А зачем он нужен? Тяжело объяснить козе зачем ей баян, но согласитесь, если она баянистка, то и вопросы как-то сами отпадают. Правда?! Но давайте будем конкретнее и рассмотрим пример "на кошечках":
Кто делал сам, или разбирал чужие плагины, не трусы, разумеется, тот не мог не встретить закомментированные сообщения с отладочной информацией. Допустим у вас плагин в котором не пять и не десять скриптов, в каждом из которых сотня - полторы строк, каждый из которых должен быть отлажен. Доводя до конечного пользователя вся эта информация должна быть скрыта или вычещена. И тут вы понимаете что вам нужно перелопатить добрую тыщу строк в поисках своих месседжбоксов... А можно ли это как-то... малой кровью? Ну разумеется! К чему же я тогда веду?! Но для начала ознакомимся с самим командами препроцессора:


Команды препроцессора
Все команды препроцессора должны быть закомментированны, т.е. перед ними должна стоять точка с запятой (";").
Команды могут быть однострочными или многострочными, для отделения одних от других перед командой должен стоять символ "#" в случае, если это однострочная команда, или "@" - если многострочная.


• DEFINE - определяет константу. Синтаксис:
;#DEFINE <ИМЯ_КОНСТАНТЫ> <значение_константы>
Например следующая команда определяет константу с именем X и значением 3
1. ;#DEFINE X 3

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



;#DEFINE X 3
ScriptName PreprocessorTestingScript
short Y
Begin GameMode
Set Y to Y + X
End
Пропущенный через препроцессор он поступит на компиляцию уже в следующем виде:



ScriptName PreprocessorTestingScript
short Y
Begin GameMode
Set Y to Y + 3
End


• IMPORT - импортирует в то место, где стоит эта команда указанный скрипт, который находится в папке Oblivion\Data\Scripts\. Синтаксис:
;#IMPORT "<Название_файла>"
<Название_файла> - это название текстового документа в папке Oblivion\Data\Scripts\ без расширения. Например в папке Oblivion\Data\Scripts\ лежит файлик с названием Part1.txt, пускай в нём написано:



short a
float b
ref c
А мы хотим засунуть его содержимое в наш скрипт. Пишем:



ScriptName PreprocessorTestingScript
;#INCLUDE "Part1"
Begin GameMode
Set a to 10
Set b to .015
Set c to GetSelf
End
Получаем:



ScriptName PreprocessorTestingScript
short a
float b
ref c
Begin GameMode
Set a to 10
Set b to .015
Set c to GetSelf
End
• ENUM - определяет перечисление. Синтаксис:

;#ENUM { = = ... = }

или

;@ENUM
;{
; =
; =
; ...
; =
;}

В следствии того, что элементы перечисления могут принимать только численные значения, то вся польза от этой конструкции исходит на нет. По сути перечисление (ENUM), в том виде, в котором мы имеем его здесь, является более громоздкой и менее гибкой формой определения (DEFINE). Вполне возможно что автор просто не довёл её до ума, т.к. даже в официальной документации ей посвящено всего пару строк.
Да, и ещё очень важное замечание: между именем элемента перечисления, знаком равенства и значением не может быть пробелов, т.к. это вызывает ошибку.

• IF - условный оператор. Синтаксис:

;@IF ()
;{
;
;}

В условии можно применять логические операторы:
• [==] - Равно
• [!=] - Не равно
• [>] - Строго больше
• [<] - Строго меньше
• [>=] - Больше или равно
• [<=] - Меньше или равно
• [&&] - Логическое И
• [||] - Логическое ИЛИ

В следующем примере показано, как избавится от отладочной информации о которой мы говорили в начале:


;#DEFINE _DEBUG_MODE 1

ScriptName PreprocessorTestingScript
; ...
Begin GameMode
; Многабукаф
;@IF(_DEBUG_MODE==1) ;{
; Message "Debug mode is ON"
;}
End

Таким образом просто присвоив константе _DEBUG_MODE значение 0 и перекомпилировав скрипт мы избавимся от ненужных частей кода. Легко и просто.

Редактор заметок



Изображение
Рис.11 Окно редактор заметок

Редактор заметок позволяет сопровождать процесс разработки разнообразными комментариями, из которых можно ссылаться на записи плагина. Вы что-то делали, но были вынуждены это забросить на неопределённое время, потом вы об этом забыли... Теперь можно оставить себе напоминание.
В левой области редактора заметок вызываем контекстное меню и выбираем пункт Add Tag и обзываем его как хотим.
Для того чтобы прикрепить какой-то объект к записи в комментариях, нужно вызвать на нём контекстное меню в окне объектов и выбрать пункт Add To Active Tag.
Чтобы вызвать редактор заметок, выберете пункт View -> Tag Browser в главном меню.

Редактор ссылок


Изображение

Рис.12 Окно редактор ссылок

Редактор ссылок позволяет комбинировано управлять свойствами объектов помещённых в загруженную ячейку. Ничего принципиально нового тут нет, по этому особо на этом не останавливаемся.
Чтобы вызвать редактор ссылок, выберете пункт World -> Batch Edit References в главном меню.

Информация о файле плагина

Изображение

Рис.13 Окно информации о плагине

Находится в Gameplay -> Use Info Listing. Тут можно более подробно ознакомится со всеми записями в плагине и проследить их связи.

Консоль

Изображение
Рис.14 Окно консоли

Отныне программа выводит лог в консоль, благодаря этому элементу исчезли многочисленные навязчивые окна с предупреждением от "Конструктора". Также существует несколько консольных команд:

Консольные команды

LoadPlugin - загружает указанный плагин. Синтаксис:
LoadPlugin string:<plugin_name.extension> bool:SetAsActive
Где plugin_name.extension - название плагина,
SetAsActive - Указывает, сделать ли загружаемый плагин активным. 1 - если ДА, 0 - если НЕТ.
LoadForm - открывает соответствующее окно для редактирования указанной формы. Синтаксис:
LoadForm string:<editorID>
SavePlugin - сохраняет плагин. Команда без параметров.
AutoSave - делает резервную копию плагина в каталог Data\Backup\. Команда без параметров.
Exit - Выход из "Конструктора". Команда без параметров.

Настройки CSE
Панель настроек CSE (рис.15) находится в главном меню File -> CSE Preferences. Редактировать настройки CSE можно как с помощью этой панели, так и вручную через файл \Oblivion\Data\OBSE\Plugins\Construction Set Extender.ini. Далее привожу список параметров:

Изображение

Рис.15 Окно настроек CSE

Относится к
Имя
За что отвечает



Консоль

Top

Растояние от верхнего края экрана



Консоль

Left

Растояние от левого края экрана



Консоль

Right

Растояние от правого края экрана



Консоль

Bottom

Растояние от нижнего края экрана



Консоль

LogCSWarnings

Выводить ли лог ошибок "Конструктора" в консоль? 1 - ДА; 0 - НЕТ.



Консоль

LogAssertions

Выводить ли сообщений ошибок "Конструктора" в консоль? 1 - ДА; 0 - НЕТ.



Консоль

HideOnStartup

Прятать ли окно консоли при запуске? 1 - ДА; 0 - НЕТ.



Консоль

ConsoleUpdatePeriod

Время обновления консоли в миллисекундах.



CSE

LoadPluginOnStartup

Загружать ли плагин указанный в поле StartupPluginName при старте конструктора автоматически? 1 - ДА; 0 - НЕТ.


CSE

StartupPluginName

Название файла плагина, который будет загружен при старте конструктора, если установлен параметр LoadPluginOnStartup

CSE

OpenScriptWindowOnStartup

Открывать ли окно редактора скриптов при старте конструктора автоматически? 1 - ДА; 0 - НЕТ.

CSE

StartupScriptEditorID

Название скрипта, который будет открыт в о редакторе скриптов при старте "Конструктора". Трубует включённого параметра OpenScriptWindowOnStartup



CSE

ShowNumericEditorIDWarning





CSE

SetWorkspaseOnStartup

Выбрать рабочей директорию заданую параметром DefaultWorkspasePath? 1 - ДА; 0 - НЕТ.


CSE

DefaultWorkspasePath

Путь к рабочей директории.



Визуализатор

UpdatePeriod

Время обновления окна визуализатора в миллисекундах



Визуализатор

DisplaySelectionStats

Выводить информацию о выбранном объекте в окне визуализаторы? 1 - ДА; 0 - НЕТ.



Визуализатор

UpdateViewPortAsync

Разрешить обновление картинки в окне визуализатора, если оно не активно? 1 - ДА; 0 - НЕТ.