GS2-Enchant Deploy/CDK リファレンス

GS2-Deployのスタックを作成する際に使用するテンプレートのフォーマットと、CDKによる各種言語のテンプレート出力の実装例

エンティティ

Deploy処理で操作の対象となるリソース

Namespace

ネームスペース

ネームスペースは、一つのプロジェクト内で同じサービスを異なる用途で複数利用するためのエンティティです。
GS2 の各サービスはネームスペース単位で管理されます。ネームスペースが異なれば、同じサービスでも完全に独立したデータ空間として扱われます。

そのため、各サービスの利用を開始するにあたってネームスペースを作成する必要があります。

Request

リソースの生成・更新リクエスト

有効化条件必須デフォルト値の制限説明
namestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
descriptionstring~ 1024文字説明文
transactionSettingTransactionSetting
トランザクション設定
エンチャントパラメータ操作時のトランザクションの処理方法を制御する設定です。
logSettingLogSettingログの出力設定
エンチャント操作のログデータを GS2-Log に出力するための設定です。GS2-Log のネームスペースを指定することで、バランスパラメータおよびレアリティパラメータ操作の API リクエスト・レスポンスログを収集できます。

GetAttr

!GetAttrタグで取得可能なリソースの生成結果

説明
ItemNamespace作成したネームスペース

実装例

Type: GS2::Enchant::Namespace
Properties:
  Name: namespace-0001
  Description: null
  TransactionSetting: 
    EnableAutoRun: true
    QueueNamespaceId: grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001
  LogSetting: 
    LoggingNamespaceId: grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001
import (
    "github.com/gs2io/gs2-golang-cdk/core"
    "github.com/gs2io/gs2-golang-cdk/enchant"
    "github.com/openlyinc/pointy"
)


SampleStack := core.NewStack()
enchant.NewNamespace(
    &SampleStack,
    "namespace-0001",
    enchant.NamespaceOptions{
        TransactionSetting: core.NewTransactionSetting(
            core.TransactionSettingOptions{
                QueueNamespaceId: pointy.String("grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001"),
            },
        ),
        LogSetting: &core.LogSetting{
            LoggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001",
        },
    },
)

