GS2-Buff SDK for Game Engine API リファレンス
モデル
EzBuffEntryModel
バフモデル
バフの適用量は BuffEntryModel で管理し、特定のエントリーに対して複数の BuffEntryModel を関連づけることが可能です。
BuffEntryModel の適用順番は BuffEntryModel の priority で管理し、priority の値が小さいほど優先度が高くなります。
バフの適用方式は2種類存在し「Add」と「Mul」があります。
Add はバフの適用レートに加算する命令で、Mul はバフの適用レートに乗算する命令です。
デフォルトのレートは 1.0 で、Add 0.2 と設定するとバフの適用レートが 1.2 になります。
Mul 0.5 と設定するとバフの適用レートが 0.5 倍になります。
BuffEntryModel には GS2-Schedule のイベントを関連づけることができ、イベントの開催期間中のみバフを適用するような設定も可能です。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| name | string | ✓ | ~ 128文字 | バフエントリー名 | ||||||||||
| metadata | string | ~ 2048文字 | メタデータ | |||||||||||
| targetType | 文字列列挙型 enum { “model”, “action” } | ✓ | ~ 128文字 | バフをかける対象の種類 
 | ||||||||||
| targetModel | EzBuffTargetModel | {targetType} == “model” | ✓ | バフをかける対象のモデル targetType が “model” であれば 必須 | ||||||||||
| targetAction | EzBuffTargetAction | {targetType} == “action” | ✓ | バフをかける対象のアクション targetType が “action” であれば 必須 | ||||||||||
| expression | 文字列列挙型 enum { “rate_add”, “mul”, “value_add” } | ✓ | ~ 128文字 | バフの適用タイプ 
 | ||||||||||
| applyPeriodScheduleEventId | string | ~ 1024文字 | バフを適用するイベントの開催期間 | 
関連するメソッド
EzBuffTargetModel
バフを適用する対象のモデル
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| targetModelName | 文字列列挙型 enum { "Gs2Exchange:RateModel", "Gs2Exchange:IncrementalRateModel", "Gs2Experience:Status", "Gs2Formation:Mold", "Gs2Idle:CategoryModel", "Gs2Idle:Status", "Gs2Inventory:Inventory", "Gs2LoginReward:BonusModel", "Gs2Mission:MissionTaskModel", "Gs2Quest:QuestModel", "Gs2Showcase:DisplayItem", "Gs2Showcase:RandomDisplayItemModel", "Gs2SkillTree:NodeModel", "Gs2Stamina:Stamina", } | ✓ | ~ 128文字 | バフを適用するモデルの種類 | ||
| targetFieldName | string | ✓ | ~ 64文字 | バフの適用対象フィールド名 | ||
| conditionGrns | List<EzBuffTargetGrn> | ✓ | 1 ~ 10 items | バフの適用条件GRNのリスト | ||
| rate | float | ✓ | 0 ~ 1000000 | レート | 
関連するモデル
EzBuffTargetAction
バフを適用する対象のアクション
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| targetActionName | 文字列列挙型 enum { "Gs2Experience:AddExperienceByUserId", "Gs2Experience:SubExperience", "Gs2Experience:SubExperienceByUserId", "Gs2Inventory:AcquireItemSetByUserId", "Gs2Inventory:ConsumeItemSet", "Gs2Inventory:ConsumeItemSetByUserId", "Gs2Inventory:AcquireSimpleItemsByUserId", "Gs2Inventory:ConsumeSimpleItems", "Gs2Inventory:ConsumeSimpleItemsByUserId", "Gs2Inventory:AcquireBigItemByUserId", "Gs2Inventory:ConsumeBigItem", "Gs2Inventory:ConsumeBigItemByUserId", "Gs2Limit:CountUp", "Gs2Limit:CountUpByUserId", "Gs2Money:DepositByUserId", "Gs2Money:Withdraw", "Gs2Money:WithdrawByUserId", "Gs2Money2:DepositByUserId", "Gs2Money2:Withdraw", "Gs2Money2:WithdrawByUserId", "Gs2Stamina:ConsumeStamina", "Gs2Stamina:ConsumeStaminaByUserId", "Gs2Stamina:RecoverStaminaByUserId", } | ✓ | ~ 128文字 | バフを適用するアクションの種類 | ||
| targetFieldName | string | ✓ | ~ 64文字 | バフの適用対象フィールド名 | ||
| conditionGrns | List<EzBuffTargetGrn> | ✓ | 1 ~ 10 items | バフの適用条件GRNのリスト | ||
| rate | float | ✓ | 0 ~ 1000000 | レート | 
関連するモデル
EzBuffTargetGrn
バフを適用するリソースのGRNパターン
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| targetModelName | string | ✓ | ~ 64文字 | バフの適用条件のモデル名 | ||
| targetGrn | string | ✓ | ~ 1024文字 | バフの適用条件GRN | 
関連するモデル
メソッド
getBuffEntryModel
バフモデル情報を取得
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | ||
| buffEntryName | string | ✓ | ~ 128文字 | バフエントリー名 | 
Result
| 型 | 説明 | |
|---|---|---|
| item | EzBuffEntryModel | バフエントリーモデル | 
実装例
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );
    var item = await domain.ModelAsync();    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;    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;
    }値の変更イベントハンドリング
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );
    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;    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);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
listBuffEntryModels
バフモデル情報の一覧を取得
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | 
Result
| 型 | 説明 | |
|---|---|---|
| items | List<EzBuffEntryModel> | バフエントリーモデルのリスト | 
実装例
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    );
    var items = await domain.BuffEntryModelsAsync(
    ).ToListAsync();    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;
        }
    }    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());
    }値の変更イベントハンドリング
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeBuffEntryModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );
    // イベントハンドリングを停止
    domain.UnsubscribeBuffEntryModels(callbackId);    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;
        }
    }    const auto Domain = Gs2->Buff->Namespace(
        "namespace-0001" // namespaceName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeBuffEntryModels(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );
    // イベントハンドリングを停止
    Domain->UnsubscribeBuffEntryModels(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
applyBuff
交換を実行
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | ||
| accessToken | string | ✓ | ~ 128文字 | アクセストークン | 
Result
| 型 | 説明 | |
|---|---|---|
| items | List<EzBuffEntryModel> | 適用したバフモデルのリスト | 
| newContextStack | string | バフの適用状況を記録したコンテキスト | 
実装例
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Buff(
    );
    var result = await domain.ApplyBuffAsync(
    );
    var item = await result.ModelAsync();    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;    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();