GS2-Stamina SDK for Game Engine API リファレンス

ゲームエンジン向け GS2-Stamina SDK の モデルの仕様 と API のリファレンス

モデル

EzStamina

スタミナ

スタミナとは現実時間の時間経過で回復するポイントです。
一般的にこのスタミナを消費してゲームをプレイできるようにすることで、プレイヤーの1日のプレイ回数を制限し、ゲームの進行速度をゲーム提供側がコントロールする目的で使用されます。

有効化条件必須デフォルト値の制限説明
staminaNamestring
~ 128文字スタミナモデル名
このスタミナインスタンスの回復パラメータ、容量、テーブル参照を定義する StaminaModel の名前。
ユーザーごとのスタミナ状態を対応するモデル定義に紐づけます。
valueint
0 ~ 2147483646スタミナ値
オーバーフロー分を除く、このユーザーの現在のスタミナ量。
回復間隔と回復量に基づいて時間経過で自動的に増加し、maxValue まで回復します。
lastRecoveredAt からの経過時間を用いて recoverSteps = elapsedMinutes / recoverIntervalMinutes の式で計算されます。
overflowValueint
0 ~ 2147483646オーバーフロー値
通常の最大値(maxValue)を超えて格納されているスタミナ量。
StaminaModel の isOverflow が有効な場合のみ使用されます。実効スタミナの合計は value + overflowValue で、maxCapacity が上限です。
スタミナ消費時はオーバーフロー分が先に消費されます。
maxValueint
1 ~ 2147483646スタミナの最大値
StaminaModel から解決され、オプションでプレイヤーの GS2-Experience ランクに基づく MaxStaminaTable でオーバーライドされるユーザーごとのスタミナ最大値。
オーバーフロー無効時は initialCapacity が下限となります。オーバーフロー有効時は maxCapacity が上限となります。
自然回復はこの値で停止します。
recoverIntervalMinutesint1 ~ 2147483646スタミナの回復間隔(分)
StaminaModel から解決され、オプションでプレイヤーの GS2-Experience ランクに基づく RecoverIntervalTable でオーバーライドされるユーザーごとの回復間隔(分)。
テーブルが設定されていない場合、モデルのデフォルト recoverIntervalMinutes にフォールバックします。
recoverValueint1 ~ 2147483646スタミナの回復量
StaminaModel から解決され、オプションでプレイヤーの GS2-Experience ランクに基づく RecoverValueTable でオーバーライドされるユーザーごとのティックあたりの回復量。
テーブルが設定されていない場合、モデルのデフォルト recoverValue にフォールバックします。
nextRecoverAtlong次回回復時刻
次のスタミナ回復ティックが発生する Unix タイムスタンプ(ミリ秒)。
lastRecoveredAt + recoverIntervalMinutes(ミリ秒換算)で計算されます。スタミナが既に maxValue の場合、このフィールドは未設定になることがあります。

EzStaminaModel

スタミナモデル

スタミナの最大値や、回復間隔、回復量といったパラメータを定義できます。
GS2-Experience と連動させて、最大値や回復量をコントロールすることもできます。

