Garin писал (правда не здесь

):
> Oblivion Script Studio я скачал. Пока что не вижу в ней ничего особенного.
> Читай на этом форуме тему с обсуждением ScriptMaster, может, найдешь там полезные для себя идеи.
Читал до того, как начал писать свой редактор.
В общем-то при написании редактора я ориентировался на возможности ScriptMaster'а, пытаясь добавить к нему синтаксический анализатор.
Прочитал тему второй раз. В этот раз очень внимательно.
Что просили у Суфира и есть у меня.
1) синтаксическая проверка текста. Неточная цитата из темы "хотя бы основные синтаксические конструкции". У меня работает не всегда корректно, но begin - end - if - .. - endif - set - to отслеживает без проблем.
2) хелп по функциям при движении мыши по коду. Есть.
Нашел пару-тройку мыслей, которые не реализованы у меня.
1. Вставка конструкций с отступами.В принципе планируется, но пока не сделал.
Garin, если не стер архив с редактором, то посмотри файл Constructions.list в папке Data. Там те конструкции, которые будут добавлены в окно handSense. Что между "|", то будет выделено после вставки. Символ "/" - перевод строки. Может что-то еще добавить?
2. Форматирование кода.У меня можно отформатировать весь код. Пока только отступами. Есть мысль сделать форматирование в процессе набора кода. Например, после end отформатировать все вверх до begin. Также при endif.
3. При вставке в текст конструкций/функций, проводить анализ, что можно в текущую позицию ставить, что нельзя.Тоже планируется. Но с использованием того варианта синтаксического анализатора, что работает сейчас, этот анализ сделать невозможно. Но анализатор я все равно буду переделывать, т.к. я ориентировался на то, что у разработчиков скриптового языка oblivion'а был здравый смысл при его разработке. А оказывается, зря я так думал. Garin, посмотри вопросы ниже.
Теперь далее.
Про разные типы скриптов. Цитата из темы про ScriptMaster "Но есть еще скрипты в поле "Result" диалогов. Есть еще и квестовые. Есть магические". Как и Суфир, не знаю точно различий. Из wiki понял, что существует 2 типа скриптов: в одном есть scriptname, можно секции begin. В другом нельзя, но обязательно для функций указывать объект, к которому приложена функция (например, player.ФУНКЦИЯ). Вот и все, на что хватило моего английского.
Также на мой взгляд неточность в теме по ScriptMaster'у. Опять цитата. "Заметьте, что " || " рассматривается раньше " && ", также как " * " рассматривается раньше " + " в обычной алгебре." Насколько я понимаю "||" это "ИЛИ OR", т.е. логическое сложение, а "&&" это "И AND", т.е. умножение. И соответственно, "&&" вычисляется раньше, чем "||".
Теперь вопросы и необходимость подтверждения некоторых предположений.
1. ПРЕДПОЛОЖЕНИЕ. Имя скрипта и переменных.
Может начинаться с цифры? В oblivion.esm таких скриптов нету, а вот в 000 1.3 есть.
Да и TES допускает создать такой скрипт с такими переменными.
Однако если или имя скрипта, или имя переменной начинается с цифры, то не дает в дальнейшем обратиться к переменнй из других скриптов.
Хотя в пределах скрипта TES все в норме.
Например, такой скрипт не дает ошибок
scn 6gh
short 7hg
begin onadd
set 7hg to 0
end
2. ПРЕДПОЛОЖЕНИЕ. Имя переменной может совпадать с именем функции или командой. Только подтвердить. Видел раз 20 в разных скриптах.
3. ПРЕДПОЛОЖЕНИЕ. Каждому if по endif. elseif не требует endif. Лишние endif игнорируются.
4. ВОПРОС. Многочисленные синонимы функций. Где-нибудь есть собранная таблица таких синонимов?
Из того, что попалось мне GetBaseAV SetAV ModAV Evp pms SCAOnactor forceav pme pcb saa sms. Если оканчивающиеся на AV понятны, то вот остальные. В вашем учебнике они собраны в кучу?
5. ПРЕДПОЛОЖЕНИЕ. Текст после end и else и endif игнорируются. В теме про ScriptMaster сказано, что игнорируется только для else.
6. ВОПРОС. Что происходит при повторном объявлении секции begin того же типа? В MS10UlrichScript вообще 4 раза. Выполняется первый/последний/все?
7. ВОПРОС. Повторные объявления переменных допускаются. Это я понял. Но если повторно объявлена другого типа, то какая она будет: по первому объявлению, или по последнему?
8. ПРЕДПОЛОЖЕНИЕ. Имя функции не сразу после ссылки. В скрипте MS09ArnorasChestScript строка
if ( IsActionRef Player == 1 ) && ( GetLocked == 1 ) && ( Player. GetItemCount ArnoraChestKey == 1 )
С пробелом между Player. и GetItemCount.
В ближайшее время планируется переделывать синтаксический анализатор, чтоб учесть все эти ненормальности.
А также составлять список пожеланий.