GS2-Stamina SDK for Game Engine API リファレンス
モデル
EzStaminaModel
スタミナモデル
スタミナの最大値や、回復間隔、回復量といったパラメータを定義できます。
GS2-Experience と連動させて、最大値や回復量をコントロールすることもできます。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | スタミナモデル名 | |
metadata | string | ~ 128文字 | メタデータ | ||
recoverIntervalMinutes | int | ✓ | ~ 2147483646 | スタミナを回復する速度(分) | |
recoverValue | int | ✓ | 1 | ~ 2147483646 | 時間経過後に回復する量 |
initialCapacity | int | ✓ | ~ 2147483646 | スタミナの最大値の初期値 | |
isOverflow | bool | ✓ | 最大値を超えて回復するか | ||
maxCapacity | int | {isOverflow} | ~ 2147483646 | 溢れた状況での最大値 | |
maxStaminaTable | EzMaxStaminaTable | GS2-Experience と連携する際に使用するスタミナ最大値テーブル | |||
recoverIntervalTable | EzRecoverIntervalTable | GS2-Experience と連携する際に使用する回復間隔テーブル | |||
recoverValueTable | EzRecoverValueTable | GS2-Experience と連携する際に使用する回復量テーブル |
EzMaxStaminaTable
スタミナ最大値テーブル
GS2-Experience のランクごとにスタミナの最大値を定義するエンティティです。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | 最大スタミナ値テーブル名 | |
metadata | string | ~ 128文字 | メタデータ | ||
experienceModelId | string | ✓ | ~ 1024文字 | 経験値モデルGRN | |
values | List<int> | ✓ | 1 ~ 1024 items | ランク毎のスタミナの最大値テーブル |
EzRecoverIntervalTable
スタミナ回復間隔テーブル
GS2-Experience のランクごとにスタミナの回復間隔を定義するエンティティです。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | スタミナ回復間隔テーブル名 | |
metadata | string | ~ 128文字 | メタデータ | ||
experienceModelId | string | ✓ | ~ 1024文字 | 経験値モデルGRN | |
values | List<int> | ✓ | 1 ~ 1024 items | ランク毎のスタミナ回復間隔テーブル |
EzRecoverValueTable
スタミナ回復量テーブル
GS2-Experience のランクごとにスタミナの回復量を定義するエンティティです。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | スタミナ回復量テーブル名 | |
metadata | string | ~ 128文字 | メタデータ | ||
experienceModelId | string | ✓ | ~ 1024文字 | 経験値モデルGRN | |
values | List<int> | ✓ | 1 ~ 1024 items | ランク毎のスタミナ回復量テーブル |
EzStamina
スタミナ
スタミナとは現実時間の時間経過で回復するポイントです。
一般的にこのスタミナを消費してゲームをプレイできるようにすることで、プレイヤーの1日のプレイ回数を制限し、ゲームの進行速度をゲーム提供側がコントロールする目的で使用されます。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
staminaName | string | ✓ | ~ 128文字 | スタミナモデルの名前 | |
value | int | ✓ | ~ 2147483646 | スタミナ値 | |
overflowValue | int | ✓ | ~ 2147483646 | スタミナの最大値を超えて格納されているスタミナ値 | |
maxValue | int | ✓ | 1 ~ 2147483646 | スタミナの最大値 | |
recoverIntervalMinutes | int | 1 ~ 2147483646 | スタミナの回復間隔(分) | ||
recoverValue | int | 1 ~ 2147483646 | スタミナの回復量 | ||
nextRecoverAt | long | 次回スタミナが回復する時間 (UNIX時間 単位:ミリ秒) |
メソッド
getStaminaModel
スタミナモデルを取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
staminaName | string | ✓ | ~ 128文字 | スタミナモデル名 |
Result
型 | 説明 | |
---|---|---|
item | EzStaminaModel | スタミナモデル |
実装例
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).StaminaModel(
staminaName: "stamina-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).StaminaModel(
staminaName: "stamina-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Stamina->Namespace(
"namespace-0001" // namespaceName
)->StaminaModel(
"stamina-0001" // staminaName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
値の変更イベントハンドリング
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).StaminaModel(
staminaName: "stamina-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId);
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).StaminaModel(
staminaName: "stamina-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Stamina->Namespace(
"namespace-0001" // namespaceName
)->StaminaModel(
"stamina-0001" // staminaName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Stamina::Model::FStaminaModel> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
listStaminaModels
スタミナモデルリストを取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 |
Result
型 | 説明 | |
---|---|---|
items | List<EzStaminaModel> | スタミナモデルのリスト |
実装例
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
);
var items = await domain.StaminaModelsAsync(
).ToListAsync();
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
);
var it = domain.StaminaModels(
);
List<EzStaminaModel> items = new List<EzStaminaModel>();
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->Stamina->Namespace(
"namespace-0001" // namespaceName
);
const auto It = Domain->StaminaModels(
);
TArray<Gs2::UE5::Stamina::Model::FEzStaminaModelPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}
値の変更イベントハンドリング
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeStaminaModels(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeStaminaModels(callbackId);
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
);
var it = domain.StaminaModels(
);
List<EzStaminaModel> items = new List<EzStaminaModel>();
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->Stamina->Namespace(
"namespace-0001" // namespaceName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeStaminaModels(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeStaminaModels(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
consume
スタミナを消費
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
staminaName | string | ✓ | ~ 128文字 | スタミナモデルの名前 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
consumeValue | int | ✓ | 1 ~ 2147483646 | 消費するスタミナ量 |
Result
型 | 説明 | |
---|---|---|
item | EzStamina | スタミナ |
staminaModel | EzStaminaModel | スタミナモデル |
Error
このAPIには特別な例外が定義されています。
GS2-SDK for GameEngine ではゲーム内でハンドリングが必要そうなエラーは一般的な例外から派生した特殊化した例外を用意することでハンドリングしやすくしています。
一般的なエラーの種類や、ハンドリング方法は こちら のドキュメントを参考にしてください。
型 | 基底クラス | 説明 |
---|---|---|
InsufficientException | BadRequestException | スタミナの残量が不足しています |
実装例
try {
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var result = await domain.ConsumeAsync(
consumeValue: 50
);
var item = await result.ModelAsync();
} catch(Gs2.Gs2Stamina.Exception.Insufficient e) {
// Insufficient remaining stamina.
}
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var future = domain.ConsumeFuture(
consumeValue: 50
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Stamina.Exception.InsufficientException)
{
// Insufficient remaining stamina.
}
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.Model();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
const auto Domain = Gs2->Stamina->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Stamina(
"stamina-0001" // staminaName
);
const auto Future = Domain->Consume(
50 // consumeValue
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Stamina::Error::FInsufficientError::Class))
{
// Insufficient remaining stamina.
}
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();
getStamina
現在のスタミナを取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
staminaName | string | ✓ | ~ 128文字 | スタミナモデルの名前 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID |
Result
型 | 説明 | |
---|---|---|
item | EzStamina | スタミナ |
staminaModel | EzStaminaModel | スタミナモデル |
実装例
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Stamina->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Stamina(
"stamina-0001" // staminaName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
値の変更イベントハンドリング
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId);
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Stamina->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Stamina(
"stamina-0001" // staminaName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Stamina::Model::FStamina> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
listStaminas
現在のスタミナを取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
pageToken | string | ~ 1024文字 | データの取得を開始する位置を指定するトークン | ||
limit | int | ✓ | 30 | 1 ~ 1000 | データの取得件数 |
Result
型 | 説明 | |
---|---|---|
items | List<EzStamina> | スタミナのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
実装例
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.StaminasAsync(
).ToListAsync();
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.Staminas(
);
List<EzStamina> items = new List<EzStamina>();
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->Stamina->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto It = Domain->Staminas(
);
TArray<Gs2::UE5::Stamina::Model::FEzStaminaPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}
値の変更イベントハンドリング
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeStaminas(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeStaminas(callbackId);
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.Staminas(
);
List<EzStamina> items = new List<EzStamina>();
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->Stamina->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeStaminas(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeStaminas(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
setMaxValue
GS2-Experienceのステータスを使用して最大値を更新
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
staminaName | string | ✓ | ~ 128文字 | スタミナモデルの名前 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
keyId | string | ✓ | “grn:gs2:{region}:{ownerId}:key:default:key:default” | ~ 1024文字 | 暗号鍵GRN |
signedStatusBody | string | ✓ | ~ 1048576文字 | 署名対象の GS2-Experience ステータスのボディ | |
signedStatusSignature | string | ✓ | ~ 128文字 | GS2-Experience ステータスの署名 |
Result
型 | 説明 | |
---|---|---|
item | EzStamina | スタミナ |
old | EzStamina | スタミナ |
staminaModel | EzStaminaModel | スタミナモデル |
実装例
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var result = await domain.SetMaxValueAsync(
signedStatusBody: "$statusBody",
signedStatusSignature: "$statusSignature",
keyId: "key-0001"
);
var item = await result.ModelAsync();
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var future = domain.SetMaxValueFuture(
signedStatusBody: "$statusBody",
signedStatusSignature: "$statusSignature",
keyId: "key-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.Model();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
const auto Domain = Gs2->Stamina->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Stamina(
"stamina-0001" // staminaName
);
const auto Future = Domain->SetMaxValue(
"$statusBody", // signedStatusBody
"$statusSignature", // signedStatusSignature
"key-0001" // keyId
);
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();
setRecoverInterval
GS2-Experienceのステータスを使用して回復間隔を更新
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
staminaName | string | ✓ | ~ 128文字 | スタミナモデルの名前 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
keyId | string | ✓ | “grn:gs2:{region}:{ownerId}:key:default:key:default” | ~ 1024文字 | 暗号鍵GRN |
signedStatusBody | string | ✓ | ~ 1048576文字 | 署名対象の GS2-Experience ステータスのボディ | |
signedStatusSignature | string | ✓ | ~ 128文字 | GS2-Experience ステータスの署名 |
Result
型 | 説明 | |
---|---|---|
item | EzStamina | スタミナ |
old | EzStamina | スタミナ |
staminaModel | EzStaminaModel | スタミナモデル |
実装例
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var result = await domain.SetRecoverIntervalAsync(
signedStatusBody: "$statusBody",
signedStatusSignature: "$statusSignature",
keyId: "key-0001"
);
var item = await result.ModelAsync();
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var future = domain.SetRecoverIntervalFuture(
signedStatusBody: "$statusBody",
signedStatusSignature: "$statusSignature",
keyId: "key-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.Model();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
const auto Domain = Gs2->Stamina->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Stamina(
"stamina-0001" // staminaName
);
const auto Future = Domain->SetRecoverInterval(
"$statusBody", // signedStatusBody
"$statusSignature", // signedStatusSignature
"key-0001" // keyId
);
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();
setRecoverValue
GS2-Experienceのステータスを使用して回復量を更新
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
staminaName | string | ✓ | ~ 128文字 | スタミナモデルの名前 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
keyId | string | ✓ | “grn:gs2:{region}:{ownerId}:key:default:key:default” | ~ 1024文字 | 暗号鍵GRN |
signedStatusBody | string | ✓ | ~ 1048576文字 | 署名対象の GS2-Experience ステータスのボディ | |
signedStatusSignature | string | ✓ | ~ 128文字 | GS2-Experience ステータスの署名 |
Result
型 | 説明 | |
---|---|---|
item | EzStamina | スタミナ |
old | EzStamina | スタミナ |
staminaModel | EzStaminaModel | スタミナモデル |
実装例
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var result = await domain.SetRecoverValueAsync(
signedStatusBody: "$statusBody",
signedStatusSignature: "$statusSignature",
keyId: "key-0001"
);
var item = await result.ModelAsync();
var domain = gs2.Stamina.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Stamina(
staminaName: "stamina-0001"
);
var future = domain.SetRecoverValueFuture(
signedStatusBody: "$statusBody",
signedStatusSignature: "$statusSignature",
keyId: "key-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.Model();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
const auto Domain = Gs2->Stamina->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Stamina(
"stamina-0001" // staminaName
);
const auto Future = Domain->SetRecoverValue(
"$statusBody", // signedStatusBody
"$statusSignature", // signedStatusSignature
"key-0001" // keyId
);
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();