Naratzul Опубликовано 3 часа назад Опубликовано 3 часа назад (изменено) Всем привет! Хочу немного рассказать о проекте, которым занимался последний год. В какой-то момент захотелось немного переосмыслить Papyrus. Улучшить его синтаксис, сделать более эргономичным. Привнести лучшие практики из других языков программирования, насколько это возможно в рамках ограничений движка Creation Engine. Основным требованием и одновременно ограничением являлась полная совместимость с PEX (бинарный формат скриптов, написанных на Papyrus). Если вы пишите скрипты для Skyrim и хотелось более удобный синтаксис без потери совместимости с PEX — это как раз оно. Итогом стал Vellum. Коротко перечислю реализованные фишки, которых нет в Papyrus: Автоматический вывод типа для переменных (при помощи ключевого слова var) Цикл for в различных вариациях (можно итерироваться по массивам, по FormList'ам, по заданному диапазону) Операторы break и continue для циклов Форматирование строк Pattern matching (позволяет сократить цепочку if-elseif-else) Однострочное создание и заполнение массивов (var nums = [1, 2, 3]) Тернарный условный оператор (?:) Оператор is для проверки типов (source is Weapon) (как в FO4; в Vellum есть и для Skyrim) Vellum полностью совместим с Papyrus и рантаймом движка Creation Engine. Что это значит на практике? Можно наследоваться от Papyrus скриптов (ObjectReference, Actor и др) и вызывать функции из Papyrus Игроку не нужно устанавливать доп. зависимостей. Автору мода достаточно скомпилировать Vellum скрипты в pex. Пример того, что можно написать на Vellum: Спойлер import Debug script ReliquaryAltar : ObjectReference { var offerings: [Form] { get set } event OnActivate(who: ObjectReference) { var actor = who as Actor if actor != Game.GetPlayer() { return } var held = 0 var missing = "" for relic in offerings { if actor.GetItemCount(relic) > 0 { held += 1 } else { missing += $"{relic} " } } if held == offerings.length { MessageBox($"The tomb accepts your offering, {actor.GetName()}.") } else { MessageBox($"Relics {held}/{offerings.length}. Still missing: {missing}") } } } На текущий момент поддержан только Skyrim. Есть планы добавить поддержку Fallout и Starfield. Есть расширение для VS Code (подсветка синтаксиса, completion, go-to-definition, команда для компиляции). Ссылки Исходный код доступен на GitHub Скачать компилятор можно на Nexus, либо на странице GitHub Releases (там же расширение для VS Code) Документация по языку и компилятору Изменено 3 часа назад пользователем Naratzul
gkalian Опубликовано 1 час назад Опубликовано 1 час назад Это довольно внезапно и очень неожиданно. Сам лично, я вряд ли такое буду использовать, для этого надо моддингом заниматься, но вообще - интересный проект. 1 Обо всех замечаниях по работе новой версии сайта пишите в соответствующей теме. Haem Projects
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти