Documentation index for AI agents

GS2-Lottery 마스터 데이터 레퍼런스

마스터 데이터 포맷과 임포트할 각종 모델의 레퍼런스

마스터 데이터 포맷

{
  "version": "2019-02-21",
  "lotteryModels": [
    {
      "name": "[string]추첨 모델 이름",
      "metadata": "[string?]메타데이터",
      "mode": "[문자열 열거형]추첨 모드",
      "method": "[문자열 열거형]추첨 방법",
      "prizeTableName": "[string]배출 확률 테이블 이름",
      "choicePrizeTableScriptId": "[string]배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GRN"
    }
  ],
  "prizeTables": [
    {
      "name": "[string]배출 확률 테이블 이름",
      "metadata": "[string?]메타데이터",
      "prizes": [
        {
          "prizeId": "[string]경품 ID",
          "type": "[string]경품 종류",
          "acquireActions": [
            {
              "action": "[string]입수 액션에서 실행할 액션의 종류",
              "request": "[string]액션 실행 시 사용되는 요청의 JSON 문자열"
            }
          ],
          "drawnLimit": "[int?]최대 배출 수",
          "limitFailOverPrizeId": "[string]제한 시 페일오버 경품 ID",
          "prizeTableName": "[string]배출 확률 테이블의 이름",
          "weight": "[int]배출 가중치"
        }
      ]
    }
  ]
}
타입활성화 조건필수기본값값 제한설명
versionstring
2019-02-21마스터 데이터 포맷 버전
lotteryModelsList<LotteryModel>~ 100 items추첨 모델
추첨 모델은 배출 방식과 배출 테이블의 참조 방법을 정의하는 엔티티입니다.

배출 방식은 2종류가 마련되어 있으며, 일반 추첨은 매번 일정한 확률로 추첨하는 방식이고, 박스 추첨은 상자 안에 미리 정해진 수량의 경품이 들어 있어 추첨할 때마다 상자에서 경품을 꺼내는 추첨 방식입니다.

추첨 처리를 수행할 때 배출 확률 테이블을 사용하는데,
GS2-Script를 사용하면 여러 번 추첨을 실행할 때 배출 확률 테이블 일부만 다른 테이블로 교체할 수 있습니다.
이 구조를 이용하면 10연 가챠에서 1회만 다른 추첨 확률 테이블을 적용하는 것이 가능해집니다.
prizeTablesList<PrizeTable>~ 100 items배출 확률 테이블
경품에는 입수 액션을 직접 지정하거나, 다른 배출 확률 테이블을 참조하도록 설정할 수도 있습니다.
배출 확률 테이블을 중첩시키면, 예를 들어 1단계에서 SSR / SR / R 등의 레어도를 추첨하고, 2단계에서 해당 레어도에 대응하는 구체적인 콘텐츠를 추첨하는 등의 설정이 가능합니다.
이 구조를 통해 게임 전체의 레어도별 배출 확률을 관리하고 조정하기가 더 쉬워집니다.

모델

PrizeTable

배출 확률 테이블

경품에는 입수 액션을 직접 지정하거나, 다른 배출 확률 테이블을 참조하도록 설정할 수도 있습니다.
배출 확률 테이블을 중첩시키면, 예를 들어 1단계에서 SSR / SR / R 등의 레어도를 추첨하고, 2단계에서 해당 레어도에 대응하는 구체적인 콘텐츠를 추첨하는 등의 설정이 가능합니다.
이 구조를 통해 게임 전체의 레어도별 배출 확률을 관리하고 조정하기가 더 쉬워집니다.

타입활성화 조건필수기본값값 제한설명
prizeTableIdstring
~ 1024자배출 확률 테이블 GRN
※ 서버가 자동으로 설정
namestring
~ 128자배출 확률 테이블 이름
배출 확률 테이블 고유의 이름입니다. 영숫자 및 -(하이픈), _(언더스코어), .(마침표)로 지정합니다.
metadatastring~ 128자메타데이터
메타데이터에는 임의의 값을 설정할 수 있습니다.
이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.
prizesList<Prize>
1 ~ 100 items경품 리스트
이 배출 확률 테이블 내의 경품 리스트입니다. 각 경품은 배출 가중치(확률), 배출 시 실행할 액션, 그리고 선택적으로 배출 횟수 제한을 정의합니다. 각 경품의 실제 배출 확률은 해당 가중치를 테이블 내 전체 경품 가중치의 합으로 나누어 산출됩니다.

Prize

경품

배출 확률 테이블 내 단일 경품 엔트리입니다.
경품은 입수 액션(아이템이나 통화의 부여 등)을 직접 지정하거나, 다른 배출 확률 테이블을 참조하여 중첩된 추첨을 수행할 수 있습니다.
각 경품에는 배출 가중치가 있으며, 배출되는 상대적 확률을 결정합니다.

