GS2-Ranking2 トランザクションアクション
アクションの組み合わせと同時実行
すべてのサービスに共通する前提は トランザクションアクションの組み合わせ にまとめています。先にそちらを読んでください。この節の残りは GS2-Ranking2 固有の内容です。
GS2-Ranking2 のトランザクションアクションは 2 種類の対象を扱います。シーズン報酬の受け取りを記録したものと、検証アクションが読むスコアです。記録はランキングとシーズンごとに分かれるため、GS2-Ranking2 のアクションどうしが衝突することはほとんどありません。
| 操作 | 同じ行を重ねたとき | 入れ子越し | 別の対象になる境界 |
|---|---|---|---|
受け取りの記録CreateGlobalRankingReceivedRewardByUserId CreateClusterRankingReceivedRewardByUserId | 統合される | 失敗する | ネームスペース・ユーザー・ランキング・シーズン・クラスタ |
スコアの検証VerifyGlobalRankingScoreByUserId VerifyClusterRankingScoreByUserId VerifySubscribeRankingScoreByUserId | 統合されるのはしきい値まで同じものだけで、違うものはそれぞれ判定される | 読み取りだけなので衝突しない | ランキング・シーズン・検証タイプ |
記録はまだ存在しない場合にだけ書き込まれます。これがシーズンの報酬を二重に受け取らせないための仕組みです。すでに記録済みの受け取りをもう一度記録することは、同じトランザクションからであれ後のトランザクションからであれ失敗します。
スコアのしきい値は、所持数のような消費できる量と違って足し合わせる意味を持ちません。そのため合算はされず、「100 以上」と「500 以上」を並べるとどちらも判定されます。結果として厳しいほうが効きます。
検証アクションはトランザクション開始時点のスコアを見ます。スコアの登録はトランザクションアクションではなく API なので、トランザクションの中でスコアを登録してから検証する、という組み方はできません。
受け取りの記録は印にすぎません。シーズンの報酬そのものは自身のトランザクションとして発行されるため、それが属するサービスの制限がそのまま当てはまり、下記「入れ子になったトランザクションに注意」も当てはまります。
入れ子になったトランザクションに注意
同じ受け取りが内側と外側の両方から記録されると、トランザクションが失敗します。また報酬が内側のトランザクションとして発行されるため、報酬が配るものは他のアクションと同じトランザクションに集まります。それらが属するサービスのページを確認してください。
制限を回避したい場合
受け取りの記録は消費アクションなので、acquireActionUseJobQueue では分離できません。enableAtomicCommit を無効にすれば内側と外側の衝突は解消しますが、この判断は慎重に行ってください。記録済みになった受け取りは、その後に報酬の付与が失敗しても取り消されません。
同時実行とリトライ
記録はシーズンごとに分かれるので、同時実行のリクエストが衝突することはほとんどありません。失敗するのはすでに記録済みの受け取りを記録した場合だけで、これがシーズンの報酬を二重に受け取らせないための仕組みです。リトライしても変わりません。
Verify Action
検証アクション
Gs2Ranking2:VerifyGlobalRankingScoreByUserId
ユーザーIDを指定してグローバルランキングのスコアを検証
指定したユーザーのグローバルランキングスコアを比較演算子(less, lessEqual, greater, greaterEqual, equal, notEqual)を使用して指定した値と比較検証します。
数量指定可能なアクション:はい
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||||||||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||||||||||||||||
| rankingName | string | ✓ | ~ 128文字 | グローバルランキングモデル名 グローバルランキングモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||||||||
| verifyType | 文字列列挙型 enum { “less”, “lessEqual”, “greater”, “greaterEqual”, “equal”, “notEqual” } | ✓ | 検証の種類
| |||||||||||||||||
| season | long | 0 ~ 9223372036854775805 | シーズン | |||||||||||||||||
| score | long | ✓ | 0 ~ 9223372036854775805 | スコア ユーザーが登録したスコア値です。ランキングモデルの minimumValue と maximumValue で定義された範囲内である必要があります。 | ||||||||||||||||
| multiplyValueSpecifyingQuantity | bool | true | 数量指定した際に、検証に使用する値も乗算するか | |||||||||||||||||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Ranking2:VerifyGlobalRankingScoreByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"rankingName": "[string]グローバルランキングモデル名",
"verifyType": "[string]検証の種類",
"season": "[long]シーズン",
"score": "[long]スコア",
"multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Ranking2:VerifyGlobalRankingScoreByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
rankingName: "[string]グローバルランキングモデル名"
verifyType: "[string]検証の種類"
season: "[long]シーズン"
score: "[long]スコア"
multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("ranking2").verify.verify_global_ranking_score_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
rankingName="[string]グローバルランキングモデル名",
verifyType="[string]検証の種類",
season="[long]シーズン",
score="[long]スコア",
multiplyValueSpecifyingQuantity="[bool]数量指定した際に、検証に使用する値も乗算するか",
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Ranking2:VerifyClusterRankingScoreByUserId
ユーザーIDを指定してクラスターランキングのスコアを検証
指定したユーザーのクラスターランキングスコアを比較演算子(less, lessEqual, greater, greaterEqual, equal, notEqual)を使用して指定した値と比較検証します。
数量指定可能なアクション:はい
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||||||||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||||||||||||||||
| rankingName | string | ✓ | ~ 128文字 | クラスターランキングモデル名 クラスターランキングモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||||||||
| clusterName | string | ✓ | ~ 1024文字 | クラスター名 このスコアが属するクラスター(ギルド、ギャザリング、または任意のグループ)の名前です。クラスタータイプ設定に基づいてユーザーの所属が検証されます。 | ||||||||||||||||
| verifyType | 文字列列挙型 enum { “less”, “lessEqual”, “greater”, “greaterEqual”, “equal”, “notEqual” } | ✓ | 検証の種類
| |||||||||||||||||
| season | long | 0 ~ 9223372036854775805 | シーズン | |||||||||||||||||
| score | long | ✓ | 0 ~ 9223372036854775805 | スコア このクラスター内でユーザーが登録したスコア値です。 | ||||||||||||||||
| multiplyValueSpecifyingQuantity | bool | true | 数量指定した際に、検証に使用する値も乗算するか | |||||||||||||||||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Ranking2:VerifyClusterRankingScoreByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"rankingName": "[string]クラスターランキングモデル名",
"clusterName": "[string]クラスター名",
"verifyType": "[string]検証の種類",
"season": "[long]シーズン",
"score": "[long]スコア",
"multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Ranking2:VerifyClusterRankingScoreByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
rankingName: "[string]クラスターランキングモデル名"
clusterName: "[string]クラスター名"
verifyType: "[string]検証の種類"
season: "[long]シーズン"
score: "[long]スコア"
multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("ranking2").verify.verify_cluster_ranking_score_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
rankingName="[string]クラスターランキングモデル名",
clusterName="[string]クラスター名",
verifyType="[string]検証の種類",
season="[long]シーズン",
score="[long]スコア",
multiplyValueSpecifyingQuantity="[bool]数量指定した際に、検証に使用する値も乗算するか",
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Ranking2:VerifySubscribeRankingScoreByUserId
ユーザーIDを指定して購読ランキングのスコアを検証
指定したユーザーの購読ランキングスコアを比較演算子(less, lessEqual, greater, greaterEqual, equal, notEqual)を使用して指定した値と比較検証します。
数量指定可能なアクション:はい
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||||||||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||||||||||||||||
| rankingName | string | ✓ | ~ 128文字 | 購読ランキングモデル名 購読ランキングモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||||||||
| verifyType | 文字列列挙型 enum { “less”, “lessEqual”, “greater”, “greaterEqual”, “equal”, “notEqual” } | ✓ | 検証の種類
| |||||||||||||||||
| season | long | 0 ~ 9223372036854775805 | シーズン | |||||||||||||||||
| score | long | ✓ | 0 ~ 9223372036854775805 | スコア | ||||||||||||||||
| multiplyValueSpecifyingQuantity | bool | true | 数量指定した際に、検証に使用する値も乗算するか | |||||||||||||||||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Ranking2:VerifySubscribeRankingScoreByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"rankingName": "[string]購読ランキングモデル名",
"verifyType": "[string]検証の種類",
"season": "[long]シーズン",
"score": "[long]スコア",
"multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Ranking2:VerifySubscribeRankingScoreByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
rankingName: "[string]購読ランキングモデル名"
verifyType: "[string]検証の種類"
season: "[long]シーズン"
score: "[long]スコア"
multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("ranking2").verify.verify_subscribe_ranking_score_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
rankingName="[string]購読ランキングモデル名",
verifyType="[string]検証の種類",
season="[long]シーズン",
score="[long]スコア",
multiplyValueSpecifyingQuantity="[bool]数量指定した際に、検証に使用する値も乗算するか",
timeOffsetToken="[string]タイムオフセットトークン",
})Consume Action
消費アクション
Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId
ユーザーIDを指定してグローバルランキング報酬受け取り履歴を記録
指定したユーザーに代わって、指定したグローバルランキングの報酬受け取り履歴を記録します。
数量指定可能なアクション:いいえ
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| rankingName | string | ✓ | ~ 128文字 | グローバルランキングモデル名 グローバルランキングモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| season | long | 0 ~ 9223372036854775805 | シーズン | |||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"rankingName": "[string]グローバルランキングモデル名",
"userId": "[string]ユーザーID",
"season": "[long]シーズン",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId
request:
namespaceName: "[string]ネームスペース名"
rankingName: "[string]グローバルランキングモデル名"
userId: "[string]ユーザーID"
season: "[long]シーズン"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("ranking2").consume.create_global_ranking_received_reward_by_user_id({
namespaceName="[string]ネームスペース名",
rankingName="[string]グローバルランキングモデル名",
userId="[string]ユーザーID",
season="[long]シーズン",
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId
ユーザーIDを指定してクラスターランキング報酬受け取り履歴を記録
指定したユーザーに代わって、指定したクラスターランキングおよびクラスターの報酬受け取り履歴を記録します。
数量指定可能なアクション:いいえ
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| rankingName | string | ✓ | ~ 128文字 | クラスターランキングモデル名 クラスターランキングモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| clusterName | string | ✓ | ~ 1024文字 | クラスター名 ランキング報酬を受け取ったクラスターの名前です。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| season | long | 0 ~ 9223372036854775805 | シーズン | |||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"rankingName": "[string]クラスターランキングモデル名",
"clusterName": "[string]クラスター名",
"userId": "[string]ユーザーID",
"season": "[long]シーズン",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId
request:
namespaceName: "[string]ネームスペース名"
rankingName: "[string]クラスターランキングモデル名"
clusterName: "[string]クラスター名"
userId: "[string]ユーザーID"
season: "[long]シーズン"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("ranking2").consume.create_cluster_ranking_received_reward_by_user_id({
namespaceName="[string]ネームスペース名",
rankingName="[string]クラスターランキングモデル名",
clusterName="[string]クラスター名",
userId="[string]ユーザーID",
season="[long]シーズン",
timeOffsetToken="[string]タイムオフセットトークン",
})