GS2-Ranking2 Deploy/CDK 레퍼런스
엔티티
Deploy 처리에서 조작 대상이 되는 리소스
Namespace
네임스페이스
네임스페이스는 하나의 프로젝트 내에서 동일한 서비스를 서로 다른 용도로 여러 개 이용하기 위한 엔티티입니다.
GS2의 각 서비스는 네임스페이스 단위로 관리됩니다. 네임스페이스가 다르면 동일한 서비스라도 완전히 독립된 데이터 공간으로 취급됩니다.
따라서 각 서비스의 이용을 시작하려면 먼저 네임스페이스를 생성해야 합니다.
Request
리소스 생성·갱신 요청
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| name | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| description | string | ~ 1024자 | 설명문 | |||
| transactionSetting | TransactionSetting | ✓ | 트랜잭션 설정 랭킹 보상 지급에 사용되는 분산 트랜잭션 설정입니다. 입수 액션을 자동으로 실행하는 오토런, 전체의 성패를 보장하는 아토믹 커밋을 지원합니다. | |||
| logSetting | LogSetting | 로그 출력 설정 API 요청·응답 로그의 출력 대상이 되는 GS2-Log의 네임스페이스를 지정합니다. 점수 등록이나 랭킹 보상 배포 추적에 사용됩니다. |
GetAttr
!GetAttr 태그로 취득 가능한 리소스 생성 결과
| 타입 | 설명 | |
|---|---|---|
| Item | Namespace | 생성한 네임스페이스 |
구현 예제
Type: GS2::Ranking2::Namespace
Properties:
Name: namespace-0001
Description: null
TransactionSetting: null
LogSetting:
LoggingNamespaceId: grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001import (
"github.com/gs2io/gs2-golang-cdk/core"
"github.com/gs2io/gs2-golang-cdk/ranking2"
)
SampleStack := core.NewStack()
ranking2.NewNamespace(
&SampleStack,
"namespace-0001",
ranking2.NamespaceOptions{
LogSetting: &core.LogSetting{
LoggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001",
},
},
)
println(SampleStack.Yaml()) // Generate Templateclass SampleStack extends \Gs2Cdk\Core\Model\Stack
{
function __construct() {
parent::__construct();
new \Gs2Cdk\Ranking2\Model\Namespace_(
stack: $this,
name: "namespace-0001",
options: new \Gs2Cdk\Ranking2\Model\Options\NamespaceOptions(
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.ranking2.model.Namespace(
this,
"namespace-0001",
new io.gs2.cdk.ranking2.model.options.NamespaceOptions()
.withLogSetting(new io.gs2.cdk.core.model.LogSetting(
"grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
))
);
}
}
System.out.println(new SampleStack().yaml()); // Generate Templatepublic class SampleStack : Gs2Cdk.Core.Model.Stack
{
public SampleStack() {
new Gs2Cdk.Gs2Ranking2.Model.Namespace(
stack: this,
name: "namespace-0001",
options: new Gs2Cdk.Gs2Ranking2.Model.Options.NamespaceOptions
{
logSetting = new Gs2Cdk.Core.Model.LogSetting(
loggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
)
}
);
}
}
Debug.Log(new SampleStack().Yaml()); // Generate Templateimport core from "@/gs2cdk/core";
import ranking2 from "@/gs2cdk/ranking2";
class SampleStack extends core.Stack
{
public constructor() {
super();
new ranking2.model.Namespace(
this,
"namespace-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, ranking2
class SampleStack(Stack):
def __init__(self):
super().__init__()
ranking2.Namespace(
stack=self,
name='namespace-0001',
options=ranking2.NamespaceOptions(
log_setting=core.LogSetting(
logging_namespace_id='grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001',
),
),
)
print(SampleStack().yaml()) # Generate TemplateTransactionSetting
트랜잭션 설정
트랜잭션 설정은 트랜잭션의 실행 방법·정합성·비동기 처리·충돌 회피 메커니즘을 제어하는 설정입니다.
자동 실행(AutoRun), 원자적 실행(AtomicCommit), GS2-Distributor를 이용한 비동기 실행, 스크립트 결과의 일괄 적용, GS2-JobQueue를 통한 입수 액션의 비동기화 등을 조합하여 게임 로직에 맞는 견고한 트랜잭션 관리를 가능하게 합니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| enableAutoRun | bool | false | 발행한 트랜잭션을 서버 사이드에서 자동으로 실행할지 여부 | |||
| enableAtomicCommit | bool | {enableAutoRun} == true | false | 트랜잭션의 실행을 원자적으로 커밋할지 여부 ※ enableAutoRun이(가) true 이면 활성화 | ||
| transactionUseDistributor | bool | {enableAtomicCommit} == true | false | 트랜잭션을 비동기 처리로 실행할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 | ||
| commitScriptResultInUseDistributor | bool | {transactionUseDistributor} == true | false | 스크립트의 결과 커밋 처리를 비동기 처리로 실행할지 여부 ※ transactionUseDistributor이(가) true 이면 활성화 | ||
| acquireActionUseJobQueue | bool | {enableAtomicCommit} == true | false | 입수 액션을 실행할 때 GS2-JobQueue를 사용할지 여부 ※ enableAtomicCommit이(가) true 이면 활성화 | ||
| distributorNamespaceId | string | “grn:gs2:{region}:{ownerId}:distributor:default” | ~ 1024자 | 트랜잭션 실행에 사용하는 GS2-Distributor 네임스페이스 GRN | ||
| queueNamespaceId | string | “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에서는 실시간으로 로그가 제공되어 시스템 모니터링, 분석, 디버깅 등에 활용할 수 있습니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| loggingNamespaceId | string | ✓ | ~ 1024자 | 로그를 출력할 GS2-Log의 네임스페이스
GRN
“grn:gs2:“로 시작하는 GRN 형식의 ID로 지정해야 합니다. |
CurrentRankingMaster
현재 활성화된 랭킹 모델의 마스터 데이터
현재 네임스페이스 내에서 유효한 랭킹 모델의 정의를 기술한 마스터 데이터입니다.
GS2에서는 마스터 데이터 관리에 JSON 형식의 파일을 사용합니다.
파일을 업로드함으로써 실제로 서버에 설정을 반영할 수 있습니다.
JSON 파일을 작성하는 방법으로, 관리 콘솔 내에 마스터 데이터 에디터를 제공하고 있습니다.
또한 게임 운영에 더 적합한 도구를 제작하여 적절한 형식의 JSON 파일을 출력하는 방법으로도 서비스를 이용할 수 있습니다.
JSON 파일 형식에 대해서는 GS2-Ranking2 마스터 데이터 레퍼런스를 참조해 주세요.
Request
리소스 생성·갱신 요청
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| mode | 문자열 열거형 enum { “direct”, “preUpload” } | “direct” | 업데이트 모드
| |||||||||
| settings | string | {mode} == “direct” | ✓※ | ~ 5242880 바이트 (5MB) | 마스터 데이터 ※ mode이(가) “direct” 이면 필수 | |||||||
| uploadToken | string | {mode} == “preUpload” | ✓※ | ~ 1024자 | 사전 업로드로 획득한 토큰 업로드한 마스터 데이터를 적용하기 위해 사용됩니다. ※ mode이(가) “preUpload” 이면 필수 |
GetAttr
!GetAttr 태그로 취득 가능한 리소스 생성 결과
| 타입 | 설명 | |
|---|---|---|
| Item | CurrentRankingMaster | 업데이트된 현재 활성화된 랭킹 모델의 마스터 데이터 |
구현 예제
Type: GS2::Ranking2::CurrentRankingMaster
Properties:
NamespaceName: namespace-0001
Mode: direct
Settings: {
"version": "2024-05-30",
"globalRankingModels": [
{
"name": "ranking-0001",
"orderDirection": "asc"
},
{
"name": "ranking-0002",
"orderDirection": "desc"
}
],
"clusterRankingModels": [
{
"name": "ranking-0001",
"clusterType": "Raw",
"orderDirection": "asc"
},
{
"name": "ranking-0002",
"clusterType": "Gs2Guild::Guild",
"orderDirection": "desc"
}
],
"subscribeRankingModels": [
{
"name": "ranking-0001",
"orderDirection": "asc"
},
{
"name": "ranking-0002",
"orderDirection": "desc"
}
]
}
UploadToken: nullimport (
"github.com/gs2io/gs2-golang-cdk/core"
"github.com/gs2io/gs2-golang-cdk/ranking2"
)
SampleStack := core.NewStack()
ranking2.NewNamespace(
&SampleStack,
"namespace-0001",
ranking2.NamespaceOptions{},
).MasterData(
[]ranking2.GlobalRankingModel{
ranking2.NewGlobalRankingModel(
"ranking-0001",
false,
ranking2.GlobalRankingModelOrderDirectionAsc,
ranking2.GlobalRankingModelRewardCalculationIndexRank,
ranking2.GlobalRankingModelOptions{
},
),
ranking2.NewGlobalRankingModel(
"ranking-0002",
false,
ranking2.GlobalRankingModelOrderDirectionDesc,
ranking2.GlobalRankingModelRewardCalculationIndexRank,
ranking2.GlobalRankingModelOptions{
},
),
},
[]ranking2.ClusterRankingModel{
ranking2.NewClusterRankingModel(
"ranking-0001",
ranking2.ClusterRankingModelClusterTypeRaw,
false,
ranking2.ClusterRankingModelOrderDirectionAsc,
ranking2.ClusterRankingModelRewardCalculationIndexRank,
ranking2.ClusterRankingModelOptions{
},
),
ranking2.NewClusterRankingModel(
"ranking-0002",
ranking2.ClusterRankingModelClusterTypeGs2Guild_guild,
false,
ranking2.ClusterRankingModelOrderDirectionDesc,
ranking2.ClusterRankingModelRewardCalculationIndexRank,
ranking2.ClusterRankingModelOptions{
},
),
},
[]ranking2.SubscribeRankingModel{
ranking2.NewSubscribeRankingModel(
"ranking-0001",
false,
ranking2.SubscribeRankingModelOrderDirectionAsc,
ranking2.SubscribeRankingModelOptions{
},
),
ranking2.NewSubscribeRankingModel(
"ranking-0002",
false,
ranking2.SubscribeRankingModelOrderDirectionDesc,
ranking2.SubscribeRankingModelOptions{
},
),
},
)
println(SampleStack.Yaml()) // Generate Templateclass SampleStack extends \Gs2Cdk\Core\Model\Stack
{
function __construct() {
parent::__construct();
(new \Gs2Cdk\Ranking2\Model\Namespace_(
stack: $this,
name: "namespace-0001"
))->masterData(
[
new \Gs2Cdk\Ranking2\Model\GlobalRankingModel(
name:"ranking-0001",
sum: false,
orderDirection: \Gs2Cdk\Ranking2\Model\Enums\GlobalRankingModelOrderDirection::ASC,
rewardCalculationIndex: \Gs2Cdk\Ranking2\Model\Enums\GlobalRankingModelRewardCalculationIndex::RANK
),
new \Gs2Cdk\Ranking2\Model\GlobalRankingModel(
name:"ranking-0002",
sum: false,
orderDirection: \Gs2Cdk\Ranking2\Model\Enums\GlobalRankingModelOrderDirection::DESC,
rewardCalculationIndex: \Gs2Cdk\Ranking2\Model\Enums\GlobalRankingModelRewardCalculationIndex::RANK
)
],
[
new \Gs2Cdk\Ranking2\Model\ClusterRankingModel(
name:"ranking-0001",
clusterType: \Gs2Cdk\Ranking2\Model\Enums\ClusterRankingModelClusterType::RAW,
sum: false,
orderDirection: \Gs2Cdk\Ranking2\Model\Enums\ClusterRankingModelOrderDirection::ASC,
rewardCalculationIndex: \Gs2Cdk\Ranking2\Model\Enums\ClusterRankingModelRewardCalculationIndex::RANK
),
new \Gs2Cdk\Ranking2\Model\ClusterRankingModel(
name:"ranking-0002",
clusterType: \Gs2Cdk\Ranking2\Model\Enums\ClusterRankingModelClusterType::GS2_GUILD__GUILD,
sum: false,
orderDirection: \Gs2Cdk\Ranking2\Model\Enums\ClusterRankingModelOrderDirection::DESC,
rewardCalculationIndex: \Gs2Cdk\Ranking2\Model\Enums\ClusterRankingModelRewardCalculationIndex::RANK
)
],
[
new \Gs2Cdk\Ranking2\Model\SubscribeRankingModel(
name:"ranking-0001",
sum: false,
orderDirection: \Gs2Cdk\Ranking2\Model\Enums\SubscribeRankingModelOrderDirection::ASC
),
new \Gs2Cdk\Ranking2\Model\SubscribeRankingModel(
name:"ranking-0002",
sum: false,
orderDirection: \Gs2Cdk\Ranking2\Model\Enums\SubscribeRankingModelOrderDirection::DESC
)
]
);
}
}
print((new SampleStack())->yaml()); // Generate Template
class SampleStack extends io.gs2.cdk.core.model.Stack
{
public SampleStack() {
super();
new io.gs2.cdk.ranking2.model.Namespace(
this,
"namespace-0001"
).masterData(
Arrays.asList(
new io.gs2.cdk.ranking2.model.GlobalRankingModel(
"ranking-0001",
false,
io.gs2.cdk.ranking2.model.enums.GlobalRankingModelOrderDirection.ASC,
io.gs2.cdk.ranking2.model.enums.GlobalRankingModelRewardCalculationIndex.RANK
),
new io.gs2.cdk.ranking2.model.GlobalRankingModel(
"ranking-0002",
false,
io.gs2.cdk.ranking2.model.enums.GlobalRankingModelOrderDirection.DESC,
io.gs2.cdk.ranking2.model.enums.GlobalRankingModelRewardCalculationIndex.RANK
)
),
Arrays.asList(
new io.gs2.cdk.ranking2.model.ClusterRankingModel(
"ranking-0001",
io.gs2.cdk.ranking2.model.enums.ClusterRankingModelClusterType.RAW,
false,
io.gs2.cdk.ranking2.model.enums.ClusterRankingModelOrderDirection.ASC,
io.gs2.cdk.ranking2.model.enums.ClusterRankingModelRewardCalculationIndex.RANK
),
new io.gs2.cdk.ranking2.model.ClusterRankingModel(
"ranking-0002",
io.gs2.cdk.ranking2.model.enums.ClusterRankingModelClusterType.GS2_GUILD__GUILD,
false,
io.gs2.cdk.ranking2.model.enums.ClusterRankingModelOrderDirection.DESC,
io.gs2.cdk.ranking2.model.enums.ClusterRankingModelRewardCalculationIndex.RANK
)
),
Arrays.asList(
new io.gs2.cdk.ranking2.model.SubscribeRankingModel(
"ranking-0001",
false,
io.gs2.cdk.ranking2.model.enums.SubscribeRankingModelOrderDirection.ASC
),
new io.gs2.cdk.ranking2.model.SubscribeRankingModel(
"ranking-0002",
false,
io.gs2.cdk.ranking2.model.enums.SubscribeRankingModelOrderDirection.DESC
)
)
);
}
}
System.out.println(new SampleStack().yaml()); // Generate Templatepublic class SampleStack : Gs2Cdk.Core.Model.Stack
{
public SampleStack() {
new Gs2Cdk.Gs2Ranking2.Model.Namespace(
stack: this,
name: "namespace-0001"
).MasterData(
new Gs2Cdk.Gs2Ranking2.Model.GlobalRankingModel[] {
new Gs2Cdk.Gs2Ranking2.Model.GlobalRankingModel(
name: "ranking-0001",
sum: false,
orderDirection: Gs2Cdk.Gs2Ranking2.Model.Enums.GlobalRankingModelOrderDirection.Asc,
rewardCalculationIndex: Gs2Cdk.Gs2Ranking2.Model.Enums.GlobalRankingModelRewardCalculationIndex.Rank
),
new Gs2Cdk.Gs2Ranking2.Model.GlobalRankingModel(
name: "ranking-0002",
sum: false,
orderDirection: Gs2Cdk.Gs2Ranking2.Model.Enums.GlobalRankingModelOrderDirection.Desc,
rewardCalculationIndex: Gs2Cdk.Gs2Ranking2.Model.Enums.GlobalRankingModelRewardCalculationIndex.Rank
)
},
new Gs2Cdk.Gs2Ranking2.Model.ClusterRankingModel[] {
new Gs2Cdk.Gs2Ranking2.Model.ClusterRankingModel(
name: "ranking-0001",
clusterType: Gs2Cdk.Gs2Ranking2.Model.Enums.ClusterRankingModelClusterType.Raw,
sum: false,
orderDirection: Gs2Cdk.Gs2Ranking2.Model.Enums.ClusterRankingModelOrderDirection.Asc,
rewardCalculationIndex: Gs2Cdk.Gs2Ranking2.Model.Enums.ClusterRankingModelRewardCalculationIndex.Rank
),
new Gs2Cdk.Gs2Ranking2.Model.ClusterRankingModel(
name: "ranking-0002",
clusterType: Gs2Cdk.Gs2Ranking2.Model.Enums.ClusterRankingModelClusterType.Gs2Guild_guild,
sum: false,
orderDirection: Gs2Cdk.Gs2Ranking2.Model.Enums.ClusterRankingModelOrderDirection.Desc,
rewardCalculationIndex: Gs2Cdk.Gs2Ranking2.Model.Enums.ClusterRankingModelRewardCalculationIndex.Rank
)
},
new Gs2Cdk.Gs2Ranking2.Model.SubscribeRankingModel[] {
new Gs2Cdk.Gs2Ranking2.Model.SubscribeRankingModel(
name: "ranking-0001",
sum: false,
orderDirection: Gs2Cdk.Gs2Ranking2.Model.Enums.SubscribeRankingModelOrderDirection.Asc
),
new Gs2Cdk.Gs2Ranking2.Model.SubscribeRankingModel(
name: "ranking-0002",
sum: false,
orderDirection: Gs2Cdk.Gs2Ranking2.Model.Enums.SubscribeRankingModelOrderDirection.Desc
)
}
);
}
}
Debug.Log(new SampleStack().Yaml()); // Generate Templateimport core from "@/gs2cdk/core";
import ranking2 from "@/gs2cdk/ranking2";
class SampleStack extends core.Stack
{
public constructor() {
super();
new ranking2.model.Namespace(
this,
"namespace-0001",
).masterData(
[
new ranking2.model.GlobalRankingModel(
"ranking-0001",
false,
ranking2.model.GlobalRankingModelOrderDirection.ASC,
ranking2.model.GlobalRankingModelRewardCalculationIndex.RANK
),
new ranking2.model.GlobalRankingModel(
"ranking-0002",
false,
ranking2.model.GlobalRankingModelOrderDirection.DESC,
ranking2.model.GlobalRankingModelRewardCalculationIndex.RANK
)
],
[
new ranking2.model.ClusterRankingModel(
"ranking-0001",
ranking2.model.ClusterRankingModelClusterType.RAW,
false,
ranking2.model.ClusterRankingModelOrderDirection.ASC,
ranking2.model.ClusterRankingModelRewardCalculationIndex.RANK
),
new ranking2.model.ClusterRankingModel(
"ranking-0002",
ranking2.model.ClusterRankingModelClusterType.GS2_GUILD__GUILD,
false,
ranking2.model.ClusterRankingModelOrderDirection.DESC,
ranking2.model.ClusterRankingModelRewardCalculationIndex.RANK
)
],
[
new ranking2.model.SubscribeRankingModel(
"ranking-0001",
false,
ranking2.model.SubscribeRankingModelOrderDirection.ASC
),
new ranking2.model.SubscribeRankingModel(
"ranking-0002",
false,
ranking2.model.SubscribeRankingModelOrderDirection.DESC
)
]
);
}
}
console.log(new SampleStack().yaml()); // Generate Template
from gs2_cdk import Stack, core, ranking2
class SampleStack(Stack):
def __init__(self):
super().__init__()
ranking2.Namespace(
stack=self,
name="namespace-0001",
).master_data(
global_ranking_models=[
ranking2.GlobalRankingModel(
name='ranking-0001',
sum=False,
order_direction=ranking2.GlobalRankingModelOrderDirection.ASC,
reward_calculation_index=ranking2.GlobalRankingModelRewardCalculationIndex.RANK
),
ranking2.GlobalRankingModel(
name='ranking-0002',
sum=False,
order_direction=ranking2.GlobalRankingModelOrderDirection.DESC,
reward_calculation_index=ranking2.GlobalRankingModelRewardCalculationIndex.RANK
),
],
cluster_ranking_models=[
ranking2.ClusterRankingModel(
name='ranking-0001',
cluster_type=ranking2.ClusterRankingModelClusterType.RAW,
sum=False,
order_direction=ranking2.ClusterRankingModelOrderDirection.ASC,
reward_calculation_index=ranking2.ClusterRankingModelRewardCalculationIndex.RANK
),
ranking2.ClusterRankingModel(
name='ranking-0002',
cluster_type=ranking2.ClusterRankingModelClusterType.GS2_GUILD__GUILD,
sum=False,
order_direction=ranking2.ClusterRankingModelOrderDirection.DESC,
reward_calculation_index=ranking2.ClusterRankingModelRewardCalculationIndex.RANK
),
],
subscribe_ranking_models=[
ranking2.SubscribeRankingModel(
name='ranking-0001',
sum=False,
order_direction=ranking2.SubscribeRankingModelOrderDirection.ASC
),
ranking2.SubscribeRankingModel(
name='ranking-0002',
sum=False,
order_direction=ranking2.SubscribeRankingModelOrderDirection.DESC
),
],
)
print(SampleStack().yaml()) # Generate TemplateGlobalRankingModel
글로벌 랭킹 모델
글로벌 랭킹은 모든 플레이어를 대상으로 한 랭킹을 구현하기 위한 모델입니다.
상위 1000위까지의 랭킹을 표시할 수 있습니다.
GS2-Schedule의 반복 이벤트와 연결하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| globalRankingModelId | string | ※ | ~ 1024자 | 글로벌 랭킹 GRN
※ 서버가 자동으로 설정 | ||||||||
| name | string | ✓ | ~ 128자 | 글로벌 랭킹 모델 이름 글로벌 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| metadata | string | ~ 1024자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. | |||||||||
| minimumValue | long | 0 ~ 9223372036854775805 | 스코어 최솟값 허용되는 스코어의 최솟값입니다. 이 값보다 낮은 스코어는 등록 시 거부됩니다. 유효하지 않거나 의도하지 않은 스코어 값을 필터링하는 데 사용합니다. | |||||||||
| maximumValue | long | 0 ~ 9223372036854775805 | 스코어 최댓값 허용되는 스코어의 최댓값입니다. 이 값을 초과하는 스코어는 등록 시 거부됩니다. 비정상적으로 높은 스코어의 등록을 방지하는 데 사용합니다. | |||||||||
| sum | bool | false | 스코어 합산 활성화하면 등록된 모든 스코어가 합산되어 합계 값으로 랭킹이 결정됩니다. 비활성화된 경우, 정렬 방향에 따른 최적의 스코어(최댓값 또는 최솟값)만 랭킹에 사용됩니다. | |||||||||
| orderDirection | 문자열 열거형 enum { “asc”, “desc” } | ✓ | 정렬 방향 랭킹 스코어의 정렬 방향입니다. 낮은 스코어일수록 상위인 경우(예: 타임어택)에는 “오름차순"을, 높은 스코어일수록 상위인 경우(예: 하이스코어)에는 “내림차순"을 사용합니다.
| |||||||||
| entryPeriodEventId | string | ~ 1024자 | 스코어 등록 가능 기간 이벤트 GRN
스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 반복 사이클마다 랭킹이 초기화되어 시즌제 랭킹을 구현할 수 있습니다. | |||||||||
| rankingRewards | List<RankingReward> | {entryPeriodEventId} != null | [] | 0 ~ 100 items | 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. 각 보상은 순위 임계값과 실행할 입수 액션을 정의합니다. | |||||||
| accessPeriodEventId | string | ~ 1024자 | 랭킹 데이터 접근 가능 기간 이벤트 GRN
랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 일반적으로 스코어 등록 기간 사이의 간격으로 설정합니다. | |||||||||
| rewardCalculationIndex | 문자열 열거형 enum { “rank”, “index” } | “rank” | 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반"은 1부터 시작하는 랭킹 순위를 사용하며(동점 스코어의 플레이어는 동일한 순위를 공유), “인덱스 기반"은 0부터 시작하는 고유한 정렬 위치를 사용합니다(동일 순위 없음). 일반적인 사용 사례에서는 “순위 기반"을 선택하시기 바랍니다.
|
RankingReward
랭킹 보상
점수 등록 기간이 설정된 랭킹에서, 등록 기간 외 참조 기간 내에 받을 수 있는 보상을 설정합니다.
반복 설정이 유효한 경우, 가장 최근에 종료된 기간의 랭킹이 보상 수령 대상이 됩니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| thresholdRank | int | ✓ | 1 ~ 1001 | 순위 임계값 이 보상 티어의 순위 임계값입니다. 순위(또는 인덱스, rewardCalculationIndex 설정에 따라 다름)가 이 임계값 이상인 플레이어가 이 보상을 받습니다. 1001로 설정하면 랭크 외(상위 1000위 밖) 플레이어를 위한 보상을 정의할 수 있습니다. | ||
| metadata | string | ~ 1024자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. | |||
| acquireActions | List<AcquireAction> | [] | 0 ~ 100 items | 입수 액션 리스트 플레이어가 이 랭킹 보상을 수령할 때 실행되는 입수 액션의 목록입니다. 이 순위 임계값을 달성한 보상으로 지급되는 아이템, 화폐, 기타 리소스를 정의합니다. |
ClusterRankingModel
클러스터 랭킹 모델
클러스터 랭킹은 길드나 게더링 내의 플레이어를 대상으로 하는 랭킹을 구현하기 위한 모델입니다.
상위 1000위까지의 랭킹을 표시할 수 있습니다.
GS2-Schedule의 반복 이벤트와 연동하면 반복 횟수에 따라 랭킹을 초기화할 수 있습니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| clusterRankingModelId | string | ※ | ~ 1024자 | 클러스터 랭킹 GRN
※ 서버가 자동으로 설정 | ||||||||||
| name | string | ✓ | ~ 128자 | 클러스터 랭킹 모델 이름 클러스터 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||||
| metadata | string | ~ 1024자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. | |||||||||||
| clusterType | 문자열 열거형 enum { “Raw”, “Gs2Guild::Guild”, “Gs2Matchmaking::SeasonGathering” } | ✓ | 클러스터 타입 랭킹의 세그멘테이션에 사용하는 그룹(클러스터)의 종류를 정의합니다. “Raw"는 소속 검증 없이 임의의 클러스터 이름을 지정할 수 있으며, “Gs2Guild::Guild"는 GS2-Guild 길드에 대한 소속을 검증하고, “Gs2Matchmaking::SeasonGathering"은 GS2-Matchmaking 시즌 개더링에 대한 소속을 검증합니다.
| |||||||||||
| minimumValue | long | 0 ~ 9223372036854775805 | 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. | |||||||||||
| maximumValue | long | 0 ~ 9223372036854775805 | 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. | |||||||||||
| sum | bool | false | 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. | |||||||||||
| orderDirection | 문자열 열거형 enum { “asc”, “desc” } | ✓ | 정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순"을 사용합니다.
| |||||||||||
| entryPeriodEventId | string | ~ 1024자 | 스코어 등록 가능 기간 이벤트 GRN
스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. | |||||||||||
| rankingRewards | List<RankingReward> | {entryPeriodEventId} != null | [] | 0 ~ 100 items | 랭킹 보상 목록 각 시즌 종료 시의 랭킹 순위에 따라 지급되는 보상 목록입니다. 스코어 등록 가능 기간 이벤트가 설정되어 있는 경우에만 이용할 수 있습니다. | |||||||||
| accessPeriodEventId | string | ~ 1024자 | 랭킹 데이터 접근 가능 기간 이벤트 GRN
랭킹 결과의 열람과 보상 수령이 가능한 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. | |||||||||||
| rewardCalculationIndex | 문자열 열거형 enum { “rank”, “index” } | “rank” | 보상 계산 인덱스 보상을 플레이어에게 대응시키는 방법을 결정합니다. “순위 기반"은 1부터 시작하는 랭킹 순위(동점 스코어는 동일 순위), “인덱스 기반"은 0부터 시작하는 고유한 정렬 위치(동일 순위 없음)를 사용합니다.
|
SubscribeRankingModel
구독 랭킹 모델
구독한 다른 플레이어의 점수를 집계하여 랭킹을 작성하는 모델입니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| subscribeRankingModelId | string | ※ | ~ 1024자 | 구독 랭킹 GRN
※ 서버가 자동으로 설정 | ||||||||
| name | string | ✓ | ~ 128자 | 구독 랭킹 모델 이름 구독 랭킹 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| metadata | string | ~ 1024자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. | |||||||||
| minimumValue | long | 0 ~ 9223372036854775805 | 최소 점수 허용되는 점수의 최소값입니다. 이 값보다 낮은 점수는 등록 시 거부됩니다. | |||||||||
| maximumValue | long | 0 ~ 9223372036854775805 | 최대 점수 허용되는 점수의 최대값입니다. 이 값을 초과하는 점수는 등록 시 거부됩니다. | |||||||||
| sum | bool | false | 점수 합산 활성화하면 등록된 모든 점수가 합산되어 합계값으로 랭킹이 결정됩니다. 비활성화된 경우 최고 점수만 랭킹에 사용됩니다. | |||||||||
| orderDirection | 문자열 열거형 enum { “asc”, “desc” } | ✓ | 정렬 방향 랭킹 점수의 정렬 방향입니다. 점수가 낮을수록 상위인 경우 “오름차순”, 점수가 높을수록 상위인 경우 “내림차순"을 사용합니다.
| |||||||||
| entryPeriodEventId | string | ~ 1024자 | 스코어 등록 가능 기간 이벤트 GRN
스코어를 등록할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. 반복 이벤트와 연결하면 시즌제 랭킹을 구현할 수 있습니다. | |||||||||
| accessPeriodEventId | string | ~ 1024자 | 랭킹 데이터 접근 가능 기간 이벤트 GRN
랭킹 결과를 열람할 수 있는 기간을 정의하는 GS2-Schedule의 이벤트 GRN입니다. |
AcquireAction
입수 액션