println(SampleStack.Yaml())  // Generate Template
class SampleStack extends \Gs2Cdk\Core\Model\Stack
{
    function __construct() {
        parent::__construct();
        new \Gs2Cdk\Enchant\Model\Namespace_(
            stack: $this,
            name: "namespace-0001",
            options: new \Gs2Cdk\Enchant\Model\Options\NamespaceOptions(
                transactionSetting: new \Gs2Cdk\Core\Model\TransactionSetting(
                    new \Gs2Cdk\Core\Model\TransactionSettingOptions(
                        queueNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001"
                    )
                ),
                logSetting: new \Gs2Cdk\Core\Model\LogSetting(
                    loggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            )
        );
    }
}

print((new SampleStack())->yaml());  // Generate Template
class SampleStack extends io.gs2.cdk.core.model.Stack
{
    public SampleStack() {
        super();
        new io.gs2.cdk.enchant.model.Namespace(
                this,
                "namespace-0001",
                new io.gs2.cdk.enchant.model.options.NamespaceOptions()
                        .withTransactionSetting(new io.gs2.cdk.core.model.TransactionSetting(
                            new io.gs2.cdk.core.model.options.TransactionSettingOptions()
                                .withQueueNamespaceId("grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001")
                        ))
                        .withLogSetting(new io.gs2.cdk.core.model.LogSetting(
                            "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                        ))
        );
    }
}

System.out.println(new SampleStack().yaml());  // Generate Template
public class SampleStack : Gs2Cdk.Core.Model.Stack
{
    public SampleStack() {
        new Gs2Cdk.Gs2Enchant.Model.Namespace(
            stack: this,
            name: "namespace-0001",
            options: new Gs2Cdk.Gs2Enchant.Model.Options.NamespaceOptions
            {
                transactionSetting = new Gs2Cdk.Core.Model.TransactionSetting(
                    options: new Gs2Cdk.Core.Model.TransactionSettingOptions
                    {
                        queueNamespaceId = "grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001"
                    }
                ),
                logSetting = new Gs2Cdk.Core.Model.LogSetting(
                    loggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            }
        );
    }
}

Debug.Log(new SampleStack().Yaml());  // Generate Template
import core from "@/gs2cdk/core";
import enchant from "@/gs2cdk/enchant";

class SampleStack extends core.Stack
{
    public constructor() {
        super();
        new enchant.model.Namespace(
            this,
            "namespace-0001",
            {
                transactionSetting: new core.TransactionSetting(
                    {
                        queueNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001"
                    }
                ),
                logSetting: new core.LogSetting(
                    "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            }
        );
    }
}

console.log(new SampleStack().yaml());  // Generate Template
from gs2_cdk import Stack, core, enchant

class SampleStack(Stack):

    def __init__(self):
        super().__init__()
        enchant.Namespace(
            stack=self,
            name='namespace-0001',
            options=enchant.NamespaceOptions(
                transaction_setting=core.TransactionSetting(
                    options=core.TransactionSettingOptions(
                        queue_namespace_id='grn:gs2:ap-northeast-1:YourOwnerId:queue:queue-0001',
                    )
                ),
                log_setting=core.LogSetting(
                    logging_namespace_id='grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001',
                ),
            ),
        )

print(SampleStack().yaml())  # Generate Template

TransactionSetting

トランザクション設定

トランザクション設定は、トランザクションの実行方法・整合性・非同期処理・競合回避の仕組みを制御する設定です。
自動実行(AutoRun)、アトミック実行(AtomicCommit)、GS2-Distributor を利用した非同期実行、スクリプト結果の一括適用、GS2-JobQueue による入手アクションの非同期化などを組み合わせ、ゲームロジックに応じた堅牢なトランザクション管理を可能にします。

有効化条件必須デフォルト値の制限説明
enableAutoRunboolfalse発行したトランザクションをサーバーサイドで自動的に実行するか
enableAtomicCommitbool{enableAutoRun} == truefalseトランザクションの実行をアトミックにコミットするか
※ enableAutoRun が true であれば 有効
transactionUseDistributorbool{enableAtomicCommit} == truefalseトランザクションを非同期処理で実行する
※ enableAtomicCommit が true であれば 有効
commitScriptResultInUseDistributorbool{transactionUseDistributor} == truefalseスクリプトの結果コミット処理を非同期処理で実行するか
※ transactionUseDistributor が true であれば 有効
acquireActionUseJobQueuebool{enableAtomicCommit} == truefalse入手アクションを実行する際に GS2-JobQueue を使用するか
※ enableAtomicCommit が true であれば 有効
distributorNamespaceIdstring“grn:gs2:{region}:{ownerId}:distributor:default”~ 1024文字トランザクションの実行に使用する GS2-Distributor ネームスペース GRN
queueNamespaceIdstring“grn:gs2:{region}:{ownerId}:queue:default”~ 1024文字トランザクションの実行に使用する GS2-JobQueue のネームスペース GRN

LogSetting

ログの出力設定

ログデータの出力設定を管理します。この型は、ログデータを書き出すために使用される GS2-Log ネームスペースの識別子(Namespace ID)を保持します。
ログネームスペースID(loggingNamespaceId)には、ログデータを収集し保存する GS2-Log のネームスペースを、GRNの形式で指定します。
この設定をすることで、設定されたネームスペース内で発生したAPIリクエスト・レスポンスのログデータが、対象の GS2-Log ネームスペース側へ出力されるようになります。
GS2-Log ではリアルタイムでログが提供され、システムの監視や分析、デバッグなどに利用できます。

有効化条件必須デフォルト値の制限説明
loggingNamespaceIdstring
~ 1024文字ログを出力する GS2-Log のネームスペース GRN
「grn:gs2:」ではじまる GRN 形式のIDで指定する必要があります。

CurrentParameterMaster

現在アクティブなパラメータモデルのマスターデータ

現在ネームスペース内で有効な、パラメータモデルの定義を記述したマスターデータです。
GS2ではマスターデータの管理にJSON形式のファイルを使用します。
ファイルをアップロードすることで、実際にサーバーに設定を反映することができます。

JSONファイルを作成する方法として、マネージメントコンソール内にマスターデータエディタを提供しています。
また、よりゲームの運営に相応しいツールを作成し、適切なフォーマットのJSONファイルを書き出すことでもサービスを利用可能です。

Request

リソースの生成・更新リクエスト

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
mode文字列列挙型
enum {
  “direct”,
  “preUpload”
}
“direct”更新モード
定義説明
“direct”マスターデータを直接更新
“preUpload”マスターデータをアップロードしてから更新
settingsstring{mode} == “direct”
✓※
~ 5242880文字マスターデータ
※ mode が “direct” であれば必須
uploadTokenstring{mode} == “preUpload”
✓※
~ 1024文字事前アップロードで取得したトークン
アップロードしたマスターデータを適用するために使用されます。
※ mode が “preUpload” であれば必須

GetAttr

!GetAttrタグで取得可能なリソースの生成結果

説明
ItemCurrentParameterMaster更新された現在アクティブなパラメータモデルのマスターデータ

実装例

Type: GS2::Enchant::CurrentParameterMaster
Properties:
  NamespaceName: namespace-0001
  Mode: direct
  Settings: {
    "version": "2023-07-18",
    "balanceParameterModels": [
      {
        "name": "balance-0001",
        "totalValue": 100,
        "initialValueStrategy": "average",
        "parameters": [
          {
            "name": "parameter-0001",
            "metadata": "PARAMETER_0001"
          },
          {
            "name": "parameter-0002",
            "metadata": "PARAMETER_0002"
          },
          {
            "name": "parameter-0003",
            "metadata": "PARAMETER_0003"
          }
        ],
        "metadata": "BALANCE_0001"
      },
      {
        "name": "balance-0002",
        "totalValue": 200,
        "initialValueStrategy": "lottery",
        "parameters": [
          {
            "name": "parameter-0001",
            "metadata": "PARAMETER_0001"
          },
          {
            "name": "parameter-0002",
            "metadata": "PARAMETER_0002"
          },
          {
            "name": "parameter-0003",
            "metadata": "PARAMETER_0003"
          },
          {
            "name": "parameter-0004",
            "metadata": "PARAMETER_0004"
          }
        ],
        "metadata": "BALANCE_0002"
      },
      {
        "name": "balance-0003",
        "totalValue": 500,
        "initialValueStrategy": "average",
        "parameters": [
          {
            "name": "parameter-0001",
            "metadata": "PARAMETER_0001"
          },
          {
            "name": "parameter-0002",
            "metadata": "PARAMETER_0002"
          }
        ],
        "metadata": "BALANCE_0003"
      }
    ],
    "rarityParameterModels": [
      {
        "name": "rarity-0001",
        "maximumParameterCount": 5,
        "parameterCounts": [
          {
            "count": 0,
            "weight": 1
          },
          {
            "count": 1,
            "weight": 2
          },
          {
            "count": 2,
            "weight": 3
          }
        ],
        "parameters": [
          {
            "name": "parameter-0001",
            "metadata": "PARAMETER_0001",
            "resourceName": "resource-0001",
            "resourceValue": 10,
            "weight": 1
          },
          {
            "name": "parameter-0002",
            "metadata": "PARAMETER_0002",
            "resourceName": "resource-0002",
            "resourceValue": 20,
            "weight": 2
          },
          {
            "name": "parameter-0003",
            "metadata": "PARAMETER_0003",
            "resourceName": "resource-0003",
            "resourceValue": 30,
            "weight": 3
          }
        ],
        "metadata": "RARITY_0001"
      },
      {
        "name": "rarity-0002",
        "maximumParameterCount": 10,
        "parameterCounts": [
          {
            "count": 1,
            "weight": 10
          },
          {
            "count": 2,
            "weight": 20
          },
          {
            "count": 3,
            "weight": 30
          }
        ],
        "parameters": [
          {
            "name": "parameter-1001",
            "metadata": "PARAMETER_1001",
            "resourceName": "resource-1001",
            "resourceValue": 100,
            "weight": 10
          },
          {
            "name": "parameter-1002",
            "metadata": "PARAMETER_1002",
            "resourceName": "resource-1002",
            "resourceValue": 200,
            "weight": 20
          },
          {
            "name": "parameter-1003",
            "metadata": "PARAMETER_1003",
            "resourceName": "resource-1003",
            "resourceValue": 300,
            "weight": 30
          }
        ],
        "metadata": "RARITY_0002"
      },
      {
        "name": "rarity-0003",
        "maximumParameterCount": 3,
        "parameterCounts": [
          {
            "count": 2,
            "weight": 5
          },
          {
            "count": 3,
            "weight": 10
          },
          {
            "count": 4,
            "weight": 15
          }
        ],
        "parameters": [
          {
            "name": "parameter-2001",
            "metadata": "PARAMETER_2001",
            "resourceName": "resource-2001",
            "resourceValue": 1000,
            "weight": 2
          },
          {
            "name": "parameter-2002",
            "metadata": "PARAMETER_2002",
            "resourceName": "resource-2002",
            "resourceValue": 2000,
            "weight": 4
          },
          {
            "name": "parameter-2003",
            "metadata": "PARAMETER_2003",
            "resourceName": "resource-2003",
            "resourceValue": 3000,
            "weight": 6
          },
          {
            "name": "parameter-0004",
            "metadata": "PARAMETER_0004",
            "resourceName": "resource-2004",
            "resourceValue": 4000,
            "weight": 8
          }
        ],
        "metadata": "RARITY_0003"
      }
    ]
  }
  UploadToken: null
import (
    "github.com/gs2io/gs2-golang-cdk/core"
    "github.com/gs2io/gs2-golang-cdk/enchant"
    "github.com/openlyinc/pointy"
)


SampleStack := core.NewStack()
enchant.NewNamespace(
    &SampleStack,
    "namespace-0001",
    enchant.NamespaceOptions{},
).MasterData(
    []enchant.BalanceParameterModel{
        enchant.NewBalanceParameterModel(
            "balance-0001",
            100,
            enchant.BalanceParameterModelInitialValueStrategyAverage,
            []enchant.BalanceParameterValueModel{
                enchant.NewBalanceParameterValueModel(
                    "parameter-0001",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0001"),
                    },
                ),
                enchant.NewBalanceParameterValueModel(
                    "parameter-0002",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0002"),
                    },
                ),
                enchant.NewBalanceParameterValueModel(
                    "parameter-0003",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0003"),
                    },
                ),
            },
            enchant.BalanceParameterModelOptions{
                Metadata: pointy.String("BALANCE_0001"),
            },
        ),
        enchant.NewBalanceParameterModel(
            "balance-0002",
            200,
            enchant.BalanceParameterModelInitialValueStrategyLottery,
            []enchant.BalanceParameterValueModel{
                enchant.NewBalanceParameterValueModel(
                    "parameter-0001",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0001"),
                    },
                ),
                enchant.NewBalanceParameterValueModel(
                    "parameter-0002",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0002"),
                    },
                ),
                enchant.NewBalanceParameterValueModel(
                    "parameter-0003",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0003"),
                    },
                ),
                enchant.NewBalanceParameterValueModel(
                    "parameter-0004",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0004"),
                    },
                ),
            },
            enchant.BalanceParameterModelOptions{
                Metadata: pointy.String("BALANCE_0002"),
            },
        ),
        enchant.NewBalanceParameterModel(
            "balance-0003",
            500,
            enchant.BalanceParameterModelInitialValueStrategyAverage,
            []enchant.BalanceParameterValueModel{
                enchant.NewBalanceParameterValueModel(
                    "parameter-0001",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0001"),
                    },
                ),
                enchant.NewBalanceParameterValueModel(
                    "parameter-0002",
                    enchant.BalanceParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0002"),
                    },
                ),
            },
            enchant.BalanceParameterModelOptions{
                Metadata: pointy.String("BALANCE_0003"),
            },
        ),
    },
    []enchant.RarityParameterModel{
        enchant.NewRarityParameterModel(
            "rarity-0001",
            5,
            []enchant.RarityParameterCountModel{
                enchant.NewRarityParameterCountModel(
                    0,
                    1,
                    enchant.RarityParameterCountModelOptions{},
                ),
                enchant.NewRarityParameterCountModel(
                    1,
                    2,
                    enchant.RarityParameterCountModelOptions{},
                ),
                enchant.NewRarityParameterCountModel(
                    2,
                    3,
                    enchant.RarityParameterCountModelOptions{},
                ),
            },
            []enchant.RarityParameterValueModel{
                enchant.NewRarityParameterValueModel(
                    "parameter-0001",
                    "resource-0001",
                    10,
                    1,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0001"),
                    },
                ),
                enchant.NewRarityParameterValueModel(
                    "parameter-0002",
                    "resource-0002",
                    20,
                    2,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0002"),
                    },
                ),
                enchant.NewRarityParameterValueModel(
                    "parameter-0003",
                    "resource-0003",
                    30,
                    3,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0003"),
                    },
                ),
            },
            enchant.RarityParameterModelOptions{
                Metadata: pointy.String("RARITY_0001"),
            },
        ),
        enchant.NewRarityParameterModel(
            "rarity-0002",
            10,
            []enchant.RarityParameterCountModel{
                enchant.NewRarityParameterCountModel(
                    1,
                    10,
                    enchant.RarityParameterCountModelOptions{},
                ),
                enchant.NewRarityParameterCountModel(
                    2,
                    20,
                    enchant.RarityParameterCountModelOptions{},
                ),
                enchant.NewRarityParameterCountModel(
                    3,
                    30,
                    enchant.RarityParameterCountModelOptions{},
                ),
            },
            []enchant.RarityParameterValueModel{
                enchant.NewRarityParameterValueModel(
                    "parameter-1001",
                    "resource-1001",
                    100,
                    10,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_1001"),
                    },
                ),
                enchant.NewRarityParameterValueModel(
                    "parameter-1002",
                    "resource-1002",
                    200,
                    20,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_1002"),
                    },
                ),
                enchant.NewRarityParameterValueModel(
                    "parameter-1003",
                    "resource-1003",
                    300,
                    30,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_1003"),
                    },
                ),
            },
            enchant.RarityParameterModelOptions{
                Metadata: pointy.String("RARITY_0002"),
            },
        ),
        enchant.NewRarityParameterModel(
            "rarity-0003",
            3,
            []enchant.RarityParameterCountModel{
                enchant.NewRarityParameterCountModel(
                    2,
                    5,
                    enchant.RarityParameterCountModelOptions{},
                ),
                enchant.NewRarityParameterCountModel(
                    3,
                    10,
                    enchant.RarityParameterCountModelOptions{},
                ),
                enchant.NewRarityParameterCountModel(
                    4,
                    15,
                    enchant.RarityParameterCountModelOptions{},
                ),
            },
            []enchant.RarityParameterValueModel{
                enchant.NewRarityParameterValueModel(
                    "parameter-2001",
                    "resource-2001",
                    1000,
                    2,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_2001"),
                    },
                ),
                enchant.NewRarityParameterValueModel(
                    "parameter-2002",
                    "resource-2002",
                    2000,
                    4,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_2002"),
                    },
                ),
                enchant.NewRarityParameterValueModel(
                    "parameter-2003",
                    "resource-2003",
                    3000,
                    6,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_2003"),
                    },
                ),
                enchant.NewRarityParameterValueModel(
                    "parameter-0004",
                    "resource-2004",
                    4000,
                    8,
                    enchant.RarityParameterValueModelOptions{
                        Metadata: pointy.String("PARAMETER_0004"),
                    },
                ),
            },
            enchant.RarityParameterModelOptions{
                Metadata: pointy.String("RARITY_0003"),
            },
        ),
    },
)

