Admin (обсуждение | вклад) (Новая страница: «<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">'''Вним…») |
Admin (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">'''Внимание! '''Данная документация предназначена исключительно для ознакомления, так как '''Minecraft Script Engine''' находится в разработке и конечный его вариант может существенно отличаться от текущего.</div> | + | <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">'''Внимание! '''Данная документация предназначена исключительно для ознакомления, так как '''Minecraft Script Engine''' находится в разработке и конечный его вариант может существенно отличаться от текущего.</div> |
== Система скриптинга == | == Система скриптинга == | ||
Строка 52: | Строка 52: | ||
Также возможна отладка на ходу, для этого необходимо установить JIT Debugger и модули разработки Javascript в Visual Studio, затем подключиться к процессу Minecraft (''Debug -> Attach to Process''). Теперь с помощью кнопки Pause можно остановить выполнение скрипта и увидеть значения переменных непосредственно в процессе его выполнения. При этом через некоторое время может произойти отключение клиентов от сервера (''time out''). | Также возможна отладка на ходу, для этого необходимо установить JIT Debugger и модули разработки Javascript в Visual Studio, затем подключиться к процессу Minecraft (''Debug -> Attach to Process''). Теперь с помощью кнопки Pause можно остановить выполнение скрипта и увидеть значения переменных непосредственно в процессе его выполнения. При этом через некоторое время может произойти отключение клиентов от сервера (''time out''). | ||
− | </div> </div> </div> </div> | + | |
+ | == Команды == | ||
+ | |||
+ | Все команды выполняются внутри функций с помощью контекста this. Это работает как в приведенных выше функциях, так и в определенных таким же образом собственных. | ||
+ | |||
+ | === Сущности === | ||
+ | |||
+ | Для сущностей используются следующие команды: | ||
+ | |||
+ | *createEntity() - создает пустую сущность без <s>признаков жизни</s> компонентов и не добавляет её в мир. Возвращает объект ''EntityObject'', представляющий данную сущность, либо ''null'', если что-то пошло не так. | ||
+ | *createEntity(type, template) - создает сущность с типом ''type ''(собственный тип сущности, должен соответствовать правилам имен переменных) и компонентами, взятыми из сущности текущего пакета поведений (например, ''minecraft:cow''). | ||
+ | *destroyEntity(EntityObject) - уничтожает объект ''EntityObject ''и делает его невалидным. При этом всесущности данного типа просто убираются из мира (без события смерти). | ||
+ | *isValidEntity(EntityObject) - возвращает ''true'', если ''EntityObject ''валден, в противном случае ''false''. Может также возвращать ''null ''при возникновении ошибки. | ||
+ | |||
+ | === Компоненты === | ||
+ | |||
+ | Компоненты используются для задания параметров сущностям. По-сути, они являются тем и же компонентами, что используются в пакетах поведения, но могут быть динамически присвоены сущностям во время игры. | ||
+ | |||
+ | *registerComponent(name, data) - регистрирует новый компонент сущности с названием ''name ''и объектом данных ''data''. Рекомендуется называть свои компоненты в формате ''packName:customComponent'' во избежание конфликтов с другими наборами поведений. Возвращает ''ture'', если вызов функции прошел успешно, в противном случае ''null''. | ||
+ | *createComponent(EntityObject, componentName) - создает экземпляр компонента с названием ''componentName ''и присваивает его сущности ''EntityObject''. Возвращает объект компонента, если вызов функции прошел успешно, в противном случае ''null''. | ||
+ | *hasComponent(EntityObject, componentName) - возвращает ''true'', если ''EntityObject ''содержит компонент с названием ''componentName'', в противном случае ''false''. Может также возвращать ''null ''при возникновении ошибки. | ||
+ | *getComponent(EntityObject, сomponentName) - ищет компонент с именем ''componentName'' в ''EntityObject.'' Возвращает объект компонента, если он есть, в противном случае ''null''. | ||
+ | *applyComponentChanges(componentObject) - применяет изменения в объекте компонента ''componentObject''. Возвращает ''ture'', если вызов функции прошел успешно, в противном случае ''null''. | ||
+ | *destroyComponent(EntityObject, сomponentName) - убирает компонент с названием ''сomponentName ''из объекта ''EntityObject''. На данный моменнт работает только с компонентами, добавленными скриптом, и не работает с компонентами, определенными в JSON. Возвращает ''ture'', если вызов функции прошел успешно, в противном случае ''null''. | ||
+ | |||
+ | === События === | ||
+ | |||
+ | События - одна из самых важных частей любой системы. В '''Minecraft Script Engine '''для управления событиями используются следующие функции: | ||
+ | |||
+ | * | ||
+ | |||
+ | ==== broadcastEvent(EventIdentifier, EventData) - вызывает событие с идентификатором ''EventIdentifier ''и данными ''EventData''. Возвращает ''ture'', если вызов события прошел успешно, в противном случае ''null''. ==== | ||
+ | |||
+ | * | ||
+ | |||
+ | ==== listenForEvent(EventIdentifier, CallbackObject) - подписывает функцию ''CallbackObject'' на событие ''EventIdentifier''. Событие может быть как собственным (вызваным с помощью ''broadcastEvent''), так и внутриигровым. Возвращает ''ture'', если вызов функции прошел успешно, в противном случае ''null''. ==== | ||
+ | |||
+ | | ||
+ | </div> </div> </div> </div> </div> </div> </div> </div> </div> |
В Minecraft Script Engine использован язык программирования Javascript. Скрипты связываются с пакетами поведений, могут отлавливать внутриигровые события и выполнять определенные команды, в частности изменять данные различных компонентов игры.
Два примера уже доступны для скачивания и изучения:
Пример | Ссылка |
Mob Arena | https://aka.ms/minecraftscripting_mobarena |
Turn-Based RPG | https://aka.ms/minecraftscripting_turnbased |
В качестве основы предлагается использовать ванильный набор поведений, который можно скачать по этой ссылке.
Все скрипты разделены на две основные группы - серверные и клиентские. Серверные скрипты управляют глобальными игровыми событиями, такими как спавн сущностей или изменение их компонентов. Клиентские скрипты обрабатывают лишь отдельные действия, связанные с игроком. Такая структура позволяет избавиться от необходимости разделять кодом серверную и клиентскую логику и создавать скрипты как для одиночной игры (где сервером будет выступать сам клиент), так и для многопользовательской. Следует также отметить, что количество скриптов в одном пакете поведений неограничено, и все скрипты будут запускаться независимо друг от друга. Все скрипты с расширением .js будут автоматически подгружены из папок client и server.
Пока Minecraft Script Engine находится в бета-версии, для его работы необходимо будет включение экспериментального геймплея в настройках мира.
Структура файлов и папок для пакета поведения со скриптами приведена ниже:
Каждый скрипт должен регистрировать систему (клиентский - клиентскую, серверный - серверную). Достигается это следующим кодом:
var sampleClientSystem == client.registerSystem(0, 0); // Для клиентских скриптов
var sampleServerSystem == server.registerSystem(0, 0); // Для серверных скриптов
Далее необходимо задать нашим системам функции initialize,update и shutdown:
sampleSystem.initialize == function() {
//Код инициализации
};
sampleSystem.update == function() {
//Код обновления
};
sampleSystem.shutdown == function() {
//Код завершения работы
};
Для отладки кода (обнаружения ошибок и даже построчного выполнения) нам понадобится компьютер с установленной Windows 10, Visual Studio и Minecraft Bedrock Edition.
Файлы логов могут быть расположены в различных местах на различных платформах. В Windows 10 это %APPDATA%\..\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\logs.
Также возможна отладка на ходу, для этого необходимо установить JIT Debugger и модули разработки Javascript в Visual Studio, затем подключиться к процессу Minecraft (Debug -> Attach to Process). Теперь с помощью кнопки Pause можно остановить выполнение скрипта и увидеть значения переменных непосредственно в процессе его выполнения. При этом через некоторое время может произойти отключение клиентов от сервера (time out).
Все команды выполняются внутри функций с помощью контекста this. Это работает как в приведенных выше функциях, так и в определенных таким же образом собственных.
Для сущностей используются следующие команды:
Компоненты используются для задания параметров сущностям. По-сути, они являются тем и же компонентами, что используются в пакетах поведения, но могут быть динамически присвоены сущностям во время игры.
События - одна из самых важных частей любой системы. В Minecraft Script Engine для управления событиями используются следующие функции: