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

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

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



## モデル

### EzBuffEntryModel

バフエントリーモデル<br>

バフの適用量はバフエントリーモデルで管理し、同一の対象に対して複数のバフエントリーモデルを関連づけることが可能です。<br>
バフエントリーモデルの適用順番はバフエントリーモデルの `priority` で管理し、`priority` の値が小さいほど優先度が高くなります。<br>

バフの適用方式は3種類存在し「Rate Add」、「Mul」と「Value Add」があります。<br>
Rate Add はバフの適用レートに加算する命令、Mul はバフの適用レートに乗算する命令です。<br>
Value Add はバフの補正計算後の値に加算を行う命令です。<br>
たとえば、デフォルトのレートが 1.0 で、Rate Add 0.2 と設定するとバフの適用レートは 1.2 になります。<br>
Mul 0.5 と設定するとバフの適用レートは 0.5 倍になります。<br>

バフエントリーモデルには GS2-Schedule のイベントを関連づけることができ、イベントの開催期間中のみバフを適用するような設定も可能です。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| name | string |  | ✓ |  |  ~ 128文字 | バフエントリーモデル名<br>バフエントリーモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| metadata | string |  |  |  |  ~ 2048文字 | メタデータ<br>メタデータには任意の値を設定できます。<br>これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。 |
| targetType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"model",<br>&nbsp;&nbsp;"action"<br>}<br> |  | ✓ |  |  | バフを適用する対象の種類<br>バフをモデルのフィールド値に適用するか、アクションのパラメータに適用するかを指定します。「Model」は GS2 リソースモデルのフィールドを対象とし、「Action」は GS2 アクション（例：入手量や消費量）のパラメータを対象とします。"model": モデル / "action": アクション /  |
| targetModel | [EzBuffTargetModel](#ezbufftargetmodel) | {targetType} == "model" | ✓※ |  |  | バフを適用する対象のモデル<br>バフを適用する GS2 リソースモデルとフィールドを指定します。モデル名、フィールド名、対象リソースを特定する条件GRN、およびレート値が含まれます。<br><br>※ targetType が "model" であれば 必須 |
| targetAction | [EzBuffTargetAction](#ezbufftargetaction) | {targetType} == "action" | ✓※ |  |  | バフを適用する対象のアクション<br>バフを適用する GS2 アクションとパラメータを指定します。アクション名、フィールド名、対象リソースを特定する条件GRN、およびレート値が含まれます。<br><br>※ targetType が "action" であれば 必須 |
| expression | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"rate_add",<br>&nbsp;&nbsp;"mul",<br>&nbsp;&nbsp;"value_add"<br>}<br> |  | ✓ |  |  | バフの適用タイプ<br>バフ値を対象にどのように適用するかを指定します。「Rate Add」は補正レートに加算（例: 1.0 + 0.2 = 1.2）、「Mul」は補正レートに乗算（例: レート * 0.5）、「Value Add」はレートベースの補正計算後の値に直接加算します。"rate_add": 補正レートに加算 / "mul": 補正レートに乗算 / "value_add": 値を直接加算（モデルやアクションの数値のみ） /  |
| applyPeriodScheduleEventId | string |  |  |  |  ~ 1024文字 | バフを適用するイベントの開催期間GRN<br>このバフの有効期間を制御する GS2-Schedule イベントの GRN です。指定した場合、イベントの開催期間中のみバフが適用されます。未指定の場合、バフは常に有効です。 |

**関連するメソッド:**
getBuffEntryModel - 名前を指定してバフ定義を取得する
listBuffEntryModels - バフエントリーモデルの一覧を取得する
applyBuff - プレイヤーにバフを適用する


---

### EzBuffTargetModel

バフを適用する対象のモデル<br>

バフ適用の対象となる GS2 リソースモデルとフィールドを定義します。どのモデルのどのフィールド値をバフで変更するかを指定し、対象リソースインスタンスを特定する条件GRNと適用するレート値を含みます。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| targetModelName | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | バフを適用するモデルの種類 |
| targetFieldName | string |  | ✓ |  |  ~ 64文字 | バフの適用対象フィールド名<br>バフによって値が変更される対象モデル上の数値フィールド名です。例えば、経験値や攻撃力などの数値属性を表すフィールドが対象となります。 |
| conditionGrns | [List&lt;EzBuffTargetGrn&gt;](#ezbufftargetgrn) |  | ✓ |  | 1 ~ 10 items | バフの適用条件GRNのリスト<br>バフ適用の対象リソースインスタンスを特定する GRN パターンのリストです。複数の GRN を組み合わせて、リソースを正確に特定する複合条件を形成します。 |
| rate | float |  | ✓ |  | 0 ~ 1000000 | 補正レート<br>適用されるバフ値です。適用タイプにより意味が異なります。「Rate Add」の場合は基本レートに加算、「Mul」の場合は現在のレートに乗算、「Value Add」の場合はレート計算後のフィールド値に直接加算されます。 |


**関連するモデル:**
EzBuffEntryModel - バフエントリーモデル



---

### EzBuffTargetAction

バフを適用する対象のアクション<br>

バフ適用の対象となる GS2 アクションとパラメータを定義します。どのアクションのどのパラメータをバフで変更するかを指定し、対象リソースインスタンスを特定する条件GRNと適用するレート値を含みます。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| targetActionName | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | バフを適用するアクションの種類 |
| targetFieldName | string |  | ✓ |  |  ~ 64文字 | バフの適用対象フィールド名<br>バフによって値が変更される対象アクション上の数値パラメータ名です。例えば、入手数、消費量、報酬数量などを表すパラメータが対象となります。 |
| conditionGrns | [List&lt;EzBuffTargetGrn&gt;](#ezbufftargetgrn) |  | ✓ |  | 1 ~ 10 items | バフの適用条件GRNのリスト<br>バフ適用の対象リソースインスタンスを特定する GRN パターンのリストです。複数の GRN を組み合わせて、リソースを正確に特定する複合条件を形成します。 |
| rate | float |  | ✓ |  | 0 ~ 1000000 | 補正レート<br>適用されるバフ値です。適用タイプにより意味が異なります。「Rate Add」の場合は基本レートに加算、「Mul」の場合は現在のレートに乗算、「Value Add」の場合はレート計算後のパラメータ値に直接加算されます。 |


**関連するモデル:**
EzBuffEntryModel - バフエントリーモデル



---

### EzBuffTargetGrn

バフ適用条件となるリソースのGRNパターン<br>

バフが有効となるリソースインスタンスを絞り込むための条件 GRN パターンです。<br>
targetModelName で GS2サービスモデルの種別を特定し、targetGrn にはランタイムで解決されるコンテキスト変数（{region}、{ownerId}）を含めることができます。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| targetModelName | string |  | ✓ |  |  ~ 64文字 | バフの適用条件のモデル名<br>条件GRNを解決するために使用される GS2 サービスモデルの名前です。GRN パターンがどのサービスのリソースモデルを参照するかを特定します。 |
| targetGrn | string |  | ✓ |  |  ~ 1024文字 | バフの適用条件GRN<br>ランタイムで解決されるコンテキストプレースホルダー（例：{region}、{ownerId}）を含む GRN テンプレートです。バフの対象となる特定のリソースインスタンスを特定するために使用されます。 |


**関連するモデル:**
EzBuffTargetModel - バフを適用する対象のモデル
EzBuffTargetAction - バフを適用する対象のアクション



---

## メソッド

### getBuffEntryModel

名前を指定してバフ定義を取得する<br>

名前を指定して、バフエントリーモデルを1件取得します。<br>
取得できる情報には、適用方法（Rate Add / Mul / Value Add）、バフの対象、<br>
優先度、および設定されている場合はバフが有効になるイベント期間が含まれます。<br>

特定のバフの効果内容や有効期間などの詳細を表示する際に使います。

#### Request

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

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzBuffEntryModel](#ezbuffentrymodel) | バフエントリーモデル|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );
    var item = await domain.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Buff->Namespace(
        "namespace-0001" // namespaceName
    )->BuffEntryModel(
        "character-level" // buffEntryName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


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




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

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

```

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

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

```

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

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

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

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

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

---

### listBuffEntryModels

バフエントリーモデルの一覧を取得する<br>

このネームスペースに登録されているすべてのバフエントリーモデルを取得します。<br>
各バフエントリーモデルは、1つのバフ効果を定義しています。<br>
対象（モデルのステータスやアクションのパラメータ）、適用方法（Rate Add / Mul / Value Add）、優先度、<br>
そしてオプションでバフが有効になるイベント期間が含まれます。<br>

ゲームUIでバフの一覧を表示したり、現在設定されているバフを確認する際に使います。

#### Request

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

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzBuffEntryModel&gt;](#ezbuffentrymodel) | バフエントリーモデルのリスト|

#### 実装例




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

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    );
    var it = domain.BuffEntryModels(
    );
    List<EzBuffEntryModel> items = new List<EzBuffEntryModel>();
    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->Buff->Namespace(
        "namespace-0001" // namespaceName
    );
    const auto It = Domain->BuffEntryModels(
    );
    TArray<Gs2::UE5::Buff::Model::FEzBuffEntryModelPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


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




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

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

```

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

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

```

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

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

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

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

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

---

### applyBuff

プレイヤーにバフを適用する<br>

このネームスペースに登録されたすべてのバフ設定を評価し、条件に合うものをプレイヤーに適用します。<br>
たとえば「イベント中は経験値2倍」「特定アイテム所持時にゴールドドロップ率+10%」といったバフを設定できます。<br>

バフの適用方法は3種類あります:<br>
- **Rate Add**: 倍率に加算する（例: 基本 1.0 + 0.2 = 1.2倍）<br>
- **Mul**: 現在の倍率に乗算する（例: 倍率 × 0.5）<br>
- **Value Add**: 倍率計算後の値に固定値を加算する<br>

GS2-Schedule のイベントに紐づけたバフは、そのイベント開催中のみ有効になります。<br>
複数のバフは優先度順に適用されます（値が小さいほど優先）。

#### Request

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

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzBuffEntryModel&gt;](#ezbuffentrymodel) | 適用したバフのリスト|
| newContextStack | string | バフの適用状況を記録したコンテキスト|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Buff(
    );
    var result = await domain.ApplyBuffAsync(
    );
    var item = await result.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Buff(
    );
    var future = domain.ApplyBuffFuture(
    );
    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->Buff->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Buff(
    );
    const auto Future = Domain->ApplyBuff(
    );
    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();

```


---



