MCE поддерживает 30+ типов эволюции через полиморфный паттерн команд. Каждый тип эволюции -- это конкретный класс, наследующий от EvolutionData и определяющий собственные условия срабатывания. Это руководство охватывает все встроенные типы эволюции и способы их настройки.
Как работает эволюция
Эволюцией управляет EvolutionManager, который проверяет условия эволюции в ключевые моменты:
- После повышения уровня (в бою или через редкую конфету).
- После использования предмета на монстре.
- После завершения обмена.
- При определённых игровых событиях (достижение порога дружбы, вход в локацию и т.д.).
Когда условия выполнены, воспроизводится EvolutionAnimation, и MonsterInstance трансформируется в целевой вид, сохраняя прозвище, IVs, EVs, дружбу и другие персональные данные.
Настройка эволюции
В ScriptableObject MonsterEntry массив Evolutions содержит одну или несколько записей EvolutionData. Каждая запись указывает:
- Тип эволюции (какой конкретный класс использовать).
- Целевой вид (ссылка на
MonsterEntry).
- Целевая форма (необязательно, для эволюций с определё нной формой).
- Параметры, специфичные для типа (порог уровня, требуемый предмет и т.д.).
Встроенные типы эволюции
На основе уровня
| Тип | Описание | Параметры |
|---|
EvolveByLevel | Эволюционирует на определённом уровне | RequiredLevel |
EvolveByLevelAtSpecificTime | Эволюционирует на уровне в определённое время суток | RequiredLevel, TimeOfDay |
EvolveByLevelWhenAttackIsHigherThanDefense | Эволюционирует на уровне, когда Attack > Defense | RequiredLevel |
EvolveByLevelWhenDefenseIsHigherThanAttack | Эволюционирует на уровне, когда Defense > Attack | RequiredLevel |
EvolveByLevelWhenAttackEqualsDefense | Эволюционирует на уровне, когда Attack = Defense | RequiredLevel |
EvolveByLevelWhenSpecificGender | Эволюционирует на уровне при определённом поле | RequiredLevel, Gender |
EvolveByLevelWithSceneTag | Эволюционирует на уровне в определённой локации | RequiredLevel, SceneTag |
EvolveByLevelWithSceneTagAtSpecificTime | Уровень + локация + время | RequiredLevel, SceneTag, TimeOfDay |
EvolveToRandomSpeciesByLevel | Эволюционирует в случайный вид из списка на уровне | RequiredLevel, PossibleTargets[] |
На основе дружбы
| Тип | Описание | Параметры |
|---|
EvolveByFriendship | Эволюционирует при достижении порога дружбы | RequiredFriendship |
EvolveByFriendshipAtSpecificTime | Дружба + время суток | RequiredFriendship, TimeOfDay |
EvolveByFriendshipWithMoveOfType | Дружба + знание приёма определённого типа | RequiredFriendship, MoveType |
На основе предметов
| Тип | Описание | Параметры |
|---|
EvolveOnItemUse | Эволюционирует при использовании определённого предмета | RequiredItem |
EvolveOnItemUseAtSpecificTime | Предмет + время суток | RequiredItem, TimeOfDay |
EvolveOnItemUseOnSpecificGender | Предмет + определённый пол | RequiredItem, Gender |
EvolveOnItemUseWithSceneTag | Предмет + определённая локация | RequiredItem, SceneTag |
EvolveOnLevelUpHoldingItem | Повышение уровня с удерживаемым предметом | RequiredLevel, HeldItem |
EvolveOnLevelUpHoldingItemAtSpecificTime | Уровень + удерживаемый предмет + время | RequiredLevel, HeldItem, TimeOfDay |
На основе обмена
| Тип | Описание | Параметры |
|---|
EvolveWhenTraded | Эволюционирует при обмене | (нет) |
EvolveWhenTradedHoldingItem | Эволюционирует при обмене с удерживаемым предметом | HeldItem |
EvolveWhenTradedWithMonster | Эволюционирует при обмене на определённый вид | RequiredPartner |
На основе приёмов
| Тип | Описание | Параметры |
|---|
EvolveOnLevelUpWhenAMoveHasBeenLearnt | Повышение уровня, если знает определённый приём | RequiredMove |
EvolveOnLevelUpWhenAMoveHasBeenLearntWithSceneTag | Приём + локация | RequiredMove, SceneTag |
EvolveToRandomFormOnLevelUpWhenAMoveHasBeenLearnt | Уровень + приём, случайная форма | RequiredMove, PossibleForms[] |
EvolveByUsingMoveXTimes | Эволюционирует после X использований определённого приёма в бою | RequiredMove, TimesRequired |
На основе условий