GS2-Deploy/CDK Reference of GS2-Enchant

The template format used when creating stacks with GS2-Deploy, and implementation examples of template output in various languages using CDK

Entity

Resources operated in Deloy process

Namespace

Namespace

A namespace is a mechanism that allows multiple uses of the same service for different purposes within a single project. Each GS2 service is managed on a per-namespace basis. Even when using the same service, if the namespace differs, the data is treated as a completely independent data space.

Therefore, you must create a namespace before you can start using each service.

TypeConditionRequiredDefaultValue LimitsDescription
namestring
~ 128 charsNamespace name
descriptionstring~ 1024 charsDescription
transactionSettingTransactionSetting
Transaction settings
logSettingLogSettingLog output settings

GetAttr

Generation results of resources that can be obtained with the !GetAttr tag

TypeDescription
ItemNamespaceNamespace created

Implementation Example

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

LogSetting

Log Export Settings

Manages log data export settings. This type holds the GS2-Log namespace identifier (Namespace ID) used to export log data. Specify the GS2-Log namespace where log data is collected and stored in the GRN format for the Log Namespace ID (loggingNamespaceId). Configuring this setting ensures that log data for API requests and responses occurring within the specified namespace is output to the target GS2-Log namespace. GS2-Log provides real-time logs that can be used for system monitoring, analysis, and debugging.

TypeConditionRequiredDefaultValue LimitsDescription
loggingNamespaceIdstring
~ 1024 charsGS2-Log namespace GRN to output logs

TransactionSetting

Transaction settings

Transaction settings control how transactions are executed, their consistency, asynchronous processing, and conflict avoidance mechanisms. Combining features like AutoRun, AtomicCommit, Distributor, batch application of script results, and asynchronous acquisition actions via JobQueue enables robust transaction management tailored to game logic.

TypeConditionRequiredDefaultValue LimitsDescription
enableAutoRunbool
falseWhether to automatically execute issued transactions on the server side
enableAtomicCommitbool{enableAutoRun} == true
✓*
falseWhether to commit the execution of transactions atomically
* Required if enableAutoRun is true
transactionUseDistributorbool{enableAtomicCommit} == true
✓*
falseWhether to execute transactions asynchronously
* Required if enableAtomicCommit is true
commitScriptResultInUseDistributorbool{transactionUseDistributor} == true
✓*
falseWhether to execute the commit processing of the script result asynchronously
* Required if transactionUseDistributor is true
acquireActionUseJobQueuebool{enableAtomicCommit} == true
✓*
falseWhether to use GS2-JobQueue to execute the acquire action
* Required if enableAtomicCommit is true
distributorNamespaceIdstring
“grn:gs2:{region}:{ownerId}:distributor:default”~ 1024 charsGS2-Distributor namespace used for transaction execution
queueNamespaceIdstring
“grn:gs2:{region}:{ownerId}:queue:default”~ 1024 charsNamespace in GS2-JobQueue used to run the transaction

CurrentParameterMaster

Currently active parameter master

GS2 uses JSON format files for master data management. By uploading the file, the settings can actually be reflected on the server.

To create JSON files, we provide a master data editor within the management console. Additionally, you can utilize the service by creating tools more suited to game operations and exporting JSON files in the appropriate format.

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
modeString Enum
enum {
  “direct”,
  “preUpload”
}
“direct”~ 128 charsUpdate mode
Enumerator String DefinitionDescription
“direct”Directly update the settings
“preUpload”Upload the settings and then update
settingsstring{mode} == “direct”
✓*
~ 5242880 bytes (5MB)Master Data
* Required if mode is “direct”
uploadTokenstring{mode} == “preUpload”
✓*
~ 1024 charsToken used to reflect results after upload
* Required if mode is “preUpload”

GetAttr

Generation results of resources that can be obtained with the !GetAttr tag

TypeDescription
ItemCurrentParameterMasterUpdated and currently available parameter settings

Implementation Example

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

Balance parameter model

Defines the drawing conditions for balance parameters.

TypeConditionRequiredDefaultValue LimitsDescription
balanceParameterModelIdstring
~ 1024 charsBalance Parameter Model GRN
namestring
~ 128 charsBalance parameter model name
metadatastring~ 2048 charsMetadata
totalValuelong
0 ~ 9223372036854775805Total value
initialValueStrategyString Enum
enum {
  “average”,
  “lottery”
}
“average”~ 128 charsInitial value setting policy
Enumerator String DefinitionDescription
“average”Average
“lottery”Lottery
parametersList<BalanceParameterValueModel>
1 ~ 10 itemsBalance parameter value model list

BalanceParameterValueModel

Balance Parameter Value Model

TypeConditionRequiredDefaultValue LimitsDescription
namestring
~ 64 charsName
metadatastring~ 512 charsMetadata

RarityParameterModel

Rarity parameter model

Defines the drawing conditions for rarity parameters.

TypeConditionRequiredDefaultValue LimitsDescription
rarityParameterModelIdstring
~ 1024 charsRarity Parameter Model GRN
namestring
~ 128 charsRarity parameter model name
metadatastring~ 2048 charsMetadata
maximumParameterCountint
1 ~ 10Maximum number of parameters to be given
parameterCountsList<RarityParameterCountModel>
1 ~ 10 itemsRarity parameter count model list
parametersList<RarityParameterValueModel>
1 ~ 1000 itemsRarity parameter value model list

RarityParameterCountModel

Model of the number of rarity parameters granted

TypeConditionRequiredDefaultValue LimitsDescription
countint
0 ~ 10Value
weightint
1 ~ 2147483646Weight

RarityParameterValueModel

Rarity Parameter Value Model

TypeConditionRequiredDefaultValue LimitsDescription
namestring
~ 64 charsName
metadatastring~ 512 charsMetadata
resourceNamestring
~ 64 charsParameter Resource Name for Game(Not used for GS2)
resourceValuelong
0 ~ 9223372036854775805Parameter Resource Value for Game(Not used for GS2)
weightint
1 ~ 2147483646Weight