Система диких встреч
Система встреч определяет, когда и какие дикие монстры появляются при исследовании мира игроком. MCE поддерживает несколько методов встреч, настраиваемые таблицы вероятностей, диапазоны уровней и встречи по времени суток.
Как работают встречи
- Игрок ходит по тайлу с данными встреч.
- На каждом шаге система бросает против частоты встреч.
- Если бросок успешен, монстр выбирается из таблицы встреч тайла на основе взвешенной вероятности.
- Создаётся объект
BattleParametersс данными о виде, уровне и форме выбранного монстра. BattleLauncherпереходит к сцене сражения.
WildEncountersSet
ScriptableObject WildEncountersSet определяет таблицу встреч для данной области:
Создайте через: Assets > Create > OpenMon > Wild Encounters Set
Каждая запись в наборе содержит:
| Поле | Описание |
|---|---|
| Monster | Ссылка на ScriptableObject MonsterEntry |
| Min Level | Минимальный уровень дикого монстра |
| Max Level | Максимальный уровень дикого монстра |
| Probability | Относительный вес для данной записи (чем выше, тем чаще) |
Фактический уровень случайно выбирается между Min и Max при каждом сра батывании встречи.
Расчёт вероятности
Вероятности -- это относительные веса, а не проценты. Система суммирует все веса и рассчитывает шанс каждой записи:
Chance = Entry Weight / Sum of All Weights
Пример таблицы:
| Монстр | Вес | Фактический шанс |
|---|---|---|
| Leafpup | 40 | 40/100 = 40% |
| Windling | 30 | 30/100 = 30% |
| Silkworm | 20 | 20/100 = 20% |
| Sparkbit | 10 | 10/100 = 10% |
Типы встреч
MCE поддерживает различные методы встреч через перечисление EncounterType:
| Тип | Триггер | Описание |
|---|---|---|
| Walking | Ходьба через высокую траву или пещеры | Стандартные встречи в открытом мире |
| Surfing | Сёрфинг по водным тайлам | Встречи на водной поверхности |
| Fishing | Использование удочки на воде | Встречи на основе удочки (Old Rod, Good Rod, Super Rod) |
| RockSmash | Использование Rock Smash на разрушаемом камне | Встречи на основе камней |
| Headbutt | Использование Headbutt на дереве | Встречи на основе деревьев |
Каждый WildEncountersSet может иметь встречи, разделённые по типу. Учитываются только встречи, соответствующие текущему действию (ходьба, сёрфинг, рыбалка).
Настройка зон встреч
Метод 1: Компонент EncounterTile
- В вашей сцене создайте пустой GameObject в иерархии карты.
- Добавьте компонент
EncounterTile. - Назначьте
WildEncountersSetв поле Encounters. - Расположите и масштабируйте зону встреч для покрытия нужных тайлов.
Метод 2: Встречи по умолчанию в SceneInfo
SceneInfo каждой сцены может иметь WildEncountersSet по умолчанию. Любой проходимый тайл травы в сцене будет использовать эту таблицу встреч, если она не переопределена конкретным EncounterTile.
Метод 3: Встречи по тайлам
Для точного контроля вы можете назначить разные наборы встреч различным областям одной карты. Разместите несколько компонентов EncounterTile, покрывающих разные регионы.
Частота встреч
Частота встреч контролирует, как часто встречи срабатывают за шаг:
- Базовая частота: Настраивается для каждой зоны встреч (типичный диапазон: 5-25%).
- Модификаторы: Предметы (например, Repel снижает до 0%), способности (например, Stench снижает частоту) и предметы (например, Cleanse Tag).
- Счётчик шагов: Система отслеживает шаги с последней встречи. После многих шагов без встречи частота немного увеличивается, чтобы предотвратить длительные серии без встреч.
Встречи по времени суток
Разные монстры могут появляться в разное время суток:
| Период | Часы |
|---|---|
| Утро | 06:00 - 11:59 |
| День | 12:00 - 17:59 |
| Вечер | 18:00 - 20:59 |
| Ночь | 21:00 - 05:59 |
Настройте временные встречи, создав отдельные ассеты WildEncountersSet для каждого периода и назначив их через конфигурацию времени суток зоны встреч.
Встречи с формами
Некоторые виды имеют формы, которые появляются по-разному в зависимости от условий. EncounterFormCalculator определяет, в какой форме появляется дикий монстр:
- Региональные формы: На основе тега региона карты.
- Сезонные формы: На основе внутриигрового календаря.
- Случайные формы: Случайный выбор из доступных форм.
Используйте компонент SingleFormEncounter для принудительного появления определённой формы в записи встречи.