Documentation index for AI agents

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’: パラメータの数が指定された数と一致することを検証
    他のアクションを実行する前の前提条件チェックとして使用できます。

数量指定可能なアクション:はい

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
parameterNamestring
~ 128文字レアリティパラメータモデル名
このステータスの抽選条件を定義するレアリティパラメータモデルの名前です。最大パラメータ数、付与数の抽選重み、値の抽選プールを指定するモデルを参照します。
userIdstring
~ 128文字ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
propertyIdstring
~ 1024文字パラメータの保有元リソースのプロパティID
これらのレアリティパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。
verifyType文字列列挙型
enum {
  “havent”,
  “have”,
  “count”
}
検証の種類
定義説明
havent指定したパラメータを保有していないこと
have指定したパラメータを保有していること
count保有しているパラメータの数が指定数であること
parameterValueNamestring{verifyType} in [“havent”, “have”]
✓※
~ 64文字名前
この抽選エントリの識別子です。レアリティパラメータモデルの値プール内で一意である必要があります。抽選された際、この名前が結果のレアリティパラメータ値に保存されます。
※ verifyType が “havent”,“have"であれば 必須
parameterCountint{verifyType} == “count”
✓※
0 ~ 10検証するパラメータの数
※ verifyType が “count” であれば必須
multiplyValueSpecifyingQuantityboolfalse数量指定した際に、検証に使用する値も乗算するか
timeOffsetTokenstring~ 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個)。
合計値の制約は維持されます:固定されたものを含むすべてのパラメータ値の合計は常にモデルの合計値と等しくなります。
更新後と更新前のパラメータ状態の両方が返されます。

数量指定可能なアクション:いいえ

反転可能なアクション:いいえ

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userIdstring
~ 128文字ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
parameterNamestring
~ 128文字バランスパラメータモデル名
このステータスの抽選条件を定義するバランスパラメータモデルの名前です。合計値、配分方針、利用可能なパラメータスロットを指定するモデルを参照します。
propertyIdstring
~ 1024文字パラメータの保有元リソースのプロパティID
これらのバランスパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。
fixedParameterNamesList<string>[]0 ~ 10 items再抽選しないパラメータの名前リスト
timeOffsetTokenstring~ 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を指定してバランスパラメータに任意の値を設定

通常の抽選/再抽選メカニズムを経ずに、指定されたユーザーの特定のプロパティにパラメータ値を直接設定します。
これは任意のパラメータ値を割り当てることができる管理操作です。
更新後と更新前のパラメータ状態の両方が返されます。

数量指定可能なアクション:いいえ

反転可能なアクション:いいえ

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userIdstring
~ 128文字ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
parameterNamestring
~ 128文字バランスパラメータモデル名
このステータスの抽選条件を定義するバランスパラメータモデルの名前です。合計値、配分方針、利用可能なパラメータスロットを指定するモデルを参照します。
propertyIdstring
~ 1024文字パラメータの保有元リソースのプロパティID
これらのバランスパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。
parameterValuesList<BalanceParameterValue>
1 ~ 10 itemsバランスパラメータの値リスト
抽選処理後に各パラメータスロットに割り当てられた具体的な値です。各エントリはモデルで定義されたパラメータスロットに対応し、割り当てられた実際の数値を保持します。すべての値の合計はモデルで指定された合計値と等しくなります。
timeOffsetTokenstring~ 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個)。
固定されたパラメータは現在の値を保持し、固定されていないパラメータのみが再抽選されます。
更新後と更新前のパラメータ状態の両方が返されます。

数量指定可能なアクション:いいえ

反転可能なアクション:いいえ

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userIdstring
~ 128文字ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
parameterNamestring
~ 128文字レアリティパラメータモデル名
このステータスの抽選条件を定義するレアリティパラメータモデルの名前です。最大パラメータ数、付与数の抽選重み、値の抽選プールを指定するモデルを参照します。
propertyIdstring
~ 1024文字パラメータの保有元リソースのプロパティID
これらのレアリティパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。
fixedParameterNamesList<string>0 ~ 10 items再抽選しないパラメータの名前リスト
timeOffsetTokenstring~ 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)を指定し、モデルの最大パラメータ数が上限となります。
更新後と更新前のパラメータ状態の両方が返されます。

数量指定可能なアクション:はい

反転可能なアクション:いいえ

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userIdstring
~ 128文字ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
parameterNamestring
~ 128文字レアリティパラメータモデル名
このステータスの抽選条件を定義するレアリティパラメータモデルの名前です。最大パラメータ数、付与数の抽選重み、値の抽選プールを指定するモデルを参照します。
propertyIdstring
~ 1024文字パラメータの保有元リソースのプロパティID
これらのレアリティパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。
countint11 ~ 10追加するパラメータの数
timeOffsetTokenstring~ 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を指定してレアリティパラメータに任意の値を設定

通常の抽選/再抽選メカニズムを経ずに、指定されたユーザーの特定のプロパティにパラメータ値を直接設定します。
これはレアリティウェイトに関係なく任意のパラメータ値を割り当てることができる管理操作です。
更新後と更新前のパラメータ状態の両方が返されます。

数量指定可能なアクション:いいえ

反転可能なアクション:いいえ

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userIdstring
~ 128文字ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
parameterNamestring
~ 128文字レアリティパラメータモデル名
このステータスの抽選条件を定義するレアリティパラメータモデルの名前です。最大パラメータ数、付与数の抽選重み、値の抽選プールを指定するモデルを参照します。
propertyIdstring
~ 1024文字パラメータの保有元リソースのプロパティID
これらのレアリティパラメータが紐付けられている特定のゲームリソース(例: 武器や装備アイテム)を識別します。通常、GS2-Inventory のアイテムなどのリソースをプロパティ ID で参照します。
parameterValuesList<RarityParameterValue>0 ~ 10 itemsレアリティパラメータの値リスト
付与された各スロットに対して重み付き抽選で選択された具体的なパラメータ値です。エントリ数は付与数の抽選で決定され、各エントリの値は値モデルプールから選択されます。最大パラメータ数より少ないエントリ数になる場合があります。
timeOffsetTokenstring~ 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]タイムオフセットトークン",
})