GS2-Enchant トランザクションアクション
アクションの組み合わせと同時実行
すべてのサービスに共通する前提は トランザクションアクションの組み合わせ にまとめています。先にそちらを読んでください。この節の残りは GS2-Enchant 固有の内容です。
GS2-Enchant のトランザクションアクションは 2 種類のステータスを扱います。どちらもネームスペース・ユーザー・パラメータモデル・プロパティの組で決まり、更新のたびに全体が書き換わります。
- バランスパラメータのステータス
- レアリティパラメータのステータス
| 操作 | 同じ行を重ねたとき | 入れ子越し | 別の対象になる境界 |
|---|---|---|---|
バランスパラメータの引き直しReDrawBalanceParameterStatusByUserId | まったく同じ指定でも発行時にエラー | 失敗する | ネームスペース・ユーザー・パラメータモデル・プロパティ (バランス) |
バランスパラメータの設定SetBalanceParameterStatusByUserId | 同値なら統合。値が違えば発行時にエラー | 失敗する | ネームスペース・ユーザー・パラメータモデル・プロパティ (バランス) |
レアリティパラメータの引き直しReDrawRarityParameterStatusByUserId | まったく同じ指定でも発行時にエラー | 失敗する | ネームスペース・ユーザー・パラメータモデル・プロパティ (レアリティ) |
レアリティパラメータの加算AddRarityParameterStatusByUserId | 統合され、数が合算される | 失敗する | ネームスペース・ユーザー・パラメータモデル・プロパティ (レアリティ) |
レアリティパラメータの設定SetRarityParameterStatusByUserId | 同値なら統合。値が違えば発行時にエラー | 失敗する | ネームスペース・ユーザー・パラメータモデル・プロパティ (レアリティ) |
検証VerifyRarityParameterStatusByUserId | 先勝ち | 読み取りだけなので衝突しない | ステータス・検証タイプ・パラメータ名・数 |
合算できる値を持つのはレアリティパラメータの加算だけです。引き直しと設定はステータス全体を置き換えるため、同じステータスを触る他の行と同居できません。
引き直しはステータス全体を引き直すため、同じステータスへの引き直しを 2 つ以上指定できません。固定するパラメータまで含めてまったく同じ指定であっても発行時にエラーになります。「2 回引き直す」という指示は表現できないと考えてください。
バランスパラメータのステータスとレアリティパラメータのステータスは、同じプロパティに対するものでも別の対象です。1 つのトランザクションで両方を更新するのは問題ありません。
検証アクションはトランザクション開始時点のステータスを見ます。同じトランザクションで到達するパラメータを検証することはできません。
入れ子になったトランザクションに注意
並べて書けば 1 件に統合されたはずの同じレアリティパラメータへの加算どうしでも、片方が内側から届く場合はトランザクションが失敗します。報酬や抽選の中身まで含めて、1 つのトランザクションの中で同じステータスを更新する箇所が 1 つだけになるように設計してください。
引き直しは、並べて書いた場合は発行時に、内側から届いた場合は実行時にエラーになります。エラーになる時点が違うだけなので、同じステータスへの引き直しは 1 つのトランザクションに 1 つだけにしてください。
制限を回避したい場合
GS2-Enchant でステータスを更新するアクションはすべて入手アクションなので、上記の衝突は acquireActionUseJobQueue を有効にすれば解消できます。
ただし、発行時に弾かれる重複は例外です。並べて書いた引き直しの重複と、並べて書いた設定の値違いの重複がこれにあたります。どちらも acquireActionUseJobQueue の判定より手前で弾かれるため、有効にしても回避できません。同じステータスへの引き直しを 2 回行いたい場合は、トランザクション自体を分けてください。
同時実行とリトライ
ステータスはリビジョンの照合を伴って全体が書き換わるため、同じステータスを複数のリクエストが同時に更新すると、後から確定した側がコンフリクト (409) になります。リクエストの内容に問題があるわけではないので、リトライすれば成功します。
同じプロパティへのエンチャントを複数の箇所から同時に行うほど発生しやすくなるので、1 つのステータスへの更新は可能な範囲で直列化してください。
Verify Action
検証アクション
Gs2Enchant:VerifyRarityParameterStatusByUserId
ユーザーIDを指定してレアリティパラメータを検証
指定されたユーザーのレアリティパラメータの状態が指定された条件を満たすかどうかを検証します。
3つの検証タイプがサポートされています:
- ‘have’: 指定されたパラメータ値が状態に存在することを検証
- ‘havent’: 指定されたパラメータ値が状態に存在しないことを検証
- ‘count’: パラメータの数が指定された数と一致することを検証
他のアクションを実行する前の前提条件チェックとして使用できます。
数量指定可能なアクション:はい
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||
| parameterName | string | ✓ | ~ 128文字 | レアリティパラメータモデル名 このステータスの抽選条件を定義するレアリティパラメータモデルの名前です。最大パラメータ数、付与数の抽選重み、値の抽選プールを指定するモデルを参照します。 | ||||||||||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||||||||||
| propertyId | string | ✓ | ~ 1024文字 | パラメータの保有元リソースのプロパティID これらのレアリティパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。 | ||||||||||
| verifyType | 文字列列挙型 enum { “havent”, “have”, “count” } | ✓ | 検証の種類
| |||||||||||
| parameterValueName | string | {verifyType} in [“havent”, “have”] | ✓※ | ~ 64文字 | 名前 この抽選エントリの識別子です。レアリティパラメータモデルの値プール内で一意である必要があります。抽選された際、この名前が結果のレアリティパラメータ値に保存されます。 ※ verifyType が “havent”,“have"であれば 必須 | |||||||||
| parameterCount | int | {verifyType} == “count” | ✓※ | 0 ~ 10 | 検証するパラメータの数 ※ verifyType が “count” であれば必須 | |||||||||
| multiplyValueSpecifyingQuantity | bool | false | 数量指定した際に、検証に使用する値も乗算するか | |||||||||||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Enchant:VerifyRarityParameterStatusByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"parameterName": "[string]レアリティパラメータモデル名",
"userId": "[string]ユーザーID",
"propertyId": "[string]パラメータの保有元リソースのプロパティID",
"verifyType": "[string]検証の種類",
"parameterValueName": "[string]名前",
"parameterCount": "[int]検証するパラメータの数",
"multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Enchant:VerifyRarityParameterStatusByUserId
request:
namespaceName: "[string]ネームスペース名"
parameterName: "[string]レアリティパラメータモデル名"
userId: "[string]ユーザーID"
propertyId: "[string]パラメータの保有元リソースのプロパティID"
verifyType: "[string]検証の種類"
parameterValueName: "[string]名前"
parameterCount: "[int]検証するパラメータの数"
multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("enchant").verify.verify_rarity_parameter_status_by_user_id({
namespaceName="[string]ネームスペース名",
parameterName="[string]レアリティパラメータモデル名",
userId="[string]ユーザーID",
propertyId="[string]パラメータの保有元リソースのプロパティID",
verifyType="[string]検証の種類",
parameterValueName="[string]名前",
parameterCount="[int]検証するパラメータの数",
multiplyValueSpecifyingQuantity="[bool]数量指定した際に、検証に使用する値も乗算するか",
timeOffsetToken="[string]タイムオフセットトークン",
})Acquire Action
入手アクション
Gs2Enchant:ReDrawBalanceParameterStatusByUserId
ユーザーIDを指定してバランスパラメータを再抽選
特定のプロパティのバランスパラメータ値を再抽選し、合計値をパラメータ間で再分配します。
fixedParameterNames にパラメータ名を指定することで、特定のパラメータを固定(ロック)して再抽選対象から除外できます(最大10個)。
合計値の制約は維持されます:固定されたものを含むすべてのパラメータ値の合計は常にモデルの合計値と等しくなります。
更新後と更新前のパラメータ状態の両方が返されます。
数量指定可能なアクション:いいえ
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| parameterName | string | ✓ | ~ 128文字 | バランスパラメータモデル名 このステータスの抽選条件を定義するバランスパラメータモデルの名前です。合計値、配分方針、利用可能なパラメータスロットを指定するモデルを参照します。 | ||
| propertyId | string | ✓ | ~ 1024文字 | パラメータの保有元リソースのプロパティID これらのバランスパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。 | ||
| fixedParameterNames | List<string> | [] | 0 ~ 10 items | 再抽選しないパラメータの名前リスト | ||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Enchant:ReDrawBalanceParameterStatusByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"parameterName": "[string]バランスパラメータモデル名",
"propertyId": "[string]パラメータの保有元リソースのプロパティID",
"fixedParameterNames": [
"[string]再抽選しないパラメータの名前"
],
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Enchant:ReDrawBalanceParameterStatusByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
parameterName: "[string]バランスパラメータモデル名"
propertyId: "[string]パラメータの保有元リソースのプロパティID"
fixedParameterNames:
- "[string]再抽選しないパラメータの名前"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("enchant").acquire.re_draw_balance_parameter_status_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
parameterName="[string]バランスパラメータモデル名",
propertyId="[string]パラメータの保有元リソースのプロパティID",
fixedParameterNames={
"[string]再抽選しないパラメータの名前"
},
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Enchant:SetBalanceParameterStatusByUserId
ユーザーIDを指定してバランスパラメータに任意の値を設定
通常の抽選/再抽選メカニズムを経ずに、指定されたユーザーの特定のプロパティにパラメータ値を直接設定します。
これは任意のパラメータ値を割り当てることができる管理操作です。
更新後と更新前のパラメータ状態の両方が返されます。
数量指定可能なアクション:いいえ
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| parameterName | string | ✓ | ~ 128文字 | バランスパラメータモデル名 このステータスの抽選条件を定義するバランスパラメータモデルの名前です。合計値、配分方針、利用可能なパラメータスロットを指定するモデルを参照します。 | ||
| propertyId | string | ✓ | ~ 1024文字 | パラメータの保有元リソースのプロパティID これらのバランスパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。 | ||
| parameterValues | List<BalanceParameterValue> | ✓ | 1 ~ 10 items | バランスパラメータの値リスト 抽選処理後に各パラメータスロットに割り当てられた具体的な値です。各エントリはモデルで定義されたパラメータスロットに対応し、割り当てられた実際の数値を保持します。すべての値の合計はモデルで指定された合計値と等しくなります。 | ||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Enchant:SetBalanceParameterStatusByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"parameterName": "[string]バランスパラメータモデル名",
"propertyId": "[string]パラメータの保有元リソースのプロパティID",
"parameterValues": [
{
"name": "[string]名前",
"value": "[long]値"
}
],
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Enchant:SetBalanceParameterStatusByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
parameterName: "[string]バランスパラメータモデル名"
propertyId: "[string]パラメータの保有元リソースのプロパティID"
parameterValues:
- name: "[string]名前"
value: "[long]値"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("enchant").acquire.set_balance_parameter_status_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
parameterName="[string]バランスパラメータモデル名",
propertyId="[string]パラメータの保有元リソースのプロパティID",
parameterValues={
{
name="[string]名前",
value="[long]値"
}
},
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Enchant:ReDrawRarityParameterStatusByUserId
ユーザーIDを指定してレアリティパラメータを再抽選
特定のプロパティのレアリティパラメータ値を再抽選し、レアリティウェイトに基づいてランダムに新しい値を割り当てます。
fixedParameterNames にパラメータ名を指定することで、特定のパラメータを固定(ロック)して再抽選対象から除外できます(最大10個)。
固定されたパラメータは現在の値を保持し、固定されていないパラメータのみが再抽選されます。
更新後と更新前のパラメータ状態の両方が返されます。
数量指定可能なアクション:いいえ
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| parameterName | string | ✓ | ~ 128文字 | レアリティパラメータモデル名 このステータスの抽選条件を定義するレアリティパラメータモデルの名前です。最大パラメータ数、付与数の抽選重み、値の抽選プールを指定するモデルを参照します。 | ||
| propertyId | string | ✓ | ~ 1024文字 | パラメータの保有元リソースのプロパティID これらのレアリティパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。 | ||
| fixedParameterNames | List<string> | 0 ~ 10 items | 再抽選しないパラメータの名前リスト | |||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Enchant:ReDrawRarityParameterStatusByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"parameterName": "[string]レアリティパラメータモデル名",
"propertyId": "[string]パラメータの保有元リソースのプロパティID",
"fixedParameterNames": [
"[string]再抽選しないパラメータの名前"
],
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Enchant:ReDrawRarityParameterStatusByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
parameterName: "[string]レアリティパラメータモデル名"
propertyId: "[string]パラメータの保有元リソースのプロパティID"
fixedParameterNames:
- "[string]再抽選しないパラメータの名前"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("enchant").acquire.re_draw_rarity_parameter_status_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
parameterName="[string]レアリティパラメータモデル名",
propertyId="[string]パラメータの保有元リソースのプロパティID",
fixedParameterNames={
"[string]再抽選しないパラメータの名前"
},
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Enchant:AddRarityParameterStatusByUserId
ユーザーIDを指定してレアリティパラメータを追加
レアリティウェイトに基づいてランダムに値を抽選し、既存のレアリティパラメータ状態に新しいパラメータスロットを追加します。
count は追加するパラメータスロットの数(1〜10)を指定し、モデルの最大パラメータ数が上限となります。
更新後と更新前のパラメータ状態の両方が返されます。
数量指定可能なアクション:はい
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| parameterName | string | ✓ | ~ 128文字 | レアリティパラメータモデル名 このステータスの抽選条件を定義するレアリティパラメータモデルの名前です。最大パラメータ数、付与数の抽選重み、値の抽選プールを指定するモデルを参照します。 | ||
| propertyId | string | ✓ | ~ 1024文字 | パラメータの保有元リソースのプロパティID これらのレアリティパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。 | ||
| count | int | 1 | 1 ~ 10 | 追加するパラメータの数 | ||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Enchant:AddRarityParameterStatusByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"parameterName": "[string]レアリティパラメータモデル名",
"propertyId": "[string]パラメータの保有元リソースのプロパティID",
"count": "[int]追加するパラメータの数",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Enchant:AddRarityParameterStatusByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
parameterName: "[string]レアリティパラメータモデル名"
propertyId: "[string]パラメータの保有元リソースのプロパティID"
count: "[int]追加するパラメータの数"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("enchant").acquire.add_rarity_parameter_status_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
parameterName="[string]レアリティパラメータモデル名",
propertyId="[string]パラメータの保有元リソースのプロパティID",
count="[int]追加するパラメータの数",
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Enchant:SetRarityParameterStatusByUserId
ユーザーIDを指定してレアリティパラメータに任意の値を設定
通常の抽選/再抽選メカニズムを経ずに、指定されたユーザーの特定のプロパティにパラメータ値を直接設定します。
これはレアリティウェイトに関係なく任意のパラメータ値を割り当てることができる管理操作です。
更新後と更新前のパラメータ状態の両方が返されます。
数量指定可能なアクション:いいえ
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| parameterName | string | ✓ | ~ 128文字 | レアリティパラメータモデル名 このステータスの抽選条件を定義するレアリティパラメータモデルの名前です。最大パラメータ数、付与数の抽選重み、値の抽選プールを指定するモデルを参照します。 | ||
| propertyId | string | ✓ | ~ 1024文字 | パラメータの保有元リソースのプロパティID これらのレアリティパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。 | ||
| parameterValues | List<RarityParameterValue> | 0 ~ 10 items | レアリティパラメータの値リスト 付与された各スロットに対して重み付き抽選で選択された具体的なパラメータ値です。エントリ数は付与数の抽選で決定され、各エントリの値は値モデルプールから選択されます。最大パラメータ数より少ないエントリ数になる場合があります。 | |||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Enchant:SetRarityParameterStatusByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"parameterName": "[string]レアリティパラメータモデル名",
"propertyId": "[string]パラメータの保有元リソースのプロパティID",
"parameterValues": [
{
"name": "[string]名前",
"resourceName": "[string]リソースの名前",
"resourceValue": "[long]リソースの値"
}
],
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Enchant:SetRarityParameterStatusByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
parameterName: "[string]レアリティパラメータモデル名"
propertyId: "[string]パラメータの保有元リソースのプロパティID"
parameterValues:
- name: "[string]名前"
resourceName: "[string]リソースの名前"
resourceValue: "[long]リソースの値"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("enchant").acquire.set_rarity_parameter_status_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
parameterName="[string]レアリティパラメータモデル名",
propertyId="[string]パラメータの保有元リソースのプロパティID",
parameterValues={
{
name="[string]名前",
resourceName="[string]リソースの名前",
resourceValue="[long]リソースの値"
}
},
timeOffsetToken="[string]タイムオフセットトークン",
})