class Gs2::Stamina::Client

GS2-Stamina クライアント

@author Game Server Services, Inc.

Public Class Methods

ENDPOINT(v = nil) click to toggle source

デバッグ用。通常利用する必要はありません。

# File lib/gs2/stamina/Client.rb, line 22
def self.ENDPOINT(v = nil)
  if v
    @@ENDPOINT = v
  else
    return @@ENDPOINT
  end
end
new(region, gs2_client_id, gs2_client_secret) click to toggle source

コンストラクタ

@param region [String] リージョン名 @param gs2_client_id [String] GSIクライアントID @param gs2_client_secret [String] GSIクライアントシークレット

Calls superclass method
# File lib/gs2/stamina/Client.rb, line 17
def initialize(region, gs2_client_id, gs2_client_secret)
  super(region, gs2_client_id, gs2_client_secret)
end

Public Instance Methods

change_stamina(request) click to toggle source

スタミナ値を増減させる

同一ユーザに対するスタミナ値の増減処理が衝突した場合は、後でリクエストを出した側の処理が失敗します。
そのため、同時に複数のデバイスを利用してゲームを遊んでいる際に、一斉にクエストを開始することで1回分のスタミナ消費で2回ゲームが遊べてしまう。
というような不正行為を防ぐことが出来るようになっています。

クエストに失敗した時に消費したスタミナ値を戻してあげる際や、スタミナ値の回復アイテムを利用した際などに
スタミナ値を増やす操作を行うことになりますが、その際に overflow に true を指定することで、スタミナ値の最大値を超える回復を行えます。
スタミナ値の上限を超えた部分は overflow フィールドに格納され、優先してそちらが消費されます。

accessToken には {static.docs.gs2.io/ruby/auth/Gs2/Auth/Client.html#login-instance_method Gs2::Auth::Client::login()} でログインして取得したアクセストークンを指定してください。

@param request [Array]

* staminaPoolName => スタミナプール名
* variation => スタミナ値の増減量
* maxValue => スタミナ値の最大値
* overflow => スタミナ値の最大値を超えることを許容するか
* accessToken => アクセストークン

@return [Array]

* item
  * userId => ユーザID
  * value => スタミナ値
  * overflow => 最大値を超えているスタミナ値
  * lastUpdateAt => 更新日時
# File lib/gs2/stamina/Client.rb, line 268
def change_stamina(request)
  if not request; raise ArgumentError.new(); end
  if not request.has_key?('staminaPoolName'); raise ArgumentError.new(); end
  if not request['staminaPoolName']; raise ArgumentError.new(); end
  if not request.has_key?('accessToken'); raise ArgumentError.new(); end
  if not request['accessToken']; raise ArgumentError.new(); end
  body = {}
  if request.has_key?('variation'); body['variation'] = request['variation']; end
  if request.has_key?('maxValue'); body['maxValue'] = request['maxValue']; end
  if request.has_key?('overflow'); body['overflow'] = request['overflow']; end
  query = {}
  header = {
    'X-GS2-ACCESS-TOKEN' => request['accessToken']
  }
  return post(
      'Gs2Stamina', 
      'ChangeStamina', 
      @@ENDPOINT, 
      '/staminaPool/' + request['staminaPoolName'] + '/stamina',
      body,
      query,
      header);
end
create_stamina_pool(request) click to toggle source

スタミナプールを作成

GS2-Staminaを利用するには、まずスタミナプールを作成する必要があります。
スタミナプールには複数のユーザのスタミナ値を格納することができます。

スタミナプールの設定として、スタミナ値の回復速度を秒単位で指定できます。
この設定値を利用して、スタミナ値の回復処理を行いつつユーザごとに最新のスタミナ値を取得することができます。

@param request [Array]

* name => スタミナプール名
* description => 説明文
* serviceClass => サービスクラス
* increaseInterval => スタミナの更新速度

@return [Array]

* item
  * staminaPoolId => スタミナプールID
  * ownerId => オーナーID
  * name => スタミナプール名
  * description => 説明文
  * serviceClass => サービスクラス
  * increaseInterval => スタミナの更新速度
  * createAt => 作成日時
# File lib/gs2/stamina/Client.rb, line 79
def create_stamina_pool(request)
  if not request; raise ArgumentError.new(); end
  body = {}
  if request.has_key?('name'); body['name'] = request['name']; end
  if request.has_key?('description'); body['description'] = request['description']; end
  if request.has_key?('serviceClass'); body['serviceClass'] = request['serviceClass']; end
  if request.has_key?('increaseInterval'); body['increaseInterval'] = request['increaseInterval']; end
  query = {}
  return post(
        'Gs2Stamina', 
        'CreateStaminaPool', 
        @@ENDPOINT, 
        '/staminaPool',
        body,
        query);
end
delete_stamina_pool(request) click to toggle source

スタミナプールを削除

@param request [Array]

* staminaPoolName => スタミナプール名
# File lib/gs2/stamina/Client.rb, line 193
def delete_stamina_pool(request)
  if not request; raise ArgumentError.new(); end
  if not request.has_key?('staminaPoolName'); raise ArgumentError.new(); end
  if not request['staminaPoolName']; raise ArgumentError.new(); end
  query = {}
  return delete(
        'Gs2Stamina', 
        'DeleteStaminaPool', 
        @@ENDPOINT, 
        '/staminaPool/' + request['staminaPoolName'],
        query);
end
describeServiceClass() click to toggle source

サービスクラスリストを取得

@return [Array] サービスクラス

# File lib/gs2/stamina/Client.rb, line 99
def describeServiceClass()
  query = {}
  result = get(
      'Gs2Stamina',
      'DescribeServiceClass',
      @@ENDPOINT,
      '/staminaPool/serviceClass',
      query);
  return result['items'];
end
describe_stamina_pool(pageToken = nil, limit = nil) click to toggle source

スタミナプールリストを取得

@param pageToken [String] ページトークン @param limit [Integer] 取得件数 @return [Array]

* items
  [Array]
    * staminaPoolId => スタミナプールID
    * ownerId => オーナーID
    * name => スタミナプール名
    * description => 説明文
    * serviceClass => サービスクラス
    * increaseInterval => スタミナの更新速度
    * createAt => 作成日時
* nextPageToken => 次ページトークン
# File lib/gs2/stamina/Client.rb, line 45
def describe_stamina_pool(pageToken = nil, limit = nil)
  query = {}
  if pageToken; query['pageToken'] = pageToken; end
  if limit; query['limit'] = limit; end
  return get(
        'Gs2Stamina', 
        'DescribeStaminaPool', 
        @@ENDPOINT, 
        '/staminaPool',
        query);
end
get_stamina(request) click to toggle source

スタミナ値を取得

指定したユーザの最新のスタミナ値を取得します。
回復処理などが行われた状態の値が応答されますので、そのままゲームで利用いただけます。

accessToken には {static.docs.gs2.io/ruby/auth/Gs2/Auth/Client.html#login-instance_method Gs2::Auth::Client::login()} でログインして取得したアクセストークンを指定してください。

@param request [Array]

* staminaPoolName => スタミナプール名
* maxValue => スタミナ値の最大値
* accessToken => アクセストークン

@return [Array]

* item
  * userId => ユーザID
  * value => スタミナ値
  * overflow => 最大値を超えているスタミナ値
  * lastUpdateAt => 更新日時
* nextIncreaseTimestamp => 次回スタミナ値が回復するタイムスタンプ(unixepoch)
# File lib/gs2/stamina/Client.rb, line 224
def get_stamina(request)
  if not request; raise ArgumentError.new(); end
  if not request.has_key?('staminaPoolName'); raise ArgumentError.new(); end
  if not request['staminaPoolName']; raise ArgumentError.new(); end
  if not request.has_key?('accessToken'); raise ArgumentError.new(); end
  if not request['accessToken']; raise ArgumentError.new(); end
  query = {}
  if request.has_key?('maxValue'); query['maxValue'] = request['maxValue']; end
  header = {
    'X-GS2-ACCESS-TOKEN' => request['accessToken']
  }
  return get(
      'Gs2Stamina',
      'GetStamina',
      @@ENDPOINT,
      '/staminaPool/' + request['staminaPoolName'] + '/stamina',
      query,
      header);
end
get_stamina_pool(request) click to toggle source

スタミナプールを取得

@param request [Array]

* staminaPoolName => スタミナプール名

@return [Array]

* item
  * staminaPoolId => スタミナプールID
  * ownerId => オーナーID
  * name => スタミナプール名
  * description => 説明文
  * serviceClass => サービスクラス
  * increaseInterval => スタミナの更新速度
  * createAt => 作成日時
# File lib/gs2/stamina/Client.rb, line 123
def get_stamina_pool(request)
  if not request; raise ArgumentError.new(); end
  if not request.has_key?('staminaPoolName'); raise ArgumentError.new(); end
  if not request['staminaPoolName']; raise ArgumentError.new(); end
  query = {}
  return get(
      'Gs2Stamina',
      'GetStaminaPool',
      @@ENDPOINT,
      '/staminaPool/' + request['staminaPoolName'],
      query);
end
get_stamina_pool_status(request) click to toggle source

スタミナプールの状態を取得

@param request [Array]

* staminaPoolName => スタミナプール名

@return [Array]

* status => 状態
# File lib/gs2/stamina/Client.rb, line 142
def get_stamina_pool_status(request)
  if not request; raise ArgumentError.new(); end
  if not request.has_key?('staminaPoolName'); raise ArgumentError.new(); end
  if not request['staminaPoolName']; raise ArgumentError.new(); end
  query = {}
  return get(
      'Gs2Stamina',
      'GetStaminaPoolStatus',
      @@ENDPOINT,
      '/staminaPool/' + request['staminaPoolName'] + '/status',
      query);
end
update_stamina_pool(request) click to toggle source

スタミナプールを更新

@param request [Array]

* staminaPoolName => スタミナプール名
* description => 説明文
* serviceClass => サービスクラス
* increaseInterval => スタミナの更新速度

@return [Array]

* item
  * staminaPoolId => スタミナプールID
  * ownerId => オーナーID
  * name => スタミナプール名
  * description => 説明文
  * serviceClass => サービスクラス
  * increaseInterval => スタミナの更新速度
  * createAt => 作成日時
# File lib/gs2/stamina/Client.rb, line 171
def update_stamina_pool(request)
  if not request; raise ArgumentError.new(); end
  if not request.has_key?('staminaPoolName'); raise ArgumentError.new(); end
  if not request['staminaPoolName']; raise ArgumentError.new(); end
  body = {}
  if request.has_key?('description'); body['description'] = request['description']; end
  if request.has_key?('serviceClass'); body['serviceClass'] = request['serviceClass']; end
  if request.has_key?('increaseInterval'); body['increaseInterval'] = request['increaseInterval']; end
  query = {}
  return put(
      'Gs2Stamina',
      'UpdateStaminaPool',
      @@ENDPOINT,
      '/staminaPool/' + request['staminaPoolName'],
      body,
      query);
end