println(SampleStack.Yaml())  // Generate Template
class SampleStack extends \Gs2Cdk\Core\Model\Stack
{
    function __construct() {
        parent::__construct();
        (new \Gs2Cdk\Enchant\Model\Namespace_(
            stack: $this,
            name: "namespace-0001"
        ))->masterData(
            [
                new \Gs2Cdk\Enchant\Model\BalanceParameterModel(
                    name:"balance-0001",
                    totalValue:100,
                    initialValueStrategy: \Gs2Cdk\Enchant\Model\Enums\BalanceParameterModelInitialValueStrategy::AVERAGE,
                    parameters:[
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0001",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0001",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0002",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0002",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0003",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0003",
                            )
                        ),
                    ],
                    options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterModelOptions(
                        metadata:"BALANCE_0001"
                    )
                ),
                new \Gs2Cdk\Enchant\Model\BalanceParameterModel(
                    name:"balance-0002",
                    totalValue:200,
                    initialValueStrategy: \Gs2Cdk\Enchant\Model\Enums\BalanceParameterModelInitialValueStrategy::LOTTERY,
                    parameters:[
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0001",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0001",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0002",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0002",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0003",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0003",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0004",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0004",
                            )
                        ),
                    ],
                    options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterModelOptions(
                        metadata:"BALANCE_0002"
                    )
                ),
                new \Gs2Cdk\Enchant\Model\BalanceParameterModel(
                    name:"balance-0003",
                    totalValue:500,
                    initialValueStrategy: \Gs2Cdk\Enchant\Model\Enums\BalanceParameterModelInitialValueStrategy::AVERAGE,
                    parameters:[
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0001",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0001",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\BalanceParameterValueModel(
                            name: "parameter-0002",
                            options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterValueModelOptions(
                                metadata: "PARAMETER_0002",
                            )
                        ),
                    ],
                    options: new \Gs2Cdk\Enchant\Model\Options\BalanceParameterModelOptions(
                        metadata:"BALANCE_0003"
                    )
                )
            ],
            [
                new \Gs2Cdk\Enchant\Model\RarityParameterModel(
                    name:"rarity-0001",
                    maximumParameterCount:5,
                    parameterCounts:[
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 0,
                            weight: 1,    
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 1,
                            weight: 2,    
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 2,
                            weight: 3,    
                        ),
                    ],
                    parameters:[
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-0001",
                            resourceName: "resource-0001",
                            resourceValue: 10,
                            weight: 1,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_0001",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-0002",
                            resourceName: "resource-0002",
                            resourceValue: 20,
                            weight: 2,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_0002",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-0003",
                            resourceName: "resource-0003",
                            resourceValue: 30,
                            weight: 3,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_0003",
                            )
                        ),
                    ],
                    options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterModelOptions(
                        metadata:"RARITY_0001"
                    )
                ),
                new \Gs2Cdk\Enchant\Model\RarityParameterModel(
                    name:"rarity-0002",
                    maximumParameterCount:10,
                    parameterCounts:[
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 1,
                            weight: 10,    
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 2,
                            weight: 20,    
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 3,
                            weight: 30,    
                        ),
                    ],
                    parameters:[
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-1001",
                            resourceName: "resource-1001",
                            resourceValue: 100,
                            weight: 10,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_1001",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-1002",
                            resourceName: "resource-1002",
                            resourceValue: 200,
                            weight: 20,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_1002",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-1003",
                            resourceName: "resource-1003",
                            resourceValue: 300,
                            weight: 30,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_1003",
                            )
                        ),
                    ],
                    options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterModelOptions(
                        metadata:"RARITY_0002"
                    )
                ),
                new \Gs2Cdk\Enchant\Model\RarityParameterModel(
                    name:"rarity-0003",
                    maximumParameterCount:3,
                    parameterCounts:[
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 2,
                            weight: 5,    
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 3,
                            weight: 10,    
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterCountModel(
                            count: 4,
                            weight: 15,    
                        ),
                    ],
                    parameters:[
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-2001",
                            resourceName: "resource-2001",
                            resourceValue: 1000,
                            weight: 2,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_2001",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-2002",
                            resourceName: "resource-2002",
                            resourceValue: 2000,
                            weight: 4,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_2002",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-2003",
                            resourceName: "resource-2003",
                            resourceValue: 3000,
                            weight: 6,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_2003",
                            )
                        ),
                        new \Gs2Cdk\Enchant\Model\RarityParameterValueModel(
                            name: "parameter-0004",
                            resourceName: "resource-2004",
                            resourceValue: 4000,
                            weight: 8,
                            options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterValueModelOptions(
                                metadata: "PARAMETER_0004",
                            )
                        ),
                    ],
                    options: new \Gs2Cdk\Enchant\Model\Options\RarityParameterModelOptions(
                        metadata:"RARITY_0003"
                    )
                )
            ]
        );
    }
}

