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

ゲームエンジン向け GS2-SDK の モデルの仕様 と 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 のイベントを関連づけることができ、イベントの開催期間中のみバフを適用するような設定も可能です。

必須デフォルト値の制限説明
namestring~ 128文字バフエンティティ名
metadatastring~ 2048文字メタデータ
targetTypeenum {
    “model”,
    “action”
}
~ 128文字バフをかける対象の種類
targetModelEzBuffTargetModel{targetType} == “model”バフをかける対象のモデル
targetActionEzBuffTargetAction{targetType} == “action”バフをかける対象のアクション
expressionenum {
    “rate_add”,
    “mul”,
    “value_add”
}
~ 128文字バフの適用タイプ
applyPeriodScheduleEventIdstring~ 1024文字バフを適用するイベントの開催期間

targetType に指定する列挙型の定義

定義説明
modelモデル
actionアクション

expression に指定する列挙型の定義

定義説明
rate_addRate Add
mulMul
value_addValue Add

EzBuffTargetModel

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

必須デフォルト値の制限説明
targetModelNameenum {
"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文字バフを適用するモデルの種類
targetFieldNamestring~ 64文字バフの適用対象フィールド名
conditionGrnsList<EzBuffTargetGrn>1 ~ 10 itemsバフの適用条件GRNのリスト
ratefloat~ 1000000レート

EzBuffTargetAction

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

必須デフォルト値の制限説明
targetActionNameenum {
"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文字バフを適用するアクションの種類
targetFieldNamestring~ 64文字バフの適用対象フィールド名
conditionGrnsList<EzBuffTargetGrn>1 ~ 10 itemsバフの適用条件GRNのリスト
ratefloat~ 1000000レート

EzBuffTargetGrn

バフを適用するリソースのGRNパターン

必須デフォルト値の制限説明
targetModelNamestring~ 64文字バフの適用条件のモデル名
targetGrnstring~ 1024文字バフの適用条件GRN

メソッド

getBuffEntryModel

バフモデル情報を取得

Request

必須デフォルト値の制限説明
namespaceNamestring~ 128文字ネームスペース名
buffEntryNamestring~ 128文字バフエンティティ名

Result

説明
itemEzBuffEntryModelバフモデル

実装例

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);

listBuffEntryModels

バフモデル情報の一覧を取得

Request

必須デフォルト値の制限説明
namespaceNamestring~ 128文字ネームスペース名

Result

説明
itemsList<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);

applyBuff

交換を実行

Request

必須デフォルト値の制限説明
namespaceNamestring~ 128文字ネームスペース名
accessTokenstring~ 128文字アクセストークン

Result

説明
itemsList<EzBuffEntryModel>適用したバフモデルのリスト
newContextStackstringバフの適用状況を記録したコンテキスト

実装例

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();