타입활성화 조건필수기본값값 제한설명
prizeIdstring
UUID~ 36자경품 ID
배출 확률 테이블 내에서 이 경품을 고유하게 식별하는 ID입니다. 배출 횟수 제한 추적 및 페일오버 경품 지정 시 참조에 사용됩니다.
type문자열 열거형
enum {
  “action”,
  “prize_table”
}
경품 종류
이 경품이 직접 보상을 부여하는지, 다른 배출 확률 테이블에 위임하는지를 결정합니다. “action"은 배출 시 실행할 입수 액션을 지정합니다. “prize_table"은 다른 배출 확률 테이블을 참조하여 중첩된 추첨을 수행합니다(예: 1단계에서 희귀도를 결정하고, 2단계에서 구체적인 아이템을 결정).
정의설명
action경품의 입수 액션
prize_table더욱 배출 확률 테이블을 지정하여 재추첨
acquireActionsList<AcquireAction>{type} == “action”[]1 ~ 100 items입수 액션 리스트
이 경품이 배출될 때 실행할 입수 액션의 리스트입니다. 여러 액션을 지정하여 한 번에 여러 보상을 부여할 수 있습니다(예: 아이템과 통화를 동시에 부여).
※ type이(가) “action” 이면 활성화
drawnLimitint{type} == “action”1 ~ 1000000최대 배출 수
이 경품이 전체 사용자를 통틀어 배출될 수 있는 최대 횟수입니다. 제한에 도달하면 대신 페일오버 경품(limitFailOverPrizeId)이 배출됩니다. 잭팟 아이템 등 수량 한정 경품 구현에 사용됩니다.
※ type이(가) “action” 이면 활성화
limitFailOverPrizeIdstring{type} == “action” and {drawnLimit} > 0
✓※
~ 32자제한 시 페일오버 경품 ID
이 경품의 배출 횟수 제한(drawnLimit)에 도달했을 때 대신 배출할 경품의 ID입니다. 동일한 배출 확률 테이블 내의 다른 경품을 참조해야 합니다.
※ type이(가) “action"이고 drawnLimit이(가) 0 보다 크면 필수
prizeTableNamestring{type} == “prize_table”
✓※
~ 128자배출 확률 테이블의 이름
추첨을 위임할 배출 확률 테이블의 이름입니다. 경품 타입이 “prize_table"인 경우 중첩된 추첨에 사용됩니다.
※ type이(가) “prize_table” 이면 필수
weightint
1 ~ 2147483646배출 가중치
배출 확률 테이블 내에서 이 경품의 상대적 가중치입니다. 실제 배출 확률은 이 경품의 가중치를 테이블 내 모든 경품의 가중치 합계로 나누어 산출됩니다. 예를 들어 3개의 경품의 가중치가 각각 70, 20, 10이라면 각각의 배출 확률은 70%, 20%, 10%가 됩니다.

AcquireAction

입수 액션

타입활성화 조건필수기본값값 제한설명
action문자열 열거형
enum {
"Gs2AdReward:AcquirePointByUserId",
"Gs2Dictionary:AddEntriesByUserId",
"Gs2Enchant:ReDrawBalanceParameterStatusByUserId",
"Gs2Enchant:SetBalanceParameterStatusByUserId",
"Gs2Enchant:ReDrawRarityParameterStatusByUserId",
"Gs2Enchant:AddRarityParameterStatusByUserId",
"Gs2Enchant:SetRarityParameterStatusByUserId",
"Gs2Enhance:DirectEnhanceByUserId",
"Gs2Enhance:UnleashByUserId",
"Gs2Enhance:CreateProgressByUserId",
"Gs2Exchange:ExchangeByUserId",
"Gs2Exchange:IncrementalExchangeByUserId",
"Gs2Exchange:CreateAwaitByUserId",
"Gs2Exchange:AcquireForceByUserId",
"Gs2Exchange:SkipByUserId",
"Gs2Experience:AddExperienceByUserId",
"Gs2Experience:SetExperienceByUserId",
"Gs2Experience:AddRankCapByUserId",
"Gs2Experience:SetRankCapByUserId",
"Gs2Experience:MultiplyAcquireActionsByUserId",
"Gs2Formation:AddMoldCapacityByUserId",
"Gs2Formation:SetMoldCapacityByUserId",
"Gs2Formation:AcquireActionsToFormProperties",
"Gs2Formation:SetFormByUserId",
"Gs2Formation:AcquireActionsToPropertyFormProperties",
"Gs2Friend:UpdateProfileByUserId",
"Gs2Grade:AddGradeByUserId",
"Gs2Grade:ApplyRankCapByUserId",
"Gs2Grade:MultiplyAcquireActionsByUserId",
"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName",
"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName",
"Gs2Idle:IncreaseMaximumIdleMinutesByUserId",
"Gs2Idle:SetMaximumIdleMinutesByUserId",
"Gs2Idle:ReceiveByUserId",
"Gs2Inbox:SendMessageByUserId",
"Gs2Inventory:AddCapacityByUserId",
"Gs2Inventory:SetCapacityByUserId",
"Gs2Inventory:AcquireItemSetByUserId",
"Gs2Inventory:AcquireItemSetWithGradeByUserId",
"Gs2Inventory:AddReferenceOfByUserId",
"Gs2Inventory:DeleteReferenceOfByUserId",
"Gs2Inventory:AcquireSimpleItemsByUserId",
"Gs2Inventory:SetSimpleItemsByUserId",
"Gs2Inventory:AcquireBigItemByUserId",
"Gs2Inventory:SetBigItemByUserId",
"Gs2JobQueue:PushByUserId",
"Gs2Limit:CountDownByUserId",
"Gs2Limit:DeleteCounterByUserId",
"Gs2LoginReward:DeleteReceiveStatusByUserId",
"Gs2LoginReward:UnmarkReceivedByUserId",
"Gs2Lottery:DrawByUserId",
"Gs2Lottery:ResetBoxByUserId",
"Gs2Mission:RevertReceiveByUserId",
"Gs2Mission:IncreaseCounterByUserId",
"Gs2Mission:SetCounterByUserId",
"Gs2Money:DepositByUserId",
"Gs2Money:RevertRecordReceipt",
"Gs2Money2:DepositByUserId",
"Gs2Quest:CreateProgressByUserId",
"Gs2Schedule:TriggerByUserId",
"Gs2Schedule:ExtendTriggerByUserId",
"Gs2Script:InvokeScript",
"Gs2SerialKey:RevertUseByUserId",
"Gs2SerialKey:IssueOnce",
"Gs2Showcase:DecrementPurchaseCountByUserId",
"Gs2Showcase:ForceReDrawByUserId",
"Gs2SkillTree:MarkReleaseByUserId",
"Gs2Stamina:RecoverStaminaByUserId",
"Gs2Stamina:RaiseMaxValueByUserId",
"Gs2Stamina:SetMaxValueByUserId",
"Gs2Stamina:SetRecoverIntervalByUserId",
"Gs2Stamina:SetRecoverValueByUserId",
"Gs2StateMachine:StartStateMachineByUserId",
}
입수 액션에서 실행할 액션의 종류
requeststring
~ 524288자액션 실행 시 사용되는 요청의 JSON 문자열

