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” | バフをかける対象のモデル | ||
targetAction | EzBuffTargetAction | {targetType} == “action” | バフをかける対象のアクション | ||
expression | enum { “rate_add”, “mul”, “value_add” } | ✓ | ~ 128文字 | バフの適用タイプ | |
applyPeriodScheduleEventId | string | ~ 1024文字 | バフを適用するイベントの開催期間 |
targetType に指定する列挙型の定義
定義 | 説明 |
---|---|
model | モデル |
action | アクション |
expression に指定する列挙型の定義
定義 | 説明 |
---|---|
rate_add | Rate Add |
mul | Mul |
value_add | Value Add |
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 | ✓ | ~ 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 | ✓ | ~ 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文字 | ユーザーID |
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();