NAV
Unity Unreal Engine 4

GS2-Money

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

ゲームエンジン向けモデル

EzWallet

ウォレットはゲームプレイヤー毎に課金通貨の所持数量を保持するエンティティです。

ウォレット内の通貨は大きく有償で購入した通貨と、無償で入手した通貨が分けて管理されます。 有償で購入した通貨は更に購入時の単価毎に管理され、サービス終了になってしまった際の返金や資金決済法に該当するだけの残高が存在するかが集計できます。

ウォレットにはスロットがあり、スロットごとに異なる残高を管理できます。 プラットフォームをまたいで残高を共有できない場合にはプラットフォーム毎に異なるスロットを利用することで分けて管理することができます。 その際に無償で入手した通貨は全てのプラットフォームで共通した値を利用することもできます。

説明
slot int スロット番号
paid int 有償課金通貨所持量
free int 無償課金通貨所持量
updatedAt long 最終更新日時

ゲームエンジン向けメソッド

get

get

using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    reopener: new Gs2BasicReopener()
);

{
    AsyncResult<object> asyncResult = null;

    var current = profile.Initialize(
        r => { asyncResult = r; }
    );

    yield return current;

    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }
}

// Up to this line is the initialization process.

var gs2 = new Gs2.Unity.Client(profile);

{
    AsyncResult<EzGetWalletResult> asyncResult = null;
    var current = gs2.Money.GetWallet(
        callback: r => { asyncResult = r; },
        session: session,
        namespaceName: "namespace1",
        slot: 0
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var item = result.Item;
}
ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->money.getWallet(
    [](gs2::ez::account::AsyncEzGetWalletResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "money.getWallet failed.");
        }
        else
        {
            Item = r.getResult()->getItem();
        }
    },
    ProfilePtr->getGs2Session(),
    TCHAR_TO_ANSI("namespace1"), // namespaceName
    0 // slot
);

ウォレットを取得します

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペースの名前
accessToken string ~ 128文字 ユーザーID
slot int ~ 100000000 スロット番号

Result

説明
item EzWallet ウォレット

withdraw

withdraw

using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    reopener: new Gs2BasicReopener()
);

{
    AsyncResult<object> asyncResult = null;

    var current = profile.Initialize(
        r => { asyncResult = r; }
    );

    yield return current;

    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }
}

// Up to this line is the initialization process.

var gs2 = new Gs2.Unity.Client(profile);

{
    AsyncResult<EzWithdrawResult> asyncResult = null;
    var current = gs2.Money.Withdraw(
        callback: r => { asyncResult = r; },
        session: session,
        namespaceName: "namespace1",
        slot: 0,
        count: 50,
        paidOnly: false
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var item = result.Item;
    var price = result.Price;
}
ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->money.withdraw(
    [](gs2::ez::account::AsyncEzWithdrawResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "money.withdraw failed.");
        }
        else
        {
            Item = r.getResult()->getItem();
            Price = r.getResult()->getPrice();
        }
    },
    ProfilePtr->getGs2Session(),
    TCHAR_TO_ANSI("namespace1"), // namespaceName
    0, // slot
    50, // count
    false // paidOnly
);

ウォレットから残高を消費します

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペースの名前
accessToken string ~ 128文字 ユーザーID
slot int ~ 100000000 スロット番号
count int 1 ~ 9223372036854775807 消費する課金通貨の数量
paidOnly bool false 有償課金通貨のみを対象とするか

Result

説明
item EzWallet 消費後のウォレット
price float 消費した通貨の価格