print((new SampleStack())->yaml());  // Generate Template
class SampleStack extends io.gs2.cdk.core.model.Stack
{
    public SampleStack() {
        super();
        new io.gs2.cdk.enchant.model.Namespace(
            this,
            "namespace-0001"
        ).masterData(
            Arrays.asList(
                new io.gs2.cdk.enchant.model.BalanceParameterModel(
                    "balance-0001",
                    100L,
                    io.gs2.cdk.enchant.model.enums.BalanceParameterModelInitialValueStrategy.AVERAGE,
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0001",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0001")
                        ),
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0002",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0002")
                        ),
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0003",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0003")
                        )
                    ),
                    new io.gs2.cdk.enchant.model.options.BalanceParameterModelOptions()
                        .withMetadata("BALANCE_0001")
                ),
                new io.gs2.cdk.enchant.model.BalanceParameterModel(
                    "balance-0002",
                    200L,
                    io.gs2.cdk.enchant.model.enums.BalanceParameterModelInitialValueStrategy.LOTTERY,
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0001",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0001")
                        ),
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0002",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0002")
                        ),
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0003",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0003")
                        ),
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0004",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0004")
                        )
                    ),
                    new io.gs2.cdk.enchant.model.options.BalanceParameterModelOptions()
                        .withMetadata("BALANCE_0002")
                ),
                new io.gs2.cdk.enchant.model.BalanceParameterModel(
                    "balance-0003",
                    500L,
                    io.gs2.cdk.enchant.model.enums.BalanceParameterModelInitialValueStrategy.AVERAGE,
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0001",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0001")
                        ),
                        new io.gs2.cdk.enchant.model.BalanceParameterValueModel(
                            "parameter-0002",
                            new io.gs2.cdk.enchant.model.options.BalanceParameterValueModelOptions()
                                .withMetadata("PARAMETER_0002")
                        )
                    ),
                    new io.gs2.cdk.enchant.model.options.BalanceParameterModelOptions()
                        .withMetadata("BALANCE_0003")
                )
            ),
            Arrays.asList(
                new io.gs2.cdk.enchant.model.RarityParameterModel(
                    "rarity-0001",
                    5,
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            0,
                            1        
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            1,
                            2        
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            2,
                            3        
                        )
                    ),
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-0001",
                            "resource-0001",
                            10L,
                            1,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_0001")
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-0002",
                            "resource-0002",
                            20L,
                            2,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_0002")
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-0003",
                            "resource-0003",
                            30L,
                            3,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_0003")
                        )
                    ),
                    new io.gs2.cdk.enchant.model.options.RarityParameterModelOptions()
                        .withMetadata("RARITY_0001")
                ),
                new io.gs2.cdk.enchant.model.RarityParameterModel(
                    "rarity-0002",
                    10,
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            1,
                            10        
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            2,
                            20        
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            3,
                            30        
                        )
                    ),
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-1001",
                            "resource-1001",
                            100L,
                            10,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_1001")
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-1002",
                            "resource-1002",
                            200L,
                            20,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_1002")
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-1003",
                            "resource-1003",
                            300L,
                            30,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_1003")
                        )
                    ),
                    new io.gs2.cdk.enchant.model.options.RarityParameterModelOptions()
                        .withMetadata("RARITY_0002")
                ),
                new io.gs2.cdk.enchant.model.RarityParameterModel(
                    "rarity-0003",
                    3,
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            2,
                            5        
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            3,
                            10        
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterCountModel(
                            4,
                            15        
                        )
                    ),
                    Arrays.asList(
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-2001",
                            "resource-2001",
                            1000L,
                            2,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_2001")
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-2002",
                            "resource-2002",
                            2000L,
                            4,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_2002")
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-2003",
                            "resource-2003",
                            3000L,
                            6,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_2003")
                        ),
                        new io.gs2.cdk.enchant.model.RarityParameterValueModel(
                            "parameter-0004",
                            "resource-2004",
                            4000L,
                            8,
                            new io.gs2.cdk.enchant.model.options.RarityParameterValueModelOptions()
                                .withMetadata("PARAMETER_0004")
                        )
                    ),
                    new io.gs2.cdk.enchant.model.options.RarityParameterModelOptions()
                        .withMetadata("RARITY_0003")
                )
            )
        );
    }
}

