Разработка моба — от рендера до дропа (часть 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 раз живучее и в пару-тройку раз сильнее обычного зомби. На сегодня у меня все, в следующий раз расскажу о том, что делать с кривыми рендерами при перезаходе в мир и с текстурами при перезаходе в игру. Речь пойдет об инициализации мира с кастомными мобами.
Comments