СОЗДАНИЕ МОБОВ [ править ]
Для создания нового моба нужно зарегистрировать его тип с его уникальным id, по которому в последствии моб будет определяться. После создания, объект типа моба будет использоваться для описания этого типа. Для регистрации нового типа мобов используется метод
где name — уникальное название данного типа мобов. Эта функция возвращает созданный ею объект типа моба. Новый моб по умолчанию не будет иметь стандартную модель, стандартными здоровьем и размерами, не будет обладать искусственным интеллектом (будет стоять на месте) и дропом. Все это ему предстоит добавить. Пример:
var myTestEntity = MobRegistry.registerEntity(«test-entity»); // создаем тип моба под названием test-entity и сохраняем его в переменную, этот моб пока ничего не делает и имеет стандартные параметры
СПАВН МОБОВ [ править ]
Для спавна новых мобов в мир используется функция
Entity.spawnCustom(«name», x, y, z) — создает моба типа name на данных координатах и возвращает объект этого моба.
IDRegistry.genItemID(«test-entity-spawn»); // регистрируем id предмета-спавнера
Item.createItem(«test-entity-spawn», «spawn test entity», ); // создаем предмет- спавнер
Item.registerUseFunction(«test-entity-spawn», function(coords, item, block) < // задаем предмету- спавнеру функцию использования
Entity.spawnCustom(«test-entity», coords.relative.x + .5, coords.relative.y + .5, coords.relative.z + .5); // при использовании создать моба нашего типа на координатах использования >);
Как результат этого кода при нажатии нашим новым предметом в любую точку, там появится моб, который будет стоять на месте и выглядеть примерно так:
КОНТРОЛЛЕРЫ МОБОВ [ править ]
Новые типы мобов в Core Engine задаются как объекты, которые обладают набором контроллеров — объектов, каждый из которых обладает набором событий и отвечающих за что- то свое. С помощью настройки и изменения этих контроллеров описывается сам тип мобов. Типы мобов имеют стандартные контроллеры, но так же можно создавать свои, однако про это будет в другой главе. Для настройки контроллера в функцию его настройки передается объект, который содержит все нужные функции и значения, которые нужно изменить в контроллере. В дальнейшей документации для стандартных контроллеров будет приводиться объект со всеми значениями, которые можно изменить, однако если какое-то из них не требуется, его можно просто не прописывать. Методам, которые вызываются внутри контроллера доступные следующие значения: 1. this.parent — объект моба, содержащий все контроллеры 2. this.entity — сам моб, на которого будут вызываться все операции с ним (например Entity.getPosition(this.entity) )
В большинстве случаев вам не нужно будет добавлять свои контроллеры и вам достаточно будет стандартных:
- Event Controller (event) — контроллер событий — это контроллер, настрока которого позволяет добавлять функции, которые будут вызываться, когда с мобом происходит какое то событие.
- Description Controller (description) — контроллер описания — это контроллер, который позволяет описать основные параметры моба — его размеры, здоровье и дроп.
- Visual Controller (visual) — визуальный контроллер — этот контроллер загружает модели и позволяет оперировать ими меняя их и запуская анимации. Отвечает за внешний вид моба.
- AI Controller (AI) — контроллер ИИ (искусственного интеллекта) — это контроллер, который обеспечивает мобу ИИ, совмещая объекты ИИ и управляя ими.
В скобках даны имена, по которым один контроллер может обращаться к другому через this.parent, например к визуальному контроллеру this.parent.visual.
КОНТРОЛЛЕР СОБЫТИЙ [ править ]
Для настройки контроллера событий используется функция
где custom — объект, содержащий все события, которые вам требуются. Ниже приведен объект настройки (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 — этот снаряд
>
var myTestEntity = new MobRegistry.registerEntity(«test-entity»);
myTestEntity.customizeEvents( created: function() Game.message(«Hi!»); // при создании моба напишет «Hi!» в чат
>,
attackedBy: function(attacker) Game.message(«Ouch, » + attacker + «!»); // при атаке моба напишет «Ouch, !» в чат
>,
tick: function() var position = Entity.getPosition(this.entity); // получаем позицию моба
Particles.addParticle(position.x, position.y + .5, position.z, Native.ParticleType.flame, 0, 0.1, 0); // создаем на позиции моба частицу огня каждый тик >
>);
КОНТРОЛЛЕР ОПИСАНИЯ [ править ]
Для настроки контроллера описания используется функция
где custom — объект, содержащий все настройки описания.
Ниже приведен объект (custom) со всеми возможными настройками и их описанием:
getHitbox: function() return w: hitboxWidth,
h: hitboxHeight
>; // возвращает ширину и высоту хитбокса моба, если не задана, его размеры будут 1, 1
>,
getHealth: function() < return maxHealth; // возвращает максимальное здоровье моба, которое задается ему при спавне, если не задана, то здоровье будет 20 единиц
>,
getNameTag: function() < return "name tag"; // возвращает имя моба, если не задана, имени не будет
>,
getDrop: function(attacker) < return dropArray; // возвращает массив возможного дропа при смерти, attacker - если определен, моб-убийца
/* Формат дропа: массив, состоящий из возможных предметов, каждый предмет задается так:
id: id предмета: число,
count: кол-во предмета: либо число, либо массив чисел (будет выбрано случайно из массива), либо объект — кол-во будет выбрано между min и max, включая их
data: метадата предмета, формат аналогичен count
chance: шанс, число от 0 до 1 — вероятность дропа этого предмета
separate: если true, то при количестве больше 1, предмет будет дропнут в виде нескольких предметов, каждый с кол-вом 1
> */
>
>
myTestEntity.customizeDescription( getDrop: function() return [ id: 331,
count: ,
separate: true, chance: 0.5
>, // редстоун в кол-ве от 5 до 10
id: 264,
count: [1, 1, 3],
separate: true, chance: 0.5
>, // либо 1 либо 3 алмаза, при этом 1 выпадает в 2 раза чаще ];
>
>);
МОДЕЛИ МОБОВ ТЕКСТУРЫ [ править ]
Текстуры в Core Engine задаются специальным типом объектов и используются для рендера мобов. Текстуры содержат информацию о самой текстуре, ее разрешении, масштабировании и данные для анимации. Для создания текстуры, файл этой текстуры должен присутствовать где-то в папке images в архиве ресурсов мода (resources.zip по умолчанию). Чтобы создать объект текстуры нужно вызвать
где name — имя текстуры в ресурсах с расширением. У объекта текстуры имеются базовые методы, которые нужны для установки разрешения текстуры:
.setResolution(w, h) — устанавливает разрешение, w, h — высота текстуры в пикселях.
.setPixelScale(scale) — устанавливает масштаб пикселей (чем больше, тем больше пикселей помещается на 1 единицу модели.
К примеру значение 1 = текстурам 16х16, 2 = 32х32 и т.д.). По умолчанию масштаб равен 1 (16х16).
Пример:
Файл bird_blue.png находится в ресурсах и имеет разрешение 128×64. Однако это текстура моба, которая будет использоваться в разрешении вдвое больше стандартного.
var blue_bird_texture = new Texture(«bird_blue.png»); // создадим объект текстуры
blue_bird_texture.setResolution(128, 64); // зададим разрешение
blue_bird_texture.setPixelScale(2); // установим масштабирование
Так же этот код можно записать короче, в таком формате:
var blue_bird_texture = new Texture(«bird_blue.png»).setResolution(128, 64).setPixelScale(2);
Для создания анимации текстуре используется метод
где name1, name2 и т.д. — имена файлов кадров анимации, которая будет проигрываться циклично, а delay — время показа каждого кадра в тиках, если этот параметр не указан, он будет равен 1.
РЕНДЕРЫ [ править ]
Рендеры мобов задают их статичную модель без текстуры, являясь набором параллелепипедов (боксов). Для создания объекта рендера нужно вызвать new Render() . Основной метод объекта рендера для его создания это метод
где part-name — имя части рендера, которую надо задать, аpart-data — объект, описывающий эту часть.
Стандартный тип рендера, который тут рассматривается имеет следующие части:
- body — тело и основная часть модели, скорее всего вся модель будет описываться через эту часть.
- head — голова, используется, если вам важен поворот. Все последующие части используются в стандартном рендере, только если результат должен выглядеть примерно как модель игрока (плюс минус детали).
- leftArm — левая рука
- rightArm — правая рука
- leftLeg — левая нога
- rightLeg — правая нога
Так же стоит заметить важные особенности системы координат части body:
- Единица системы координат равна 1\16 блока и 1 пикселю текстуры 16х16
- Ось Y системы координат направлена вниз, остальные оси направлены в нормальных направлениях.
- Позиция моба (его нижняя центральная точка) в этой системе координат будет находиться на координатах (0, 24, 0)
Эта система позаимствована напрямую из MCPE без всяких конвертаций, так что она выглядит немного странно.
Формат объекта описания части рендера (part-data):
Объект представляет собой массив элементов, каждый из которых может быть боксом (параллелепипедом) или пустым объектом.
Бокс задается в следующем формате:
type: «box», // определяет, что это бокс, а не пустой объект
coords: , // координаты центра бокса x, y, z
size: , // размер бокса (x, y, z / ширина, высота, длина),
uv: // координаты текстуры бокса x, y
>
Пустой объект имеет только параметр coords, все остальные значения не требуются. Кроме того любой объект может иметь параметр children, который является таким же массивом, как и сама часть, но началом его системы координат будет не (0, 0, 0), а координаты части-родителя.
Координаты текстур (uv):
Текстура на бокс накладывается как показано на рисунке, координаты UV должны быть координатами верхнего левого угла, а размеры бокса должны совпадать с размерами прямоугольников на рисунке. Важно то, что при измененном масштабе текстуры (pixel scale) координаты должны указываться с его учетом (их нужно разделить на масштаб).
[1]
МОДЕЛИ [ править ]
Модели совмещают текстуру и рендер, являясь полноценной визуальной составляющей, которую можно использовать для мобов. Модель создается с помощью new EntityModel(); Для задания модели используются следующие методы:
- .setTexture(texture) — устанавливает текстуру, где texture — объект текстуры
- .setRender(render) — устанавливает рендер, где render — объект рендера
- .createAnimation(frames, function(frame) < . return ; >, delay) — создает анимацию модели, где frames — кол-во кадров анимации, далее идет код, который от номера кадра (от 0 до frames – 1) должен вернуть рендер для этого кадра, если рендер не возвращается, используется предыдущий кадр, delay — задержка между кадрами в тиках, если не указан, равен 1.
Пример будет в главе про визуальный контроллер.
Навигация
- Заглавная страница
- Свежие правки
- Случайная статья
- Справка
[Инструкции, гайды minecraft] Отключаем интеллект у мобов
![[Инструкции, гайды minecraft] Отключаем интеллект у мобов](http://joxi.ru/8AnGNGLTRG4DrO.png)
Новость об этих двух тэгах короткая, но достаточно полезная.
Рассмотрим первый тэг,который, присутствуя в параметрах
моба, отключит ему весь интеллект, иными словами удалит
существу мозг — и враждебному, и нейтральному, и друже-
любному.
/summon тип_моба x y z
Второй тэг, добавленный в параметры существа отключает
все его звуки — речь, шаги, его звуки, которые слышны при
получении им урона, звук, который он издает при смерти и
так далее.
/summon тип_моба x y z
вот такие дополнения для версий 1.8+, которые весьма полезны.
увидеть, как всё это выглядит подробнее можно в видео. оно ко-
роткое и смотрится очень легко. На этом всё, всем удачи. Пока
как сделать в майнкрафт неподвижного моба .
Очень долго искала рабочий способ, вот он:
1) Вставляем в чатик такую команду: /give @p minecraft:splash_potion
(название можете своё придумать)
Это даст вам зельё, накладывающее на моба почти вечное 120-ти процентное замедление (почти, потому что эффект длится ~1416 майнкрафтных дней), (в 1.16.5 точно работает, если не работает, посетите сайт для генерации зелий, там найдите свою версию)
2) Шпукните зелье в моба и всё (если на вас наложился эффект, или вы хотите снять эффект с моба, попейте молочка)
[1.12.2] Left 4 Zombies
Доброго времени суток, друзья! Хочу показать вам свои наработки в моде, посвященном специальным зараженным из известной игры Left 4 Dead 2. Идея мода очень проста — он добавляет в игру 8 зомби, которые имеют разные особые способности и звуки из оригинальной игры. Данная модификация должна стать хорошим компонентом для хардкорных сборок и сборок на зомби-тематику, т.к. легко может заменить основных ванильных мобов (криперов, скелетов, ведьм) без потери сложности в игре. И даже наоборот! С этими мобами играть станет сложнее и интереснее.
Спойлер: Толстяк

Отличная замена криперу. Только создает много лишнего шума. После взрыва оставляет большую воронку и свои ядовитые внутренности внутри нее.
Спойлер: Плевальщица

Замена скелету. Плюется непонятной кислотой, которая накладывает эффект отравления. Но благо плевальщицу можно услышать издалека, потому что эти вопли ни с чем нельзя перепутать.
Спойлер: Охотник

Охотник — тихий и быстрый зомби. Высоко и далеко прыгает. Небольшая стая таких мобов быстро догонит и остановит даже неплохо прокаченного игрока.
Спойлер: Громила

Громила — большой и сильный зараженный, который своим ударом легко отбросит игрока в толпу разъяренных зомби.
Спойлер: Танк

Танк — самый сильный моб данного мода. Возможно, будет боссом, т.к. имеет 75 сердец здоровья и большой урон. Имеет 2 атаки (на данный момент ни одна не готова) — кидает блоки, что попались под его огромные руки и просто сильно бьет в ближнем бою.На данный момент Танк умеет только брать блоки и бесконечно долго их держать.

Спойлер: Жокей

А вот и один из самых интересных мобов моего мода. И это жокей. Он замучает даже самого скиллового игрока. Этот зомби подбегает к игроку и запрыгивает на его спину. Игрок теряет контроль над своим движением, как в оригинальной игре. Чтобы скинуть эту тварь придется изрядно попотеть, нанося ей урон.


Спойлер: Список изменений
-От 20.11.18.
Изменил модель Громилы на более схожую с оригиналом, добавил звуки и доделал ИИ. Теперь при атаке Громила отбрасывает игрока на 5-6 блоков от себя, быстро догоняет и повторяет удар.
Старый Громила:
Новый Громила: 

-От 23.11.18
Добавлен Танк без готового интеллекта. Пока что умеет только хватать блоки.
-От 02.12.18
Полностью переделаны атаки Охотника и Громилы. Теперь Охотник действительно высоко и далеко прыгает (раньше прыгал всего на 2-3 блока вверх и 3-4 блока мог перепрыгнуть, если между ним и целью был обрыв). Сейчас же, если цель находится достаточно высоко, то Охотник в состоянии допрыгнуть до нее. Громила теперь атакует почти так же, как и в оригинальной игре. Он прицеливается какое-то время, а потом бежит строго по прямой, нанося урон всех, кто попался на пути. Сейчас работа ведется над анимацией полета Охотника.

-От 21.12.2018
После нескольких потных недель в универе наконец-то дошли руки до обновления. На этот раз я добавил Жокея с моделью, текстурами и всем-всем-всем. Немного не доделан интеллект, но это не займет много времени. Наибольшая часть ИИ уже написана — остались детали.
Спойлер: От автора
В данный момент хорошо реализованы только 5 моба из 6вышеупомянутых. К остальным 2-м зомби я еще не приступал. Разработка идет очень медленно, т.к. во многом я не разбираюсь и выходить за рамки туториалов самостоятельно мне трудно. Иногда даже банальные вещи приходится спрашивать на форуме. Но останавливаться на полпути не хочется. Если кому-то будет интересен данный мод, то пишите — помощь мне очень нужна.