Roster
Отряд до 6 монстров MonsterInstance, которых можно использовать в бою. Это тип, возвращаемый IPlayerData.PlayerRoster, поэтому он является вашей точкой входа для чтения и изменения отряда игрока.
Пространство имён: OpenMon.MCE.Monster
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]
Быстрый доступ к экземпляру монстра по слоту.
| Параметр | Тип | Описание |
|---|---|---|
index | int | Индекс этого экземпляра монстра (0–5) |
Тип: MonsterInstance (get/set)
GetEnumerator()
Быстрый доступ к перечислителю данных (реализует IEnumerable, поэтому вы можете перебирать отряд через foreach).
Возвращает: IEnumerator по RosterData.
IsMonsterNull(int index)
Проверяет, является ли слот монстра пустым (либо фактический null, либо пустая запись).
| Параметр | Тип | Описание |
|---|---|---|
index | int | Индекс для проверки |
Возвращает: bool — true, если он пуст.
AddMonster(species, form, level, ...)
Добавить монстра в отряд, создав MonsterInstance за вас. Нужны только species, form и level; у остальных есть значения по умолчанию (случайные природа/способность, без прозвища, происхождение по умолчанию и т. д.).
| Параметр | Тип | Описание |
|---|---|---|
species | MonsterEntry | Вид этого монстра |
form | Form | Форма этого монстра (недопустимая форма откатывается к форме по умолчанию) |
level | byte | Уровень этого монстра |
| (множество необязательных) | природа, способность, пол, IV/EV, приёмы, прозвище, тренер, шар, ленты, удерживаемый предмет, isEgg и другое |
AddMonster(MonsterInstance monster)
Добавить в отряд уже созданного монстра.
| Параметр | Тип | Описание |
|---|---|---|
monster | MonsterInstance | Монстр для добавления |
Возвращает: int — индекс, по которому он был добавлен, или -1, если все слоты уже заполнены.
RemoveMonster(int index)
Удалить монстра из указанного слота, затем уплотнить отряд, чтобы не было пробелов.
| Параметр | Тип | Описание |
|---|---|---|
index | int | Индекс для удаления |
RemoveMonster(MonsterInstance monster)
Удалить конкретный экземпляр монстра из отряда.
| Параметр | Тип | Описание |
|---|---|---|
monster | MonsterInstance | Монстр для удаления |
Exchange(int firstIndex, int secondIndex)
Поменять местами двух монстров в отряде (обменять их слоты).
| Параметр | Тип | Описание |
|---|---|---|
firstIndex | int | Первый индекс для обмена |
secondIndex | int | Второй индекс для обмена |
ReplaceMonsterAt(int index, MonsterInstance newMonster)
Заменить монстра по указанному индексу другим.
| Параметр | Тип | Описание |
|---|---|---|
index | int | Индекс для замены |
newMonster | MonsterInstance | Монстр, которого нужно поместить туда |
Возвращает: MonsterInstance — монстра, которого заменили.
CompletelyHeal()
Полностью вылечить каждого монстра в отряде (HP, PP и статус).
AnyHasMove(Move move)
Знает ли какой-либо монстр в этом отряде данный приём? (Полезно для проверок полевых приёмов в стиле HM.)
| Параметр | Тип | Описание |
|---|---|---|
move | Move | Приём для проверки |
Возвращает: bool — true, если хотя бы один член его знает.
CopyFrom(Roster other)
Клонировать монстров другого отряда в этот.
| Параметр | Тип | Описание |
|---|---|---|
other | Roster | Отряд, из которого копировать |
Пример использования
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();
}
}