有効化条件必須デフォルト値の制限説明
namestring
~ 128文字スタミナモデル名
スタミナモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
metadatastring~ 128文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。
recoverIntervalMinutesint
0 ~ 2147483646回復間隔(分)
スタミナ回復ティックの間隔(分単位)。
この間隔が経過するたびに、プレイヤーのスタミナが回復量分だけ増加します。
RecoverIntervalTable を使用して GS2-Experience のランクごとにユーザー単位でオーバーライド可能です。
0 に設定すると時間ベースの自動回復が無効になります。
recoverValueint10 ~ 2147483646回復量
回復ティックごとに回復するスタミナの量。
回復間隔が経過するたびに、最大値に達するまでこの値分スタミナが増加します。
RecoverValueTable を使用して GS2-Experience のランクごとにユーザー単位でオーバーライド可能です。
デフォルトは 1。
initialCapacityint
0 ~ 2147483646最大値の初期値
全プレイヤーに対するデフォルトのスタミナ最大値。
オーバーフローが無効の場合、ユーザーごとの最大値の下限として機能します。
MaxStaminaTable を使用して GS2-Experience のランクごとにユーザー単位でオーバーライド可能です。
isOverflowbool
オーバーフロー可否
アイテム使用などの手段でスタミナが初期最大値を超えられるかどうか。
有効の場合、スタミナは initialCapacity を超えて maxCapacity まで設定可能です。自然回復は通常の最大値で停止します。
無効の場合、ユーザーごとの最大値は initialCapacity 以上に制限されます。
maxCapacityint{isOverflow} == true
✓※
0 ~ 2147483646オーバーフロー時の最大値
オーバーフロー有効時のスタミナの絶対上限値。
オーバーフローでもスタミナはこの値を超えることはできません。isOverflow が true の場合のみ表示されます。
例えば initialCapacity が 100、maxCapacity が 200 の場合、アイテムでスタミナを 200 まで増やせますが、自然回復は 100 で停止します。

※ isOverflow が true であれば 必須
maxStaminaTableEzMaxStaminaTableスタミナ最大値テーブル
プレイヤーの GS2-Experience ランクに基づいてスタミナ最大値を動的に決定する MaxStaminaTable への参照。
設定時、プレイヤーの最大スタミナは現在のランクインデックスでテーブルから参照され、initialCapacity をオーバーライドします。
未設定の場合、全プレイヤーが同じ initialCapacity を最大値として共有します。
recoverIntervalTableEzRecoverIntervalTable回復間隔テーブル
プレイヤーの GS2-Experience ランクに基づいて回復間隔を動的に決定する RecoverIntervalTable への参照。
設定時、プレイヤーの回復間隔は現在のランクインデックスでテーブルから参照され、recoverIntervalMinutes をオーバーライドします。
未設定の場合、全プレイヤーが同じ recoverIntervalMinutes を共有します。
recoverValueTableEzRecoverValueTable回復量テーブル
プレイヤーの GS2-Experience ランクに基づいて回復量を動的に決定する RecoverValueTable への参照。
設定時、プレイヤーの回復量は現在のランクインデックスでテーブルから参照され、recoverValue をオーバーライドします。
未設定の場合、全プレイヤーが同じ recoverValue を共有します。

EzMaxStaminaTable

スタミナ最大値テーブル

スタミナ最大値テーブルは、GS2-Experience のランクごとにスタミナの最大値を定義するエンティティです。

有効化条件必須デフォルト値の制限説明
namestring
~ 128文字スタミナ最大値テーブル名
スタミナ最大値テーブル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
metadatastring~ 128文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。
experienceModelIdstring
~ 1024文字経験値モデルID
プレイヤーの現在のランクを参照するために使用する GS2-Experience の ExperienceModel の GRN。
ランクインデックスが values リストの配列インデックスとして使用され、ユーザーごとのスタミナ最大値が決定されます。
valuesList<int>
1 ~ 1024 itemsランク毎のスタミナ最大値
プレイヤーの GS2-Experience ランクインデックスで索引されるスタミナ最大値の配列。
インデックス i の値がランク i のプレイヤーの最大スタミナとして使用されます。配列長は参照先の ExperienceModel で定義されたランク数と一致させる必要があります。

EzRecoverIntervalTable

回復間隔テーブル

回復間隔テーブルは、GS2-Experience のランクごとにスタミナの回復間隔を定義するエンティティです。

有効化条件必須デフォルト値の制限説明
namestring
~ 128文字回復間隔テーブル名
回復間隔テーブル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
metadatastring~ 128文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。
experienceModelIdstring
~ 1024文字経験値モデルID
プレイヤーの現在のランクを参照するために使用する GS2-Experience の ExperienceModel の GRN。
ランクインデックスが values リストの配列インデックスとして使用され、ユーザーごとの回復間隔が決定されます。
valuesList<int>
1 ~ 1024 itemsランク毎の回復間隔
プレイヤーの GS2-Experience ランクインデックスで索引される回復間隔値(分単位)の配列。
インデックス i の値がランク i のプレイヤーの回復間隔として使用され、モデルのデフォルト recoverIntervalMinutes をオーバーライドします。

