Разработка моба — от рендера до дропа (часть 2)

Разработка моба — от рендера до дропа (часть 2)

В этой части урока мы рассмотрим самые часто задаваемые вопросы по поводу создания мобов с помощью ModPE.

Начнем с брони.

Убираем броню и защищаем моба от солнца

Как вы наверняка знаете, зомби, как и некоторые другие мобы, может с некоторой вероятностью появится в некоем прикиде — в кожаной куртке или в золотом шлеме. Ну, может, и в кольчуге))) Так вот, чтобы этого не было, нужно очистить слоты брони. Для этого при спавне моба пропишем следующий код:

1
2
3
4
5
6
7
8
9
10
11
// Вариант для ленивых или тех, кто кодит на телефоне
Entity.setArmor(ent, 0, 0, 0);
Entity.setArmor(ent, 1, 0, 0);
Entity.setArmor(ent, 2, 0, 0);
Entity.setArmor(ent, 3, 0, 0);
 
// Грамотный вариант, так делают профи)
Entity.setArmor(ent, ArmorType.helmet, 0, 0);
Entity.setArmor(ent, ArmorType.chestplate, 0, 0);
Entity.setArmor(ent, ArmorType.leggings, 0, 0);
Entity.setArmor(ent, ArmorType.boots, 0, 0);

Как мы видите, мы ставим во все слоты воздух. Более адекватного способа убрать броню в ModPE по-идее не существует. НО. Таким способом мы не только убираем броню с мобов, но и защищаем зомби от горения на солнце!

Дело в том, что мобы, которые имеют броню, на солнце не горят. Вместо этого снашивается их броня, пока не сломается, а потом моб загорается. В нашем же случае броней служит воздух, а он не может сломаться, и такая защита работает вечно.

Здоровье моба

Здесь много говорить не надо — код говорит за себя:

1
2
3
4
var GHOST_HEALTH = 100; // Создадим переменную, чтобы изменять число только один раз
// Здоровье измеряем в полусердцах. 100 полусердец - 50 сердец, в 5 раз больше нормы.
Entity.setMaxHealth(ent, GHOST_HEALTH); // Устанавливаем максимальное здоровье моба
Entity.setHealth(ent, GHOST_HEALTH); // И увеличиваем здоровье до максимального

Метим мобов

Для того, чтобы иметь возможность работать с мобами после их спавна, нужно их отличать от обычных зомби. Для этого воспользуемся функцией Entity.setExtraData(entity, key, value). То есть

1
2
var KEY_TYPE = "mineprogramming.example.mobType";
Entity.setExtraData(ent, KEY_TYPE, "ghost");

Теперь, чтобы узнать, что это за моб, нужно прописать

1
2
3
4
var data = Entity.getExtraData(ent, KEY_TYPE);
if(data == "ghost"){
//...
}

Используем это для увеличения урона:

1
2
3
4
5
function entityHurtHook(attacker, victim, halfhearts) {
    if(Entity.getExtraData(attacker, KEY_TYPE) == "ghost"){
        Entity.setHealth(victim, Entity.getHealth(victim) - 5);
    }
}

Тут мы используем относительно новый в ModPE хук entityHurtHook, который позволяет определить не только атаки игрока, но и любой урон любым мобам. Далее проверяем, приведение ли это, и, наконец, отнимаем у жертвы 5 полусердец, это в дополнение к урону по умолчанию. Таким образом, наш моб в 5 раз живучее и в пару-тройку раз сильнее обычного зомби. На сегодня у меня все, в следующий раз расскажу о том, что делать с кривыми рендерами при перезаходе в мир и  с текстурами при перезаходе в игру. Речь пойдет об инициализации мира с кастомными мобами.

Запись опубликована в рубрике ModPE. Добавьте в закладки постоянную ссылку.

Comments

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *