GS2-SDK
Game Server Services は 様々なプログラミング言語向けの SDK を提供しています。 GS2 の提供しているマネージメントコンソールも公開されている SDK を使用して開発されており、ゲームに特化した運営ツールの作成などに活用できます。
一般的な内容
スタンプシート
スタンプシートの概念
GS2 では各サービス間を連携させる仕組みとして、 スタンプシート
というシステムを使用します。
スタンプシート
は 企業における稟議書のようなもので、 結果
を得るために 許可
を得ていく処理を表現し、最後に 結果
を処理するパートは 許可を得たことで得られる署名が揃っていること
だけを見て処理を実行します。
GS2 において 結果は報酬
許可は対価
として処理されます。
つまり、すべてのサービス間の連携は 対価
と 報酬
で表現され、例えばクエストでは スタミナや回数制限のカウンター上昇を対価
として 経験値やクリアフラグを報酬として得る
となります。
スタンプシートの 対価
を支払う処理を スタンプタスク
とよび、サービスに スタンプタスク
を持っていき 対価
を支払うとスタンプシートにスタンプを押してもらえます。
最後に 報酬
を付与するサービスにスタンプシートを持っていくと、スタンプタスクにすべてスタンプが押されていることを確認して 報酬
が付与されます。
スタンプシートの変数
スタンプシート
や スタンプタスク
は処理の実態としてGS2のリクエストを発行します。
スタンプタスク
には対価を払う処理ですので、プレイヤーのリソースを減らす処理ののリクエストが設定でき、 スタンプシート
はその逆です。
それぞれ、どの ユーザのリソースを操作するか
という情報をリクエストに含める必要がありますが、ゲーム内ストアやクエストのマスターデータに直接ユーザIDを指定するのは不可能です。
そこで、 スタンプシート
のリクエストには変数が適用できます。
Config
報酬の内容に #{userId}
というプレースホルダーを設定すると、その部分はスタンプシートを発行する際にスタンプシートの発行をおこなったプレイヤーのユーザIDに置換されます。
その他、スタンプシートの発行リクエストには Config
というパラメータが渡せるようになっています。
Config はキーバリュー形式となっており、ここで渡したパラメータは #{Config で指定したキー値}
のプレースホルダを置換するのに使用できます。
タスクの実行結果
報酬の内容に ${Gs2Money:WithdrawByUserId.price}
というプレースホルダーを設定すると、その部分は スタンプタスク
の実行結果を変数として利用できます。
例に示したケースでは 実行したタスクのうち Gs2Money:WithdrawByUserId
の実行結果を参照し、戻り値の price
を値として使用します。
ネストした要素を参照する場合は ${Gs2Money:WithdrawByUserId.item.paid}
のようにドットでつないで参照できます。
同一のアクションが スタンプタスク
として複数登録されている場合に採用される値は不定です。
スタンプシートに設定できるアクション
入手アクション(報酬)
GS2-Account
GS2-Auth
GS2-Chat
GS2-Dictionary
スタンプシートでエントリーを追加
スタンプシートでエントリーを追加
{
"action": "Gs2Dictionary:AddEntriesByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"entryModelNames":
["[string] エントリー名"
]
}
}
GS2-Exchange
スタンプシートで交換を実行
スタンプシートで交換を実行
{
"action": "Gs2Exchange:ExchangeByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"rateName": "[string] 交換レートの種類名",
"userId": "[string] ユーザーID",
"count": "[integer] 交換するロット数",
"config":
["[Config] 設定値"
]
}
}
スタンプシートで交換待機 を作成
スタンプシートで交換待機 を作成
{
"action": "Gs2Exchange:CreateAwaitByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"rateName": "[string] 交換レート名",
"count": "[integer] 交換数"
}
}
GS2-Experience
経験値を加算
経験値を加算
{
"action": "Gs2Experience:AddExperienceByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"experienceName": "[string] 経験値の種類の名前",
"propertyId": "[string] プロパティID",
"experienceValue": "[long] 加算する経験値量"
}
}
ランクキャップを加算
ランクキャップを加算
{
"action": "Gs2Experience:AddRankCapByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"experienceName": "[string] 経験値の種類の名前",
"propertyId": "[string] プロパティID",
"rankCapValue": "[long] 加算するランクキャップ量"
}
}
ランクキャップを更新
ランクキャップを更新
{
"action": "Gs2Experience:SetRankCapByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"experienceName": "[string] 経験値の種類の名前",
"propertyId": "[string] プロパティID",
"rankCapValue": "[long] ランクキャップ"
}
}
GS2-Formation
スタンプシートでキャパシティサイズを加算
スタンプシートでキャパシティサイズを加算
{
"action": "Gs2Formation:AddMoldCapacityByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"moldName": "[string] フォームの保存領域の名前",
"capacity": "[integer] 加算するキャパシティ量"
}
}
スタンプシートでキャパシティサイズを設定
スタンプシートでキャパシティサイズを設定
{
"action": "Gs2Formation:SetMoldCapacityByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"moldName": "[string] フォームの保存領域の名前",
"capacity": "[integer] 現在のキャパシティ"
}
}
スタンプシートでアイテムをインベントリに追加
スタンプシートでアイテムをインベントリに追加
{
"action": "Gs2Formation:AcquireActionsToFormProperties",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"moldName": "[string] フォームの保存領域の名前",
"index": "[integer] 保存領域のインデックス",
"acquireAction": "[AcquireAction] フォームのプロパティに適用する入手アクション",
"queueNamespaceId": "[string] 入手処理を登録する GS2-JobQueue のネームスペース のGRN",
"keyId": "[string] スタンプシートの発行に使用する GS2-Key の暗号鍵 のGRN",
"config":
["[AcquireActionConfig] 入手アクションコンフィグ"
]
}
}
GS2-Friend
GS2-Gateway
GS2-Inbox
GS2-Inventory
スタンプシートでキャパシティサイズを加算
スタンプシートでキャパシティサイズを加算
{
"action": "Gs2Inventory:AddCapacityByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"inventoryName": "[string] インベントリモデル名",
"userId": "[string] ユーザーID",
"addCapacityValue": "[integer] 加算するキャパシティサイズ"
}
}
スタンプシートでキャパシティサイズを設定
スタンプシートでキャパシティサイズを設定
{
"action": "Gs2Inventory:SetCapacityByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"inventoryName": "[string] インベントリモデル名",
"userId": "[string] ユーザーID",
"newCapacityValue": "[integer] 現在のインベントリの最大キャパシティ"
}
}
スタンプシートでアイテムをインベントリに追加
スタンプシートでアイテムをインベントリに追加
{
"action": "Gs2Inventory:AcquireItemSetByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"inventoryName": "[string] インベントリの種類名",
"itemName": "[string] アイテムマスターの名前",
"userId": "[string] ユーザーID",
"acquireCount": "[long] 入手する量",
"expiresAt": "[long] 有効期限",
"createNewItemSet": "[boolean] 既存の ItemSet に空きがあったとしても、新しい ItemSet を作成するか",
"itemSetName": "[string] 追加先のアイテムセットの名前"
}
}
スタンプシートでアイテムに参照元を追加
スタンプシートでアイテムに参照元を追加
{
"action": "Gs2Inventory:AddReferenceOfByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"inventoryName": "[string] インベントリの名前",
"userId": "[string] ユーザーID",
"itemName": "[string] アイテムマスターの名前",
"itemSetName": "[string] アイテムセットを識別する名前",
"referenceOf": "[string] この所持品の参照元"
}
}
スタンプシートでアイテムの参照元を削除
スタンプシートでアイテムの参照元を削除
{
"action": "Gs2Inventory:DeleteReferenceOfByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"inventoryName": "[string] インベントリの名前",
"userId": "[string] ユーザーID",
"itemName": "[string] アイテムマスターの名前",
"itemSetName": "[string] アイテムセットを識別する名前",
"referenceOf": "[string] この所持品の参照元"
}
}
GS2-JobQueue
スタンプシートでジョブを登録
スタンプシートでジョブを登録
{
"action": "Gs2JobQueue:PushByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"jobs":
["[JobEntry] ジョブ"
]
}
}
GS2-Limit
スタンプシートでカウンターを削除
スタンプシートでカウンターを削除
{
"action": "Gs2Limit:DeleteCounterByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"limitName": "[string] 回数制限の種類の名前",
"userId": "[string] ユーザーID",
"counterName": "[string] カウンターの名前"
}
}
GS2-Lock
GS2-Log
GS2-Lottery
スタンプシートを使用して抽選処理を実行
スタンプシートを使用して抽選処理を実行
{
"action": "Gs2Lottery:DrawByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"lotteryName": "[string] 抽選モデルの種類名",
"userId": "[string] ユーザーID",
"count": "[integer] 抽選回数",
"config":
["[Config] 設定値"
]
}
}
GS2-Matchmaking
GS2-Mission
カウンター加算
カウンター加算
{
"action": "Gs2Mission:IncreaseCounterByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"counterName": "[string] カウンター名",
"userId": "[string] ユーザーID",
"value": "[long] 加算する値"
}
}
GS2-Money
スタンプシートを使用してウォレットに残高を加算します
スタンプシートを使用してウォレットに残高を加算します
{
"action": "Gs2Money:DepositByUserId",
"request": {
"namespaceName": "[string] ネームスペースの名前",
"userId": "[string] ユーザーID",
"slot": "[integer] スロット番号",
"price": "[float] 購入価格",
"count": "[integer] 付与する課金通貨の数量"
}
}
GS2-Quest
スタンプシートでクエストを開始
スタンプシートでクエストを開始
{
"action": "Gs2Quest:CreateProgressByUserId",
"request": {
"namespaceName": "[string] カテゴリ名",
"userId": "[string] ユーザーID",
"questModelId": "[string] クエストモデル",
"force": "[boolean] すでに開始しているクエストがある場合にそれを破棄して開始するか",
"config":
["[Config] 設定値"
]
}
}
GS2-Ranking
GS2-Schedule
GS2-Showcase
GS2-Stamina
スタンプシートを使用してスタミナを回復
スタンプシートを使用してスタミナを回復
{
"action": "Gs2Stamina:RecoverStaminaByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"staminaName": "[string] スタミナの種類名",
"userId": "[string] ユーザーID",
"recoverValue": "[integer] 回復するスタミナ量"
}
}
スタンプシートでスタミナの最大値を加算
スタンプシートでスタミナの最大値を加算
{
"action": "Gs2Stamina:RaiseMaxValueByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"staminaName": "[string] スタミナの種類名",
"userId": "[string] ユーザーID",
"raiseValue": "[integer] 上昇する最大スタミナ量"
}
}
スタンプシートでスタミナの最大値を更新
スタンプシートでスタミナの最大値を更新
{
"action": "Gs2Stamina:SetMaxValueByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"staminaName": "[string] スタミナの種類名",
"userId": "[string] ユーザーID",
"maxValue": "[integer] スタミナの最大値"
}
}
スタンプシートでスタミナの最大値を更新
スタンプシートでスタミナの最大値を更新
{
"action": "Gs2Stamina:SetRecoverIntervalByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"staminaName": "[string] スタミナの種類名",
"userId": "[string] ユーザーID",
"recoverIntervalMinutes": "[integer] スタミナの回復間隔(分)"
}
}
スタンプシートでスタミナの最大値を更新
スタンプシートでスタミナの最大値を更新
{
"action": "Gs2Stamina:SetRecoverValueByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"staminaName": "[string] スタミナの種類名",
"userId": "[string] ユーザーID",
"recoverValue": "[integer] スタミナの回復量"
}
}
GS2-Version
消費アクション(対価)
GS2-Account
GS2-Auth
GS2-Chat
GS2-Dictionary
GS2-Exchange
スタンプタスクで 交換待機 を削除
{
"action": "Gs2Exchange:DeleteAwaitByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"rateName": "[string] 交換レート名",
"awaitName": "[string] 交換待機の名前"
}
}
スタンプタスクで 交換待機 を削除
GS2-Experience
GS2-Formation
GS2-Friend
GS2-Gateway
GS2-Inbox
メッセージを作成
{
"action": "Gs2Inbox:OpenMessageByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"userId": "[string] ユーザーID",
"messageName": "[string] メッセージID"
}
}
メッセージを作成
GS2-Inventory
スタンプシートでインベントリのアイテムを消費
{
"action": "Gs2Inventory:ConsumeItemSetByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"inventoryName": "[string] インベントリの名前",
"userId": "[string] ユーザーID",
"itemName": "[string] アイテムマスターの名前",
"consumeCount": "[long] 消費する量",
"itemSetName": "[string] アイテムセットを識別する名前"
}
}
スタンプシートでインベントリのアイテムを消費
スタンプシートでインベントリのアイテムを検証
{
"action": "Gs2Inventory:VerifyReferenceOfByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"inventoryName": "[string] インベントリの名前",
"userId": "[string] ユーザーID",
"itemName": "[string] アイテムマスターの名前",
"itemSetName": "[string] アイテムセットを識別する名前",
"referenceOf": "[string] この所持品の参照元",
"verifyType": "[string] 検証の種類"
}
}
スタンプシートでインベントリのアイテムを検証
GS2-JobQueue
GS2-Limit
スタンプシートでカウントアップ
{
"action": "Gs2Limit:CountUpByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"limitName": "[string] 回数制限の種類の名前",
"counterName": "[string] カウンターの名前",
"userId": "[string] ユーザーID",
"countUpValue": "[integer] カウントアップする量",
"maxValue": "[integer] カウントアップを許容する最大値 を入力してください"
}
}
スタンプシートでカウントアップ
GS2-Lock
GS2-Log
GS2-Lottery
GS2-Matchmaking
GS2-Mission
達成状況を作成
{
"action": "Gs2Mission:ReceiveByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"missionGroupName": "[string] ミッショングループ名",
"missionTaskName": "[string] タスク名",
"userId": "[string] ユーザーID"
}
}
達成状況を作成
GS2-Money
ウォレットから残高を消費します
{
"action": "Gs2Money:WithdrawByUserId",
"request": {
"namespaceName": "[string] ネームスペースの名前",
"userId": "[string] ユーザーID",
"slot": "[integer] スロット番号",
"count": "[integer] 消費する課金通貨の数量",
"paidOnly": "[boolean] 有償課金通貨のみを対象とするか"
}
}
ウォレットから残高を消費します
スタンプシートを使用してレシートを記録
{
"action": "Gs2Money:RecordReceipt",
"request": {
"namespaceName": "[string] ネームスペースの名前",
"userId": "[string] ユーザーID",
"contentsId": "[string] プラットフォームストアのコンテンツID",
"receipt": "[string] レシート"
}
}
スタンプシートを使用してレシートを記録
GS2-Quest
スタンプタスクで クエスト挑戦 を削除
{
"action": "Gs2Quest:DeleteProgressByUserId",
"request": {
"namespaceName": "[string] カテゴリ名",
"userId": "[string] ユーザーID"
}
}
スタンプタスクで クエスト挑戦 を削除
GS2-Ranking
GS2-Schedule
GS2-Showcase
GS2-Stamina
スタンプタスクを使用してスタミナを消費
{
"action": "Gs2Stamina:ConsumeStaminaByUserId",
"request": {
"namespaceName": "[string] ネームスペース名",
"staminaName": "[string] スタミナの種類名",
"userId": "[string] ユーザーID",
"consumeValue": "[integer] 消費するスタミナ量"
}
}
スタンプタスクを使用してスタミナを消費