LotteryModel

추첨 모델

추첨 모델은 배출 방식과 배출 테이블의 참조 방법을 정의하는 엔티티입니다.

배출 방식은 2종류가 마련되어 있으며, 일반 추첨은 매번 일정한 확률로 추첨하는 방식이고, 박스 추첨은 상자 안에 미리 정해진 수량의 경품이 들어 있어 추첨할 때마다 상자에서 경품을 꺼내는 추첨 방식입니다.

추첨 처리를 수행할 때 배출 확률 테이블을 사용하는데,
GS2-Script를 사용하면 여러 번 추첨을 실행할 때 배출 확률 테이블 일부만 다른 테이블로 교체할 수 있습니다.
이 구조를 이용하면 10연 가챠에서 1회만 다른 추첨 확률 테이블을 적용하는 것이 가능해집니다.

타입활성화 조건필수기본값값 제한설명
lotteryModelIdstring
~ 1024자추첨 모델 GRN
※ 서버가 자동으로 설정
namestring
~ 128자추첨 모델 이름
추첨 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
metadatastring~ 2048자메타데이터
메타데이터에는 임의의 값을 설정할 수 있습니다.
이 값들은 GS2의 동작에 영향을 미치지 않으므로, 게임 내에서 사용할 정보를 저장하는 용도로 사용할 수 있습니다.
mode문자열 열거형
enum {
  “normal”,
  “box”
}
추첨 모드
경품의 추첨 방식을 선택합니다. “normal"은 매번 일정한 확률로 추첨을 진행합니다(경품은 반복해서 배출됩니다). “box"는 가상의 상자에 미리 정해진 수량의 경품을 넣어두고, 추첨할 때마다 상자에서 경품을 꺼냅니다(모든 경품이 최종적으로 배출되는 것이 보장됩니다).
정의설명
normal일반 추첨
box박스 추첨
method문자열 열거형
enum {
  “prize_table”,
  “script”
}
추첨 방법
배출 확률 테이블의 참조 방법을 결정합니다. “prize_table"은 정적으로 지정된 배출 확률 테이블을 사용합니다. “script"는 GS2-Script를 사용하여 추첨 시점에 배출 확률 테이블을 동적으로 선택하며, 10연 가챠에서 1회만 다른 배출 확률 테이블을 적용하는 등의 시나리오를 실현할 수 있습니다.
정의설명
prize_table정적 배출 확률 테이블
scriptGS2-Script를 사용한 동적 배출 확률 테이블
prizeTableNamestring{method} == “prize_table”
✓※
~ 128자배출 확률 테이블 이름
이 추첨 모델에서 사용할 배출 확률 테이블의 이름입니다. 추첨 방법이 “prize_table"인 경우 필수입니다.
※ method이(가) “prize_table” 이면 필수
choicePrizeTableScriptIdstring{method} == “script”
✓※
~ 1024자배출 확률 테이블을 결정하는 GS2-Script의 스크립트 GRN
Script 트리거 레퍼런스 - choicePrizeTable
※ method이(가) “script” 이면 필수