Admin (обсуждение | вклад) |
|||
Строка 58: | Строка 58: | ||
</div> | </div> | ||
+ | <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> | ||
== Команды == | == Команды == | ||
Строка 99: | Строка 100: | ||
*getEntitiesFromSpatialView(SpatialView, X_0, Y_0, Z_0, X_1, Y_1, Z_1) - возвращает массив сущностей, которые попадают в коробку с координатами X_0, Y_0, Z_0, X_1, Y_1, Z_1, где нулевые координаты - координаты начала коробки, а первые - конца (У направлен вверх), либо ''null ''в случае ошибки. | *getEntitiesFromSpatialView(SpatialView, X_0, Y_0, Z_0, X_1, Y_1, Z_1) - возвращает массив сущностей, которые попадают в коробку с координатами X_0, Y_0, Z_0, X_1, Y_1, Z_1, где нулевые координаты - координаты начала коробки, а первые - конца (У направлен вверх), либо ''null ''в случае ошибки. | ||
− | <div | + | == Компоненты скрипта == |
+ | |||
+ | Данный раздел документации посвящен описанию всех компонентов сущностей, доступных в '''Minecraft Script Engine'''. Компоненты разделяются на два типа - клиентские и серверные. Подробнее о том, в чем их различие, будет рассказано в соответствующих разделах документации ниже. | ||
+ | |||
+ | Компонент можно добавить к сущности, получить, изменить и убрать из сущности. Чтобы получить и обновить компонент, он должен быть привязан к сущности. Подробнее можно узнать в разделе команд для работы с компонентами выше. | ||
+ | |||
+ | === Клиентские компоненты === | ||
+ | |||
+ | Эти компоненты могут быть использованы только в клиентских скриптах: | ||
+ | |||
+ | *''minecraft:molang'' - предоставляет доступ к переменным MoLang сущности. Подробнее о переменных MoLang можно узнать в документации по адднам. Поскольку переменные MoLang содержат в своем названии точки (например, "entity.isgrazing"), для доступа к ним используется синтаксис []. Например, | ||
+ | <div><syntaxhighlight lang="Javascript">var molangComponent = this.createComponent(entity, "minecraft:molang"); | ||
+ | molangComponent["entity.molangexample"] = 1.0; | ||
+ | this.needsUpdate(molangComponent);</syntaxhighlight> | ||
+ | |||
+ | === Серверные компоненты === | ||
+ | |||
+ | Серверные компоненты предназначены для использования в серверных скриптах и синхронизируются со всеми клиентами (игроками) в игровом мире. Данные компоннты созданы так, чтобы по-максимуму соответствовать компонентам JSON-формата, использующимся в аддонах. На данный момнт доступны следующие компоненты: | ||
+ | |||
+ | *minecraft:attack'' ''- позволяет изменять урон и эффекты при атаке. Имеет свойства: | ||
+ | **''damage ''- урон при ударе, задается массивом из двух чисел (минимальное и максимальное значения) | ||
+ | **''effect_name'' - позволяет задать эффект при атаке | ||
+ | **''effect_duration ''- время эффекта в секундах | ||
+ | *minecraft:collision_box - позволяет задать хитбокс сущности. При применении компонента сущность сразу же получает новый хитбокс. '''Внимание!''' Если после изменения хитбокса сущность окажется в блоке, она может начать задыхаться! Свойства: | ||
+ | **''width'' - ширина и глубина хитбокса в блоках. Стоит заметить, что сечение хитбокса может быть только квадратным. Отрицательные значения будут интерпретированы как 0. | ||
+ | **''height ''- высота хитбокса в блоках. Отрицательные значения будут интерпретированы как 0. | ||
+ | *minecraft:damage_sensor - определяет массив типов урона и того, как сущность будет реагировать на данный урон. Тригеры, существующие на данный момент в игре, не могут быть корректно представлены в подобной форму, поэтому вызов ''applyComponentChanges()'' полностью заменит существующие триггеры. Свойства не протестированы и требуют уточнений: | ||
+ | **''on_damage ''- список триггеров с возможностью управления реакцией сущности на те или иные виды урона | ||
+ | **''deals_damage ''- если указано значение true, урон будет нанесен сущности, если false - проигнорирован. | ||
+ | **''cause ''- строка, представляющая тип урона, который вызвал данный набор событий. | ||
+ | *minecraft:equipment - определяет броню и обмундирование моба. При примнении на сущность сразу же надевается соответствующая броня. Свойства: | ||
+ | **''table ''- путь к файлу (относительно корня пакета поведений), в котором хранится информация о луте. | ||
+ | **''slot_drop_chance ''- список слотов с шансом выпадания предмета при смерти сущности. | ||
+ | *minecraft:equippable - определяет, какие и сполько предметов могут быть надеты на сущность. Единственное свойство '''''slots''''' содержит массив слотов и предметов, которые могут быть в нем размещены. Каждый отдельный элемент - объект следующей структуры: | ||
+ | **''slot ''(по умолчанию 0) - номер слота, который описан в этом объекте. | ||
+ | **''accepted_items'' - список предметов, которые в него можно положить. | ||
+ | **''item ''- название предмета, который можно положить в данный слот. | ||
+ | **''interact_text'' - надпись на кнопке, если сущности можно положить данный предмет в данную ячейку инвентаря (пример - седло для лошади) | ||
+ | **''on_equip ''- название события, которое вызывается, когда на сущность надевается данный предмет. | ||
+ | **''on_unequip ''- название события, которое вызывается, когда с сущности снимается данный предмет. | ||
+ | </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); // Для серверных скриптов
Аргументами функции registerSystem является версия Minecraft Script Engine, под которую заточен данный скрипт. В примере выше это версия 0.0. Версии API будут различаться набором функционала и, соответственно, совместимостью с версиями майнкрафта.
Далее необходимо задать нашим системам функции 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 для управления событиями используются следующие функции:
Фильтры (Англ. Script Views) - способ отсортировать сущностей на основе их компонентов. Дополнительные возможности фильтрования предоставлют пространственные фильтры. Все фильтры возвращают сущностей, на данный момент прогруженных в мире.
Данный раздел документации посвящен описанию всех компонентов сущностей, доступных в Minecraft Script Engine. Компоненты разделяются на два типа - клиентские и серверные. Подробнее о том, в чем их различие, будет рассказано в соответствующих разделах документации ниже.
Компонент можно добавить к сущности, получить, изменить и убрать из сущности. Чтобы получить и обновить компонент, он должен быть привязан к сущности. Подробнее можно узнать в разделе команд для работы с компонентами выше.
Эти компоненты могут быть использованы только в клиентских скриптах:
var molangComponent = this.createComponent(entity, "minecraft:molang");
molangComponent["entity.molangexample"] = 1.0;
this.needsUpdate(molangComponent);
Серверные компоненты предназначены для использования в серверных скриптах и синхронизируются со всеми клиентами (игроками) в игровом мире. Данные компоннты созданы так, чтобы по-максимуму соответствовать компонентам JSON-формата, использующимся в аддонах. На данный момнт доступны следующие компоненты: