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"><div class="…») |
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"><div class="mw-parser-output">В игре Майнкрафт уже присутствует огромное количество различных мобов. У каждого и них свои особенности - строение тела, текстура, поведение... Все аспекты создания новых мобов я попытаюсь пояснить в этой статье.</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> |
= Регистрация моба = | = Регистрация моба = | ||
Строка 18: | Строка 18: | ||
[[File:Custom entity basic.png|500px|Custom entity basic.png]] | [[File:Custom entity basic.png|500px|Custom entity basic.png]] | ||
− | = Переменные и методы типа моба | + | = Переменные и методы объекта моба = |
+ | |||
+ | Поскольку для мобов в мире и для базового типа мобов используется один и тот же объект, многие методы и переменные этого объекта можно использовать как на объекте описания, так и на объекте созданного в мире моба. Исключениями являются ''customizeEvents, customizeDescription, customizeVisual, customizeAI ''и setBaseType. | ||
== customizeEvents == | == customizeEvents == | ||
Строка 92: | Строка 94: | ||
''customizeAI(custom) ''- позволяет устанавливать контроллер поведения (исскуственного интеллекта, ИИ мобов). Необходимы дополнения. | ''customizeAI(custom) ''- позволяет устанавливать контроллер поведения (исскуственного интеллекта, ИИ мобов). Необходимы дополнения. | ||
− | </div> </div> </div> </div> </div> | + | |
+ | == Прочие переменные и методы объекта моба == | ||
+ | |||
+ | *setBaseType(Number) - устанавливает [[InnerCore/Типы_мобов|тип]], на основе которого создается моб. По умолчанию 28 (''Native.EntityType.POLAR_BEAR''). | ||
+ | *recreateEntity() - создает сущность, при этом событие ''removed'' не вызывается, но вызывается событие ''loaded'' (что логично). | ||
+ | *getPlayerDistance() - получает расстояние от сущности до [[InnerCore/Модуль_Player|игрока]] в мире. | ||
+ | *denyDespawn() - запрещает деспавн сущности. | ||
+ | *allowNaturalDespawn() - разрешает природный деспавн сущности. | ||
+ | *destroy() - уничтожает сущность и убирает из мира. Вызываются события ''removed'' и ''unloaded''. | ||
+ | </div> </div> </div> </div> </div> </div> |
Для того, чтобы создать собственного моба, необходимо сначала зарегистрировать его тип. Делается это с помощью функции MobRegistry.registerEntity("name"), где name - уникальный идентификатор типа сущности. Чтобы в дальнейшем было проще работать с новым типом мобов, сохраним его в переменной:
var customEntity = MobRegistry.registerEntity("customEntity");
Для того, чтобы заспавнить нашего моба в мире Майнкрафт, в InnerCore используется метод Entity.spawnCustom("name", x, y, z), принимающая в качестве аргументов идентификатор моба и координаты спавна. В сочетании с функцией использования кастомных предметов можем создать яйцо призыва:
IDRegistry.genItemID("customEntitySpawn"); // регистрируем id предмета-спавнера
Item.createItem("customEntitySpawn", "Spawn custom entity", {name: "stick"}); // создаем предмет- спавнер
// задаем предмету- спавнеру функцию использования
Item.registerUseFunction("customEntitySpawn", function(coords, item, block){
// при использовании создать моба нашего типа на координатах использования
Entity.spawnCustom("customEntity", coords.relative.x + .5, coords.relative.y + .5, coords.relative.z + .5);
});
Получаем следующий результат:
Поскольку для мобов в мире и для базового типа мобов используется один и тот же объект, многие методы и переменные этого объекта можно использовать как на объекте описания, так и на объекте созданного в мире моба. Исключениями являются customizeEvents, customizeDescription, customizeVisual, customizeAI и setBaseType.
customizeEvents(custom) - позволяет задать контроллер событий (объект) следующего формата:
{
tick: function() {}, // вызывается каждый игровой тик для моба этого типа
created: function(extra) {}, // вызывается при создании моба данного типа, extra - дополнительные данные, которые могут быть переданы в функцию спавна 5 параметром
loaded: function() {}, // вызывается, когда моб загружается в мир - после создания, входа в мир или загрузки чанка, если игрок был далеко, но подошел достаточно близко
unloaded: function() {}, // вызывается, когда чанк с мобом был выгружен, игрок ушел слишком далеко
removed: function() {}, // вызывается, если моб уничтожен или деспавнился
death: function(attacker) {}, // вызывается, если моб убит, attacker - в случае убийства мобом и игроком в него передается моб-убийца
attackedBy: function(attacker) {}, // вызывается при атаке моба, attacker - атакующий
hurtBy: function(attacker, amount) {}, // вызывается при получении урона, attacker определен если урон получен от моба или игрока
projectileHit: function(projectile) {} // вызывается, когда в моба попадает снаряд, projectile - этот снаряд
}
Выше приведены все возможные функции событий, в реальных примерах можно писать только те, которые непосредственно нужны в моде.
customizeDescription(custom) - позволяет задать контроллер описания следующего формата:
{
getHitbox: function() {
// возвращает ширину и высоту хитбокса моба, если не задана, его размеры будут 1, 1
// На данный момент не работает (уточнение?)
return {
w: hitboxWidth,
h: hitboxHeight
};
},
getHealth: function() {
// возвращает максимальное здоровье моба, которое задается ему при спавне, если не задана, то здоровье будет 20 единиц
return maxHealth;
},
getNameTag: function() {
// возвращает имя моба, если не задана, имени не будет
return "name tag";
},
getDrop: function(attacker) {
// возвращает массив возможного дропа при смерти, если определен attacker - одержит ссылку на моба-убийцу
// Формат дропа: массив, состоящий из возможных предметов, каждый предмет задается так:
return [{
id: id, //id предмета: число,
count: count, //кол-во предмета: число / массив чисел (будет выбрано случайно из массива) / объект {min: min, max: max} (кол-во будет выбрано между min и max включительно)
data: data, // метадата предмета, формат аналогичен count
chance: chance, // шанс: число с плавающей точкой от 0 до 1 - вероятность дропа этого предмета
separate: false // если true, то при количестве больше 1, предмет будет дропнут в виде нескольких предметов, каждый с кол-вом 1
},
// {...}
]
}
}
customizeVisual(custom) - позволяет задать контроллер внешнего вида моба следующего формата:
{
getModels: function() {
// Возвращает модели для различных состояний моба
return {
"main": model
};
}
}
Необходимы дополнения.
customizeAI(custom) - позволяет устанавливать контроллер поведения (исскуственного интеллекта, ИИ мобов). Необходимы дополнения.