Admin (обсуждение | вклад) м (Admin moved page CoreEngine/Продвинутое создание блоков и предметов to InnerCore/Продвинутое создание блоков и предметов) |
|||
(не показано 11 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
− | <div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"> | + | <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="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"> |
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета. | Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета. | ||
− | + | <div class="mw-parser-output"><div class="mw-parser-output"> | |
− | + | <div class="mw-parser-output"> | |
− | |||
=== Специальные типы блоков === | === Специальные типы блоков === | ||
− | + | Характеристики блока указывается в методах Block.createBlock и Block.createBlockWithRotation третьим параметром. Чтобы не повторять их для каждого блока, можно зарегистрировать специальный тип методом Block.createSpecialType(название, объект характеристик) и использовать название спец. типа. | |
− | |||
− | | ||
− | |||
− | |||
− | |||
− | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Все характеристики, их значения по умолчанию и разъяснение: | ||
+ | <syntaxhighlight lang="Javascript">{ | ||
+ | base: 0, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал | ||
+ | solid: false, // является ли блок твёрдым | ||
+ | rendertype: 0, // тип модели | ||
+ | renderlayer: 4, // тип рендера, 1: прозрачный, 2: непрозрачный, 4: прозрачный, но исчезает вдали | ||
+ | destroytime: 1, // время ломания блока, время уничтожения зависит от используемого инструмента, -1: неразрушимый. | ||
+ | explosionres: 3, // взрывоустойчивость | ||
+ | friction: 0.6, // коэффициент скольжения | ||
+ | lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен | ||
+ | lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение | ||
+ | translucency: 1, // полупрозрачность, число от 0 до 1, влияет на наложение теней на блок. 0 - нормальные тени, 1 - нет теней и блок выглядит ярче остальных. | ||
+ | renderallfaces: true, // отрисовывает все стороны прозрачных блоков, | ||
+ | mapcolor: 0, // цвет блока на карте | ||
+ | sound: "default" // тип звука для блока | ||
} | } | ||
+ | </syntaxhighlight> | ||
− | + | ==== Пример: ==== | |
Пример создания специального типа блока и самого блока: | Пример создания специального типа блока и самого блока: | ||
− | + | <syntaxhighlight lang="Javascript">Block.createSpecialType("weak_light", { // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться | |
− | + | lightlevel: 11, | |
− | < | + | lightopacity: 0 |
− | |||
− | |||
− | |||
− | |||
− | |||
}); | }); | ||
− | + | IDRegistry.genBlockID("testBlock"); // регистрация id | |
− | |||
− | IDRegistry.genBlockID("testBlock"); // | ||
− | |||
− | |||
Block.createBlock("testBlock", [ | Block.createBlock("testBlock", [ | ||
− | + | {name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]} | |
− | + | ], "weak_light"); // создаем блок на данном специальном типе</syntaxhighlight> | |
− | + | </div> | |
− | ], | ||
− | |||
− | </ | ||
− | |||
− | |||
− | |||
− | |||
=== Функция дропа (ломания) === | === Функция дропа (ломания) === | ||
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа) | К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа) | ||
− | |||
− | |||
Функция дропа имеет такой формат: | Функция дропа имеет такой формат: | ||
− | < | + | <syntaxhighlight lang="Javascript">function(coords, id, data, toolLevel, enchantData, item, region) { |
− | + | // coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z | |
− | + | // id, data - id и data блока | |
− | + | // toolLevel - уровень инструмента в руке | |
− | + | // enchantData - зачарования инструмента | |
− | + | // item - предмет в руке | |
− | + | // если блок что-то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data] или [id, count, data, ExtraData] | |
− | + | }</syntaxhighlight> | |
− | // | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | }</ | ||
− | |||
− | |||
Пример: | Пример: | ||
− | < | + | <syntaxhighlight lang="Javascript">Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){ |
− | + | return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз | |
− | |||
− | |||
}); | }); | ||
− | |||
// Полный аналог предыдущей функции, но с числовым id | // Полный аналог предыдущей функции, но с числовым id | ||
− | |||
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){ | Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){ | ||
− | + | return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз | |
− | + | });</syntaxhighlight> | |
− | |||
− | });</ | ||
− | |||
− | |||
− | |||
− | |||
=== Функция установки === | === Функция установки === | ||
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки). | К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки). | ||
− | |||
− | |||
Функция установки имеет такой формат: | Функция установки имеет такой формат: | ||
− | < | + | <syntaxhighlight lang="Javascript">function(coords, item, block){ |
− | + | // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z | |
− | + | // coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z | |
− | + | // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data | |
− | + | // block - блок, на который было произведено нажатие. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | // если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: } | ||
+ | }</syntaxhighlight> | ||
+ | <div>Пример:<span id="cke_bm_170E" style="display: none"> </span></div> <syntaxhighlight lang="Javascript">Block.registerPlaceFunction("testBlock", function(coords, item, block){ | ||
+ | World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок | ||
+ | World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок | ||
}); | }); | ||
// Полный аналог предыдущей функции, но с числовым id | // Полный аналог предыдущей функции, но с числовым id | ||
− | |||
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){ | Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){ | ||
− | + | World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок | |
− | + | World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок | |
− | + | });</syntaxhighlight> | |
− | |||
− | |||
− | }); | ||
− | |||
− | </ | ||
− | |||
− | |||
=== Установка формы === | === Установка формы === | ||
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1) | Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1) | ||
− | + | <syntaxhighlight lang="Javascript">Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба</syntaxhighlight> | |
− | |||
− | < | ||
− | |||
− | |||
=== Установка свойств предмета === | === Установка свойств предмета === | ||
− | Для установки свойств предметов | + | Для установки свойств предметов используются следующие функции: |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*Item.setCategory(id, category) - аналог параметра category | *Item.setCategory(id, category) - аналог параметра category | ||
Строка 202: | Строка 102: | ||
*Item.setProperties(id, props) - аналог параметра properties | *Item.setProperties(id, props) - аналог параметра properties | ||
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation | *Item.setUseAnimation(id, animType) - аналог параметра useAnimation | ||
− | |||
− | |||
Функции - получение параметров: | Функции - получение параметров: | ||
Строка 214: | Строка 112: | ||
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов | *Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов | ||
− | + | ==== Категории предметов (не работают) ==== | |
| | ||
− | + | <syntaxhighlight lang="Javascript"> DECORATION = 2;//декоративный предмет(?) | |
+ | FOOD = 4;//еда | ||
+ | INTERNAL = 0;//(?) | ||
+ | MATERIAL = 1;//материал | ||
+ | TOOL = 3;//инструмент</syntaxhighlight> | ||
=== Функция использования предмета === | === Функция использования предмета === | ||
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования). | К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования). | ||
− | |||
− | |||
Функция использования имеет такой формат: | Функция использования имеет такой формат: | ||
− | < | + | <syntaxhighlight lang="Javascript">function(coords, item, block){ |
− | + | // coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z | |
− | + | // coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z | |
− | + | // item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data | |
− | + | // block - блок, на который было произведено нажатие. | |
− | + | }</syntaxhighlight> | |
− | |||
− | |||
− | |||
− | |||
− | }</ | ||
=== Функция броска предмета === | === Функция броска предмета === | ||
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания). | К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания). | ||
− | |||
− | |||
Функция разбивания имеет такой формат: | Функция разбивания имеет такой формат: | ||
− | < | + | <syntaxhighlight lang="Javascript">function(projectile, item, target){ |
− | + | // projectile - entity кинутого предмета | |
− | + | // target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity | |
− | + | // item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data | |
− | + | } | |
− | + | </syntaxhighlight> | |
− | + | </div> </div> </div> </div> </div> </div> </div> | |
− | |||
− | |||
− | </div> </div> |
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.
Характеристики блока указывается в методах Block.createBlock и Block.createBlockWithRotation третьим параметром. Чтобы не повторять их для каждого блока, можно зарегистрировать специальный тип методом Block.createSpecialType(название, объект характеристик) и использовать название спец. типа.
Все характеристики, их значения по умолчанию и разъяснение:
{
base: 0, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал
solid: false, // является ли блок твёрдым
rendertype: 0, // тип модели
renderlayer: 4, // тип рендера, 1: прозрачный, 2: непрозрачный, 4: прозрачный, но исчезает вдали
destroytime: 1, // время ломания блока, время уничтожения зависит от используемого инструмента, -1: неразрушимый.
explosionres: 3, // взрывоустойчивость
friction: 0.6, // коэффициент скольжения
lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен
lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение
translucency: 1, // полупрозрачность, число от 0 до 1, влияет на наложение теней на блок. 0 - нормальные тени, 1 - нет теней и блок выглядит ярче остальных.
renderallfaces: true, // отрисовывает все стороны прозрачных блоков,
mapcolor: 0, // цвет блока на карте
sound: "default" // тип звука для блока
}
Пример создания специального типа блока и самого блока:
Block.createSpecialType("weak_light", { // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться
lightlevel: 11,
lightopacity: 0
});
IDRegistry.genBlockID("testBlock"); // регистрация id
Block.createBlock("testBlock", [
{name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}
], "weak_light"); // создаем блок на данном специальном типе
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)
Функция дропа имеет такой формат:
function(coords, id, data, toolLevel, enchantData, item, region) {
// coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z
// id, data - id и data блока
// toolLevel - уровень инструмента в руке
// enchantData - зачарования инструмента
// item - предмет в руке
// если блок что-то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data] или [id, count, data, ExtraData]
}
Пример:
Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз
});
// Полный аналог предыдущей функции, но с числовым id
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз
});
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).
Функция установки имеет такой формат:
function(coords, item, block){
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z
// coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data
// block - блок, на который было произведено нажатие.
// если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }
}
Block.registerPlaceFunction("testBlock", function(coords, item, block){
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок
});
// Полный аналог предыдущей функции, но с числовым id
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок
});
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)
Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба
Для установки свойств предметов используются следующие функции:
Функции - получение параметров:
DECORATION = 2;//декоративный предмет(?)
FOOD = 4;//еда
INTERNAL = 0;//(?)
MATERIAL = 1;//материал
TOOL = 3;//инструмент
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования).
Функция использования имеет такой формат:
function(coords, item, block){
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z
// coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data
// block - блок, на который было произведено нажатие.
}
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).
Функция разбивания имеет такой формат:
function(projectile, item, target){
// projectile - entity кинутого предмета
// target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity
// item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data
}