MonsterInstance
Контейнер данных времени выполнения для одного монстра — вид, форма, характеристики, приёмы, способность, удерживаемый предмет, дружба и многое другое. Это объект, который вы получаете при индексации Roster (например, player.PlayerRoster[0]), поэтому это тип, с которым игровой код работает чаще всего.
Пространство имён: OpenMon.MCE.Monster
В отличие от интерфейсов OpenMon.MCE.SDK, MonsterInstance — это конкретный сериализуемый класс. Перечисленные ниже члены — это основная поверхность, которую использует большинство покупателей; полный класс содержит дополнительные члены (разведение, эволюция, встречи и помощники для спрайтов). Полный API см. в исходном коде (уровень Source).
Определение
[Serializable]
public class MonsterInstance : Loggable<MonsterInstance>, IWorldDataContainer, ICommandParameter
{
public MonsterEntry Species;
public Form Form;
public bool IsNullEntry { get; }
public DataByFormEntry FormData { get; }
public MonsterStatData StatData;
public MonsterPhysicalData PhysicalData;
public OriginData OriginData;
public bool HasNickname;
public string Nickname;
public string CurrentTrainer;
public byte Friendship;
public uint CurrentHP;
public MoveSlot[] CurrentMoves;
public List<Move> LearntMoves;
public Item HeldItem;
public bool CanBattle { get; }
public float Height { get; }
public float Weight { get; }
public MonsterInstance(MCESettings settings, MonsterDatabaseInstance database,
MonsterEntry species, Form form, byte level, /* ...many optional overrides... */);
public string GetNameOrNickName(ILocalizer localizer);
public (int NewHP, int PreviousHP, bool TriggeredForceSurvive) ChangeHP(int amount, bool forceSurvive = false);
public void CompletelyHeal();
public bool IsAtMaxHP();
public void RaiseExperience(ExperienceLookupTable lookupTable, uint amount, Action<LevelUpData> levelUpCallback);
public int GetExperienceForNextLevel(ExperienceLookupTable lookupTable);
public void ChangeFriendship(int amount, SceneInfoAsset currentScene, ILocalizer localizer);
public Dictionary<Stat, uint> GetStats(BattleManager battleManager);
public (MonsterType, MonsterType) GetTypes(MCESettings settings, BattleManager battleManager);
public Ability GetAbility();
public void SetAbility(Ability ability);
public bool KnowsMove(Move move);
public bool CanLearnMove(Move move);
public List<MoveSlot> GetMovesWithPP();
public MonsterInstance Clone();
}
Поля и свойства
Species
Вид этого монстра.
Тип: MonsterEntry
Form
Форма этого монстра (региональный вариант, гендерная форма, шайни и т. д.).
Тип: Form
IsNullEntry
Является ли эта запись пустой? Полезно, потому что Unity создаёт экземпляр со всеми полями, установленными в null, при сериализации пустых слотов отряда.
Тип: bool (только чтение) — true, когда Species == null || Form == null.
FormData
Получить данные формы этого вида монстра (запись для конкретной формы, содержащую базовые характеристики, типы, набор изучаемых приёмов и т. д.).
Тип: DataByFormEntry (только чтение) — эквивалент Species[Form].
StatData
Данные характеристик этого монстра. Именно здесь хранится уровень монстра (StatData.Level, тип byte), а также его Nature и CurrentLevelExperience.
Тип: MonsterStatData
PhysicalData
Физические данные этого монстра (пол, модификаторы роста/веса). Пол читается через PhysicalData.Gender.
Тип: MonsterPhysicalData
OriginData
Данные о происхождении этого монстра (регион, локация, шар для ловли, изначальный тренер, является ли он альфой).
Тип: OriginData
HasNickname / Nickname
Есть ли у монстра прозвище, и само прозвище, когда оно есть.
Тип: bool / string
CurrentTrainer
Текущий тренер этого монстра.
Тип: string
Friendship
Значение дружбы этого монстра.
Тип: byte (0–255)
CurrentHP
Текущее HP этого монстра.
Тип: uint
CurrentMoves
Слоты приёмов монстра. У монстра есть 4 слота; каждый MoveSlot несёт Move и его текущий PP.
Тип: MoveSlot[]
LearntMoves
Приёмы, которые этот монстр выучил за свою жизнь.
Тип: List<Move>
HeldItem
Предмет, удерживаемый этим монстром.
Тип: Item
CanBattle
Может ли этот монстр сражаться? true, когда CurrentHP > 0 и монстр не является яйцом.
Тип: bool (только чтение)
Height
Получить рост монстра (рост формы × физический модификатор роста).
Тип: float (только чтение)
Weight
Получить вес монстра (вес формы × физический модификатор, затем скорректированный модификаторами веса от способности).
Тип: float (только чтение)
Методы
MonsterInstance(...) конструктор
Конструктор экземпляра монстра с переопределениями для большинства его данных. Обязательны только settings, database, species, form и level — у остальных есть разумные значения по умолчанию (случайные природа/способность, без прозвища, OriginData.Type.Caught и т. д.).
| Параметр | Ти п | Описание |
|---|---|---|
settings | MCESettings | Внутренние настройки для ссылки MCE |
database | MonsterDatabaseInstance | База данных, используемая для создания этого монстра |
species | MonsterEntry | Вид этого монстра |
form | Form | Форма этого монстра (недопустимая форма откатывается к форме по умолчанию) |
level | byte | Уровень этого монстра |
| (множество необязательных) | природа, способность, пол, IV/EV, приёмы, прозвище, тренер, шар, ленты, удерживаемый предмет, isEgg и другое |
Roster.AddMonsterВ обычном игровом процессе вы обычно создаёте монстров через Roster.AddMonster(...), который переадресует вызов этому конструктору и помещает монстра в отряд за вас.
GetNameOrNickName(ILocalizer localizer)
Получить имя или прозвище этого монстра.
| Параметр | Тип | Описание |
|---|---|---|
localizer | ILocalizer | Ссылка на локализатор |
Возвращает: string — локализованное прозвище, если оно есть, иначе локализованное имя вида (или строку «Egg», если это яйцо).
ChangeHP(int amount, bool forceSurvive = false)
Изменить HP этого монстра на неограниченную величину (внутренне ограничивается диапазоном [0..maxHP] или [1..maxHP], когда установлен forceSurvive).
| Параметр | Тип | Описание |
|---|---|---|
amount | int | Неограниченная величина изменения HP |
forceSurvive | bool | Заставить монстра пережить удар? |
Возвращает: (int NewHP, int PreviousHP, bool TriggeredForceSurvive).
CompletelyHeal()
Полностью вылечить этого монстра — восстанавливает HP до максимума, пополняет PP каждого слота приёма и снимает его статус.
IsAtMaxHP()
Проверить, находится ли монстр на максимальном здоровье.
Возвращает: bool — true, если да.
RaiseExperience(ExperienceLookupTable lookupTable, uint amount, Action<LevelUpData> levelUpCallback)
Повысить опыт этого монстра, обрабатывая по пути повышения уровня (и связанные с ними события изучения приёмов).
| Параметр | Тип | Описание |
|---|---|---|
lookupTable | ExperienceLookupTable | Используемая таблица поиска опыта |
amount | uint | Количество опыта для повышения |
levelUpCallback | Action<LevelUpData> | Обратный вызов, срабатывающий при каждом повышении уровня монстра |
GetExperienceForNextLevel(ExperienceLookupTable lookupTable)
Получить количество опыта, необходимое для следующего уровня.
Возвращает: int — опыт, требуемый для следующего уровня.
ChangeFriendship(int amount, SceneInfoAsset currentScene, ILocalizer localizer)
Изменить дружбу этого монстра (применяет модификаторы локации и шара для ловли перед ограничением диапазоном [0..255]).
| Параметр | Тип | Описание |
|---|---|---|
amount | int | Величина изменения |
currentScene | SceneInfoAsset | Текущая сцена, в которой мы находимся |
localizer | ILocalizer | Ссылка на локализатор |
GetStats(BattleManager battleManager)
Получить текущие характеристики этого монстра.
| Параметр | Тип | Описание |
|---|---|---|
battleManager | BattleManager | Ссылка на менеджер сражения, если в бою; передайте null вне боя |
Возвращает: Dictionary<Stat, uint> — каждая характеристика, сопоставленная её вычисленному значению.
GetTypes(MCESettings settings, BattleManager battleManager)
Получить типы этого монстра. Они могут быть изменены изменчивыми боевыми состояниями.
Возвращает: (MonsterType, MonsterType) — два типа (второй может быть null для монстров с одним типом).
GetAbility()
Получить способность этого монстра.
Возвращает: Ability.
SetAbility(Ability ability)
Установить новую способность этого монстра.
| Параметр | Тип | Описание |
|---|---|---|
ability | Ability | Новая способность |
KnowsMove(Move move)
Проверить, знает ли монстр приём.
Возвращает: bool — true, если да.
CanLearnMove(Move move)
Проверить, может ли монстр выучить приём (т. е. приём есть в его наборе изучаемых приёмов, и он его ещё не знает).
Возвращает: bool — true, если может.
GetMovesWithPP()
Получить список приёмов, у которых ещё остался PP.
Возвращает: List<MoveSlot>.
Clone()
Клонировать этот экземпляр. Возвращает null для пустой записи; глубоко клонирует данные характеристик и копирует остальное.
Возвращает: MonsterInstance.
Пример использования
using OpenMon.MCE.SDK;
using OpenMon.MCE.Monster;
using Zenject;
public class LeadMonsterInspector : MonoBehaviour
{
[Inject] private IMonsterCaptureEngine engine;
private void Start()
{
Roster roster = engine.Player.PlayerRoster;
if (roster.RosterSize == 0) return;
MonsterInstance lead = roster[0];
Debug.Log($"Species : {lead.Species.name}");
Debug.Log($"Level : {lead.StatData.Level}");
Debug.Log($"HP : {lead.CurrentHP}");
Debug.Log($"Friend. : {lead.Friendship}");
Debug.Log($"Can battle: {lead.CanBattle}");
// Inspect the moveset.
foreach (MoveSlot slot in lead.GetMovesWithPP())
Debug.Log($"Move: {slot.Move.name} ({slot.CurrentPP} PP)");
// Full restore.
lead.CompletelyHeal();
}
}