Перейти к основному содержимому

MonsterInstance

Контейнер данных времени выполнения для одного монстра — вид, форма, характеристики, приёмы, способность, удерживаемый предмет, дружба и многое другое. Это объект, который вы получаете при индексации Roster (например, player.PlayerRoster[0]), поэтому это тип, с которым игровой код работает чаще всего.

Пространство имён: OpenMon.MCE.Monster

Конкретный тип данных, а не интерфейс SDK

В отличие от интерфейсов 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 и т. д.).

ПараметрТипОписание
settingsMCESettingsВнутренние настройки для ссылки MCE
databaseMonsterDatabaseInstanceБаза данных, используемая для создания этого монстра
speciesMonsterEntryВид этого монстра
formFormФорма этого монстра (недопустимая форма откатывается к форме по умолчанию)
levelbyteУровень этого монстра
(множество необязательных)природа, способность, пол, IV/EV, приёмы, прозвище, тренер, шар, ленты, удерживаемый предмет, isEgg и другое
Предпочитайте Roster.AddMonster

В обычном игровом процессе вы обычно создаёте монстров через Roster.AddMonster(...), который переадресует вызов этому конструктору и помещает монстра в отряд за вас.

GetNameOrNickName(ILocalizer localizer)​

Получить имя или прозвище этого монстра.

ПараметрТипОписание
localizerILocalizerСсылка на локализатор

Возвращает: string — локализованное прозвище, если оно есть, иначе локализованное имя вида (или строку «Egg», если это яйцо).

ChangeHP(int amount, bool forceSurvive = false)​

Изменить HP этого монстра на неограниченную величину (внутренне ограничивается диапазоном [0..maxHP] или [1..maxHP], когда установлен forceSurvive).

ПараметрТипОписание
amountintНеограниченная величина изменения HP
forceSurviveboolЗаставить монстра пережить удар?

Возвращает: (int NewHP, int PreviousHP, bool TriggeredForceSurvive).

CompletelyHeal()​

Полностью вылечить этого монстра — восстанавливает HP до максимума, пополняет PP каждого слота приёма и снимает его статус.

IsAtMaxHP()​

Проверить, находится ли монстр на максимальном здоровье.

Возвращает: bool — true, если да.

RaiseExperience(ExperienceLookupTable lookupTable, uint amount, Action<LevelUpData> levelUpCallback)​

Повысить опыт этого монстра, обрабатывая по пути повышения уровня (и связанные с ними события изучения приёмов).

ПараметрТипОписание
lookupTableExperienceLookupTableИспользуемая таблица поиска опыта
amountuintКоличество опыта для повышения
levelUpCallbackAction<LevelUpData>Обратный вызов, срабатывающий при каждом повышении уровня монстра

GetExperienceForNextLevel(ExperienceLookupTable lookupTable)​

Получить количество опыта, необходимое для следующего уровня.

Возвращает: int — опыт, требуемый для следующего уровня.

ChangeFriendship(int amount, SceneInfoAsset currentScene, ILocalizer localizer)​

Изменить дружбу этого монстра (применяет модификаторы локации и шара для ловли перед ограничением диапазоном [0..255]).

ПараметрТипОписание
amountintВеличина изменения
currentSceneSceneInfoAssetТекущая сцена, в которой мы находимся
localizerILocalizerСсылка на локализатор

GetStats(BattleManager battleManager)​

Получить текущие характеристики этого монстра.

ПараметрТипОписание
battleManagerBattleManagerСсылка на менеджер сражения, если в бою; передайте null вне боя

Возвращает: Dictionary<Stat, uint> — каждая характеристика, сопоставленная её вычисленному значению.

GetTypes(MCESettings settings, BattleManager battleManager)​

Получить типы этого монстра. Они могут быть изменены изменчивыми боевыми состояниями.

Возвращает: (MonsterType, MonsterType) — два типа (второй может быть null для монстров с одним типом).

GetAbility()​

Получить способность этого монстра.

Возвращает: Ability.

SetAbility(Ability ability)​

Установить новую способность этого монстра.

ПараметрТипОписание
abilityAbilityНовая способность

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();
}
}