GS2 Blog

Game Server Services(https://gs2.io/) の最新情報をお届けします

【新サービス】ゲーム内通貨の管理機能を追加

みなさんこんにちは。GS2の丹羽です。

本日は新サービスの提供開始を告知いたします。

新サービスは GS2-Gold というゲーム内通貨の管理機能です。
GS2では既に GS2-Money という課金通貨の管理機能を提供していますが、GS2-Gold は資金決済法に該当しないゲーム内通貨を管理出来る機能となっています。

GS2-Gold ではゲーム向け固有の機能として、一定期間内での取得量制限を設けることが出来るようになっています。
例えば、コンテンツをクリアすることで、ポイントが貯まる仕様があり、そのポイントでキャラクターの強化に必要な素材と交換出来るようにしたとします。
通常、このような仕様を追加した場合、コアユーザは1日でそのコンテンツを大量にプレイすることで、あっという間にその素材を集めてしまい、コンテンツの消化速度の観点からは望ましくありません。

このような問題に対して、既存の多くのゲームはそのポイントを得られるコンテンツ自体の挑戦回数に制限を設けることで、対処しているケースが見られます。
しかし、ゲーム自体は遊べるが、報酬は得られない。というアプローチの方が望ましいこともあるでしょうし、
ポイントが複数のコンテンツから取得出来る場合は、全てのコンテンツを遊んだ前提での取得量をベースに考えざるを得ず、ライトユーザが報酬を得づらいものになってしまいがちです。

GS2-Gold のポイントを採用することで、複数のコンテンツからポイントが得られたとしても、一定期間の取得量自体を制限することで、コンテンツをまたいで取得量の制限を設けることが出来ます。
このような仕組みを採用することで、さまざまなコンテンツからポイントを取得出来るようにも出来ますし、取得量の制限があることで、1日であっという間に素材を集めることもできず、リテンション率を上げる効果が期待出来ます。

取得量の制限は1日だけではなく、1週間や1ヶ月といった期間を設定出来ます。
これにより、1週間の間であればユーザの自由なタイミングでプレイして貰うことが出来ます。

GS2-Gold を Unity で使用する方法を例示します。

yield return Gs2.Gold.Get(
      result =>
      {
          if(result.Error != null) {
              // 例外が発生したとき
          }
          // 取得に成功するとウォレットの状態を取得できます
          var wallet = result.Result;
          Debug.Log("Balance:    " + wallet.Balance);
          Debug.Log("LatestGain: " + wallet.LatestGain);
      },
      session,            // GS2 のログインセッション
      GOLD_NAME);         // GS2-Gold に作成したゴールド名

これでウォレットの残高を取得出来ます。
Balance には現在の残高が
取得量制限を設定している場合は LatestGain には現在の期間での取得量が返ります。

yield return Gs2.Gold.GetSettings(
      result =>
      {
          if(result.Error != null) {
              // 例外が発生したとき
          }
          // 取得に成功するとゴールドごとのウォレットの設定を取得できます
          var walletSettings = result.Result;
          Debug.Log("BalanceMax:       " + walletSettings.BalanceMax);
          Debug.Log("LatestGainMax:    " + walletSettings.LatestGainMax);
          Debug.Log("ResetType:     " + walletSettings.ResetType);
      },
      session,            // GS2 のログインセッション
      GOLD_NAME);         // GS2-Gold に作成したゴールド名

こちらを使用すればゲーム内通貨を所持出来る最大値や、期間内での取得制限量。リセットタイミングといった情報を取得出来ます。
アセットに含めてもいい情報ですが、サーバサイドで変更する可能性がある場合はこちらのAPIを使用してしようすることでアプリやアセットの更新無しで動的に変更が出来ます。

yield return Gs2.Gold.Withdraw(
      r => {
          if(result.Error != null) {
              // 例外が発生したとき
          }
      },
      session,            // GS2 のログインセッション
      GOLD_NAME,   // GS2-Gold に作成したゴールド名
      100,                  // 消費する残高の量
      Context            // 消費に関するコンテキスト
);

こちらを使用すればウォレットの残高を減らすことが出来ます。
ウォレットの消費時に GS2-Script を実行出来るようになっています。またそのスクリプトには消費量だけでなく Context で渡したテキストが渡りますので、
それらの情報をもとに、スクリプト内でアイテムの付与やスタミナの回復と言ったアクションを起こすことが出来ます。

gold_client = client('gold')  –- GS2-Gold のクライアントを初期化
result = gold_client.deposit_into_wallet({
    goldName="gold-0001", -- ゴールド名 
    value=200, -- 加算する残高の量
    context="context" -- コンテキスト
})
result = {permit=not result.isError} -- 加算に失敗した場合失敗とする

ウォレットへの加算は Unity からは行えません。これはウォレットの残高を不正に増やされることを防ぐ目的があります。
ここでは、GS2-Script での加算例を例示していますが、JavaSDK や PythonSDK といったSDKを通してサーバから実行することで既存のサーバシステムから残高を加算することも可能です。

それでは、また。

(C) Game Server Services, Inc.