Публичный API для пользователей DLL
Если вы используете уровни Lite, Basic, Pro или Online MCE, движок поставляется как скомпилированная DLL без исходного кода. Это руководство объясняет публичную поверхность API, которую вы можете использовать для взаимодействия и расширения MCE из ваших собственных C#-скриптов.
Пространство имён SDK
MCE раскрывает свой публичный API через пространство имён OpenMon.MCE.SDK. Оно содержит чистые интерфейсы, предоставляющие доступ к подсистемам движка без привязки вашего кода к внутренним реализациям.
IMonsterCaptureEngine
Основная точка входа. Все остальные интерфейсы доступны через неё:
using OpenMon.MCE.SDK;
public class MyGameManager : MonoBehaviour
{
[Inject] private IMonsterCaptureEngine engine;
private void Start()
{
Debug.Log($"MCE Version: {engine.Version}");
Debug.Log($"Monsters in DB: {engine.Database.MonsterCount}");
Debug.Log($"Player name: {engine.Player.PlayerName}");
}
}
Свойства:
| Свойство | Тип | Описание |
|---|---|---|
Database | IMonsterDatabase | Доступ только для чтения к базе данных монстров/приёмов/предметов |
Battle | IBattleSystem | Состояние боя и события |
Player | IPlayerData | Ростер игрока, деньги, имя, значки |
SaveSystem | ISaveSystem | Операции сохранения и загрузки |
Version | string | Строка версии движка MCE |
IMonsterDatabase
Запросы монстров, приёмов, способностей, предметов и типов:
IMonsterDatabase db = engine.Database;
// Получить монстра по номеру декса
MonsterEntry flameleon = db.GetMonster(152);
// Получить монстра по имени
MonsterEntry sparkbit = db.GetMonster("Sparkbit");
// Получить эффективность типов
float effectiveness = db.GetTypeEffectiveness(
MonsterType.Electric,
MonsterType.Water
);
// Returns 2.0 (super effective)
IBattleSystem
Мониторинг состояния боя и реакция на боевые события:
IBattleSystem battle = engine.Battle;
// Проверка, идёт ли бой
if (battle.IsInBattle)
{
// Действия во время боя
}
// Подписка на события боя
battle.OnBattleStarted += HandleBattleStarted;
battle.OnBattleEnded += HandleBattleEnded;
IPlayerData
До ступ к текущему состоянию игрока:
IPlayerData player = engine.Player;
// Команда монстров игрока
Roster roster = player.PlayerRoster;
int teamSize = roster.Count;
MonsterInstance firstMonster = roster[0];
// Деньги, имя и значки игрока
int money = player.Money;
string name = player.PlayerName;
int badges = player.BadgeCount;
ISaveSystem
Управление операциями сохранения и загрузки:
ISaveSystem saves = engine.SaveSystem;
saves.Save(1); // Сохранить в слот 1
saves.Load(1); // Загрузить из слота 1
bool hasData = saves.HasSaveData(1); // Проверить наличие данных
saves.DeleteSave(1); // Удалить данные сохранения
// Прослушивание событий
saves.OnSaved += (slot) => Debug.Log($"Saved to slot {slot}");
saves.OnLoaded += (slot) => Debug.Log($"Loaded from slot {slot}");
Внедрение зависимостей
MCE использует Zenject (Extenject) для внедрения зависимостей. Для доступа к интерфейсам SDK в ваших скриптах используйте атрибут [Inject]:
using Zenject;
using OpenMon.MCE.SDK;
public class MyCustomFeature : MonoBehaviour
{
[Inject] private IMonsterCaptureEngine engine;
[Inject] private IMonsterDatabase database;
[Inject] private IBattleSystem battle;
// Zenject автоматически внедрит эти зависимости до вызова Start()
}
Если вы новичок во внедрении зависимостей, вот простая версия: добавьте [Inject] над приватным полем типа интерфейса, и Zenject автоматически его заполнит. Вам не нужно вызывать GetComponent или FindObjectOfType. Поле будет заполнено до выполнения Start().
Если ваш скрипт не является MonoBehaviour, управляемым Zenject, вы можете разрешить зависимость вручную:
var engine = ProjectContext.Instance.Container.Resolve<IMonsterCaptureEngine>();
Настройка через Inspector
Многие системы MCE предоставляют настройку через Unity Inspector без необходимости кода:
Конфигурация ScriptableObject
| Ассет | Назначение | Расположение |
|---|---|---|
BattleConfigurationFile | Скорость боя, множители опыта, шансы захвата | Runtime/Configuration/ |
MonsterEntry | Данные видов монстров | MonsterDatabase/ |
Move | Определения приёмов | MonsterDatabase/Moves/ |
WildEncountersSet | Таблицы встреч | Ассеты по картам |
BattleAI | Конфигурация стратегии ИИ | Battle/AI/ |