System.out.println(new SampleStack().yaml());  // Generate Template
public class SampleStack : Gs2Cdk.Core.Model.Stack
{
    public SampleStack() {
        new Gs2Cdk.Gs2Enchant.Model.Namespace(
            stack: this,
            name: "namespace-0001"
        ).MasterData(
            new Gs2Cdk.Gs2Enchant.Model.BalanceParameterModel[] {
                new Gs2Cdk.Gs2Enchant.Model.BalanceParameterModel(
                    name: "balance-0001",
                    totalValue: 100L,
                    initialValueStrategy: Gs2Cdk.Gs2Enchant.Model.Enums.BalanceParameterModelInitialValueStrategy.Average,
                    parameters: new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0001",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0001"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0002",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0002"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0003",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0003"
                            }
                        )
                    },
                    options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterModelOptions
                    {
                        metadata = "BALANCE_0001"
                    }
                ),
                new Gs2Cdk.Gs2Enchant.Model.BalanceParameterModel(
                    name: "balance-0002",
                    totalValue: 200L,
                    initialValueStrategy: Gs2Cdk.Gs2Enchant.Model.Enums.BalanceParameterModelInitialValueStrategy.Lottery,
                    parameters: new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0001",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0001"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0002",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0002"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0003",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0003"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0004",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0004"
                            }
                        )
                    },
                    options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterModelOptions
                    {
                        metadata = "BALANCE_0002"
                    }
                ),
                new Gs2Cdk.Gs2Enchant.Model.BalanceParameterModel(
                    name: "balance-0003",
                    totalValue: 500L,
                    initialValueStrategy: Gs2Cdk.Gs2Enchant.Model.Enums.BalanceParameterModelInitialValueStrategy.Average,
                    parameters: new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0001",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0001"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.BalanceParameterValueModel(
                            name: "parameter-0002",
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0002"
                            }
                        )
                    },
                    options: new Gs2Cdk.Gs2Enchant.Model.Options.BalanceParameterModelOptions
                    {
                        metadata = "BALANCE_0003"
                    }
                )
            },
            new Gs2Cdk.Gs2Enchant.Model.RarityParameterModel[] {
                new Gs2Cdk.Gs2Enchant.Model.RarityParameterModel(
                    name: "rarity-0001",
                    maximumParameterCount: 5,
                    parameterCounts: new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 0,
                            weight: 1    
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 1,
                            weight: 2    
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 2,
                            weight: 3    
                        )
                    },
                    parameters: new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-0001",
                            resourceName: "resource-0001",
                            resourceValue: 10L,
                            weight: 1,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0001"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-0002",
                            resourceName: "resource-0002",
                            resourceValue: 20L,
                            weight: 2,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0002"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-0003",
                            resourceName: "resource-0003",
                            resourceValue: 30L,
                            weight: 3,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0003"
                            }
                        )
                    },
                    options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterModelOptions
                    {
                        metadata = "RARITY_0001"
                    }
                ),
                new Gs2Cdk.Gs2Enchant.Model.RarityParameterModel(
                    name: "rarity-0002",
                    maximumParameterCount: 10,
                    parameterCounts: new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 1,
                            weight: 10    
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 2,
                            weight: 20    
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 3,
                            weight: 30    
                        )
                    },
                    parameters: new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-1001",
                            resourceName: "resource-1001",
                            resourceValue: 100L,
                            weight: 10,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_1001"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-1002",
                            resourceName: "resource-1002",
                            resourceValue: 200L,
                            weight: 20,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_1002"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-1003",
                            resourceName: "resource-1003",
                            resourceValue: 300L,
                            weight: 30,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_1003"
                            }
                        )
                    },
                    options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterModelOptions
                    {
                        metadata = "RARITY_0002"
                    }
                ),
                new Gs2Cdk.Gs2Enchant.Model.RarityParameterModel(
                    name: "rarity-0003",
                    maximumParameterCount: 3,
                    parameterCounts: new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 2,
                            weight: 5    
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 3,
                            weight: 10    
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterCountModel(
                            count: 4,
                            weight: 15    
                        )
                    },
                    parameters: new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel[]
                    {
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-2001",
                            resourceName: "resource-2001",
                            resourceValue: 1000L,
                            weight: 2,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_2001"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-2002",
                            resourceName: "resource-2002",
                            resourceValue: 2000L,
                            weight: 4,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_2002"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-2003",
                            resourceName: "resource-2003",
                            resourceValue: 3000L,
                            weight: 6,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_2003"
                            }
                        ),
                        new Gs2Cdk.Gs2Enchant.Model.RarityParameterValueModel(
                            name: "parameter-0004",
                            resourceName: "resource-2004",
                            resourceValue: 4000L,
                            weight: 8,
                            options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterValueModelOptions
                            {
                                metadata = "PARAMETER_0004"
                            }
                        )
                    },
                    options: new Gs2Cdk.Gs2Enchant.Model.Options.RarityParameterModelOptions
                    {
                        metadata = "RARITY_0003"
                    }
                )
            }
        );
    }
}

