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

Roster

Отряд до 6 монстров MonsterInstance, которых можно использовать в бою. Это тип, возвращаемый IPlayerData.PlayerRoster, поэтому он является вашей точкой входа для чтения и изменения отряда игрока.

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

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

Roster — это конкретный ScriptableObject (SavableObject), а не интерфейс OpenMon.MCE.SDK. Перечисленные ниже члены — это основная поверхность, которую использует большинство покупателей; класс содержит дополнительные члены (управление шаблонами, сериализация сохранения/загрузки, распространение вируса, случайное заполнение). Полный API см. в исходном коде (уровень Source).

Определение​

[CreateAssetMenu(menuName = "MCE/Roster", fileName = "Roster")]
public class Roster : SavableObject, IEnumerable
{
public event Action OnRosterUpdated;

public MonsterInstance[] RosterData = new MonsterInstance[6];
public MCESettings Settings;
public MonsterDatabaseInstance Database;

public int RosterSize { get; }
public int NumberThatCanBattle { get; }

public MonsterInstance this[int index] { get; set; }
public IEnumerator GetEnumerator();
public bool IsMonsterNull(int index);

public void AddMonster(MonsterEntry species, Form form, byte level, /* ...many optional overrides... */);
public int AddMonster(MonsterInstance monster);
public void RemoveMonster(int index);
public void RemoveMonster(MonsterInstance monster);
public void Exchange(int firstIndex, int secondIndex);
public MonsterInstance ReplaceMonsterAt(int index, MonsterInstance newMonster);

public void CompletelyHeal();
public bool AnyHasMove(Move move);
public void CopyFrom(Roster other);
}

События​

OnRosterUpdated​

Срабатывает всякий раз, когда отряд изменяется (монстр добавлен, удалён, переставлен, заменён и т. д.).

Сигнатура: event Action OnRosterUpdated

Поля и свойства​

RosterData​

Базовый массив экземпляров монстров. Всегда имеет длину 6; пустые слоты содержат пустую запись.

Тип: MonsterInstance[]

Предпочитайте индексатор и RosterSize

Для повседневного чтения используйте индексатор roster[i] и RosterSize, а не прямой перебор RosterData — конечные слоты могут быть null или пустыми записями.

Settings​

Ссылка на настройки MCE.

Тип: MCESettings

Database​

Ссылка на базу данных монстров.

Тип: MonsterDatabaseInstance

RosterSize​

Получить размер этого отряда — количество заполненных ведущих слотов (останавливается на первой пустой записи).

Тип: int (только чтение, 0–6)

NumberThatCanBattle​

Получить количество монстров, которые в данный момент могут сражаться (не пустая запись и CanBattle == true).

Тип: int (только чтение)

Методы​

this[int index]​

Быстрый доступ к экземпляру монстра по слоту.

ПараметрТипОписание
indexintИндекс этого экземпляра монстра (0–5)

Тип: MonsterInstance (get/set)

GetEnumerator()​

Быстрый доступ к перечислителю данных (реализует IEnumerable, поэтому вы можете перебирать отряд через foreach).

Возвращает: IEnumerator по RosterData.

IsMonsterNull(int index)​

Проверяет, является ли слот монстра пустым (либо фактический null, либо пустая запись).

ПараметрТипОписание
indexintИндекс для проверки

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

AddMonster(species, form, level, ...)​

Добавить монстра в отряд, создав MonsterInstance за вас. Нужны только species, form и level; у остальных есть значения по умолчанию (случайные природа/способность, без прозвища, происхождение по умолчанию и т. д.).

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

AddMonster(MonsterInstance monster)​

Добавить в отряд уже созданного монстра.

ПараметрТипОписание
monsterMonsterInstanceМонстр для добавления

Возвращает: int — индекс, по которому он был добавлен, или -1, если все слоты уже заполнены.

RemoveMonster(int index)​

Удалить монстра из указанного слота, затем уплотнить отряд, чтобы не было пробелов.

ПараметрТипОписание
indexintИндекс для удаления

RemoveMonster(MonsterInstance monster)​

Удалить конкретный экземпляр монстра из отряда.

ПараметрТипОписание
monsterMonsterInstanceМонстр для удаления

Exchange(int firstIndex, int secondIndex)​

Поменять местами двух монстров в отряде (обменять их слоты).

ПараметрТипОписание
firstIndexintПервый индекс для обмена
secondIndexintВторой индекс для обмена

ReplaceMonsterAt(int index, MonsterInstance newMonster)​

Заменить монстра по указанному индексу другим.

ПараметрТипОписание
indexintИндекс для замены
newMonsterMonsterInstanceМонстр, которого нужно поместить туда

Возвращает: MonsterInstance — монстра, которого заменили.

CompletelyHeal()​

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

AnyHasMove(Move move)​

Знает ли какой-либо монстр в этом отряде данный приём? (Полезно для проверок полевых приёмов в стиле HM.)

ПараметрТипОписание
moveMoveПриём для проверки

Возвращает: bool — true, если хотя бы один член его знает.

CopyFrom(Roster other)​

Клонировать монстров другого отряда в этот.

ПараметрТипОписание
otherRosterОтряд, из которого копировать

Пример использования​

using OpenMon.MCE.SDK;
using OpenMon.MCE.Monster;
using Zenject;

public class PartyManager : MonoBehaviour
{
[Inject] private IMonsterCaptureEngine engine;

private void Start()
{
Roster roster = engine.Player.PlayerRoster;

// React to any party change.
roster.OnRosterUpdated += () =>
Debug.Log($"Party changed — size {roster.RosterSize}, "
+ $"{roster.NumberThatCanBattle} able to battle");

// Iterate the current party.
foreach (MonsterInstance monster in roster)
{
if (monster is { IsNullEntry: false })
Debug.Log($"- {monster.Species.name} (Lv {monster.StatData.Level})");
}

// Swap the lead with the second slot.
if (roster.RosterSize >= 2)
roster.Exchange(0, 1);

// Heal the whole party after a rough battle.
roster.CompletelyHeal();
}
}