> For the complete documentation index, see [llms.txt](/llms.txt)

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

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



## モデル

### EzProbability

排出確率<br>

特定の景品の算出された排出確率を表します。確率は排出確率テーブル内の全景品の重みの合計に対するこの景品の重みから計算されます。ボックスガチャの場合、景品がボックスから排出されるにつれて確率は動的に変化します。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| prize | [EzDrawnPrize](#ezdrawnprize) |  | ✓ |  |  | 景品<br>この確率が対応する景品で、IDと入手アクションを含みます。 |
| rate | float |  | ✓ |  | 0 ~ 1.0 | 排出確率 (0.0〜1.0)<br>この景品が排出される確率で、0.0から1.0の値で表されます。この景品の重みをテーブル内の全景品の重みの合計で割って算出されます。 |

**関連するメソッド:**
listProbabilities - ガチャの現在の排出確率を取得する


---

### EzDrawnPrize

排出された景品<br>

抽選で排出された景品を表します。景品IDとユーザーに景品を付与するために実行された入手アクションを含みます。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| prizeId | string |  | ✓ |  |  ~ 36文字 | 景品ID<br>排出された景品のIDで、排出確率テーブル内の景品エントリに対応します。 |
| acquireActions | [List&lt;EzAcquireAction&gt;](#ezacquireaction) |  |  |  | 0 ~ 100 items | 入手アクションのリスト<br>この景品をユーザーに付与するために実行された入手アクションのリストです。 |


**関連するモデル:**
EzProbability - 排出確率



---

### EzBoxItems

ボックスアイテムリスト<br>

特定のユーザーと排出確率テーブルに対するボックスガチャの状態を記録します。ボックス内のすべての景品とその残数・初期数量のリストを含み、どの景品が排出済みでどの景品が残っているかをユーザーが確認できます。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| boxId | string |  | ※ |  |  ~ 1024文字 | ボックスGRN<br>※ サーバーが自動で設定 |
| prizeTableName | string |  | ✓ |  |  ~ 128文字 | 排出確率テーブル名<br>このボックスに関連付けられた排出確率テーブルの名前です。このレコードがどのボックスガチャに属するかを識別します。 |
| items | [List&lt;EzBoxItem&gt;](#ezboxitem) |  |  | [] | 0 ~ 1000 items | アイテムリスト<br>ボックス内のすべての景品とその残数・初期数量のリストです。各アイテムはその景品が最初にボックスに何個あったか、何個残っているかを示し、ボックスガチャの抽選進行状況の追跡を可能にします。 |

**関連するメソッド:**
describeBoxes - プレイヤーが引いたすべてのボックスガチャの状態を取得する
getBox - 特定のボックスガチャの状態を取得する
resetBox - ボックスガチャを初期状態にリセットする


---

### EzLotteryModel

抽選モデル<br>

抽選モデルは排出方式や排出テーブルの参照方法を定義するエンティティです。<br>

排出方式は2種類用意されており、通常抽選は毎回一定の確率で抽選をする方式、Box抽選は箱の中にあらかじめ定義された数量の景品が入っており、抽選するたびに箱から景品を取り出していく抽選方式です。<br>

抽選処理を行うにあたって、排出確率テーブルを利用しますが、<br>
GS2-Script を使用すれば複数回抽選を実行した際に排出確率テーブルを一部だけ異なるテーブルに差し替えることができます。<br>
この仕組みを利用することで、10連ガチャで1回だけ異なる抽選確率テーブルを適用することが可能となります。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| name | string |  | ✓ |  |  ~ 128文字 | 抽選モデル名<br>抽選モデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| metadata | string |  |  |  |  ~ 2048文字 | メタデータ<br>メタデータには任意の値を設定できます。<br>これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。 |
| mode | 文字列列挙型<br>enum {<br>"normal",<br>"box"<br>}<br> |  | ✓ |  |  | 抽選モード<br>景品の抽選方式を選択します。"normal" は毎回一定の確率で抽選を行います（景品は繰り返し排出されます）。"box" は仮想的な箱にあらかじめ定義された数量の景品を入れ、抽選するたびに箱から景品を取り出します（すべての景品が最終的に排出されることが保証されます）。"normal": 通常抽選 / "box": ボックス抽選 /  |
| prizeTableName | string | {method} == "prize_table" | ✓※ |  |  ~ 128文字 | 排出確率テーブルの名前<br>この抽選モデルで使用する排出確率テーブルの名前です。抽選方法が "prize_table" の場合に必須です。<br><br>※ method が "prize_table" であれば 必須 |

**関連するメソッド:**
getLotteryModel - 特定のガチャ（抽選）の詳細を取得する
listLotteryModels - ガチャ（抽選）の設定一覧を取得する


---

### EzAcquireAction

入手アクション

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 入手アクションで実行するアクションの種類 |
| request | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |


**関連するモデル:**
EzDrawnPrize - 排出された景品
EzBoxItem - ボックスアイテム



---

### EzBoxItem

ボックスアイテム<br>

ボックスガチャ内の単一の景品タイプを表し、ボックス内の初期数量、残数量、および排出時に実行される入手アクションを示します。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| prizeId | string |  | ✓ |  |  ~ 128文字 | 景品ID<br>このボックスアイテムが対応する排出確率テーブル内の景品IDです。 |
| acquireActions | [List&lt;EzAcquireAction&gt;](#ezacquireaction) |  |  | [] | 0 ~ 100 items | 入手アクションのリスト<br>この景品がボックスから排出された時に実行する入手アクションのリストです。 |
| remaining | int |  | ✓ |  | 0 ~ 2147483646 | 残り数量<br>ボックス内に残っているこの景品の数です。この景品が排出されるたびに1つ減少します。 |
| initial | int |  | ✓ |  | 0 ~ 2147483646 | 初期数量<br>最初にボックスに入れられたこの景品の数です。残数と合わせてどれだけ排出されたかを計算するために使用されます。 |


**関連するモデル:**
EzBoxItems - ボックスアイテムリスト



---

### EzConfig

コンフィグ設定<br>

トランザクションの変数に適用する設定値

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| key | string |  | ✓ |  |  ~ 64文字 | 名前 |
| value | string |  |  |  |  ~ 51200文字 | 値 |


---

### EzVerifyActionResult

検証アクションの実行結果

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 検証アクションで実行するアクションの種類 |
| verifyRequest | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
| statusCode | int |  |  |  | 0 ~ 999 | ステータスコード |
| verifyResult | string |  |  |  |  ~ 1048576文字 | 結果内容 |


**関連するモデル:**
EzTransactionResult - トランザクション実行結果



---

### EzConsumeActionResult

消費アクションの実行結果

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 消費アクションで実行するアクションの種類 |
| consumeRequest | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
| statusCode | int |  |  |  | 0 ~ 999 | ステータスコード |
| consumeResult | string |  |  |  |  ~ 1048576文字 | 結果内容 |


**関連するモデル:**
EzTransactionResult - トランザクション実行結果



---

### EzAcquireActionResult

入手アクションの実行結果

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 入手アクションで実行するアクションの種類 |
| acquireRequest | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
| statusCode | int |  |  |  | 0 ~ 999 | ステータスコード |
| acquireResult | string |  |  |  |  ~ 1048576文字 | 結果内容 |


**関連するモデル:**
EzTransactionResult - トランザクション実行結果



---

### EzTransactionResult

トランザクション実行結果<br>

サーバーサイドでのトランザクションの自動実行機能を利用して実行されたトランザクションの実行結果

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| transactionId | string |  | ✓ |  | 36 ~ 36文字 | トランザクションID |
| verifyResults | [List&lt;EzVerifyActionResult&gt;](#ezverifyactionresult) |  |  |  | 0 ~ 10 items | 検証アクションの実行結果リスト |
| consumeResults | [List&lt;EzConsumeActionResult&gt;](#ezconsumeactionresult) |  |  | [] | 0 ~ 10 items | 消費アクションの実行結果リスト |
| acquireResults | [List&lt;EzAcquireActionResult&gt;](#ezacquireactionresult) |  |  | [] | 0 ~ 100 items | 入手アクションの実行結果リスト |


---

## メソッド

### describeBoxes

プレイヤーが引いたすべてのボックスガチャの状態を取得する<br>

ネームスペース内のすべてのボックスモードのガチャについて、ボックスの状態を取得します。<br>
各エントリには、景品ごとの排出済み数と箱の中の残り数が含まれます。<br>

すべてのボックスガチャの概要画面を作る際に使います。たとえば「初心者ボックス: 15/50排出済み」「プレミアムボックス: 3/100排出済み」のように進捗バー付きで表示できます。<br>

このAPIはボックスモードのガチャにのみ適用されます。通常ガチャは景品が無制限に排出されるためボックスの状態はありません。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| gameSession | GameSession | | ✓|  |  | GameSession |
| pageToken | string |  | |  |  ~ 1024文字 | データの取得を開始する位置を指定するトークン |
| limit | int |  | | 30 | 1 ~ 1000 | データの取得件数 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzBoxItems&gt;](#ezboxitems) | ボックス状態のリスト|
| nextPageToken | string | リストの続きを取得するためのページトークン|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    var items = await domain.BoxesAsync(
    ).ToListAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    var it = domain.Boxes(
    );
    List<EzBoxItems> items = new List<EzBoxItems>();
    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;
        }
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    );
    const auto It = Domain->Boxes(
    );
    TArray<Gs2::UE5::Lottery::Model::FEzBoxItemsPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


---

### getBox

特定のボックスガチャの状態を取得する<br>

排出確率テーブル名を指定して、特定のボックスの現在の状態を取得します。<br>
レスポンスにはボックス内の各景品、排出済み数、残り数が含まれます。<br>

ボックスガチャの詳細画面を表示する際に使います。たとえば、残り数付きで全景品を一覧表示できます:<br>
「SSR 伝説の剣: 0/1排出済み、SR 魔法の杖: 2/5排出済み、R ポーション: 10/30排出済み、...」<br>

プレイヤーがもう1回引くかどうかを判断するために、箱の中に何が残っているかを確認できます。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| prizeTableName | string |  | ✓|  |  ~ 128文字 | 排出確率テーブル名 |
| gameSession | GameSession | | ✓|  |  | GameSession |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzBoxItems](#ezboxitems) | ボックス内の景品と残数の情報|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).BoxItems(
        prizeTableName: "prizeTable-0001"
    );
    var item = await domain.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).BoxItems(
        prizeTableName: "prizeTable-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->BoxItems(
        "prizeTable-0001" // prizeTableName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).BoxItems(
        prizeTableName: "prizeTable-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).BoxItems(
        prizeTableName: "prizeTable-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->BoxItems(
        "prizeTable-0001" // prizeTableName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Lottery::Model::FBoxItems> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

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

```


**⚠️ Warning**

このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。

---

### resetBox

ボックスガチャを初期状態にリセットする<br>

ボックスをリセットして、すべての景品を元の数量に戻します。プレイヤーがまだ一度も引いていない状態に戻ります。<br>
リセット後、すべての景品が再び排出可能になります。<br>

ボックスガチャのUIで「ボックスリセット」ボタンを実装する際に使います。プレイヤーが目当ての景品を引いた後にボックスをリセットして、新しいボックスで再挑戦するような使い方ができます。<br>
たとえば、SSRアイテムを引いた後にボックスをリセットして、新品のボックスからもう一度SSRを狙うといった流れです。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| prizeTableName | string |  | ✓|  |  ~ 128文字 | 排出確率テーブル名 |
| gameSession | GameSession | | ✓|  |  | GameSession |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzBoxItems](#ezboxitems) | ボックス内の景品と初期数量の情報|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).BoxItems(
        prizeTableName: "prizeTable-0001"
    );
    var result = await domain.ResetBoxAsync(
    );
    var item = await result.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).BoxItems(
        prizeTableName: "prizeTable-0001"
    );
    var future = domain.ResetBoxFuture(
    );
    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;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->BoxItems(
        "prizeTable-0001" // prizeTableName
    );
    const auto Future = Domain->ResetBox(
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

    // 変更された値 / 結果の値を取得
    const auto Future2 = Future->GetTask().Result()->Model();
    Future2->StartSynchronousTask();
    if (Future2->GetTask().IsError())
    {
        return Future2->GetTask().Error();
    }
    const auto Result = Future2->GetTask().Result();

```


---

### listProbabilities

ガチャの現在の排出確率を取得する<br>

指定されたガチャのすべての景品と、その現在の排出確率を取得します。<br>
多くのゲームでプレイヤーに表示する「排出確率」「ガチャ詳細」画面を作る際に使います。<br>

返される確率はガチャのモードによって異なります:<br>
- 通常ガチャ: すべてのプレイヤーに対して常に同じ確率が返されます（例: SSR: 3%、SR: 15%、R: 82%）。<br>
- ボックスガチャ: プレイヤーのボックスの現在の状態を反映した確率が返されます。景品が排出されて箱から取り除かれると、残りの景品の確率がそれに応じて変化します。たとえば、唯一のSSRが既に排出済みなら、SSRの確率は0%になります。<br>

このAPIは、ガチャの排出確率表示義務への対応にも利用できます。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| lotteryName | string |  | ✓|  |  ~ 128文字 | 抽選モデル名<br>抽選モデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| gameSession | GameSession | | ✓|  |  | GameSession |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzProbability&gt;](#ezprobability) | 排出確率リスト|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Lottery(
        lotteryName: "lottery-0001"
    );
    var items = await domain.ProbabilitiesAsync(
    ).ToListAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Lottery(
        lotteryName: "lottery-0001"
    );
    var it = domain.Probabilities(
    );
    List<EzProbability> items = new List<EzProbability>();
    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;
        }
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Lottery(
        "lottery-0001" // lotteryName
    );
    const auto It = Domain->Probabilities(
    );
    TArray<Gs2::UE5::Lottery::Model::FEzProbabilityPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Lottery(
        lotteryName: "lottery-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeProbabilities(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeProbabilities(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Lottery(
        lotteryName: "lottery-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeProbabilities(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeProbabilities(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Lottery(
        "lottery-0001" // lotteryName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeProbabilities(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

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

```


**⚠️ Warning**

このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。

---

### getLotteryModel

特定のガチャ（抽選）の詳細を取得する<br>

抽選名を指定して、1つの抽選モデルの詳細を取得します。<br>
ガチャの詳細画面を表示する際に使います。抽選モード（通常/ボックス）、関連する排出確率テーブル名などの設定情報を確認できます。<br>

たとえば、プレイヤーが「引く」ボタンをタップする前に、そのガチャが通常ガチャなのかボックスガチャなのかを表示したり、ListProbabilities と組み合わせて現在の排出確率を表示したりできます。

#### Request

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

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzLotteryModel](#ezlotterymodel) | 抽選モデル|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).LotteryModel(
        lotteryName: "lotteryModel-0001"
    );
    var item = await domain.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).LotteryModel(
        lotteryName: "lotteryModel-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    )->LotteryModel(
        "lotteryModel-0001" // lotteryName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).LotteryModel(
        lotteryName: "lotteryModel-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    ).LotteryModel(
        lotteryName: "lotteryModel-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    )->LotteryModel(
        "lotteryModel-0001" // lotteryName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Lottery::Model::FLotteryModel> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

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

```


**⚠️ Warning**

このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。

---

### listLotteryModels

ガチャ（抽選）の設定一覧を取得する<br>

ネームスペースに設定されているすべての抽選モデルを取得します。<br>
各モデルは1つのガチャ（抽選）を定義しており、抽選モード、参照する排出確率テーブル、景品の選出方法が含まれます。<br>

抽選モードは2種類あります:<br>
- 通常抽選: 毎回固定の確率テーブルに基づいて抽選します。同じ景品が何度でも排出されます。一般的なガチャの動作です。<br>
- ボックス抽選: あらかじめ決められた数量の景品が仮想的な箱に入っており、抽選するたびに箱から景品を1つ取り出します。設定された数量以上に同じ景品は排出されず、箱が空になるとすべての景品を獲得したことになります。<br>

ガチャ一覧画面を表示する際に使います。たとえば「プレミアムガチャ」「武器ガチャ」「ステップアップガチャ」などの一覧です。

#### Request

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

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzLotteryModel&gt;](#ezlotterymodel) | 抽選モデルのリスト|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    );
    var items = await domain.LotteryModelsAsync(
    ).ToListAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Lottery.Namespace(
        namespaceName: "namespace-0001"
    );
    var it = domain.LotteryModels(
    );
    List<EzLotteryModel> items = new List<EzLotteryModel>();
    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;
        }
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    );
    const auto It = Domain->LotteryModels(
    );
    TArray<Gs2::UE5::Lottery::Model::FEzLotteryModelPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


##### 値の変更イベントハンドリング




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

    // イベントハンドリングを停止
    domain.UnsubscribeLotteryModels(callbackId);

```

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

    // イベントハンドリングを停止
    domain.UnsubscribeLotteryModels(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Lottery->Namespace(
        "namespace-0001" // namespaceName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeLotteryModels(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

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

```


**⚠️ Warning**

このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。

---