Debug.Log(new SampleStack().Yaml());  // Generate Template
import core from "@/gs2cdk/core";
import enchant from "@/gs2cdk/enchant";

class SampleStack extends core.Stack
{
    public constructor() {
        super();
        new enchant.model.Namespace(
            this,
            "namespace-0001",
        ).masterData(
            [
                new enchant.model.BalanceParameterModel(
                    "balance-0001",
                    100,
                    enchant.model.BalanceParameterModelInitialValueStrategy.AVERAGE,
                    [
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0001",
                            {
                                metadata: "PARAMETER_0001"
                            }
                        ),
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0002",
                            {
                                metadata: "PARAMETER_0002"
                            }
                        ),
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0003",
                            {
                                metadata: "PARAMETER_0003"
                            }
                        ),
                    ],
                    {
                        metadata: "BALANCE_0001"
                    }
                ),
                new enchant.model.BalanceParameterModel(
                    "balance-0002",
                    200,
                    enchant.model.BalanceParameterModelInitialValueStrategy.LOTTERY,
                    [
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0001",
                            {
                                metadata: "PARAMETER_0001"
                            }
                        ),
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0002",
                            {
                                metadata: "PARAMETER_0002"
                            }
                        ),
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0003",
                            {
                                metadata: "PARAMETER_0003"
                            }
                        ),
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0004",
                            {
                                metadata: "PARAMETER_0004"
                            }
                        ),
                    ],
                    {
                        metadata: "BALANCE_0002"
                    }
                ),
                new enchant.model.BalanceParameterModel(
                    "balance-0003",
                    500,
                    enchant.model.BalanceParameterModelInitialValueStrategy.AVERAGE,
                    [
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0001",
                            {
                                metadata: "PARAMETER_0001"
                            }
                        ),
                        new enchant.model.BalanceParameterValueModel(
                            "parameter-0002",
                            {
                                metadata: "PARAMETER_0002"
                            }
                        ),
                    ],
                    {
                        metadata: "BALANCE_0003"
                    }
                )
            ],
            [
                new enchant.model.RarityParameterModel(
                    "rarity-0001",
                    5,
                    [
                        new enchant.model.RarityParameterCountModel(
                            0,
                            1        
                        ),
                        new enchant.model.RarityParameterCountModel(
                            1,
                            2        
                        ),
                        new enchant.model.RarityParameterCountModel(
                            2,
                            3        
                        ),
                    ],
                    [
                        new enchant.model.RarityParameterValueModel(
                            "parameter-0001",
                            "resource-0001",
                            10,
                            1,
                            {
                                metadata: "PARAMETER_0001"
                            }
                        ),
                        new enchant.model.RarityParameterValueModel(
                            "parameter-0002",
                            "resource-0002",
                            20,
                            2,
                            {
                                metadata: "PARAMETER_0002"
                            }
                        ),
                        new enchant.model.RarityParameterValueModel(
                            "parameter-0003",
                            "resource-0003",
                            30,
                            3,
                            {
                                metadata: "PARAMETER_0003"
                            }
                        ),
                    ],
                    {
                        metadata: "RARITY_0001"
                    }
                ),
                new enchant.model.RarityParameterModel(
                    "rarity-0002",
                    10,
                    [
                        new enchant.model.RarityParameterCountModel(
                            1,
                            10        
                        ),
                        new enchant.model.RarityParameterCountModel(
                            2,
                            20        
                        ),
                        new enchant.model.RarityParameterCountModel(
                            3,
                            30        
                        ),
                    ],
                    [
                        new enchant.model.RarityParameterValueModel(
                            "parameter-1001",
                            "resource-1001",
                            100,
                            10,
                            {
                                metadata: "PARAMETER_1001"
                            }
                        ),
                        new enchant.model.RarityParameterValueModel(
                            "parameter-1002",
                            "resource-1002",
                            200,
                            20,
                            {
                                metadata: "PARAMETER_1002"
                            }
                        ),
                        new enchant.model.RarityParameterValueModel(
                            "parameter-1003",
                            "resource-1003",
                            300,
                            30,
                            {
                                metadata: "PARAMETER_1003"
                            }
                        ),
                    ],
                    {
                        metadata: "RARITY_0002"
                    }
                ),
                new enchant.model.RarityParameterModel(
                    "rarity-0003",
                    3,
                    [
                        new enchant.model.RarityParameterCountModel(
                            2,
                            5        
                        ),
                        new enchant.model.RarityParameterCountModel(
                            3,
                            10        
                        ),
                        new enchant.model.RarityParameterCountModel(
                            4,
                            15        
                        ),
                    ],
                    [
                        new enchant.model.RarityParameterValueModel(
                            "parameter-2001",
                            "resource-2001",
                            1000,
                            2,
                            {
                                metadata: "PARAMETER_2001"
                            }
                        ),
                        new enchant.model.RarityParameterValueModel(
                            "parameter-2002",
                            "resource-2002",
                            2000,
                            4,
                            {
                                metadata: "PARAMETER_2002"
                            }
                        ),
                        new enchant.model.RarityParameterValueModel(
                            "parameter-2003",
                            "resource-2003",
                            3000,
                            6,
                            {
                                metadata: "PARAMETER_2003"
                            }
                        ),
                        new enchant.model.RarityParameterValueModel(
                            "parameter-0004",
                            "resource-2004",
                            4000,
                            8,
                            {
                                metadata: "PARAMETER_0004"
                            }
                        ),
                    ],
                    {
                        metadata: "RARITY_0003"
                    }
                )
            ]
        );
    }
}