EzRecoverValueTable

スタミナ回復量テーブル

スタミナ回復量テーブルは、GS2-Experience のランクごとにスタミナの回復量を定義するエンティティです。

有効化条件必須デフォルト値の制限説明
namestring
~ 128文字スタミナ回復量テーブル名
スタミナ回復量テーブル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
metadatastring~ 128文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。
experienceModelIdstring
~ 1024文字経験値モデルID
プレイヤーの現在のランクを参照するために使用する GS2-Experience の ExperienceModel の GRN。
ランクインデックスが values リストの配列インデックスとして使用され、ユーザーごとの回復量が決定されます。
valuesList<int>
1 ~ 1024 itemsランク毎の回復量
プレイヤーの GS2-Experience ランクインデックスで索引される回復量値の配列。
インデックス i の値がランク i のプレイヤーのティックあたりの回復量として使用され、モデルのデフォルト recoverValue をオーバーライドします。

メソッド

getStaminaModel

特定のスタミナ種別の定義を取得する

特定のスタミナの種別定義を取得します。
レスポンスには、回復間隔(どのくらいの頻度で回復するか)、回復量(1回にどれだけ回復するか)、最大容量、オーバーフロー設定が含まれます。
特定のスタミナの種別ルールを表示するのに使います。たとえば、スタミナ詳細画面で「アクションスタミナ: 5分ごとに1回復、最大100」のように表示するのに便利です。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
staminaNamestring
~ 128文字スタミナモデル名
スタミナモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。

Result

説明
itemEzStaminaModelスタミナモデル

実装例

    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).StaminaModel(
        staminaName: "stamina-0001"
    );
    var item = await domain.ModelAsync();
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).StaminaModel(
        staminaName: "stamina-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->StaminaModel(
        "stamina-0001" // staminaName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }
値の変更イベントハンドリング
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).StaminaModel(
        staminaName: "stamina-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).StaminaModel(
        staminaName: "stamina-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->StaminaModel(
        "stamina-0001" // staminaName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Stamina::Model::FStaminaModel> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    Domain->Unsubscribe(CallbackId);

listStaminaModels

スタミナ種別の定義一覧を取得する

ゲームに設定されたすべてのスタミナモデル定義を取得します。
スタミナモデルは、スタミナの種別ごとのルールを定義します。時間経過での回復速度、1回の回復量、最大容量、最大値を超えたオーバーフローの可否などが含まれます。
たとえば「アクションスタミナ」(5分ごとに1回復、最大100)と「アリーナチケット」(2時間ごとに1回復、最大5)のように別々のスタミナモデルを用意できます。
一部のスタミナモデルはプレイヤーレベル(GS2-Experience経由)に連動させることもでき、レベルが高いプレイヤーほどスタミナ上限が増えたり回復が早くなったりします。
ヘルプ画面や設定画面で、利用可能なスタミナの種類とルールを表示するのに使います。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。

Result

説明
itemsList<EzStaminaModel>スタミナモデルのリスト

実装例

    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    );
    var items = await domain.StaminaModelsAsync(
    ).ToListAsync();
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    );
    var it = domain.StaminaModels(
    );
    List<EzStaminaModel> items = new List<EzStaminaModel>();
    while (it.HasNext())
    {
        yield return it.Next();
        if (it.Error != null)
        {
            onError.Invoke(it.Error, null);
            break;
        }
        if (it.Current != null)
        {
            items.Add(it.Current);
        }
        else
        {
            break;
        }
    }
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    );
    const auto It = Domain->StaminaModels(
    );
    TArray<Gs2::UE5::Stamina::Model::FEzStaminaModelPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }
値の変更イベントハンドリング
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeStaminaModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeStaminaModels(callbackId);
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeStaminaModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeStaminaModels(callbackId);
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeStaminaModels(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    Domain->UnsubscribeStaminaModels(CallbackId);

apply

スタミナの時間経過による自然回復を適用する

最後の更新からの経過時間に基づいてスタミナがどれだけ回復したかを計算し、現在値に反映します。
スタミナは時間経過で自動的に回復します。たとえば、回復間隔が5分、回復量が1の場合、プレイヤーは5分ごとにスタミナが1ずつ最大値まで回復します。
通常、スタミナ値を読み取る際にサーバーが自動的に回復を計算します。このAPIを明示的に呼ぶのは、最新の回復値をサーバーに確実に書き込みたい場合です。たとえば、GS2のトランザクションで管理されていないアクションの前にスタミナが足りているか確認する場合に便利です。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
staminaNamestring
~ 128文字スタミナモデル名
このスタミナインスタンスの回復パラメータ、容量、テーブル参照を定義する StaminaModel の名前。
ユーザーごとのスタミナ状態を対応するモデル定義に紐づけます。
gameSessionGameSession
GameSession

Result

説明
itemEzStaminaスタミナ
staminaModelEzStaminaModelスタミナモデル

実装例

    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var result = await domain.ApplyAsync(
    );
    var item = await result.ModelAsync();
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var future = domain.ApplyFuture(
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    var future2 = future.Result.ModelFuture();
    yield return future2;
    if (future2.Error != null)
    {
        onError.Invoke(future2.Error, null);
        yield break;
    }
    var result = future2.Result;
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Stamina(
        "stamina-0001" // staminaName
    );
    const auto Future = Domain->Apply(
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

    // obtain changed values / result values
    const auto Future2 = Future->GetTask().Result()->Model();
    Future2->StartSynchronousTask();
    if (Future2->GetTask().IsError())
    {
        return Future2->GetTask().Error();
    }
    const auto Result = Future2->GetTask().Result();

consume

スタミナを使用(消費)する

プレイヤーの現在のスタミナから指定した量を差し引きます。
スタミナが足りない場合はエラーとなり、消費は行われません。スタミナがゼロ以下になることはありません。
たとえば、クエストに20スタミナ必要でプレイヤーが15しか持っていない場合、消費は失敗し「スタミナが足りません」というメッセージを表示できます。
注意: 多くの場合、スタミナの消費はGS2-QuestやGS2-Showcaseがクエスト開始や購入時に自動的に処理します。このAPIを直接呼ぶ必要があるのは、それらのフロー外でスタミナを消費したい場合のみです。たとえば、独自のミニゲームやトレーニング機能でスタミナを消費する場合に便利です。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
staminaNamestring
~ 128文字スタミナモデル名
このスタミナインスタンスの回復パラメータ、容量、テーブル参照を定義する StaminaModel の名前。
ユーザーごとのスタミナ状態を対応するモデル定義に紐づけます。
gameSessionGameSession
GameSession
consumeValueint
1 ~ 2147483646消費するスタミナ量

Result

説明
itemEzStaminaスタミナ
staminaModelEzStaminaModelスタミナモデル

Error

このAPIには特別な例外が定義されています。
GS2-SDK for GameEngine ではゲーム内でハンドリングが必要そうなエラーは一般的な例外から派生した特殊化した例外を用意することでハンドリングしやすくしています。
一般的なエラーの種類や、ハンドリング方法は こちら のドキュメントを参考にしてください。

基底クラス説明
InsufficientExceptionBadRequestExceptionスタミナの残量が不足しています

実装例

try {
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var result = await domain.ConsumeAsync(
        consumeValue: 50
    );
    var item = await result.ModelAsync();
} catch(Gs2.Gs2Stamina.Exception.InsufficientException e) {
    // Insufficient remaining stamina.
}
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var future = domain.ConsumeFuture(
        consumeValue: 50
    );
    yield return future;
    if (future.Error != null)
    {
        if (future.Error is Gs2.Gs2Stamina.Exception.InsufficientException)
        {
            // Insufficient remaining stamina.
        }
        onError.Invoke(future.Error, null);
        yield break;
    }
    var future2 = future.Result.ModelFuture();
    yield return future2;
    if (future2.Error != null)
    {
        onError.Invoke(future2.Error, null);
        yield break;
    }
    var result = future2.Result;
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Stamina(
        "stamina-0001" // staminaName
    );
    const auto Future = Domain->Consume(
        50 // consumeValue
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        auto e = Future->GetTask().Error();
        if (e->IsChildOf(Gs2::Stamina::Error::FInsufficientError::Class))
        {
            // Insufficient remaining stamina.
        }
        return false;
    }

    // obtain changed values / result values
    const auto Future2 = Future->GetTask().Result()->Model();
    Future2->StartSynchronousTask();
    if (Future2->GetTask().IsError())
    {
        return Future2->GetTask().Error();
    }
    const auto Result = Future2->GetTask().Result();

getStamina

特定の種別のプレイヤーの現在スタミナを取得する

特定のスタミナ種別について、プレイヤーの現在のスタミナ値をモデル定義とともに取得します。
レスポンスには、現在値、最大容量、回復間隔、回復量、オーバーフロー量が含まれます。
特定のスタミナゲージを表示するのに使います。たとえば、クエスト開始画面で「アクションスタミナ: 45/100」をプログレスバーとともに表示し、「全回復まで4時間35分」と表示するのに便利です。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
staminaNamestring
~ 128文字スタミナモデル名
このスタミナインスタンスの回復パラメータ、容量、テーブル参照を定義する StaminaModel の名前。
ユーザーごとのスタミナ状態を対応するモデル定義に紐づけます。
gameSessionGameSession
GameSession

Result

説明
itemEzStaminaスタミナ
staminaModelEzStaminaModelスタミナモデル

実装例

    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var item = await domain.ModelAsync();
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Stamina(
        "stamina-0001" // staminaName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }
値の変更イベントハンドリング
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Stamina(
        "stamina-0001" // staminaName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Stamina::Model::FStamina> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    Domain->Unsubscribe(CallbackId);

listStaminas

プレイヤーのスタミナ値一覧を取得する

プレイヤーの全スタミナ種別における現在のスタミナ値を取得します。
各エントリには、スタミナ種別ごとの現在値、最大容量、回復状況が含まれます。
スタミナの概要を表示するのに使います。たとえば、ホーム画面やステータスバーで「アクションスタミナ: 85/100(全回復まで1時間15分)」「アリーナチケット: 3/5(次の回復まで1時間30分)」のように表示するのに便利です。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
gameSessionGameSession
GameSession
pageTokenstring~ 1024文字データの取得を開始する位置を指定するトークン
limitint301 ~ 1000データの取得件数

Result

説明
itemsList<EzStamina>スタミナのリスト
nextPageTokenstringリストの続きを取得するためのページトークン

実装例

    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    var items = await domain.StaminasAsync(
    ).ToListAsync();
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    var it = domain.Staminas(
    );
    List<EzStamina> items = new List<EzStamina>();
    while (it.HasNext())
    {
        yield return it.Next();
        if (it.Error != null)
        {
            onError.Invoke(it.Error, null);
            break;
        }
        if (it.Current != null)
        {
            items.Add(it.Current);
        }
        else
        {
            break;
        }
    }
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    );
    const auto It = Domain->Staminas(
    );
    TArray<Gs2::UE5::Stamina::Model::FEzStaminaPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }
値の変更イベントハンドリング
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeStaminas(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeStaminas(callbackId);
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeStaminas(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeStaminas(callbackId);
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeStaminas(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    Domain->UnsubscribeStaminas(CallbackId);

setMaxValue

プレイヤーレベルに基づいてスタミナ上限を更新する

GS2-Experienceのプレイヤーの現在レベル(ランク)に基づいて、スタミナの最大容量を更新します。
スタミナモデルには「スタミナ最大値テーブル」を設定でき、プレイヤーレベルとスタミナ上限を対応させます。たとえば、レベル1=上限50、レベル10=上限80、レベル50=上限150のように設定できます。
このAPIを呼ぶと、署名付きGS2-Experienceステータスからプレイヤーの現在レベルを読み取り、テーブルから対応するスタミナ上限を参照して更新します。
プレイヤーがレベルアップした後にスタミナ上限を更新するのに使います。たとえば、レベルアップ時にこのAPIを呼び、スタミナ上限を80から85に増やすといった処理に便利です。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
staminaNamestring
~ 128文字スタミナモデル名
このスタミナインスタンスの回復パラメータ、容量、テーブル参照を定義する StaminaModel の名前。
ユーザーごとのスタミナ状態を対応するモデル定義に紐づけます。
gameSessionGameSession
GameSession
keyIdstring“grn:gs2:{region}:{ownerId}:key:default:key:default”~ 1024文字暗号鍵 GRN
signedStatusBodystring
~ 524288文字署名対象の GS2-Experience ステータスのボディ
signedStatusSignaturestring
~ 128文字GS2-Experience ステータスの署名

Result

説明
itemEzStaminaスタミナ
oldEzStaminaスタミナ
staminaModelEzStaminaModelスタミナモデル

実装例

    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var result = await domain.SetMaxValueAsync(
        signedStatusBody: "statusBody...",
        signedStatusSignature: "statusSignature...",
        keyId: "key-0001"
    );
    var item = await result.ModelAsync();
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var future = domain.SetMaxValueFuture(
        signedStatusBody: "statusBody...",
        signedStatusSignature: "statusSignature...",
        keyId: "key-0001"
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    var future2 = future.Result.ModelFuture();
    yield return future2;
    if (future2.Error != null)
    {
        onError.Invoke(future2.Error, null);
        yield break;
    }
    var result = future2.Result;
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Stamina(
        "stamina-0001" // staminaName
    );
    const auto Future = Domain->SetMaxValue(
        "statusBody...", // signedStatusBody
        "statusSignature...", // signedStatusSignature
        "key-0001" // keyId
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

    // obtain changed values / result values
    const auto Future2 = Future->GetTask().Result()->Model();
    Future2->StartSynchronousTask();
    if (Future2->GetTask().IsError())
    {
        return Future2->GetTask().Error();
    }
    const auto Result = Future2->GetTask().Result();

setRecoverInterval

プレイヤーレベルに基づいてスタミナ回復間隔を更新する

GS2-Experienceのプレイヤーの現在レベル(ランク)に基づいて、スタミナが回復する頻度を更新します。
スタミナモデルには「回復間隔テーブル」を設定でき、プレイヤーレベルと回復間隔(分)を対応させます。たとえば、レベル1=6分ごとに回復、レベル20=5分ごと、レベル50=3分ごとのように設定できます。
プレイヤーがレベルアップした後にスタミナ回復頻度を上げるのに使います。たとえば、プレイヤーがレベル20に達すると回復間隔が6分から5分に短縮され、より頻繁にスタミナが回復するようになります。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
staminaNamestring
~ 128文字スタミナモデル名
このスタミナインスタンスの回復パラメータ、容量、テーブル参照を定義する StaminaModel の名前。
ユーザーごとのスタミナ状態を対応するモデル定義に紐づけます。
gameSessionGameSession
GameSession
keyIdstring“grn:gs2:{region}:{ownerId}:key:default:key:default”~ 1024文字暗号鍵 GRN
signedStatusBodystring
~ 524288文字署名対象の GS2-Experience ステータスのボディ
signedStatusSignaturestring
~ 128文字GS2-Experience ステータスの署名

Result

説明
itemEzStaminaスタミナ
oldEzStaminaスタミナ
staminaModelEzStaminaModelスタミナモデル

実装例

    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var result = await domain.SetRecoverIntervalAsync(
        signedStatusBody: "statusBody...",
        signedStatusSignature: "statusSignature...",
        keyId: "key-0001"
    );
    var item = await result.ModelAsync();
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var future = domain.SetRecoverIntervalFuture(
        signedStatusBody: "statusBody...",
        signedStatusSignature: "statusSignature...",
        keyId: "key-0001"
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    var future2 = future.Result.ModelFuture();
    yield return future2;
    if (future2.Error != null)
    {
        onError.Invoke(future2.Error, null);
        yield break;
    }
    var result = future2.Result;
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Stamina(
        "stamina-0001" // staminaName
    );
    const auto Future = Domain->SetRecoverInterval(
        "statusBody...", // signedStatusBody
        "statusSignature...", // signedStatusSignature
        "key-0001" // keyId
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

    // obtain changed values / result values
    const auto Future2 = Future->GetTask().Result()->Model();
    Future2->StartSynchronousTask();
    if (Future2->GetTask().IsError())
    {
        return Future2->GetTask().Error();
    }
    const auto Result = Future2->GetTask().Result();

setRecoverValue

プレイヤーレベルに基づいてスタミナ回復量を更新する

GS2-Experienceのプレイヤーの現在レベル(ランク)に基づいて、1回あたりのスタミナ回復量を更新します。
スタミナモデルには「回復量テーブル」を設定でき、プレイヤーレベルと回復量を対応させます。たとえば、レベル1=1回復/間隔、レベル20=2回復、レベル50=3回復のように設定できます。
プレイヤーがレベルアップした後にスタミナ回復を速くするのに使います。たとえば、プレイヤーがレベル20に達すると回復量が1回復/間隔から2回復/間隔に増え、スタミナが2倍速く回復するようになります。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
staminaNamestring
~ 128文字スタミナモデル名
このスタミナインスタンスの回復パラメータ、容量、テーブル参照を定義する StaminaModel の名前。
ユーザーごとのスタミナ状態を対応するモデル定義に紐づけます。
gameSessionGameSession
GameSession
keyIdstring“grn:gs2:{region}:{ownerId}:key:default:key:default”~ 1024文字暗号鍵 GRN
signedStatusBodystring
~ 524288文字署名対象の GS2-Experience ステータスのボディ
signedStatusSignaturestring
~ 128文字GS2-Experience ステータスの署名

Result

説明
itemEzStaminaスタミナ
oldEzStaminaスタミナ
staminaModelEzStaminaModelスタミナモデル

実装例

    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var result = await domain.SetRecoverValueAsync(
        signedStatusBody: "statusBody...",
        signedStatusSignature: "statusSignature...",
        keyId: "key-0001"
    );
    var item = await result.ModelAsync();
    var domain = gs2.Stamina.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Stamina(
        staminaName: "stamina-0001"
    );
    var future = domain.SetRecoverValueFuture(
        signedStatusBody: "statusBody...",
        signedStatusSignature: "statusSignature...",
        keyId: "key-0001"
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    var future2 = future.Result.ModelFuture();
    yield return future2;
    if (future2.Error != null)
    {
        onError.Invoke(future2.Error, null);
        yield break;
    }
    var result = future2.Result;
    const auto Domain = Gs2->Stamina->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Stamina(
        "stamina-0001" // staminaName
    );
    const auto Future = Domain->SetRecoverValue(
        "statusBody...", // signedStatusBody
        "statusSignature...", // signedStatusSignature
        "key-0001" // keyId
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

    // obtain changed values / result values
    const auto Future2 = Future->GetTask().Result()->Model();
    Future2->StartSynchronousTask();
    if (Future2->GetTask().IsError())
    {
        return Future2->GetTask().Error();
    }
    const auto Result = Future2->GetTask().Result();