メインコンテンツまでスキップ

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で、空のスロットは null エントリを保持します。

型: MonsterInstance[]

インデクサと RosterSize を優先

日常的な読み取りには、RosterData を直接反復するのではなく、roster[i] インデクサと RosterSize を使用してください — 末尾のスロットは null または null エントリの可能性があります。

Settings​

MCE 設定への参照。

型: MCESettings

Database​

モンスターデータベースへの参照。

型: MonsterDatabaseInstance

RosterSize​

このロスターのサイズを取得します — 埋まっている先頭スロットの数(最初の null エントリで停止)。

型: int(読み取り専用、0〜6)

NumberThatCanBattle​

現在バトルできるモンスターの数を取得します(null エントリでなく、かつ CanBattle == true)。

型: int(読み取り専用)

メソッド​

this[int index]​

スロットによるモンスターインスタンスへのクイックアクセス。

パラメータ型説明
indexintそのモンスターインスタンスのインデックス(0〜5)

型: MonsterInstance(get/set)

GetEnumerator()​

データ列挙子へのクイックアクセス(IEnumerable を実装するため、ロスターを foreach できます)。

戻り値: RosterData 上の IEnumerator。

IsMonsterNull(int index)​

モンスタースロットが null か(実際の null または null エントリのいずれか)を確認します。

パラメータ型説明
indexint確認するインデックス

戻り値: bool — null であれば true。

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

MonsterInstance を構築して、モンスターをロスターに追加します。必要なのは species、form、level のみで、残りはデフォルト(ランダムな性格/特性、ニックネームなし、デフォルトの出自など)を持ちます。

パラメータ型説明
speciesMonsterEntryこのモンスターの種族
formFormこのモンスターのフォーム(無効なフォームはデフォルトにフォールバック)
levelbyteこのモンスターのレベル
(多数の任意)性格、特性、性別、個体値/努力値、技、ニックネーム、トレーナー、ボール、リボン、持ち物、isEgg など

AddMonster(MonsterInstance monster)​

すでに構築されたモンスターをロスターに追加します。

パラメータ型説明
monsterMonsterInstance追加するモンスター

戻り値: int — 追加されたインデックス、すべてのスロットが埋まっている場合は -1。

RemoveMonster(int index)​

指定したスロットのモンスターを削除し、その後、隙間ができないようパーティを詰めます。

パラメータ型説明
indexint削除するインデックス

RemoveMonster(MonsterInstance monster)​

特定のモンスターインスタンスをロスターから削除します。

パラメータ型説明
monsterMonsterInstance削除するモンスター

Exchange(int firstIndex, int secondIndex)​

ロスター内の2体のモンスターを交換します(スロットを入れ替え)。

パラメータ型説明
firstIndexint交換する1つ目のインデックス
secondIndexint交換する2つ目のインデックス

ReplaceMonsterAt(int index, MonsterInstance newMonster)​

指定したインデックスのモンスターを別のものに置き換えます。

パラメータ型説明
indexint置き換えるインデックス
newMonsterMonsterInstanceそこに配置するモンスター

戻り値: MonsterInstance — 置き換えられたモンスター。

CompletelyHeal()​

ロスター内のすべてのモンスターを完全に回復します(HP、PP、状態異常)。

AnyHasMove(Move move)​

このロスター内のいずれかのモンスターが指定した技を覚えているか?(フィールド/秘伝技系のチェックに有用)

パラメータ型説明
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();
}
}