console.log(new SampleStack().yaml());  // Generate Template
from gs2_cdk import Stack, core, enchant

class SampleStack(Stack):

    def __init__(self):
        super().__init__()
        enchant.Namespace(
            stack=self,
            name="namespace-0001",
        ).master_data(
            balance_parameter_models=[
                enchant.BalanceParameterModel(
                    name='balance-0001',
                    total_value=100,
                    initial_value_strategy=enchant.BalanceParameterModelInitialValueStrategy.AVERAGE,
                    parameters=[
                        enchant.BalanceParameterValueModel(
                            name='parameter-0001',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0001',
                            ),
                        ),
                        enchant.BalanceParameterValueModel(
                            name='parameter-0002',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0002',
                            ),
                        ),
                        enchant.BalanceParameterValueModel(
                            name='parameter-0003',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0003',
                            ),
                        ),
                    ],
                    options=enchant.BalanceParameterModelOptions(
                        metadata = 'BALANCE_0001'
                    ),
                ),
                enchant.BalanceParameterModel(
                    name='balance-0002',
                    total_value=200,
                    initial_value_strategy=enchant.BalanceParameterModelInitialValueStrategy.LOTTERY,
                    parameters=[
                        enchant.BalanceParameterValueModel(
                            name='parameter-0001',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0001',
                            ),
                        ),
                        enchant.BalanceParameterValueModel(
                            name='parameter-0002',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0002',
                            ),
                        ),
                        enchant.BalanceParameterValueModel(
                            name='parameter-0003',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0003',
                            ),
                        ),
                        enchant.BalanceParameterValueModel(
                            name='parameter-0004',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0004',
                            ),
                        ),
                    ],
                    options=enchant.BalanceParameterModelOptions(
                        metadata = 'BALANCE_0002'
                    ),
                ),
                enchant.BalanceParameterModel(
                    name='balance-0003',
                    total_value=500,
                    initial_value_strategy=enchant.BalanceParameterModelInitialValueStrategy.AVERAGE,
                    parameters=[
                        enchant.BalanceParameterValueModel(
                            name='parameter-0001',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0001',
                            ),
                        ),
                        enchant.BalanceParameterValueModel(
                            name='parameter-0002',
                            options=enchant.BalanceParameterValueModelOptions(
                                metadata='PARAMETER_0002',
                            ),
                        ),
                    ],
                    options=enchant.BalanceParameterModelOptions(
                        metadata = 'BALANCE_0003'
                    ),
                ),
            ],
            rarity_parameter_models=[
                enchant.RarityParameterModel(
                    name='rarity-0001',
                    maximum_parameter_count=5,
                    parameter_counts=[
                        enchant.RarityParameterCountModel(
                            count=0,
                            weight=1,        
                        ),
                        enchant.RarityParameterCountModel(
                            count=1,
                            weight=2,        
                        ),
                        enchant.RarityParameterCountModel(
                            count=2,
                            weight=3,        
                        ),
                    ],
                    parameters=[
                        enchant.RarityParameterValueModel(
                            name='parameter-0001',
                            resource_name='resource-0001',
                            resource_value=10,
                            weight=1,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_0001',
                            ),
                        ),
                        enchant.RarityParameterValueModel(
                            name='parameter-0002',
                            resource_name='resource-0002',
                            resource_value=20,
                            weight=2,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_0002',
                            ),
                        ),
                        enchant.RarityParameterValueModel(
                            name='parameter-0003',
                            resource_name='resource-0003',
                            resource_value=30,
                            weight=3,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_0003',
                            ),
                        ),
                    ],
                    options=enchant.RarityParameterModelOptions(
                        metadata = 'RARITY_0001'
                    ),
                ),
                enchant.RarityParameterModel(
                    name='rarity-0002',
                    maximum_parameter_count=10,
                    parameter_counts=[
                        enchant.RarityParameterCountModel(
                            count=1,
                            weight=10,        
                        ),
                        enchant.RarityParameterCountModel(
                            count=2,
                            weight=20,        
                        ),
                        enchant.RarityParameterCountModel(
                            count=3,
                            weight=30,        
                        ),
                    ],
                    parameters=[
                        enchant.RarityParameterValueModel(
                            name='parameter-1001',
                            resource_name='resource-1001',
                            resource_value=100,
                            weight=10,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_1001',
                            ),
                        ),
                        enchant.RarityParameterValueModel(
                            name='parameter-1002',
                            resource_name='resource-1002',
                            resource_value=200,
                            weight=20,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_1002',
                            ),
                        ),
                        enchant.RarityParameterValueModel(
                            name='parameter-1003',
                            resource_name='resource-1003',
                            resource_value=300,
                            weight=30,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_1003',
                            ),
                        ),
                    ],
                    options=enchant.RarityParameterModelOptions(
                        metadata = 'RARITY_0002'
                    ),
                ),
                enchant.RarityParameterModel(
                    name='rarity-0003',
                    maximum_parameter_count=3,
                    parameter_counts=[
                        enchant.RarityParameterCountModel(
                            count=2,
                            weight=5,        
                        ),
                        enchant.RarityParameterCountModel(
                            count=3,
                            weight=10,        
                        ),
                        enchant.RarityParameterCountModel(
                            count=4,
                            weight=15,        
                        ),
                    ],
                    parameters=[
                        enchant.RarityParameterValueModel(
                            name='parameter-2001',
                            resource_name='resource-2001',
                            resource_value=1000,
                            weight=2,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_2001',
                            ),
                        ),
                        enchant.RarityParameterValueModel(
                            name='parameter-2002',
                            resource_name='resource-2002',
                            resource_value=2000,
                            weight=4,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_2002',
                            ),
                        ),
                        enchant.RarityParameterValueModel(
                            name='parameter-2003',
                            resource_name='resource-2003',
                            resource_value=3000,
                            weight=6,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_2003',
                            ),
                        ),
                        enchant.RarityParameterValueModel(
                            name='parameter-0004',
                            resource_name='resource-2004',
                            resource_value=4000,
                            weight=8,
                            options=enchant.RarityParameterValueModelOptions(
                                metadata='PARAMETER_0004',
                            ),
                        ),
                    ],
                    options=enchant.RarityParameterModelOptions(
                        metadata = 'RARITY_0003'
                    ),
                ),
            ],
        )

