Construction Set Extender
<table border="0"><tr><td valign="top">
<div id="tit1">Введение</div>
Это плагин для OBSE который, как понятно из названия, расширяет возможности стандартного редактора TESIV: ConstructionSet. Скажите, кто из вас не мечтал, чтобы это ужасное окно редактора скриптов само проставляло табуляцию? Кому из вас не мешали в работе постоянные окошки с предупреждениями от конструктора? А не приходилось ли вам сталкиваться с тем, чтобы конструктор закрывался от одного вашего небрежного действия и ваша полуторачасовая работа летела коту под хвост? Так или иначе вы не сможете не оценить вклад автора этого замечательного плагина: shadeMe, за что ему респект и уважуха большой поклон.
<div id="tit2">Нововведения</div>
- Теперь можно загружать мастер-файлы в "Конструктор" для редактирования
- Можно менять заголовочную информацию о мастер-файле:
- Улучшен инструмент «Поиск текста»:
Дважды кликнув по выбранному результату поиска, откроется соответствующее окошко для его редактирования, или, если это ссылка на объект, то он загрузится в окне визуализатора. - Теперь можно загружать плагины с отсутствующими мастер-файлами:
- Отныне все предупреждения не выскакиваю в диалоговых окнах, а тихо и мирно выводятся в консоль
- Быстрый выход из CS.
- Сохранения плагинов как мастер-файлов:
Теперь плагин можно сохранить как ESM или как ESP, на выбор. - Теперь диалоговое окно которое выскакивает при закрытии окна редактора скриптов с подтверждением о сохранении скрипта имеет кнопку "Отмена", что позволяет вернутся к редактированию скрипта, как, например, в Ворде.
- Улучшенная команда рекомпиляции скриптов:
Теперь при вызове команды «Рекомпилировать все скрипты» они будут рекоплилированы только в активном плагине. - Лог компиляции:
Результаты рекомпиляции выводятся в консоль. - Неизвестные записи и типы групп:
Если при загрузке, в плагине, будут обнаружены неизвестные записи или типы групп, то это не вызовет ошибки и, как следствие, закрытие окна «Конструктора». - Удвоен максимальный размер скомпилированного скрипта:
Теперь размер байт-кода скомпилированного скрипта может быть равен 32KB. - Ошибки компиляции:
Теперь ошибки компиляции выводятся в соответствующую область окна редактора скриптов. - Сохранение плагина при открытых окнах «Конструктора»:
Теперь не обязательно закрывать все диалоговые окна перед сохранением плагина. - BSA архивы больше не загружаются выборочно:
Все BSA архивы в папке Data загружаются при старте «Конструктора».
<div id="tit3">Установка</div>
Теперь вы можете скачать плагин с нашего сайта. Обратите внимание, что CSE и CS 10 Executable упакованы в один архив.
Для установки плагина извлеките содержимое плпгина в папку Oblivion, затем откройте файлик ConstructionSet.ini, найдите в нём строку bAllowMultipleEditors и присвойте ей значение 1.
</td><td valign="top">
<table border="1" style="border-collapse: collapse; border-color: black; font-family: monospace;"><tr style="background-color: silver;"><td style="text-align: center;">Содержание</td></tr>
<tr><td><a href="#tit1">Введение</a>
<a href="#tit2">Нововведения</a>
<a href="#tit3">Установка</a>
<a href="#tit4">Новый редактор скриптов</a>
- <a href="#tit5">Панель инструментов редактора скриптов</a>
-- <a href="#tit6">Выбор скрипта</a>
-- <a href="#tit7">Меню настроек</a>
-- <a href="#tit8">Назначение скрипта</a>
- <a href="#tit9">Контекстное меню</a>
<a href="#tit10">Препроцессор</a>
- <a href="#tit11">Команды препроцессора</a>
<a href="#tit12">Редактор заметок</a>
<a href="#tit13">Редактор ссылок</a>
<a href="#tit14">Информация о файле плагина</a>
<a href="#tit15">Консоль</a>
- <a href="#tit16">Консольные команды</a>
<a href="#tit17">Осмотрщик BSA архивов</a>
<a href="#tit18">Настройки CSE</a>
</td></tr></table></td></tr></table>
<div id="tit4">Новый редактор скриптов</div>
<table border="0" style="vertical-align: top;"><tr><td valign="top">
"Он был написан с нуля и превосходит стандартный
редактор во всех отношениях."
shadeMe
Новый редактор полностью заменил старый и вплотную приблизился к редакторам кода в понимании современного человека, единственное, чего ему не хватает, на мой взгляд, так это подсветки синтаксиса, будем надеяться, что автор не забудет реализовать эту приятную мелочь в последующих версиях своего творения.
<div id="tit5">Панель инструментов редактора скриптов</div>
- создать новую вкладку
- создать новый скрипт.
- открыть скрипт.
<div id="tit6">Выбор скрипта</div>
Окошко для выбора загружаемого в редактор скрипта также стало более информативным, в перечне скриптов появилась колонка с типом скрипта, а также появился предпросмотр. Теперь можно загружать сразу несколько скриптов в редактор: к списку скриптов применимы уже привычные комбинации клавиш системы Windows - Shift и Control, внизу окошка, под перечнем скриптов, расположена текстовая строка которая служит для быстрого поиска по списку.
- сохранить скрипт.
- сохранить, но не компилировать.
- сохранить и скрипт и активный плагин.
- загрузить предыдущий по списку скрипт.
- загрузить следующий по списку скрипт.
- перекомпилировать все скрипты в активном плагине.
- перекомпилировать зависимые скрипты.
- удалить скрипт.
- сохранить скрипты во всех открытых вкладках.
- вызвать меню настроек.
<div id="tit7">Меню настроек</div>
Вкладка General:
- Auto-Indent Script Lines ((рус.) "Авто сдвиг строк кода") - При включённой опции программа будет автоматически вставлять отступ (символ табуляции) после открытия и убирать его после закрытия следующих блоков:
- Begin - End
- If - ElseIf - EndIf
- While - Loop
- 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
- привязать скрипт к существующей или новой записи.
<div id="tit8">Назначение скрипта</div>
В новом редакторе появилась возможность задавать скрипты существующим или новым записям в плагине, которые имеют поле "Скрипт".
Для тог чтобы "прилепить" скрипт к существующей записи - просто выбираем её из разворачивающегося списка размещённого напротив переключателя Bind To Existing Form. Для того, чтобы создать новую форму - устанавливаем переключатель в позицию Bind To New Form, задаём тип, параметры и имя формы. Если вы всё сделали правильно, то будет создана новая форма с указанным именем указанного типа.
<div id="tit9">Контекстное меню</div>
Copy
Paste
Find
Toogle Comment - закомментировать выделеные строки
Toogle Bookmark - создать закладку на выбранной строке
Add Message - команда позволяет написать сообщение самому себе, которое будет выведено... Где бы вы думали? Конечно же в области уведомлений, куда, например, выводит сообщения об ошибке программа при компиляции скриптов. Не знаю зачем shadeMe предусмотрел такую возможность, пожалуй он просто решил насадить лишнюю гайку на лишний болт.
Copy To Edit Box - копирует текст в окошко расположенное в нижнем левом углу окна редактора скриптов. В разворачивающемся списке правее можно выбрать необходимое действие над этим фрагментом, как то искать, заменять и т.д.
Look up on the Wiki
Look up on the OBSE Doc
Lookup on Google
</td>
<td>
Рис.1 Окно редактора скриптов
Рис.2 Диалоговое окно для выбора скрипта
Рис.3 Меню настроек редактора скриптов
Рис.4 Меню настроек редактора скриптов
Рис.5 Меню настроек редактора скриптов
Рис.6 Меню настроек редактора скриптов
Рис.7 Меню настроек редактора скриптов
Рис.8 Окно назначения скриптов
Рис.9 Диалоговое окно вызванное командой Toogle Bookmark
Рис.10 Диалоговое окно вызванное командой Add Message
</td></tr></table>
<div id="tit10">Препроцессор
"Как в лучших домах Ландона и Порижа."
Остап Бендер
Ещё одно новшество в CSE. Препроцессор обрабатывает данные перед компиляцией, позволяя "скармливать" последнему (этому самому, компилятору, которому) только определённую часть кода в определённых ситуациях. А зачем он нужен? Тяжело объяснить козе зачем ей баян, но согласитесь, если она баянистка, то и вопросы как-то сами отпадают. Правда?! Но давайте будем конкретнее и рассмотрим пример "на кошечках":
Кто делал сам, или разбирал чужие плагины, не трусы, разумеется, тот не мог не встретить закомментированные сообщения с отладочной информацией. Допустим у вас плагин в котором не пять и не десять скриптов, в каждом из которых сотня - полторы строк, каждый из которых должен быть отлажен. Доводя до конечного пользователя вся эта информация должна быть скрыта или вычещена. И тут вы понимаете что вам нужно перелопатить добрую тыщу строк в поисках своих месседжбоксов... А можно ли это как-то... малой кровью? Ну разумеется! К чему же я тогда веду?! Но для начала ознакомимся с самим командами препроцессора:
<div id="tit11">Команды препроцессора</div>
Все команды препроцессора должны быть закомментированны, т.е. перед ними должна стоять точка с запятой (";").
Команды могут быть однострочными или многострочными, для отделения одних от других перед командой должен стоять символ "#" в случае, если это однострочная команда, или "@" - если многострочная.
- DEFINE - определяет константу. Синтаксис:
;#DEFINE <ИМЯ_КОНСТАНТЫ> <значение_константы>
Например следующая команда определяет константу с именем X и значением 3
;#DEFINE X 3
Перед компиляцией скрипт будет пропущен через препроцессор, и всякий раз, как он встретит этот самый X, он заменит его на его значение, т.е. на 3. Например имеется следующий элементарный скрипт:
;#DEFINE X 3ScriptName PreprocessorTestingScriptshort YBegin GameModeSet Y to Y + XEnd
Пропущенный через препроцессор он поступит на компиляцию уже в следующем виде:
ScriptName PreprocessorTestingScriptshort YBegin GameModeSet Y to Y + 3End
- IMPORT - импортирует в то место, где стоит эта команда указанный скрипт, который находится в папке Oblivion\Data\Scripts\. Синтаксис:
;#IMPORT "<Название_файла>"
<Название_файла> - это название текстового документа в папке Oblivion\Data\Scripts\ без расширения. Например в папке Oblivion\Data\Scripts\ лежит файлик с названием Part1.txt, пускай в нём написано:
short afloat bref c
А мы хотим засунуть его содержимое в наш скрипт. Пишем:
ScriptName PreprocessorTestingScript;#INCLUDE "Part1"Begin GameModeSet a to 10Set b to .015Set c to GetSelfEnd
Получаем:
ScriptName PreprocessorTestingScriptshort afloat bref cBegin GameModeSet a to 10Set b to .015Set c to GetSelfEnd
- ENUM - определяет перечисление. Синтаксис:
;#ENUM <ИМЯ_ПЕРЕЧИСЛЕНИЯ> { <ПЕРВЫЙ_ЭЛЕМЕНТ_ПЕРЕЧИСЛЕНИЯ>=<значение> <ВТОРОЙ_ЭЛЕМЕНТ_ПЕРЕЧИСЛЕНИЯ>=<значение> ... <N-тый_ЭЛЕМЕНТ_ПЕРЕЧИСЛЕНИЯ>=<значение> }
или
;@ENUM <ИМЯ_ПЕРЕЧИСЛЕНИЯ>;{; <ПЕРВЫЙ_ЭЛЕМЕНТ_ПЕРЕЧИСЛЕНИЯ>=<значение>; <ВТОРОЙ_ЭЛЕМЕНТ_ПЕРЕЧИСЛЕНИЯ>=<значение>; ...; <N-тый_ЭЛЕМЕНТ_ПЕРЕЧИСЛЕНИЯ>=<значение>;}
В следствии того, что элементы перечисления могут принимать только численные значения, то вся польза от этой конструкции исходит на нет. По сути перечисление (ENUM), в том виде, в котором мы имеем его здесь, является более громоздкой и менее гибкой формой определения (DEFINE). Вполне возможно что автор просто не довёл её до ума, т.к. даже в официальной документации ей посвящено всего пару строк.
Да, и ещё очень важное замечание: между именем элемента перечисления, знаком равенства и значением не может быть пробелов, т.к. это вызывает ошибку.
- IF - условный оператор. Синтаксис:
;@IF (<условие>);{; <Последовательность_операторов>;}
В условии можно применять логические операторы:- [==] - Равно
- [!=] - Не равно
- [>] - Строго больше
- [<] - Строго меньше
- [>=] - Больше или равно
- [<=] - Меньше или равно
- [&&] - Логическое И
- [||] - Логическое ИЛИ
В следующем примере показано, как избавится от отладочной информации о которой мы говорили в начале:
;#DEFINE _DEBUG_MODE 1ScriptName PreprocessorTestingScript; ...Begin GameMode; Многабукаф;@IF(_DEBUG_MODE==1);{; Message "Debug mode is ON";}End
Таким образом просто присвоив константе _DEBUG_MODE значение 0 и перекомпилировав скрипт мы избавимся от ненужных частей кода. Легко и просто.
<table border="0"><tr><td valign="top">
<div id="tit12">Редактор заметок</div>
Редактор заметок позволяет сопровождать процесс разработки разнообразными комментариями, из которых можно ссылаться на записи плагина. Вы что-то делали, но были вынуждены это забросить на неопределённое время, потом вы об этом забыли... Теперь можно оставить себе напоминание.
В левой области редактора заметок вызываем контекстное меню и выбираем пункт Add Tag и обзываем его как хотим.
Для того чтобы прикрепить какой-то объект к записи в комментариях, нужно вызвать на нём контекстное меню в окне объектов и выбрать пункт Add To Active Tag.
Чтобы вызвать редактор заметок, выберете пункт View -> Tag Browser в главном меню.
<div id="tit13">Редактор ссылок</div>
Редактор ссылок позволяет комбинировано управлять свойствами объектов помещённых в загруженную ячейку. Ничего принципиально нового тут нет, по этому особо на этом не останавливаемся.
Чтобы вызвать редактор ссылок, выберете пункт World -> Batch Edit References в главном меню.
<div id="tit14">Информация о файле плагина</div>
Находится в Gameplay -> Use Info Listing. Тут можно более подробно ознакомится со всеми записями в плагине и проследить их связи.
<div id="tit15">Консоль</div>
Отныне программа выводит лог в консоль, благодаря этому элементу исчезли многочисленные навязчивые окна с предупреждением от "Конструктора". Также существует несколько консольных команд:
<div id="tit16">Консольные команды</div>
- LoadPlugin - загружает указанный плагин. Синтаксис:
LoadPlugin string:<plugin_name.extension> bool:SetAsActive
Где plugin_name.extension - название плагина,
SetAsActive - Указывает, сделать ли загружаемый плагин активным. 1 - если ДА, 0 - если НЕТ. - LoadForm - открывает соответствующее окно для редактирования указанной формы. Синтаксис:
LoadForm string:<editorID>
- SavePlugin - сохраняет плагин. Команда без параметров.
- AutoSave - делает резервную копию плагина в каталог Data\Backup\. Команда без параметров.
- Exit - Выход из "Конструктора". Команда без параметров.
<div id="tit17">Осмотрщик BSA архивов</div>
Решает массу проблем при работе с нераспакованными ресурсами, когда они находятся в архивах или вовсе отсутствуют.
При выборе ресурсов выскакивает окошко (Рис.14), в котором мы можем выбрать:
Select Asset On Disk - если у нас ресурсы хранятся на диске в папке \Oblivion\Data\, то выбираем этот пункт. Всё как раньше.
Select Asset In Archive - если ресурсы запакованы в BSA архив, то выбираем этот пункт. Вылезет окошко BSA Browser (Рис.15).
- Открыть архив.
- Подняться на уровень вверх.
- Изменить вид (Список/Плитка), как в проводнике Windows.
Edit Asset Path - Прописать путь ручками
<div id="tit18">Настройки CSE</div>
Панель настроек CSE (рис.15) находится в главном меню File -> CSE Preferences. Редактировать настройки CSE можно как с помощью этой панели, так и вручную через файл \Oblivion\Data\OBSE\Plugins\Construction Set Extender.ini. Далее привожу список параметров:
<table width="100%" border="1" style="border-collapse: collapse; border-color: black; font-family: monospace; font-size: small; text-align: center;"><tr style="background-color: gray;"><td>Относится к</td><td>Имя</td><td>За что отвечает</td></tr><tr><td>Консоль</td><td>Top</td><td>Расстояние от верхнего края экрана</td></tr><tr><td>Консоль</td><td>Left</td><td>Расстояние от левого края экрана</td></tr><tr><td>Консоль</td><td>Right</td><td>Расстояние от правого края экрана</td></tr><tr><td>Консоль</td><td>Bottom</td><td>Расстояние от нижнего края экрана</td></tr><tr><td>Консоль</td><td>LogCSWarnings</td><td>Выводить ли лог ошибок "Конструктора" в консоль? 1 - ДА; 0 - НЕТ.</td></tr><tr><td>Консоль</td><td>LogAssertions</td><td>Выводить ли сообщений ошибок "Конструктора" в консоль? 1 - ДА; 0 - НЕТ.</td></tr><tr><td>Консоль</td><td>HideOnStartup</td><td>Прятать ли окно консоли при запуске? 1 - ДА; 0 - НЕТ.</td></tr><tr><td>Консоль</td><td>ConsoleUpdatePeriod</td><td>Время обновления консоли в миллисекундах.</td></tr><tr><td>CSE</td><td>LoadPluginOnStartup</td><td>Загружать ли плагин указанный в поле <b>StartupPluginName</b> при старте конструктора автоматически? 1 - ДА; 0 - НЕТ.</td></tr><tr><td>CSE</td><td>StartupPluginName</td><td>Название файла плагина, который будет загружен при старте конструктора, если установлен параметр <b>LoadPluginOnStartup</b></td></tr><tr><td>CSE</td><td>OpenScriptWindowOnStartup</td><td>Открывать ли окно редактора скриптов при старте конструктора автоматически? 1 - ДА; 0 - НЕТ.</td></tr> <tr><td>CSE</td><td>StartupScriptEditorID</td><td>Название скрипта, который будет открыт в о редакторе скриптов при старте "Конструктора". Трубует включённого параметра <b>OpenScriptWindowOnStartup</b></td></tr> <tr><td>CSE</td><td>ShowNumericEditorIDWarning</td><td> </td></tr> <tr><td>CSE</td><td>SetWorkspaseOnStartup</td><td>Выбрать рабочей директорию заданую параметром <b>DefaultWorkspasePath</b>? 1 - ДА; 0 - НЕТ.</td></tr><tr><td>CSE</td><td>DefaultWorkspasePath</td><td>Путь к рабочей директории.</td></tr><tr><td>Визуализатор</td><td>UpdatePeriod</td><td>Время обновления окна визуализатора в миллисекундах</td></tr><tr><td>Визуализатор</td><td>DisplaySelectionStats</td><td>Выводить информацию о выбранном объекте в окне визуализаторы? 1 - ДА; 0 - НЕТ.</td></tr><tr><td>Визуализатор</td><td>UpdateViewPortAsync</td><td>Разрешить обновление картинки в окне визуализатора, если оно не активно? 1 - ДА; 0 - НЕТ.</td></tr></table>
</td><td valign="top">
Рис.11 Окно редактор заметок
Рис.12 Окно редактор ссылок
Рис.13 Окно информации о плагине
Рис.14
Рис.15 Окно BSA браузера
Рис.16 Окно консоли
Рис.17 Окно настроек CSE
</td></tr></table>