print(SampleStack().yaml())  # Generate Template

BalanceParameterModel

バランスパラメータモデル

バランスパラメータの抽選条件を定義します。
バランスパラメータは固定の合計値を複数のパラメータスロットに分配します。例えば、合計パワーが100の武器に対して ATK=60、DEF=30、SPD=10 のように配分されます。初期値の設定方針により値の割り当て方法が決まります:average は均等に分配し、lottery は合計値をランダムに配分します。

有効化条件必須デフォルト値の制限説明
balanceParameterModelIdstring
~ 1024文字バランスパラメータモデル GRN
※ サーバーが自動で設定
namestring
~ 128文字バランスパラメータモデル名
バランスパラメータモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
metadatastring~ 2048文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。
totalValuelong
0 ~ 9223372036854775805合計値
すべてのパラメータスロットに分配される固定の合計値です。パラメータが抽選される際、使用される配分方針に関わらず、個々の値の合計は常にこの合計値になります。
initialValueStrategy文字列列挙型
enum {
  “average”,
  “lottery”
}
“average”初期値の設定方針
初回割り当て時に合計値をパラメータスロットにどのように分配するかを決定します。average は合計値をすべてのパラメータに均等に分配し、lottery は合計値をランダムに分配してバラエティに富んだパラメータの組み合わせを作成します。
定義説明
“average”平均値
“lottery”抽選
parametersList<BalanceParameterValueModel>
1 ~ 10 itemsバランスパラメータ値モデルのリスト
このバランスパラメータで利用可能なパラメータスロットを定義します。各エントリは名前付きパラメータスロット(例: ATK、DEF、SPD)をオプションのメタデータとともに指定します。合計値はこれらのスロットに分配されます。

BalanceParameterValueModel

バランスパラメータ値モデル

バランスパラメータ内で利用可能な単一のパラメータスロットを定義します。各エントリは、抽選処理中に合計値の一部を受け取る名前付きスロット(例: ATK、DEF、SPD)を指定します。

有効化条件必須デフォルト値の制限説明
namestring
~ 64文字名前
このパラメータスロットの識別子(例: ATK、DEF、SPD)です。バランスパラメータモデル内で一意である必要があります。抽選されたパラメータ値の保存・取得時にキーとして使用されます。
metadatastring~ 512文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。

RarityParameterModel

レアリティパラメータモデル

レアリティパラメータの抽選条件を定義します。レアリティパラメータは重み付き抽選システムを使用して、付与されるパラメータの数と割り当てられる具体的な値の両方を決定します。まず、付与数モデルのリストから重み付き抽選により埋めるパラメータスロット数が決定されます。次に、各スロットの値がパラメータ値モデルのリストから重み付き抽選で選択され、制御された確率分布によるランダムな装備属性を提供します。

有効化条件必須デフォルト値の制限説明
rarityParameterModelIdstring
~ 1024文字レアリティパラメータモデル GRN
※ サーバーが自動で設定
namestring
~ 128文字レアリティパラメータモデル名
レアリティパラメータモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
metadatastring~ 2048文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。
maximumParameterCountint
1 ~ 10付与するパラメータの最大数
リソースに付与できるパラメータスロット数の上限です。実際に付与される数は付与数モデルのリストからの重み付き抽選で決定されますが、この値を超えることはありません。
parameterCountsList<RarityParameterCountModel>
1 ~ 10 itemsレアリティパラメータの付与数モデルのリスト
付与されるパラメータスロット数を決定するための重み付き抽選エントリを定義します。各エントリは付与数と排出重みを指定します。重みが大きいほど、その付与数が選択される確率が高くなります。
parametersList<RarityParameterValueModel>
1 ~ 1000 itemsレアリティパラメータ値モデルのリスト
抽選可能なパラメータ値のプールを定義します。各エントリはパラメータ名、リソース詳細、排出重みを指定します。パラメータスロットを埋める際、このプールから重複なしの重み付き抽選で値が選択されます。

RarityParameterCountModel

レアリティパラメータの付与数モデル

リソースに付与されるパラメータスロット数を決定するための重み付き抽選の単一エントリを定義します。各エントリはパラメータ数と排出重みをペアにし、パラメータ数量の確率分布を細かく制御できます。

有効化条件必須デフォルト値の制限説明
countint
0 ~ 10付与数
このエントリが抽選された際に付与するパラメータスロット数です。例えば、付与数が 3 の場合、リソースは値モデルプールから選択された 3 つのパラメータ値を受け取ります。
weightint
1 ~ 2147483646排出重み
パラメータ付与数を決定する重み付き抽選で使用される相対的な重みです。値が大きいほど、この付与数が選択される確率が高くなります。実際の確率は、この重みを付与数モデルリスト内のすべての重みの合計で割った値になります。

RarityParameterValueModel

レアリティパラメータ値モデル

レアリティパラメータ値の重み付き抽選プール内の単一エントリを定義します。各エントリはパラメータ名、ゲーム定義のリソース詳細、およびプール内の他のエントリに対する選択確率を決定する排出重みを指定します。

有効化条件必須デフォルト値の制限説明
namestring
~ 64文字名前
この抽選エントリの識別子です。レアリティパラメータモデルの値プール内で一意である必要があります。抽選された際、この名前が結果のレアリティパラメータ値に保存されます。
metadatastring~ 512文字メタデータ
メタデータには任意の値を設定できます。
これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。
resourceNamestring
~ 64文字ゲーム内で使用するパラメータリソースの種類を表す名前(GS2の動作のためには使用しません)
このパラメータ値に関連付けられたゲーム定義のリソース種別名(例: “fire_attack”、“ice_resist”)です。GS2 はこの値を自身の動作には使用せず、抽選結果にそのまま渡されゲームロジックで使用されます。
resourceValuelong
0 ~ 9223372036854775805ゲーム内で使用するパラメータリソースの値(GS2の動作のためには使用しません)
このパラメータのゲーム定義の数値(例: 攻撃力+50 の場合は 50)です。GS2 はこの値を自身の動作には使用せず、抽選結果にそのまま渡されゲームロジックで使用されます。
weightint
1 ~ 2147483646排出重み
パラメータ値を選択する重み付き抽選で使用される相対的な重みです。値が大きいほど、このエントリが選択される確率が高くなります。実際の確率は、この重みをプール内のすべての重みの合計で割った値になります。